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),
20 theme_(mojom::Theme::kLight),
21 scaling_(1.0f) {}
22
OnChangeFontFamily(mojom::FontFamily new_font)23 void OnChangeFontFamily(mojom::FontFamily new_font) override {
24 font_ = new_font;
25 }
26
GetFontFamily()27 mojom::FontFamily GetFontFamily() { return font_; }
28
OnChangeTheme(mojom::Theme new_theme)29 void OnChangeTheme(mojom::Theme new_theme) override { theme_ = new_theme; }
30
GetTheme()31 mojom::Theme GetTheme() { return theme_; }
32
OnChangeFontScaling(float new_scaling)33 void OnChangeFontScaling(float new_scaling) override {
34 scaling_ = new_scaling;
35 }
36
GetFontScaling()37 float GetFontScaling() { return scaling_; }
38
39 private:
40 mojom::FontFamily font_;
41 mojom::Theme theme_;
42 float scaling_;
43 };
44
45 } // namespace
46
47 class DistilledPagePrefsTest : public testing::Test {
48 protected:
SetUp()49 void SetUp() override {
50 pref_service_.reset(new sync_preferences::TestingPrefServiceSyncable());
51 DistilledPagePrefs::RegisterProfilePrefs(pref_service_->registry());
52 distilled_page_prefs_.reset(new DistilledPagePrefs(pref_service_.get()));
53 }
54
55 std::unique_ptr<sync_preferences::TestingPrefServiceSyncable> pref_service_;
56 std::unique_ptr<DistilledPagePrefs> distilled_page_prefs_;
57
58 private:
59 base::test::SingleThreadTaskEnvironment task_environment_;
60 };
61
TEST_F(DistilledPagePrefsTest,TestingOnChangeFontIsBeingCalled)62 TEST_F(DistilledPagePrefsTest, TestingOnChangeFontIsBeingCalled) {
63 TestingObserver obs;
64 distilled_page_prefs_->AddObserver(&obs);
65
66 distilled_page_prefs_->SetFontFamily(mojom::FontFamily::kMonospace);
67 EXPECT_EQ(mojom::FontFamily::kSansSerif, obs.GetFontFamily());
68 base::RunLoop().RunUntilIdle();
69 EXPECT_EQ(mojom::FontFamily::kMonospace, obs.GetFontFamily());
70
71 distilled_page_prefs_->SetFontFamily(mojom::FontFamily::kSerif);
72 base::RunLoop().RunUntilIdle();
73 EXPECT_EQ(mojom::FontFamily::kSerif, obs.GetFontFamily());
74 distilled_page_prefs_->RemoveObserver(&obs);
75 }
76
TEST_F(DistilledPagePrefsTest,TestingMultipleObserversFont)77 TEST_F(DistilledPagePrefsTest, TestingMultipleObserversFont) {
78 TestingObserver obs;
79 distilled_page_prefs_->AddObserver(&obs);
80 TestingObserver obs2;
81 distilled_page_prefs_->AddObserver(&obs2);
82
83 distilled_page_prefs_->SetFontFamily(mojom::FontFamily::kSerif);
84 base::RunLoop().RunUntilIdle();
85 EXPECT_EQ(mojom::FontFamily::kSerif, obs.GetFontFamily());
86 EXPECT_EQ(mojom::FontFamily::kSerif, obs2.GetFontFamily());
87
88 distilled_page_prefs_->RemoveObserver(&obs);
89
90 distilled_page_prefs_->SetFontFamily(mojom::FontFamily::kMonospace);
91 base::RunLoop().RunUntilIdle();
92 EXPECT_EQ(mojom::FontFamily::kSerif, obs.GetFontFamily());
93 EXPECT_EQ(mojom::FontFamily::kMonospace, obs2.GetFontFamily());
94
95 distilled_page_prefs_->RemoveObserver(&obs2);
96 }
97
TEST_F(DistilledPagePrefsTest,TestingOnChangeThemeIsBeingCalled)98 TEST_F(DistilledPagePrefsTest, TestingOnChangeThemeIsBeingCalled) {
99 TestingObserver obs;
100 distilled_page_prefs_->AddObserver(&obs);
101
102 distilled_page_prefs_->SetTheme(mojom::Theme::kSepia);
103 EXPECT_EQ(mojom::Theme::kLight, obs.GetTheme());
104 base::RunLoop().RunUntilIdle();
105 EXPECT_EQ(mojom::Theme::kSepia, obs.GetTheme());
106
107 distilled_page_prefs_->SetTheme(mojom::Theme::kDark);
108 base::RunLoop().RunUntilIdle();
109 EXPECT_EQ(mojom::Theme::kDark, obs.GetTheme());
110
111 distilled_page_prefs_->RemoveObserver(&obs);
112 }
113
TEST_F(DistilledPagePrefsTest,TestingMultipleObserversTheme)114 TEST_F(DistilledPagePrefsTest, TestingMultipleObserversTheme) {
115 TestingObserver obs;
116 distilled_page_prefs_->AddObserver(&obs);
117 TestingObserver obs2;
118 distilled_page_prefs_->AddObserver(&obs2);
119
120 distilled_page_prefs_->SetTheme(mojom::Theme::kSepia);
121 base::RunLoop().RunUntilIdle();
122 EXPECT_EQ(mojom::Theme::kSepia, obs.GetTheme());
123 EXPECT_EQ(mojom::Theme::kSepia, obs2.GetTheme());
124
125 distilled_page_prefs_->RemoveObserver(&obs);
126
127 distilled_page_prefs_->SetTheme(mojom::Theme::kLight);
128 base::RunLoop().RunUntilIdle();
129 EXPECT_EQ(mojom::Theme::kSepia, obs.GetTheme());
130 EXPECT_EQ(mojom::Theme::kLight, obs2.GetTheme());
131
132 distilled_page_prefs_->RemoveObserver(&obs2);
133 }
134
TEST_F(DistilledPagePrefsTest,TestingOnChangeFontScalingIsBeingCalled)135 TEST_F(DistilledPagePrefsTest, TestingOnChangeFontScalingIsBeingCalled) {
136 TestingObserver obs;
137 distilled_page_prefs_->AddObserver(&obs);
138
139 distilled_page_prefs_->SetFontScaling(1.5f);
140 ASSERT_FLOAT_EQ(1.0f, obs.GetFontScaling());
141 base::RunLoop().RunUntilIdle();
142 ASSERT_FLOAT_EQ(1.5f, obs.GetFontScaling());
143
144 distilled_page_prefs_->SetFontScaling(0.7f);
145 base::RunLoop().RunUntilIdle();
146 ASSERT_FLOAT_EQ(0.7f, obs.GetFontScaling());
147
148 distilled_page_prefs_->RemoveObserver(&obs);
149 }
150
TEST_F(DistilledPagePrefsTest,TestingMultipleObserversFontScaling)151 TEST_F(DistilledPagePrefsTest, TestingMultipleObserversFontScaling) {
152 TestingObserver obs;
153 distilled_page_prefs_->AddObserver(&obs);
154 TestingObserver obs2;
155 distilled_page_prefs_->AddObserver(&obs2);
156
157 distilled_page_prefs_->SetFontScaling(1.3f);
158 base::RunLoop().RunUntilIdle();
159 ASSERT_FLOAT_EQ(1.3f, obs.GetFontScaling());
160 ASSERT_FLOAT_EQ(1.3f, obs2.GetFontScaling());
161
162 distilled_page_prefs_->RemoveObserver(&obs);
163
164 distilled_page_prefs_->SetFontScaling(0.9f);
165 base::RunLoop().RunUntilIdle();
166 ASSERT_FLOAT_EQ(1.3f, obs.GetFontScaling());
167 ASSERT_FLOAT_EQ(0.9f, obs2.GetFontScaling());
168
169 distilled_page_prefs_->RemoveObserver(&obs2);
170 }
171
172 } // namespace dom_distiller
173