sticky_keys_overlay_unittest.cc 3.3 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980
  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. #include "ash/accessibility/sticky_keys/sticky_keys_overlay.h"
  5. #include "ash/accessibility/sticky_keys/sticky_keys_controller.h"
  6. #include "ash/shell.h"
  7. #include "ash/test/ash_test_base.h"
  8. #include "ui/display/display_layout.h"
  9. #include "ui/display/manager/display_manager.h"
  10. #include "ui/display/test/display_manager_test_api.h"
  11. #include "ui/events/event.h"
  12. #include "ui/views/widget/widget.h"
  13. namespace ash {
  14. using StickyKeysOverlayTest = AshTestBase;
  15. TEST_F(StickyKeysOverlayTest, OverlayVisibility) {
  16. StickyKeysOverlay overlay;
  17. EXPECT_FALSE(overlay.is_visible());
  18. overlay.Show(true);
  19. EXPECT_TRUE(overlay.is_visible());
  20. }
  21. TEST_F(StickyKeysOverlayTest, ModifierKeyState) {
  22. StickyKeysOverlay overlay;
  23. overlay.SetModifierKeyState(ui::EF_SHIFT_DOWN, STICKY_KEY_STATE_DISABLED);
  24. overlay.SetModifierKeyState(ui::EF_ALT_DOWN, STICKY_KEY_STATE_LOCKED);
  25. overlay.SetModifierKeyState(ui::EF_CONTROL_DOWN, STICKY_KEY_STATE_ENABLED);
  26. overlay.SetModifierKeyState(ui::EF_COMMAND_DOWN, STICKY_KEY_STATE_LOCKED);
  27. EXPECT_EQ(STICKY_KEY_STATE_DISABLED,
  28. overlay.GetModifierKeyState(ui::EF_SHIFT_DOWN));
  29. EXPECT_EQ(STICKY_KEY_STATE_LOCKED,
  30. overlay.GetModifierKeyState(ui::EF_ALT_DOWN));
  31. EXPECT_EQ(STICKY_KEY_STATE_ENABLED,
  32. overlay.GetModifierKeyState(ui::EF_CONTROL_DOWN));
  33. EXPECT_EQ(STICKY_KEY_STATE_LOCKED,
  34. overlay.GetModifierKeyState(ui::EF_COMMAND_DOWN));
  35. }
  36. // This test addresses the crash report at crbug.com/435600, speculated to be
  37. // caused by using sticky keys with multiple displays.
  38. TEST_F(StickyKeysOverlayTest, OverlayNotDestroyedAfterDisplayRemoved) {
  39. // Add a secondary display to the left of the primary one.
  40. UpdateDisplay("1280x1024,1980x1080");
  41. display::DisplayIdList display_ids =
  42. display_manager()->GetConnectedDisplayIdList();
  43. int64_t primary_display_id = display_ids[0];
  44. int64_t secondary_display_id = display_ids[1];
  45. display_manager()->SetLayoutForCurrentDisplays(
  46. display::test::CreateDisplayLayout(display_manager(),
  47. display::DisplayPlacement::LEFT, 0));
  48. // The overlay should belong to the secondary root window.
  49. StickyKeysOverlay overlay;
  50. views::Widget* overlay_widget = overlay.GetWidgetForTesting();
  51. EXPECT_EQ(Shell::GetRootWindowForDisplayId(secondary_display_id),
  52. overlay_widget->GetNativeWindow()->GetRootWindow());
  53. // Removing the second display should move the overlay to the primary root
  54. // window.
  55. UpdateDisplay("1280x1024");
  56. EXPECT_EQ(Shell::GetRootWindowForDisplayId(primary_display_id),
  57. overlay_widget->GetNativeWindow()->GetRootWindow());
  58. overlay.SetModifierKeyState(ui::EF_SHIFT_DOWN, STICKY_KEY_STATE_ENABLED);
  59. EXPECT_EQ(STICKY_KEY_STATE_ENABLED,
  60. overlay.GetModifierKeyState(ui::EF_SHIFT_DOWN));
  61. overlay.SetModifierKeyState(ui::EF_SHIFT_DOWN, STICKY_KEY_STATE_DISABLED);
  62. EXPECT_EQ(STICKY_KEY_STATE_DISABLED,
  63. overlay.GetModifierKeyState(ui::EF_SHIFT_DOWN));
  64. }
  65. // Additional sticky key overlay tests that depend on ui::EventRewriterChromeOS
  66. // are now in chrome/browser/ash/events/event_rewriter_unittest.cc .
  67. } // namespace ash