• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 // Copyright (c) 2012 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/keyboard_overlay/keyboard_overlay_view.h"
6 
7 #include <algorithm>
8 
9 #include "ash/accelerators/accelerator_table.h"
10 #include "ash/keyboard_overlay/keyboard_overlay_delegate.h"
11 #include "ash/shell.h"
12 #include "ash/shell_delegate.h"
13 #include "ash/test/ash_test_base.h"
14 #include "ui/web_dialogs/test/test_web_contents_handler.h"
15 #include "ui/web_dialogs/test/test_web_dialog_delegate.h"
16 
17 namespace ash {
18 
19 typedef test::AshTestBase KeyboardOverlayViewTest;
20 
operator ==(const KeyboardOverlayView::KeyEventData & lhs,const KeyboardOverlayView::KeyEventData & rhs)21 bool operator==(const KeyboardOverlayView::KeyEventData& lhs,
22                 const KeyboardOverlayView::KeyEventData& rhs) {
23   return (lhs.key_code == rhs.key_code) && (lhs.flags == rhs.flags);
24 }
25 
26 // Verifies that the accelerators that open the keyboard overlay close it.
TEST_F(KeyboardOverlayViewTest,OpenAcceleratorsClose)27 TEST_F(KeyboardOverlayViewTest, OpenAcceleratorsClose) {
28   ui::test::TestWebDialogDelegate delegate(GURL("chrome://keyboardoverlay"));
29   KeyboardOverlayView view(
30       Shell::GetInstance()->delegate()->GetActiveBrowserContext(),
31       &delegate,
32       new ui::test::TestWebContentsHandler);
33   for (size_t i = 0; i < kAcceleratorDataLength; ++i) {
34     if (kAcceleratorData[i].action != SHOW_KEYBOARD_OVERLAY)
35       continue;
36     const AcceleratorData& open_key_data = kAcceleratorData[i];
37     ui::KeyEvent open_key(open_key_data.trigger_on_press ?
38                           ui::ET_KEY_PRESSED : ui::ET_KEY_RELEASED,
39                           open_key_data.keycode,
40                           open_key_data.modifiers);
41     EXPECT_TRUE(view.IsCancelingKeyEvent(&open_key));
42   }
43 }
44 
45 // Verifies that there are no redunduant keys in the canceling keys.
TEST_F(KeyboardOverlayViewTest,NoRedundantCancelingKeys)46 TEST_F(KeyboardOverlayViewTest, NoRedundantCancelingKeys) {
47   std::vector<KeyboardOverlayView::KeyEventData> open_keys;
48   for (size_t i = 0; i < kAcceleratorDataLength; ++i) {
49     if (kAcceleratorData[i].action != SHOW_KEYBOARD_OVERLAY)
50       continue;
51     // Escape is used just for canceling.
52     KeyboardOverlayView::KeyEventData open_key = {
53       kAcceleratorData[i].keycode,
54       kAcceleratorData[i].modifiers,
55     };
56     open_keys.push_back(open_key);
57   }
58 
59   std::vector<KeyboardOverlayView::KeyEventData> canceling_keys;
60   KeyboardOverlayView::GetCancelingKeysForTesting(&canceling_keys);
61 
62   // Escape is used just for canceling, so exclude it from the comparison with
63   // open keys.
64   KeyboardOverlayView::KeyEventData escape = { ui::VKEY_ESCAPE, ui::EF_NONE };
65   std::vector<KeyboardOverlayView::KeyEventData>::iterator escape_itr =
66       std::find(canceling_keys.begin(), canceling_keys.end(), escape);
67   canceling_keys.erase(escape_itr);
68 
69   // Other canceling keys should be same as opening keys.
70   EXPECT_EQ(open_keys.size(), canceling_keys.size());
71   for (size_t i = 0; i < canceling_keys.size(); ++i) {
72     EXPECT_NE(std::find(open_keys.begin(), open_keys.end(), canceling_keys[i]),
73               open_keys.end());
74   }
75 }
76 
77 }  // namespace ash
78