Index: ash/system/ime/tray_ime_chromeos_unittest.cc |
diff --git a/ash/system/ime/tray_ime_chromeos_unittest.cc b/ash/system/ime/tray_ime_chromeos_unittest.cc |
new file mode 100644 |
index 0000000000000000000000000000000000000000..f891f5a133579e62f4daf2cb9c7aa933d403dca4 |
--- /dev/null |
+++ b/ash/system/ime/tray_ime_chromeos_unittest.cc |
@@ -0,0 +1,164 @@ |
+// Copyright 2014 The Chromium Authors. All rights reserved. |
+// Use of this source code is governed by a BSD-style license that can be |
+// found in the LICENSE file. |
+ |
+#include "ash/system/ime/tray_ime_chromeos.h" |
+ |
+#include "ash/accessibility_delegate.h" |
+#include "ash/shell.h" |
+#include "ash/system/status_area_widget.h" |
+#include "ash/system/tray/system_tray_notifier.h" |
+#include "ash/test/ash_test_base.h" |
+#include "ash/test/status_area_widget_test_helper.h" |
+#include "ash/test/virtual_keyboard_test_helper.h" |
+#include "base/command_line.h" |
+#include "ui/keyboard/keyboard_switches.h" |
+#include "ui/keyboard/keyboard_util.h" |
+ |
+namespace ash { |
+ |
+class TrayIMETest : public test::AshTestBase { |
+ public: |
+ TrayIMETest() {} |
+ virtual ~TrayIMETest() {} |
+ |
+ TrayIME* tray() { return tray_.get(); } |
+ |
+ views::View* default_view() { return default_view_.get(); } |
+ |
+ views::View* detailed_view() { return detailed_view_.get(); } |
+ |
+ // Sets up a TrayIME and its default view. |
+ void SetUpForStatusAreaWidget(StatusAreaWidget* status_area_widget); |
+ |
+ // Mocks enabling the a11y virtual keyboard since the actual a11y manager |
+ // is not created in ash tests. |
+ void SetAccessibilityKeyboardEnabled(bool enabled); |
+ |
+ // Resets |tray_| and |default_view_| so that all components of |
+ // TrayIME have been cleared. Tests may then call |
+ // SetUpForStatusAreaWidget in order to initialize the components. |
+ void TearDownViews(); |
+ |
+ // Sets the current number of active IMEs. |
+ void SetIMELength(int length); |
+ |
+ // Returns the view in the detailed views scroll content at the provided |
+ // index. |
+ views::View* GetScrollChildView(int index); |
+ |
+ // test::AshTestBase: |
+ virtual void SetUp() override; |
+ virtual void TearDown() override; |
+ |
+ private: |
+ scoped_ptr<TrayIME> tray_; |
+ scoped_ptr<views::View> default_view_; |
+ scoped_ptr<views::View> detailed_view_; |
+}; |
+ |
+void TrayIMETest::SetUpForStatusAreaWidget( |
+ StatusAreaWidget* status_area_widget) { |
+ tray_.reset(new TrayIME(status_area_widget->system_tray())); |
+ default_view_.reset(tray_->CreateDefaultView( |
+ StatusAreaWidgetTestHelper::GetUserLoginStatus())); |
+ detailed_view_.reset(tray_->CreateDetailedView( |
+ StatusAreaWidgetTestHelper::GetUserLoginStatus())); |
+} |
+ |
+void TrayIMETest::SetAccessibilityKeyboardEnabled(bool enabled) { |
+ Shell::GetInstance()->accessibility_delegate()->SetVirtualKeyboardEnabled( |
+ enabled); |
+ keyboard::SetAccessibilityKeyboardEnabled(enabled); |
+ ui::AccessibilityNotificationVisibility notification = |
+ enabled ? ui::AccessibilityNotificationVisibility::A11Y_NOTIFICATION_SHOW |
+ : ui::AccessibilityNotificationVisibility::A11Y_NOTIFICATION_NONE; |
+ Shell::GetInstance()->system_tray_notifier()->NotifyAccessibilityModeChanged( |
+ notification); |
+} |
+ |
+void TrayIMETest::TearDownViews() { |
+ tray_.reset(); |
+ default_view_.reset(); |
+ detailed_view_.reset(); |
+} |
+ |
+void TrayIMETest::SetIMELength(int length) { |
+ tray_->ime_list_.clear(); |
+ IMEInfo ime; |
+ for (int i = 0; i < length; i++) { |
+ tray_->ime_list_.push_back(ime); |
+ } |
+ tray_->Update(); |
+} |
+ |
+views::View* TrayIMETest::GetScrollChildView(int index) { |
+ TrayDetailsView* details = static_cast<TrayDetailsView*>(detailed_view()); |
+ views::View* content = details->scroll_content(); |
+ EXPECT_TRUE(content); |
+ EXPECT_GT(content->child_count(), index); |
+ return content->child_at(index); |
+} |
+ |
+void TrayIMETest::SetUp() { |
+ base::CommandLine::ForCurrentProcess()->AppendSwitch( |
+ keyboard::switches::kEnableAutoVirtualKeyboard); |
+ test::AshTestBase::SetUp(); |
+ SetUpForStatusAreaWidget(StatusAreaWidgetTestHelper::GetStatusAreaWidget()); |
+} |
+ |
+void TrayIMETest::TearDown() { |
+ SetAccessibilityKeyboardEnabled(false); |
+ TearDownViews(); |
+ test::AshTestBase::TearDown(); |
+} |
+ |
+// Tests that if the keyboard is not suppressed the default view is hidden |
+// if less than 2 IMEs are present. |
+TEST_F(TrayIMETest, HiddenWithNoIMEs) { |
+ SetIMELength(0); |
+ EXPECT_FALSE(default_view()->visible()); |
+ SetIMELength(1); |
+ EXPECT_FALSE(default_view()->visible()); |
+ SetIMELength(2); |
+ EXPECT_TRUE(default_view()->visible()); |
+} |
+ |
+// Tests that if no IMEs are present the default view is hidden when a11y is |
+// enabled. |
+TEST_F(TrayIMETest, HidesOnA11yEnabled) { |
+ SetIMELength(0); |
+ test::VirtualKeyboardTestHelper::SuppressKeyboard(); |
+ EXPECT_TRUE(default_view()->visible()); |
+ // Enable a11y keyboard. |
+ SetAccessibilityKeyboardEnabled(true); |
+ EXPECT_FALSE(default_view()->visible()); |
+ // Disable the a11y keyboard. |
+ SetAccessibilityKeyboardEnabled(false); |
+ EXPECT_TRUE(default_view()->visible()); |
+} |
+ |
+// Tests that clicking on the keyboard toggle causes the virtual keyboard |
+// to toggle between enabled and disabled. |
+TEST_F(TrayIMETest, PerformActionOnDetailedView) { |
+ SetIMELength(0); |
+ test::VirtualKeyboardTestHelper::SuppressKeyboard(); |
+ EXPECT_FALSE(keyboard::IsKeyboardEnabled()); |
+ views::View* toggle = GetScrollChildView(0); |
+ ui::GestureEvent tap(0, 0, 0, base::TimeDelta(), |
+ ui::GestureEventDetails(ui::ET_GESTURE_TAP)); |
+ // Enable the keyboard. |
+ toggle->OnGestureEvent(&tap); |
+ EXPECT_TRUE(keyboard::IsKeyboardEnabled()); |
+ EXPECT_TRUE(default_view()->visible()); |
+ // With no IMEs the toggle should be the first child. |
+ toggle = GetScrollChildView(0); |
+ // Clicking again should disable the keyboard. |
+ tap = ui::GestureEvent(0, 0, 0, base::TimeDelta(), |
+ ui::GestureEventDetails(ui::ET_GESTURE_TAP)); |
+ toggle->OnGestureEvent(&tap); |
+ EXPECT_FALSE(keyboard::IsKeyboardEnabled()); |
+ EXPECT_TRUE(default_view()->visible()); |
+} |
+ |
+} // namespace ash |