blob: c063233941ca8778568105fe149b9e57cc944011 [file] [log] [blame]
// Copyright 2014 The Chromium Authors
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#include "components/dom_distiller/core/distilled_page_prefs.h"
#include <memory>
#include "base/run_loop.h"
#include "base/test/task_environment.h"
#include "components/sync_preferences/testing_pref_service_syncable.h"
#include "testing/gtest/include/gtest/gtest.h"
namespace dom_distiller {
namespace {
class TestingObserver : public DistilledPagePrefs::Observer {
public:
TestingObserver()
: font_(mojom::FontFamily::kSansSerif), theme_(mojom::Theme::kLight) {}
void OnChangeFontFamily(mojom::FontFamily new_font) override {
font_ = new_font;
}
mojom::FontFamily GetFontFamily() { return font_; }
void OnChangeTheme(mojom::Theme new_theme) override { theme_ = new_theme; }
mojom::Theme GetTheme() { return theme_; }
void OnChangeFontScaling(float new_scaling) override {
scaling_ = new_scaling;
}
float GetFontScaling() { return scaling_; }
private:
mojom::FontFamily font_;
mojom::Theme theme_;
float scaling_{1.0f};
};
} // namespace
class DistilledPagePrefsTest : public testing::Test {
protected:
void SetUp() override {
pref_service_ =
std::make_unique<sync_preferences::TestingPrefServiceSyncable>();
DistilledPagePrefs::RegisterProfilePrefs(pref_service_->registry());
distilled_page_prefs_ =
std::make_unique<DistilledPagePrefs>(pref_service_.get());
}
std::unique_ptr<sync_preferences::TestingPrefServiceSyncable> pref_service_;
std::unique_ptr<DistilledPagePrefs> distilled_page_prefs_;
private:
base::test::SingleThreadTaskEnvironment task_environment_;
};
TEST_F(DistilledPagePrefsTest, TestingOnChangeFontIsBeingCalled) {
TestingObserver obs;
distilled_page_prefs_->AddObserver(&obs);
distilled_page_prefs_->SetFontFamily(mojom::FontFamily::kMonospace);
EXPECT_EQ(mojom::FontFamily::kSansSerif, obs.GetFontFamily());
base::RunLoop().RunUntilIdle();
EXPECT_EQ(mojom::FontFamily::kMonospace, obs.GetFontFamily());
distilled_page_prefs_->SetFontFamily(mojom::FontFamily::kSerif);
base::RunLoop().RunUntilIdle();
EXPECT_EQ(mojom::FontFamily::kSerif, obs.GetFontFamily());
distilled_page_prefs_->RemoveObserver(&obs);
}
TEST_F(DistilledPagePrefsTest, TestingMultipleObserversFont) {
TestingObserver obs;
distilled_page_prefs_->AddObserver(&obs);
TestingObserver obs2;
distilled_page_prefs_->AddObserver(&obs2);
distilled_page_prefs_->SetFontFamily(mojom::FontFamily::kSerif);
base::RunLoop().RunUntilIdle();
EXPECT_EQ(mojom::FontFamily::kSerif, obs.GetFontFamily());
EXPECT_EQ(mojom::FontFamily::kSerif, obs2.GetFontFamily());
distilled_page_prefs_->RemoveObserver(&obs);
distilled_page_prefs_->SetFontFamily(mojom::FontFamily::kMonospace);
base::RunLoop().RunUntilIdle();
EXPECT_EQ(mojom::FontFamily::kSerif, obs.GetFontFamily());
EXPECT_EQ(mojom::FontFamily::kMonospace, obs2.GetFontFamily());
distilled_page_prefs_->RemoveObserver(&obs2);
}
TEST_F(DistilledPagePrefsTest, TestingOnChangeThemeIsBeingCalled) {
TestingObserver obs;
distilled_page_prefs_->AddObserver(&obs);
distilled_page_prefs_->SetTheme(mojom::Theme::kSepia);
EXPECT_EQ(mojom::Theme::kLight, obs.GetTheme());
base::RunLoop().RunUntilIdle();
EXPECT_EQ(mojom::Theme::kSepia, obs.GetTheme());
distilled_page_prefs_->SetTheme(mojom::Theme::kDark);
base::RunLoop().RunUntilIdle();
EXPECT_EQ(mojom::Theme::kDark, obs.GetTheme());
distilled_page_prefs_->RemoveObserver(&obs);
}
TEST_F(DistilledPagePrefsTest, TestingMultipleObserversTheme) {
TestingObserver obs;
distilled_page_prefs_->AddObserver(&obs);
TestingObserver obs2;
distilled_page_prefs_->AddObserver(&obs2);
distilled_page_prefs_->SetTheme(mojom::Theme::kSepia);
base::RunLoop().RunUntilIdle();
EXPECT_EQ(mojom::Theme::kSepia, obs.GetTheme());
EXPECT_EQ(mojom::Theme::kSepia, obs2.GetTheme());
distilled_page_prefs_->RemoveObserver(&obs);
distilled_page_prefs_->SetTheme(mojom::Theme::kLight);
base::RunLoop().RunUntilIdle();
EXPECT_EQ(mojom::Theme::kSepia, obs.GetTheme());
EXPECT_EQ(mojom::Theme::kLight, obs2.GetTheme());
distilled_page_prefs_->RemoveObserver(&obs2);
}
TEST_F(DistilledPagePrefsTest, TestingOnChangeFontScalingIsBeingCalled) {
TestingObserver obs;
distilled_page_prefs_->AddObserver(&obs);
distilled_page_prefs_->SetFontScaling(1.5f);
ASSERT_FLOAT_EQ(1.0f, obs.GetFontScaling());
base::RunLoop().RunUntilIdle();
ASSERT_FLOAT_EQ(1.5f, obs.GetFontScaling());
distilled_page_prefs_->SetFontScaling(0.7f);
base::RunLoop().RunUntilIdle();
ASSERT_FLOAT_EQ(0.7f, obs.GetFontScaling());
distilled_page_prefs_->RemoveObserver(&obs);
}
TEST_F(DistilledPagePrefsTest, TestingMultipleObserversFontScaling) {
TestingObserver obs;
distilled_page_prefs_->AddObserver(&obs);
TestingObserver obs2;
distilled_page_prefs_->AddObserver(&obs2);
distilled_page_prefs_->SetFontScaling(1.3f);
base::RunLoop().RunUntilIdle();
ASSERT_FLOAT_EQ(1.3f, obs.GetFontScaling());
ASSERT_FLOAT_EQ(1.3f, obs2.GetFontScaling());
distilled_page_prefs_->RemoveObserver(&obs);
distilled_page_prefs_->SetFontScaling(0.9f);
base::RunLoop().RunUntilIdle();
ASSERT_FLOAT_EQ(1.3f, obs.GetFontScaling());
ASSERT_FLOAT_EQ(0.9f, obs2.GetFontScaling());
distilled_page_prefs_->RemoveObserver(&obs2);
}
} // namespace dom_distiller