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