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.
5 #include "ash/system/chromeos/virtual_keyboard/tray_keyboard_lock.h"
7 #include "ash/accessibility_delegate.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"
19 class TrayKeyboardLockTest : public test::AshTestBase {
21 TrayKeyboardLockTest() {}
22 virtual ~TrayKeyboardLockTest() {}
24 TrayKeyboardLock* tray() { return tray_.get(); }
26 views::View* tray_view() { return tray_view_.get(); }
28 views::View* default_view() { return default_view_.get(); }
30 // Sets up a TrayKeyboardLock, its tray view, and its default view.
31 void SetUpForStatusAreaWidget(StatusAreaWidget* status_area_widget);
33 // Mocks enabling the a11y virtual keyboard since the actual a11y manager
34 // is not created in ash tests.
35 void SetAccessibilityKeyboardEnabled(bool enabled);
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.
43 virtual void SetUp() override;
44 virtual void TearDown() override;
47 scoped_ptr<TrayKeyboardLock> tray_;
48 scoped_ptr<views::View> tray_view_;
49 scoped_ptr<views::View> default_view_;
52 void TrayKeyboardLockTest::SetUpForStatusAreaWidget(
53 StatusAreaWidget* status_area_widget) {
54 tray_.reset(new TrayKeyboardLock(status_area_widget->system_tray()));
56 tray_->CreateTrayView(StatusAreaWidgetTestHelper::GetUserLoginStatus()));
57 default_view_.reset(tray_->CreateDefaultView(
58 StatusAreaWidgetTestHelper::GetUserLoginStatus()));
61 void TrayKeyboardLockTest::SetAccessibilityKeyboardEnabled(bool enabled) {
62 Shell::GetInstance()->accessibility_delegate()->SetVirtualKeyboardEnabled(
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(
72 void TrayKeyboardLockTest::TearDownViews() {
74 default_view_.reset();
78 void TrayKeyboardLockTest::SetUp() {
79 CommandLine::ForCurrentProcess()->AppendSwitch(
80 keyboard::switches::kAutoVirtualKeyboard);
81 test::AshTestBase::SetUp();
82 SetUpForStatusAreaWidget(StatusAreaWidgetTestHelper::GetStatusAreaWidget());
85 void TrayKeyboardLockTest::TearDown() {
86 SetAccessibilityKeyboardEnabled(false);
88 test::AshTestBase::TearDown();
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());
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());
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());
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());
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());