OLD | NEW |
---|---|
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | 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 | 2 // Use of this source code is governed by a BSD-style license that can be |
3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
4 | 4 |
5 #include <set> | 5 #include <set> |
6 | 6 |
7 #include "ash/common/accelerators/accelerator_table.h" | 7 #include "ash/common/accelerators/accelerator_table.h" |
8 #include "base/strings/string_util.h" | 8 #include "base/strings/string_util.h" |
9 #include "testing/gtest/include/gtest/gtest.h" | 9 #include "testing/gtest/include/gtest/gtest.h" |
10 | 10 |
11 namespace ash { | 11 namespace ash { |
12 | 12 |
13 namespace { | 13 namespace { |
14 | 14 |
15 struct Cmp { | 15 struct Cmp { |
16 bool operator()(const AcceleratorData& lhs, const AcceleratorData& rhs) { | 16 bool operator()(const AcceleratorData& lhs, const AcceleratorData& rhs) { |
17 if (lhs.trigger_on_press != rhs.trigger_on_press) | 17 if (lhs.trigger_on_press != rhs.trigger_on_press) |
18 return lhs.trigger_on_press < rhs.trigger_on_press; | 18 return lhs.trigger_on_press < rhs.trigger_on_press; |
19 if (lhs.keycode != rhs.keycode) | 19 if (lhs.keycode != rhs.keycode) |
20 return lhs.keycode < rhs.keycode; | 20 return lhs.keycode < rhs.keycode; |
21 return lhs.modifiers < rhs.modifiers; | 21 return lhs.modifiers < rhs.modifiers; |
22 // Do not check |action|. | 22 // Do not check |action|. |
23 } | 23 } |
24 }; | 24 }; |
25 | 25 |
26 const int kDebugModifier = | |
27 ui::EF_CONTROL_DOWN | ui::EF_ALT_DOWN | ui::EF_SHIFT_DOWN; | |
28 | |
29 // This table snapshot was added on Apr. 05, 2017 to white list these | |
Daniel Erat
2017/04/05 18:08:31
nit: use iso 8601 dates, i.e. 2017-04-05
wutao
2017/04/05 23:00:16
Done.
| |
30 // accelerators having no Search in their modifiers. Please do not modify this | |
31 // table. Future added accelerator must base on Search. If the test | |
32 // CheckSearchBasedAccelerators fails, please change the accelerator modifiers | |
33 // to include the Search key. | |
Daniel Erat
2017/04/05 18:08:31
nit: all new accelerators should be approved by UX
wutao
2017/04/05 23:00:16
Done.
| |
34 const AcceleratorData kAcceleratorData_WhiteList20170405[] = { | |
35 {true, ui::VKEY_SPACE, ui::EF_CONTROL_DOWN, PREVIOUS_IME}, | |
36 {false, ui::VKEY_SPACE, ui::EF_CONTROL_DOWN, PREVIOUS_IME}, | |
37 {true, ui::VKEY_CONVERT, ui::EF_NONE, SWITCH_IME}, | |
38 {true, ui::VKEY_NONCONVERT, ui::EF_NONE, SWITCH_IME}, | |
39 {true, ui::VKEY_DBE_SBCSCHAR, ui::EF_NONE, SWITCH_IME}, | |
40 {true, ui::VKEY_DBE_DBCSCHAR, ui::EF_NONE, SWITCH_IME}, | |
41 {true, ui::VKEY_HANGUL, ui::EF_NONE, SWITCH_IME}, | |
42 {true, ui::VKEY_TAB, ui::EF_ALT_DOWN, CYCLE_FORWARD_MRU}, | |
43 {true, ui::VKEY_TAB, ui::EF_SHIFT_DOWN | ui::EF_ALT_DOWN, | |
44 CYCLE_BACKWARD_MRU}, | |
45 {true, ui::VKEY_MEDIA_LAUNCH_APP1, ui::EF_NONE, TOGGLE_OVERVIEW}, | |
46 {true, ui::VKEY_BROWSER_SEARCH, ui::EF_NONE, TOGGLE_APP_LIST}, | |
47 {true, ui::VKEY_WLAN, ui::EF_NONE, TOGGLE_WIFI}, | |
48 {true, ui::VKEY_KBD_BRIGHTNESS_DOWN, ui::EF_NONE, KEYBOARD_BRIGHTNESS_DOWN}, | |
49 {true, ui::VKEY_KBD_BRIGHTNESS_UP, ui::EF_NONE, KEYBOARD_BRIGHTNESS_UP}, | |
50 {true, ui::VKEY_MEDIA_LAUNCH_APP2, ui::EF_CONTROL_DOWN, TOGGLE_MIRROR_MODE}, | |
51 {true, ui::VKEY_MEDIA_LAUNCH_APP2, ui::EF_ALT_DOWN, SWAP_PRIMARY_DISPLAY}, | |
52 {true, ui::VKEY_MEDIA_LAUNCH_APP1, ui::EF_CONTROL_DOWN, TAKE_SCREENSHOT}, | |
53 {true, ui::VKEY_MEDIA_LAUNCH_APP1, ui::EF_SHIFT_DOWN | ui::EF_CONTROL_DOWN, | |
54 TAKE_PARTIAL_SCREENSHOT}, | |
55 {true, ui::VKEY_MEDIA_LAUNCH_APP1, ui::EF_ALT_DOWN | ui::EF_CONTROL_DOWN, | |
56 TAKE_WINDOW_SCREENSHOT}, | |
57 {true, ui::VKEY_BRIGHTNESS_DOWN, ui::EF_NONE, BRIGHTNESS_DOWN}, | |
58 {true, ui::VKEY_BRIGHTNESS_DOWN, ui::EF_ALT_DOWN, KEYBOARD_BRIGHTNESS_DOWN}, | |
59 {true, ui::VKEY_BRIGHTNESS_UP, ui::EF_NONE, BRIGHTNESS_UP}, | |
60 {true, ui::VKEY_BRIGHTNESS_UP, ui::EF_ALT_DOWN, KEYBOARD_BRIGHTNESS_UP}, | |
61 {true, ui::VKEY_BRIGHTNESS_DOWN, ui::EF_CONTROL_DOWN | ui::EF_ALT_DOWN, | |
62 MAGNIFY_SCREEN_ZOOM_OUT}, | |
63 {true, ui::VKEY_BRIGHTNESS_UP, ui::EF_CONTROL_DOWN | ui::EF_ALT_DOWN, | |
64 MAGNIFY_SCREEN_ZOOM_IN}, | |
65 {true, ui::VKEY_F13, ui::EF_NONE, LOCK_PRESSED}, | |
66 {false, ui::VKEY_F13, ui::EF_NONE, LOCK_RELEASED}, | |
67 {true, ui::VKEY_SLEEP, ui::EF_NONE, LOCK_PRESSED}, | |
68 {false, ui::VKEY_SLEEP, ui::EF_NONE, LOCK_RELEASED}, | |
69 {true, ui::VKEY_POWER, ui::EF_NONE, POWER_PRESSED}, | |
70 {false, ui::VKEY_POWER, ui::EF_NONE, POWER_RELEASED}, | |
71 {true, ui::VKEY_M, ui::EF_SHIFT_DOWN | ui::EF_ALT_DOWN, OPEN_FILE_MANAGER}, | |
72 {true, ui::VKEY_OEM_2, ui::EF_CONTROL_DOWN, OPEN_GET_HELP}, | |
73 {true, ui::VKEY_OEM_2, ui::EF_SHIFT_DOWN | ui::EF_CONTROL_DOWN, | |
74 OPEN_GET_HELP}, | |
75 {true, ui::VKEY_T, ui::EF_CONTROL_DOWN | ui::EF_ALT_DOWN, OPEN_CROSH}, | |
76 {true, ui::VKEY_I, ui::EF_CONTROL_DOWN | ui::EF_ALT_DOWN, | |
77 TOUCH_HUD_MODE_CHANGE}, | |
78 {true, ui::VKEY_I, | |
79 ui::EF_CONTROL_DOWN | ui::EF_ALT_DOWN | ui::EF_SHIFT_DOWN, | |
80 TOUCH_HUD_CLEAR}, | |
81 {true, ui::VKEY_P, ui::EF_CONTROL_DOWN | ui::EF_ALT_DOWN, | |
82 TOUCH_HUD_PROJECTION_TOGGLE}, | |
83 {true, ui::VKEY_Z, ui::EF_CONTROL_DOWN | ui::EF_ALT_DOWN, | |
84 TOGGLE_SPOKEN_FEEDBACK}, | |
85 {true, ui::VKEY_OEM_COMMA, ui::EF_CONTROL_DOWN | ui::EF_ALT_DOWN, | |
86 SWITCH_TO_PREVIOUS_USER}, | |
87 {true, ui::VKEY_OEM_PERIOD, ui::EF_CONTROL_DOWN | ui::EF_ALT_DOWN, | |
88 SWITCH_TO_NEXT_USER}, | |
89 {false, ui::VKEY_LSHIFT, ui::EF_NONE, DISABLE_CAPS_LOCK}, | |
90 {false, ui::VKEY_SHIFT, ui::EF_NONE, DISABLE_CAPS_LOCK}, | |
91 {false, ui::VKEY_RSHIFT, ui::EF_NONE, DISABLE_CAPS_LOCK}, | |
92 {false, ui::VKEY_LWIN, ui::EF_ALT_DOWN, TOGGLE_CAPS_LOCK}, | |
93 {true, ui::VKEY_VOLUME_MUTE, ui::EF_NONE, VOLUME_MUTE}, | |
94 {true, ui::VKEY_VOLUME_DOWN, ui::EF_NONE, VOLUME_DOWN}, | |
95 {true, ui::VKEY_VOLUME_UP, ui::EF_NONE, VOLUME_UP}, | |
96 {true, ui::VKEY_SPACE, ui::EF_CONTROL_DOWN | ui::EF_SHIFT_DOWN, NEXT_IME}, | |
97 {true, ui::VKEY_I, ui::EF_SHIFT_DOWN | ui::EF_ALT_DOWN, OPEN_FEEDBACK_PAGE}, | |
98 {true, ui::VKEY_Q, ui::EF_SHIFT_DOWN | ui::EF_CONTROL_DOWN, EXIT}, | |
99 {true, ui::VKEY_N, ui::EF_SHIFT_DOWN | ui::EF_CONTROL_DOWN, | |
100 NEW_INCOGNITO_WINDOW}, | |
101 {true, ui::VKEY_N, ui::EF_CONTROL_DOWN, NEW_WINDOW}, | |
102 {true, ui::VKEY_T, ui::EF_CONTROL_DOWN, NEW_TAB}, | |
103 {true, ui::VKEY_OEM_MINUS, ui::EF_CONTROL_DOWN | ui::EF_SHIFT_DOWN, | |
104 SCALE_UI_UP}, | |
105 {true, ui::VKEY_OEM_PLUS, ui::EF_CONTROL_DOWN | ui::EF_SHIFT_DOWN, | |
106 SCALE_UI_DOWN}, | |
107 {true, ui::VKEY_0, ui::EF_CONTROL_DOWN | ui::EF_SHIFT_DOWN, SCALE_UI_RESET}, | |
108 {true, ui::VKEY_BROWSER_REFRESH, ui::EF_CONTROL_DOWN | ui::EF_SHIFT_DOWN, | |
109 ROTATE_SCREEN}, | |
110 {true, ui::VKEY_BROWSER_REFRESH, | |
111 ui::EF_SHIFT_DOWN | ui::EF_CONTROL_DOWN | ui::EF_ALT_DOWN, ROTATE_WINDOW}, | |
112 {true, ui::VKEY_T, ui::EF_SHIFT_DOWN | ui::EF_CONTROL_DOWN, RESTORE_TAB}, | |
113 {true, ui::VKEY_PRINT, ui::EF_NONE, TAKE_SCREENSHOT}, | |
114 {false, ui::VKEY_LWIN, ui::EF_NONE, TOGGLE_APP_LIST}, | |
115 {true, ui::VKEY_MEDIA_LAUNCH_APP2, ui::EF_NONE, TOGGLE_FULLSCREEN}, | |
116 {true, ui::VKEY_MEDIA_LAUNCH_APP2, ui::EF_SHIFT_DOWN, TOGGLE_FULLSCREEN}, | |
117 {true, ui::VKEY_L, ui::EF_SHIFT_DOWN | ui::EF_ALT_DOWN, FOCUS_SHELF}, | |
118 {true, ui::VKEY_HELP, ui::EF_NONE, SHOW_KEYBOARD_OVERLAY}, | |
119 {true, ui::VKEY_OEM_2, ui::EF_CONTROL_DOWN | ui::EF_ALT_DOWN, | |
120 SHOW_KEYBOARD_OVERLAY}, | |
121 {true, ui::VKEY_OEM_2, | |
122 ui::EF_SHIFT_DOWN | ui::EF_CONTROL_DOWN | ui::EF_ALT_DOWN, | |
123 SHOW_KEYBOARD_OVERLAY}, | |
124 {true, ui::VKEY_F14, ui::EF_NONE, SHOW_KEYBOARD_OVERLAY}, | |
125 {true, ui::VKEY_N, ui::EF_SHIFT_DOWN | ui::EF_ALT_DOWN, | |
126 SHOW_MESSAGE_CENTER_BUBBLE}, | |
127 {true, ui::VKEY_P, ui::EF_SHIFT_DOWN | ui::EF_ALT_DOWN, SHOW_STYLUS_TOOLS}, | |
128 {true, ui::VKEY_S, ui::EF_SHIFT_DOWN | ui::EF_ALT_DOWN, | |
129 SHOW_SYSTEM_TRAY_BUBBLE}, | |
130 {true, ui::VKEY_1, ui::EF_ALT_DOWN, LAUNCH_APP_0}, | |
131 {true, ui::VKEY_2, ui::EF_ALT_DOWN, LAUNCH_APP_1}, | |
132 {true, ui::VKEY_3, ui::EF_ALT_DOWN, LAUNCH_APP_2}, | |
133 {true, ui::VKEY_4, ui::EF_ALT_DOWN, LAUNCH_APP_3}, | |
134 {true, ui::VKEY_5, ui::EF_ALT_DOWN, LAUNCH_APP_4}, | |
135 {true, ui::VKEY_6, ui::EF_ALT_DOWN, LAUNCH_APP_5}, | |
136 {true, ui::VKEY_7, ui::EF_ALT_DOWN, LAUNCH_APP_6}, | |
137 {true, ui::VKEY_8, ui::EF_ALT_DOWN, LAUNCH_APP_7}, | |
138 {true, ui::VKEY_9, ui::EF_ALT_DOWN, LAUNCH_LAST_APP}, | |
139 {true, ui::VKEY_OEM_4, ui::EF_ALT_DOWN, WINDOW_CYCLE_SNAP_LEFT}, | |
140 {true, ui::VKEY_OEM_6, ui::EF_ALT_DOWN, WINDOW_CYCLE_SNAP_RIGHT}, | |
141 {true, ui::VKEY_OEM_MINUS, ui::EF_ALT_DOWN, WINDOW_MINIMIZE}, | |
142 {true, ui::VKEY_OEM_PLUS, ui::EF_ALT_DOWN, TOGGLE_MAXIMIZED}, | |
143 {true, ui::VKEY_OEM_PLUS, ui::EF_SHIFT_DOWN | ui::EF_ALT_DOWN, | |
144 WINDOW_POSITION_CENTER}, | |
145 {true, ui::VKEY_BROWSER_FORWARD, ui::EF_CONTROL_DOWN, FOCUS_NEXT_PANE}, | |
146 {true, ui::VKEY_BROWSER_BACK, ui::EF_CONTROL_DOWN, FOCUS_PREVIOUS_PANE}, | |
147 {true, ui::VKEY_MEDIA_NEXT_TRACK, ui::EF_NONE, MEDIA_NEXT_TRACK}, | |
148 {true, ui::VKEY_MEDIA_PLAY_PAUSE, ui::EF_NONE, MEDIA_PLAY_PAUSE}, | |
149 {true, ui::VKEY_MEDIA_PREV_TRACK, ui::EF_NONE, MEDIA_PREV_TRACK}, | |
150 {true, ui::VKEY_U, kDebugModifier, PRINT_UI_HIERARCHIES}, | |
151 }; | |
152 | |
153 const size_t kAcceleratorDataWhiteListLength = | |
154 arraysize(kAcceleratorData_WhiteList20170405); | |
155 | |
26 } // namespace | 156 } // namespace |
27 | 157 |
28 TEST(AcceleratorTableTest, CheckDuplicatedAccelerators) { | 158 TEST(AcceleratorTableTest, CheckDuplicatedAccelerators) { |
29 std::set<AcceleratorData, Cmp> accelerators; | 159 std::set<AcceleratorData, Cmp> accelerators; |
30 for (size_t i = 0; i < kAcceleratorDataLength; ++i) { | 160 for (size_t i = 0; i < kAcceleratorDataLength; ++i) { |
31 const AcceleratorData& entry = kAcceleratorData[i]; | 161 const AcceleratorData& entry = kAcceleratorData[i]; |
32 EXPECT_TRUE(accelerators.insert(entry).second) | 162 EXPECT_TRUE(accelerators.insert(entry).second) |
33 << "Duplicated accelerator: " << entry.trigger_on_press << ", " | 163 << "Duplicated accelerator: " << entry.trigger_on_press << ", " |
34 << entry.keycode << ", " << (entry.modifiers & ui::EF_SHIFT_DOWN) | 164 << entry.keycode << ", " << (entry.modifiers & ui::EF_SHIFT_DOWN) |
35 << ", " << (entry.modifiers & ui::EF_CONTROL_DOWN) << ", " | 165 << ", " << (entry.modifiers & ui::EF_CONTROL_DOWN) << ", " |
(...skipping 58 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
94 EXPECT_TRUE(actions.insert(data.action).second) << "Deprecated action: " | 224 EXPECT_TRUE(actions.insert(data.action).second) << "Deprecated action: " |
95 << data.action; | 225 << data.action; |
96 | 226 |
97 // The UMA histogram name must be of the format "Ash.Accelerators.*" | 227 // The UMA histogram name must be of the format "Ash.Accelerators.*" |
98 std::string uma_histogram(data.uma_histogram_name); | 228 std::string uma_histogram(data.uma_histogram_name); |
99 EXPECT_TRUE(base::StartsWith(uma_histogram, "Ash.Accelerators.", | 229 EXPECT_TRUE(base::StartsWith(uma_histogram, "Ash.Accelerators.", |
100 base::CompareCase::SENSITIVE)); | 230 base::CompareCase::SENSITIVE)); |
101 } | 231 } |
102 } | 232 } |
103 | 233 |
234 TEST(AcceleratorTableTest, CheckSearchBasedAccelerators) { | |
235 std::set<AcceleratorData, Cmp> achived_accelerators; | |
236 for (size_t i = 0; i < kAcceleratorDataWhiteListLength; ++i) | |
237 achived_accelerators.insert(kAcceleratorData_WhiteList20170405[i]); | |
238 | |
239 for (size_t i = 0; i < kAcceleratorDataLength; ++i) { | |
240 const AcceleratorData& entry = kAcceleratorData[i]; | |
241 if (achived_accelerators.find(entry) != achived_accelerators.end()) | |
242 continue; | |
243 EXPECT_TRUE(entry.modifiers & ui::EF_COMMAND_DOWN) | |
244 << "Non-Search-based accelerator: " << entry.trigger_on_press << ", " | |
245 << entry.keycode << ", " << (entry.modifiers & ui::EF_SHIFT_DOWN) | |
Daniel Erat
2017/04/05 18:08:31
i'd label all of these fields since the message se
wutao
2017/04/05 23:00:16
Changed this and other old test as well.
| |
246 << ", " << (entry.modifiers & ui::EF_CONTROL_DOWN) << ", " | |
247 << (entry.modifiers & ui::EF_ALT_DOWN); | |
248 } | |
249 } | |
250 | |
104 } // namespace ash | 251 } // namespace ash |
OLD | NEW |