OLD | NEW |
| (Empty) |
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 | |
5 #include "athena/input/public/accelerator_manager.h" | |
6 | |
7 #include "athena/activity/public/activity.h" | |
8 #include "athena/activity/public/activity_factory.h" | |
9 #include "athena/input/public/input_manager.h" | |
10 #include "athena/test/base/athena_test_base.h" | |
11 #include "athena/wm/public/window_manager.h" | |
12 #include "ui/events/test/event_generator.h" | |
13 | |
14 namespace athena { | |
15 namespace { | |
16 | |
17 const int kInvalidCommandId = -1; | |
18 | |
19 class TestHandler : public AcceleratorHandler { | |
20 public: | |
21 TestHandler() : fired_command_id_(kInvalidCommandId), enabled_(true) {} | |
22 ~TestHandler() override {} | |
23 | |
24 void set_enabled(bool enabled) { enabled_ = enabled; } | |
25 | |
26 int GetFiredCommandIdAndReset() { | |
27 int fired = fired_command_id_; | |
28 fired_command_id_ = kInvalidCommandId; | |
29 return fired; | |
30 } | |
31 | |
32 private: | |
33 // AcceleratorHandler: | |
34 virtual bool IsCommandEnabled(int command_id) const override { | |
35 return enabled_; | |
36 } | |
37 virtual bool OnAcceleratorFired(int command_id, | |
38 const ui::Accelerator& accelerator) override { | |
39 fired_command_id_ = command_id; | |
40 return true; | |
41 } | |
42 | |
43 int fired_command_id_; | |
44 bool enabled_; | |
45 | |
46 DISALLOW_COPY_AND_ASSIGN(TestHandler); | |
47 }; | |
48 | |
49 } // namespace | |
50 | |
51 typedef test::AthenaTestBase AcceleratorManagerTest; | |
52 | |
53 TEST_F(AcceleratorManagerTest, Basic) { | |
54 enum TestCommandId { | |
55 COMMAND_A, | |
56 COMMAND_B, | |
57 COMMAND_C, | |
58 COMMAND_D, | |
59 COMMAND_E, | |
60 }; | |
61 const AcceleratorData data[] = { | |
62 {TRIGGER_ON_PRESS, ui::VKEY_A, ui::EF_SHIFT_DOWN, COMMAND_A, AF_RESERVED}, | |
63 {TRIGGER_ON_RELEASE, ui::VKEY_B, ui::EF_SHIFT_DOWN, COMMAND_B, | |
64 AF_RESERVED}, | |
65 {TRIGGER_ON_PRESS, ui::VKEY_C, ui::EF_SHIFT_DOWN, COMMAND_C, | |
66 AF_RESERVED | AF_DEBUG}, | |
67 {TRIGGER_ON_PRESS, ui::VKEY_D, ui::EF_SHIFT_DOWN, COMMAND_D, | |
68 AF_RESERVED | AF_NON_AUTO_REPEATABLE}, | |
69 {TRIGGER_ON_PRESS, ui::VKEY_E, ui::EF_SHIFT_DOWN, COMMAND_E, AF_NONE}, | |
70 }; | |
71 AcceleratorManager* accelerator_manager = | |
72 InputManager::Get()->GetAcceleratorManager(); | |
73 TestHandler test_handler; | |
74 accelerator_manager->RegisterAccelerators( | |
75 data, arraysize(data), &test_handler); | |
76 | |
77 ui::test::EventGenerator generator(root_window()); | |
78 generator.PressKey(ui::VKEY_A, ui::EF_NONE); | |
79 EXPECT_EQ(kInvalidCommandId, test_handler.GetFiredCommandIdAndReset()); | |
80 | |
81 // Trigger on press. | |
82 generator.PressKey(ui::VKEY_A, ui::EF_SHIFT_DOWN); | |
83 EXPECT_EQ(COMMAND_A, test_handler.GetFiredCommandIdAndReset()); | |
84 generator.ReleaseKey(ui::VKEY_A, ui::EF_SHIFT_DOWN); | |
85 EXPECT_EQ(kInvalidCommandId, test_handler.GetFiredCommandIdAndReset()); | |
86 | |
87 // Trigger on release. | |
88 generator.PressKey(ui::VKEY_B, ui::EF_SHIFT_DOWN); | |
89 EXPECT_EQ(kInvalidCommandId, test_handler.GetFiredCommandIdAndReset()); | |
90 generator.ReleaseKey(ui::VKEY_B, ui::EF_SHIFT_DOWN); | |
91 EXPECT_EQ(COMMAND_B, test_handler.GetFiredCommandIdAndReset()); | |
92 | |
93 // Disable command. | |
94 test_handler.set_enabled(false); | |
95 generator.PressKey(ui::VKEY_A, ui::EF_SHIFT_DOWN); | |
96 EXPECT_EQ(kInvalidCommandId, test_handler.GetFiredCommandIdAndReset()); | |
97 test_handler.set_enabled(true); | |
98 generator.PressKey(ui::VKEY_A, ui::EF_SHIFT_DOWN); | |
99 EXPECT_EQ(COMMAND_A, test_handler.GetFiredCommandIdAndReset()); | |
100 | |
101 // Debug accelerators. | |
102 accelerator_manager->SetDebugAcceleratorsEnabled(false); | |
103 generator.PressKey(ui::VKEY_C, ui::EF_SHIFT_DOWN); | |
104 EXPECT_EQ(kInvalidCommandId, test_handler.GetFiredCommandIdAndReset()); | |
105 accelerator_manager->SetDebugAcceleratorsEnabled(true); | |
106 generator.PressKey(ui::VKEY_C, ui::EF_SHIFT_DOWN); | |
107 EXPECT_EQ(COMMAND_C, test_handler.GetFiredCommandIdAndReset()); | |
108 accelerator_manager->SetDebugAcceleratorsEnabled(false); | |
109 | |
110 // Non auto repeatable | |
111 generator.PressKey(ui::VKEY_D, ui::EF_SHIFT_DOWN); | |
112 EXPECT_EQ(COMMAND_D, test_handler.GetFiredCommandIdAndReset()); | |
113 generator.PressKey(ui::VKEY_D, ui::EF_SHIFT_DOWN | ui::EF_IS_REPEAT); | |
114 EXPECT_EQ(kInvalidCommandId, test_handler.GetFiredCommandIdAndReset()); | |
115 | |
116 // TODO(oshima): Add scenario where the key event is consumed by | |
117 // an app. | |
118 generator.PressKey(ui::VKEY_E, ui::EF_SHIFT_DOWN); | |
119 EXPECT_EQ(COMMAND_E, test_handler.GetFiredCommandIdAndReset()); | |
120 } | |
121 | |
122 TEST_F(AcceleratorManagerTest, CloseActivity) { | |
123 ActivityFactory* factory = ActivityFactory::Get(); | |
124 Activity* activity1 = | |
125 factory->CreateWebActivity(NULL, base::string16(), GURL()); | |
126 Activity::Show(activity1); | |
127 Activity::Delete(activity1); | |
128 | |
129 Activity* activity2 = | |
130 factory->CreateWebActivity(NULL, base::string16(), GURL()); | |
131 Activity::Show(activity2); | |
132 | |
133 // TODO(oshima): This shouldn't be necessary. Remove this once | |
134 // crbug.com/427113 is fixed. | |
135 RunAllPendingInMessageLoop(); | |
136 | |
137 ui::test::EventGenerator generator(root_window()); | |
138 generator.PressKey(ui::VKEY_F6, ui::EF_NONE); | |
139 EXPECT_TRUE(WindowManager::Get()->IsOverviewModeActive()); | |
140 Activity::Delete(activity2); | |
141 } | |
142 | |
143 } // namespace athena | |
OLD | NEW |