magnification_manager_unittest.cc revision 868fa2fe829687343ffae624259930155e16dbd8
1// Copyright (c) 2013 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 "chrome/browser/chromeos/accessibility/magnification_manager.h"
6
7#include "ash/magnifier/magnifier_constants.h"
8#include "ash/test/ash_test_base.h"
9#include "base/prefs/pref_service.h"
10#include "chrome/common/chrome_notification_types.h"
11#include "chrome/common/pref_names.h"
12#include "chrome/test/base/testing_profile.h"
13#include "content/public/browser/notification_service.h"
14#include "testing/gtest/include/gtest/gtest.h"
15
16namespace chromeos {
17namespace {
18
19class MockMagnificationObserver : public content::NotificationObserver {
20 public:
21  MockMagnificationObserver() : observed_(false),
22                                observed_enabled_(false),
23                                observed_type_(ash::kDefaultMagnifierType) {
24    registrar_.Add(
25        this,
26        chrome::NOTIFICATION_CROS_ACCESSIBILITY_TOGGLE_SCREEN_MAGNIFIER,
27        content::NotificationService::AllSources());
28  }
29
30  bool observed() const { return observed_; }
31  bool observed_enabled() const { return observed_enabled_; }
32  ash::MagnifierType observed_type() const { return observed_type_; }
33
34  void reset() { observed_ = false; }
35
36 private:
37  // content::NotificationObserver implimentation:
38  virtual void Observe(int type,
39                       const content::NotificationSource& source,
40                       const content::NotificationDetails& details) OVERRIDE {
41    switch (type) {
42      case chrome::NOTIFICATION_CROS_ACCESSIBILITY_TOGGLE_SCREEN_MAGNIFIER:
43        AccessibilityStatusEventDetails* accessibility_status =
44            content::Details<AccessibilityStatusEventDetails>(details).ptr();
45
46        observed_ = true;
47        observed_enabled_ = accessibility_status->enabled;
48        observed_type_ = accessibility_status->magnifier_type;
49    }
50  }
51
52  bool observed_;
53  bool observed_enabled_;
54  ash::MagnifierType observed_type_;
55
56  content::NotificationRegistrar registrar_;
57};
58
59void EnableMagnifier() {
60  return MagnificationManager::Get()->SetMagnifierEnabled(true);
61}
62
63void DisableMagnifier() {
64  return MagnificationManager::Get()->SetMagnifierEnabled(false);
65}
66
67bool IsMagnifierEnabled() {
68  return MagnificationManager::Get()->IsMagnifierEnabled();
69}
70
71ash::MagnifierType GetMagnifierType() {
72  return MagnificationManager::Get()->GetMagnifierType();
73}
74
75void SetMagnifierType(ash::MagnifierType type) {
76  return MagnificationManager::Get()->SetMagnifierType(type);
77}
78
79}  // namespace
80
81class MagnificationManagerTest : public ash::test::AshTestBase {
82 public:
83  MagnificationManagerTest() {
84  }
85
86  virtual void SetUp() OVERRIDE {
87    ash::test::AshTestBase::SetUp();
88    MagnificationManager::Initialize();
89    ASSERT_TRUE(MagnificationManager::Get());
90    MagnificationManager::Get()->SetProfileForTest(&profile_);
91  }
92
93  virtual void TearDown() OVERRIDE {
94    MagnificationManager::Shutdown();
95    ash::test::AshTestBase::TearDown();
96  }
97
98  TestingProfile profile_;
99};
100
101TEST_F(MagnificationManagerTest, MagnificationObserver) {
102  MockMagnificationObserver observer;
103
104  EXPECT_FALSE(observer.observed());
105
106  // Set full screen magnifier, and confirm the observer is called.
107  EnableMagnifier();
108  SetMagnifierType(ash::MAGNIFIER_FULL);
109  EXPECT_TRUE(observer.observed());
110  EXPECT_TRUE(observer.observed_enabled());
111  EXPECT_EQ(observer.observed_type(), ash::MAGNIFIER_FULL);
112  EXPECT_EQ(GetMagnifierType(), ash::MAGNIFIER_FULL);
113  observer.reset();
114
115  // Set full screen magnifier again, and confirm the observer is not called.
116  SetMagnifierType(ash::MAGNIFIER_FULL);
117  EXPECT_FALSE(observer.observed());
118  EXPECT_EQ(GetMagnifierType(), ash::MAGNIFIER_FULL);
119  observer.reset();
120}
121
122TEST_F(MagnificationManagerTest, ChangeType) {
123  // Set full screen magnifier, and confirm the status is set successfully.
124  EnableMagnifier();
125  SetMagnifierType(ash::MAGNIFIER_FULL);
126  EXPECT_TRUE(IsMagnifierEnabled());
127  EXPECT_EQ(GetMagnifierType(), ash::MAGNIFIER_FULL);
128
129  // Set partial screen magnifier, and confirm the change is ignored.
130  SetMagnifierType(ash::MAGNIFIER_PARTIAL);
131  EXPECT_TRUE(IsMagnifierEnabled());
132  EXPECT_EQ(GetMagnifierType(), ash::MAGNIFIER_FULL);
133
134  // Disables magnifier, and confirm the status is set successfully.
135  DisableMagnifier();
136  EXPECT_FALSE(IsMagnifierEnabled());
137  EXPECT_EQ(GetMagnifierType(), ash::MAGNIFIER_FULL);
138}
139
140}  // namespace chromeos
141