Upstream version 11.40.271.0
[platform/framework/web/crosswalk.git] / src / ash / system / chromeos / virtual_keyboard / tray_keyboard_lock_unittest.cc
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 "ash/system/chromeos/virtual_keyboard/tray_keyboard_lock.h"
6
7 #include "ash/accessibility_delegate.h"
8 #include "ash/shell.h"
9 #include "ash/system/status_area_widget.h"
10 #include "ash/test/ash_test_base.h"
11 #include "ash/test/status_area_widget_test_helper.h"
12 #include "ash/test/virtual_keyboard_test_helper.h"
13 #include "base/command_line.h"
14 #include "ui/keyboard/keyboard_switches.h"
15 #include "ui/keyboard/keyboard_util.h"
16
17 namespace ash {
18
19 class TrayKeyboardLockTest : public test::AshTestBase {
20  public:
21   TrayKeyboardLockTest() {}
22   virtual ~TrayKeyboardLockTest() {}
23
24   TrayKeyboardLock* tray() { return tray_.get(); }
25
26   views::View* tray_view() { return tray_view_.get(); }
27
28   views::View* default_view() { return default_view_.get(); }
29
30   // Sets up a TrayKeyboardLock, its tray view, and its default view.
31   void SetUpForStatusAreaWidget(StatusAreaWidget* status_area_widget);
32
33   // Mocks enabling the a11y virtual keyboard since the actual a11y manager
34   // is not created in ash tests.
35   void SetAccessibilityKeyboardEnabled(bool enabled);
36
37   // Resets |tray_| |tray_view_| and |default_view_| so that all components of
38   // TrayKeyboardLock have been cleared. Tests may then call
39   // SetUpForStatusAreaWidget in order to initialize the components.
40   void TearDownViews();
41
42   // test::AshTestBase:
43   virtual void SetUp() override;
44   virtual void TearDown() override;
45
46  private:
47   scoped_ptr<TrayKeyboardLock> tray_;
48   scoped_ptr<views::View> tray_view_;
49   scoped_ptr<views::View> default_view_;
50 };
51
52 void TrayKeyboardLockTest::SetUpForStatusAreaWidget(
53     StatusAreaWidget* status_area_widget) {
54   tray_.reset(new TrayKeyboardLock(status_area_widget->system_tray()));
55   tray_view_.reset(
56       tray_->CreateTrayView(StatusAreaWidgetTestHelper::GetUserLoginStatus()));
57   default_view_.reset(tray_->CreateDefaultView(
58       StatusAreaWidgetTestHelper::GetUserLoginStatus()));
59 }
60
61 void TrayKeyboardLockTest::SetAccessibilityKeyboardEnabled(bool enabled) {
62   Shell::GetInstance()->accessibility_delegate()->SetVirtualKeyboardEnabled(
63       enabled);
64   keyboard::SetAccessibilityKeyboardEnabled(enabled);
65   ui::AccessibilityNotificationVisibility notification =
66       enabled ? ui::AccessibilityNotificationVisibility::A11Y_NOTIFICATION_SHOW
67               : ui::AccessibilityNotificationVisibility::A11Y_NOTIFICATION_NONE;
68   Shell::GetInstance()->system_tray_notifier()->NotifyAccessibilityModeChanged(
69       notification);
70 }
71
72 void TrayKeyboardLockTest::TearDownViews() {
73   tray_view_.reset();
74   default_view_.reset();
75   tray_.reset();
76 }
77
78 void TrayKeyboardLockTest::SetUp() {
79   CommandLine::ForCurrentProcess()->AppendSwitch(
80       keyboard::switches::kAutoVirtualKeyboard);
81   test::AshTestBase::SetUp();
82   SetUpForStatusAreaWidget(StatusAreaWidgetTestHelper::GetStatusAreaWidget());
83 }
84
85 void TrayKeyboardLockTest::TearDown() {
86   SetAccessibilityKeyboardEnabled(false);
87   TearDownViews();
88   test::AshTestBase::TearDown();
89 }
90
91 // Tests that when the tray is initially created that both view are hidden.
92 TEST_F(TrayKeyboardLockTest, HiddenOnCreation) {
93   EXPECT_FALSE(tray_view()->visible());
94   EXPECT_FALSE(default_view()->visible());
95 }
96
97 // Tests that the default view and tray are hidden when a11y is enabled.
98 TEST_F(TrayKeyboardLockTest, HidesOnA11yEnabled) {
99   test::VirtualKeyboardTestHelper::SuppressKeyboard();
100   EXPECT_TRUE(tray_view()->visible());
101   EXPECT_TRUE(default_view()->visible());
102   // Enable a11y keyboard.
103   SetAccessibilityKeyboardEnabled(true);
104   EXPECT_FALSE(tray_view()->visible());
105   EXPECT_FALSE(default_view()->visible());
106   // Disable the a11y keyboard.
107   SetAccessibilityKeyboardEnabled(false);
108   EXPECT_TRUE(default_view()->visible());
109   EXPECT_TRUE(tray_view()->visible());
110 }
111
112 TEST_F(TrayKeyboardLockTest, PerformActionOnDefaultView) {
113   test::VirtualKeyboardTestHelper::SuppressKeyboard();
114   EXPECT_FALSE(keyboard::IsKeyboardEnabled());
115   EXPECT_TRUE(tray_view()->visible());
116   EXPECT_TRUE(default_view()->visible());
117
118   ui::GestureEvent tap(
119       0, 0, 0, base::TimeDelta(), ui::GestureEventDetails(ui::ET_GESTURE_TAP));
120   default_view()->OnGestureEvent(&tap);
121   EXPECT_TRUE(keyboard::IsKeyboardEnabled());
122   EXPECT_FALSE(tray_view()->visible());
123   EXPECT_TRUE(default_view()->visible());
124
125   tap = ui::GestureEvent(
126       0, 0, 0, base::TimeDelta(), ui::GestureEventDetails(ui::ET_GESTURE_TAP));
127   default_view()->OnGestureEvent(&tap);
128   EXPECT_FALSE(keyboard::IsKeyboardEnabled());
129   EXPECT_TRUE(tray_view()->visible());
130   EXPECT_TRUE(default_view()->visible());
131 }
132
133 }  // namespace ash