• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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/browser/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 
16 namespace chromeos {
17 namespace {
18 
19 class MockMagnificationObserver : public content::NotificationObserver {
20  public:
MockMagnificationObserver()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 
observed() const30   bool observed() const { return observed_; }
observed_enabled() const31   bool observed_enabled() const { return observed_enabled_; }
observed_type() const32   ash::MagnifierType observed_type() const { return observed_type_; }
33 
reset()34   void reset() { observed_ = false; }
35 
36  private:
37   // content::NotificationObserver implimentation:
Observe(int type,const content::NotificationSource & source,const content::NotificationDetails & details)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 
EnableMagnifier()59 void EnableMagnifier() {
60   return MagnificationManager::Get()->SetMagnifierEnabled(true);
61 }
62 
DisableMagnifier()63 void DisableMagnifier() {
64   return MagnificationManager::Get()->SetMagnifierEnabled(false);
65 }
66 
IsMagnifierEnabled()67 bool IsMagnifierEnabled() {
68   return MagnificationManager::Get()->IsMagnifierEnabled();
69 }
70 
GetMagnifierType()71 ash::MagnifierType GetMagnifierType() {
72   return MagnificationManager::Get()->GetMagnifierType();
73 }
74 
SetMagnifierType(ash::MagnifierType type)75 void SetMagnifierType(ash::MagnifierType type) {
76   return MagnificationManager::Get()->SetMagnifierType(type);
77 }
78 
79 }  // namespace
80 
81 class MagnificationManagerTest : public ash::test::AshTestBase {
82  public:
MagnificationManagerTest()83   MagnificationManagerTest() {
84   }
85 
SetUp()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 
TearDown()93   virtual void TearDown() OVERRIDE {
94     MagnificationManager::Shutdown();
95     ash::test::AshTestBase::TearDown();
96   }
97 
98   TestingProfile profile_;
99 };
100 
TEST_F(MagnificationManagerTest,MagnificationObserver)101 TEST_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 
TEST_F(MagnificationManagerTest,ChangeType)122 TEST_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