1116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch// Copyright 2014 The Chromium Authors. All rights reserved.
2116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch// Use of this source code is governed by a BSD-style license that can be
3116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch// found in the LICENSE file.
4116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
5116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#include "components/dom_distiller/core/distilled_page_prefs.h"
6116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
7116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#include "base/message_loop/message_loop.h"
8116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#include "base/run_loop.h"
9116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#include "components/pref_registry/testing_pref_service_syncable.h"
10116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#include "testing/gtest/include/gtest/gtest.h"
11116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
12116680a4aac90f2aa7413d9095a592090648e557Ben Murdochnamespace dom_distiller {
13116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
14116680a4aac90f2aa7413d9095a592090648e557Ben Murdochnamespace {
15116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
16116680a4aac90f2aa7413d9095a592090648e557Ben Murdochclass TestingObserver : public DistilledPagePrefs::Observer {
17116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch public:
186e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)  TestingObserver()
196e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)      : font_(DistilledPagePrefs::SANS_SERIF),
206e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)        theme_(DistilledPagePrefs::LIGHT) {}
216e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)
226e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)  virtual void OnChangeFontFamily(
236e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)      DistilledPagePrefs::FontFamily new_font) OVERRIDE {
246e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)    font_ = new_font;
256e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)  }
266e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)
276e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)  DistilledPagePrefs::FontFamily GetFontFamily() { return font_; }
28116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
29116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  virtual void OnChangeTheme(DistilledPagePrefs::Theme new_theme) OVERRIDE {
30116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch    theme_ = new_theme;
31116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  }
32116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
33116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  DistilledPagePrefs::Theme GetTheme() { return theme_; }
34116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
35116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch private:
366e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)  DistilledPagePrefs::FontFamily font_;
37116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  DistilledPagePrefs::Theme theme_;
38116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch};
39116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
40116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch}  // namespace
41116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
42116680a4aac90f2aa7413d9095a592090648e557Ben Murdochclass DistilledPagePrefsTest : public testing::Test {
43116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch protected:
44116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  virtual void SetUp() OVERRIDE {
45116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch    pref_service_.reset(new user_prefs::TestingPrefServiceSyncable());
46116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch    DistilledPagePrefs::RegisterProfilePrefs(pref_service_->registry());
47116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch    distilled_page_prefs_.reset(new DistilledPagePrefs(pref_service_.get()));
48116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  }
49116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
50116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  scoped_ptr<user_prefs::TestingPrefServiceSyncable> pref_service_;
51116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  scoped_ptr<DistilledPagePrefs> distilled_page_prefs_;
52116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
53116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch private:
54116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  base::MessageLoop message_loop_;
55116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch};
56116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
576e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)TEST_F(DistilledPagePrefsTest, TestingOnChangeFontIsBeingCalled) {
586e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)  TestingObserver obs;
596e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)  distilled_page_prefs_->AddObserver(&obs);
606e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)  distilled_page_prefs_->SetFontFamily(DistilledPagePrefs::MONOSPACE);
616e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)  EXPECT_EQ(DistilledPagePrefs::SANS_SERIF, obs.GetFontFamily());
626e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)  base::RunLoop().RunUntilIdle();
636e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)  EXPECT_EQ(DistilledPagePrefs::MONOSPACE, obs.GetFontFamily());
646e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)  distilled_page_prefs_->SetFontFamily(DistilledPagePrefs::SERIF);
656e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)  base::RunLoop().RunUntilIdle();
666e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)  EXPECT_EQ(DistilledPagePrefs::SERIF, obs.GetFontFamily());
676e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)  distilled_page_prefs_->RemoveObserver(&obs);
686e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)}
696e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)
706e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)TEST_F(DistilledPagePrefsTest, TestingMultipleObserversFont) {
716e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)  TestingObserver obs;
726e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)  distilled_page_prefs_->AddObserver(&obs);
736e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)  TestingObserver obs2;
746e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)  distilled_page_prefs_->AddObserver(&obs2);
756e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)  distilled_page_prefs_->SetFontFamily(DistilledPagePrefs::SERIF);
766e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)  base::RunLoop().RunUntilIdle();
776e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)  EXPECT_EQ(DistilledPagePrefs::SERIF, obs.GetFontFamily());
786e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)  EXPECT_EQ(DistilledPagePrefs::SERIF, obs2.GetFontFamily());
796e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)  distilled_page_prefs_->RemoveObserver(&obs);
806e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)  distilled_page_prefs_->SetFontFamily(DistilledPagePrefs::MONOSPACE);
816e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)  base::RunLoop().RunUntilIdle();
826e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)  EXPECT_EQ(DistilledPagePrefs::SERIF, obs.GetFontFamily());
836e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)  EXPECT_EQ(DistilledPagePrefs::MONOSPACE, obs2.GetFontFamily());
846e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)  distilled_page_prefs_->RemoveObserver(&obs2);
856e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)}
866e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)
87116680a4aac90f2aa7413d9095a592090648e557Ben MurdochTEST_F(DistilledPagePrefsTest, TestingOnChangeThemeIsBeingCalled) {
88116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  TestingObserver obs;
89116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  distilled_page_prefs_->AddObserver(&obs);
90116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  distilled_page_prefs_->SetTheme(DistilledPagePrefs::SEPIA);
91116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  EXPECT_EQ(DistilledPagePrefs::LIGHT, obs.GetTheme());
92116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  base::RunLoop().RunUntilIdle();
93116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  EXPECT_EQ(DistilledPagePrefs::SEPIA, obs.GetTheme());
94116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  distilled_page_prefs_->SetTheme(DistilledPagePrefs::DARK);
95116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  base::RunLoop().RunUntilIdle();
96116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  EXPECT_EQ(DistilledPagePrefs::DARK, obs.GetTheme());
97116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  distilled_page_prefs_->RemoveObserver(&obs);
98116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch}
99116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
1006e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)TEST_F(DistilledPagePrefsTest, TestingMultipleObserversTheme) {
101116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  TestingObserver obs;
102116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  distilled_page_prefs_->AddObserver(&obs);
103116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  TestingObserver obs2;
104116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  distilled_page_prefs_->AddObserver(&obs2);
105116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  distilled_page_prefs_->SetTheme(DistilledPagePrefs::SEPIA);
106116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  base::RunLoop().RunUntilIdle();
107116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  EXPECT_EQ(DistilledPagePrefs::SEPIA, obs.GetTheme());
108116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  EXPECT_EQ(DistilledPagePrefs::SEPIA, obs2.GetTheme());
109116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  distilled_page_prefs_->RemoveObserver(&obs);
110116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  distilled_page_prefs_->SetTheme(DistilledPagePrefs::LIGHT);
111116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  base::RunLoop().RunUntilIdle();
112116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  EXPECT_EQ(DistilledPagePrefs::SEPIA, obs.GetTheme());
113116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  EXPECT_EQ(DistilledPagePrefs::LIGHT, obs2.GetTheme());
114116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  distilled_page_prefs_->RemoveObserver(&obs2);
115116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch}
116116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
117116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch}  // namespace dom_distiller
118