1 // Copyright 2014 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
4
5 #include "components/dom_distiller/core/distilled_page_prefs.h"
6
7 #include "base/run_loop.h"
8 #include "base/test/task_environment.h"
9 #include "components/sync_preferences/testing_pref_service_syncable.h"
10 #include "testing/gtest/include/gtest/gtest.h"
11
12 namespace dom_distiller {
13
14 namespace {
15
16 class TestingObserver : public DistilledPagePrefs::Observer {
17 public:
TestingObserver()18 TestingObserver()
19 : font_(mojom::FontFamily::kSansSerif), theme_(mojom::Theme::kLight) {}
20
OnChangeFontFamily(mojom::FontFamily new_font)21 void OnChangeFontFamily(mojom::FontFamily new_font) override {
22 font_ = new_font;
23 }
24
GetFontFamily()25 mojom::FontFamily GetFontFamily() { return font_; }
26
OnChangeTheme(mojom::Theme new_theme)27 void OnChangeTheme(mojom::Theme new_theme) override { theme_ = new_theme; }
28
GetTheme()29 mojom::Theme GetTheme() { return theme_; }
30
OnChangeFontScaling(float new_scaling)31 void OnChangeFontScaling(float new_scaling) override {
32 scaling_ = new_scaling;
33 }
34
GetFontScaling()35 float GetFontScaling() { return scaling_; }
36
37 private:
38 mojom::FontFamily font_;
39 mojom::Theme theme_;
40 float scaling_{1.0f};
41 };
42
43 } // namespace
44
45 class DistilledPagePrefsTest : public testing::Test {
46 protected:
SetUp()47 void SetUp() override {
48 pref_service_.reset(new sync_preferences::TestingPrefServiceSyncable());
49 DistilledPagePrefs::RegisterProfilePrefs(pref_service_->registry());
50 distilled_page_prefs_.reset(new DistilledPagePrefs(pref_service_.get()));
51 }
52
53 std::unique_ptr<sync_preferences::TestingPrefServiceSyncable> pref_service_;
54 std::unique_ptr<DistilledPagePrefs> distilled_page_prefs_;
55
56 private:
57 base::test::SingleThreadTaskEnvironment task_environment_;
58 };
59
TEST_F(DistilledPagePrefsTest,TestingOnChangeFontIsBeingCalled)60 TEST_F(DistilledPagePrefsTest, TestingOnChangeFontIsBeingCalled) {
61 TestingObserver obs;
62 distilled_page_prefs_->AddObserver(&obs);
63
64 distilled_page_prefs_->SetFontFamily(mojom::FontFamily::kMonospace);
65 EXPECT_EQ(mojom::FontFamily::kSansSerif, obs.GetFontFamily());
66 base::RunLoop().RunUntilIdle();
67 EXPECT_EQ(mojom::FontFamily::kMonospace, obs.GetFontFamily());
68
69 distilled_page_prefs_->SetFontFamily(mojom::FontFamily::kSerif);
70 base::RunLoop().RunUntilIdle();
71 EXPECT_EQ(mojom::FontFamily::kSerif, obs.GetFontFamily());
72 distilled_page_prefs_->RemoveObserver(&obs);
73 }
74
TEST_F(DistilledPagePrefsTest,TestingMultipleObserversFont)75 TEST_F(DistilledPagePrefsTest, TestingMultipleObserversFont) {
76 TestingObserver obs;
77 distilled_page_prefs_->AddObserver(&obs);
78 TestingObserver obs2;
79 distilled_page_prefs_->AddObserver(&obs2);
80
81 distilled_page_prefs_->SetFontFamily(mojom::FontFamily::kSerif);
82 base::RunLoop().RunUntilIdle();
83 EXPECT_EQ(mojom::FontFamily::kSerif, obs.GetFontFamily());
84 EXPECT_EQ(mojom::FontFamily::kSerif, obs2.GetFontFamily());
85
86 distilled_page_prefs_->RemoveObserver(&obs);
87
88 distilled_page_prefs_->SetFontFamily(mojom::FontFamily::kMonospace);
89 base::RunLoop().RunUntilIdle();
90 EXPECT_EQ(mojom::FontFamily::kSerif, obs.GetFontFamily());
91 EXPECT_EQ(mojom::FontFamily::kMonospace, obs2.GetFontFamily());
92
93 distilled_page_prefs_->RemoveObserver(&obs2);
94 }
95
TEST_F(DistilledPagePrefsTest,TestingOnChangeThemeIsBeingCalled)96 TEST_F(DistilledPagePrefsTest, TestingOnChangeThemeIsBeingCalled) {
97 TestingObserver obs;
98 distilled_page_prefs_->AddObserver(&obs);
99
100 distilled_page_prefs_->SetTheme(mojom::Theme::kSepia);
101 EXPECT_EQ(mojom::Theme::kLight, obs.GetTheme());
102 base::RunLoop().RunUntilIdle();
103 EXPECT_EQ(mojom::Theme::kSepia, obs.GetTheme());
104
105 distilled_page_prefs_->SetTheme(mojom::Theme::kDark);
106 base::RunLoop().RunUntilIdle();
107 EXPECT_EQ(mojom::Theme::kDark, obs.GetTheme());
108
109 distilled_page_prefs_->RemoveObserver(&obs);
110 }
111
TEST_F(DistilledPagePrefsTest,TestingMultipleObserversTheme)112 TEST_F(DistilledPagePrefsTest, TestingMultipleObserversTheme) {
113 TestingObserver obs;
114 distilled_page_prefs_->AddObserver(&obs);
115 TestingObserver obs2;
116 distilled_page_prefs_->AddObserver(&obs2);
117
118 distilled_page_prefs_->SetTheme(mojom::Theme::kSepia);
119 base::RunLoop().RunUntilIdle();
120 EXPECT_EQ(mojom::Theme::kSepia, obs.GetTheme());
121 EXPECT_EQ(mojom::Theme::kSepia, obs2.GetTheme());
122
123 distilled_page_prefs_->RemoveObserver(&obs);
124
125 distilled_page_prefs_->SetTheme(mojom::Theme::kLight);
126 base::RunLoop().RunUntilIdle();
127 EXPECT_EQ(mojom::Theme::kSepia, obs.GetTheme());
128 EXPECT_EQ(mojom::Theme::kLight, obs2.GetTheme());
129
130 distilled_page_prefs_->RemoveObserver(&obs2);
131 }
132
TEST_F(DistilledPagePrefsTest,TestingOnChangeFontScalingIsBeingCalled)133 TEST_F(DistilledPagePrefsTest, TestingOnChangeFontScalingIsBeingCalled) {
134 TestingObserver obs;
135 distilled_page_prefs_->AddObserver(&obs);
136
137 distilled_page_prefs_->SetFontScaling(1.5f);
138 ASSERT_FLOAT_EQ(1.0f, obs.GetFontScaling());
139 base::RunLoop().RunUntilIdle();
140 ASSERT_FLOAT_EQ(1.5f, obs.GetFontScaling());
141
142 distilled_page_prefs_->SetFontScaling(0.7f);
143 base::RunLoop().RunUntilIdle();
144 ASSERT_FLOAT_EQ(0.7f, obs.GetFontScaling());
145
146 distilled_page_prefs_->RemoveObserver(&obs);
147 }
148
TEST_F(DistilledPagePrefsTest,TestingMultipleObserversFontScaling)149 TEST_F(DistilledPagePrefsTest, TestingMultipleObserversFontScaling) {
150 TestingObserver obs;
151 distilled_page_prefs_->AddObserver(&obs);
152 TestingObserver obs2;
153 distilled_page_prefs_->AddObserver(&obs2);
154
155 distilled_page_prefs_->SetFontScaling(1.3f);
156 base::RunLoop().RunUntilIdle();
157 ASSERT_FLOAT_EQ(1.3f, obs.GetFontScaling());
158 ASSERT_FLOAT_EQ(1.3f, obs2.GetFontScaling());
159
160 distilled_page_prefs_->RemoveObserver(&obs);
161
162 distilled_page_prefs_->SetFontScaling(0.9f);
163 base::RunLoop().RunUntilIdle();
164 ASSERT_FLOAT_EQ(1.3f, obs.GetFontScaling());
165 ASSERT_FLOAT_EQ(0.9f, obs2.GetFontScaling());
166
167 distilled_page_prefs_->RemoveObserver(&obs2);
168 }
169
170 } // namespace dom_distiller
171