Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(22)

Side by Side Diff: ui/base/accelerators/accelerator_manager_unittest.cc

Issue 2177983002: Adds AcceleratorManagerDelegate (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: cleanup Created 4 years, 4 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « ui/base/accelerators/accelerator_manager_delegate.h ('k') | ui/base/ui_base.gyp » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
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 "ui/base/accelerators/accelerator_manager.h" 5 #include "ui/base/accelerators/accelerator_manager.h"
6 6
7 #include <map>
8
7 #include "base/compiler_specific.h" 9 #include "base/compiler_specific.h"
8 #include "base/macros.h" 10 #include "base/macros.h"
9 #include "testing/gtest/include/gtest/gtest.h" 11 #include "testing/gtest/include/gtest/gtest.h"
12 #include "ui/base/accelerators/accelerator_manager_delegate.h"
10 #include "ui/events/event_constants.h" 13 #include "ui/events/event_constants.h"
11 #include "ui/events/keycodes/keyboard_codes.h" 14 #include "ui/events/keycodes/keyboard_codes.h"
12 15
13 namespace ui { 16 namespace ui {
14 namespace test { 17 namespace test {
15 18
16 namespace { 19 namespace {
17 20
18 class TestTarget : public AcceleratorTarget { 21 class TestTarget : public AcceleratorTarget {
19 public: 22 public:
(...skipping 24 matching lines...) Expand all
44 } 47 }
45 48
46 bool TestTarget::CanHandleAccelerators() const { 49 bool TestTarget::CanHandleAccelerators() const {
47 return true; 50 return true;
48 } 51 }
49 52
50 Accelerator GetAccelerator(KeyboardCode code, int mask) { 53 Accelerator GetAccelerator(KeyboardCode code, int mask) {
51 return Accelerator(code, mask); 54 return Accelerator(code, mask);
52 } 55 }
53 56
57 // AcceleratorManagerDelegate implementation that records calls to interface
58 // using the following format.
59 // . OnAcceleratorRegistered() -> 'Register ' + id
60 // . OnAcceleratorRegistered() -> 'Unregister' + id
61 // where the id is specified using SetIdForAccelerator().
62 class TestAcceleratorManagerDelegate : public AcceleratorManagerDelegate {
63 public:
64 TestAcceleratorManagerDelegate() {}
65 ~TestAcceleratorManagerDelegate() override {}
66
67 void SetIdForAccelerator(const Accelerator& accelerator,
68 const std::string& id) {
69 accelerator_to_id_[accelerator] = id;
70 }
71
72 std::string GetAndClearCommands() {
73 std::string commands;
74 std::swap(commands, commands_);
75 return commands;
76 }
77
78 // AcceleratorManagerDelegate:
79 void OnAcceleratorRegistered(const Accelerator& accelerator) override {
80 if (!commands_.empty())
81 commands_ += " ";
82 commands_ += "Register " + accelerator_to_id_[accelerator];
83 }
84 void OnAcceleratorUnregistered(const Accelerator& accelerator) override {
85 if (!commands_.empty())
86 commands_ += " ";
87 commands_ += "Unregister " + accelerator_to_id_[accelerator];
88 }
89
90 private:
91 std::map<Accelerator, std::string> accelerator_to_id_;
92 std::string commands_;
93
94 DISALLOW_COPY_AND_ASSIGN(TestAcceleratorManagerDelegate);
95 };
96
54 } // namespace 97 } // namespace
55 98
56 class AcceleratorManagerTest : public testing::Test { 99 class AcceleratorManagerTest : public testing::Test {
57 public: 100 public:
58 AcceleratorManagerTest() {} 101 AcceleratorManagerTest() : manager_(&delegate_) {}
59 ~AcceleratorManagerTest() override {} 102 ~AcceleratorManagerTest() override {}
60 103
104 protected:
105 TestAcceleratorManagerDelegate delegate_;
61 AcceleratorManager manager_; 106 AcceleratorManager manager_;
62 }; 107 };
63 108
64 TEST_F(AcceleratorManagerTest, Register) { 109 TEST_F(AcceleratorManagerTest, Register) {
65 const Accelerator accelerator_a(VKEY_A, EF_NONE); 110 const Accelerator accelerator_a(VKEY_A, EF_NONE);
66 TestTarget target; 111 TestTarget target;
112 delegate_.SetIdForAccelerator(accelerator_a, "a");
67 manager_.Register(accelerator_a, AcceleratorManager::kNormalPriority, 113 manager_.Register(accelerator_a, AcceleratorManager::kNormalPriority,
68 &target); 114 &target);
115 EXPECT_EQ("Register a", delegate_.GetAndClearCommands());
69 116
70 // The registered accelerator is processed. 117 // The registered accelerator is processed.
71 EXPECT_TRUE(manager_.Process(accelerator_a)); 118 EXPECT_TRUE(manager_.Process(accelerator_a));
72 EXPECT_EQ(1, target.accelerator_pressed_count()); 119 EXPECT_EQ(1, target.accelerator_pressed_count());
73 } 120 }
74 121
75 TEST_F(AcceleratorManagerTest, RegisterMultipleTarget) { 122 TEST_F(AcceleratorManagerTest, RegisterMultipleTarget) {
76 const Accelerator accelerator_a(VKEY_A, EF_NONE); 123 const Accelerator accelerator_a(VKEY_A, EF_NONE);
124 delegate_.SetIdForAccelerator(accelerator_a, "a");
77 TestTarget target1; 125 TestTarget target1;
78 manager_.Register(accelerator_a, AcceleratorManager::kNormalPriority, 126 manager_.Register(accelerator_a, AcceleratorManager::kNormalPriority,
79 &target1); 127 &target1);
128 EXPECT_EQ("Register a", delegate_.GetAndClearCommands());
80 TestTarget target2; 129 TestTarget target2;
81 manager_.Register(accelerator_a, AcceleratorManager::kNormalPriority, 130 manager_.Register(accelerator_a, AcceleratorManager::kNormalPriority,
82 &target2); 131 &target2);
132 // Registering the same command shouldn't notify the delegate.
133 EXPECT_TRUE(delegate_.GetAndClearCommands().empty());
83 134
84 // If multiple targets are registered with the same accelerator, the target 135 // If multiple targets are registered with the same accelerator, the target
85 // registered later processes the accelerator. 136 // registered later processes the accelerator.
86 EXPECT_TRUE(manager_.Process(accelerator_a)); 137 EXPECT_TRUE(manager_.Process(accelerator_a));
87 EXPECT_EQ(0, target1.accelerator_pressed_count()); 138 EXPECT_EQ(0, target1.accelerator_pressed_count());
88 EXPECT_EQ(1, target2.accelerator_pressed_count()); 139 EXPECT_EQ(1, target2.accelerator_pressed_count());
89 } 140 }
90 141
91 TEST_F(AcceleratorManagerTest, Unregister) { 142 TEST_F(AcceleratorManagerTest, Unregister) {
92 const Accelerator accelerator_a(VKEY_A, EF_NONE); 143 const Accelerator accelerator_a(VKEY_A, EF_NONE);
144 delegate_.SetIdForAccelerator(accelerator_a, "a");
93 TestTarget target; 145 TestTarget target;
94 manager_.Register(accelerator_a, AcceleratorManager::kNormalPriority, 146 manager_.Register(accelerator_a, AcceleratorManager::kNormalPriority,
95 &target); 147 &target);
148 EXPECT_EQ("Register a", delegate_.GetAndClearCommands());
96 const Accelerator accelerator_b(VKEY_B, EF_NONE); 149 const Accelerator accelerator_b(VKEY_B, EF_NONE);
150 delegate_.SetIdForAccelerator(accelerator_b, "b");
97 manager_.Register(accelerator_b, AcceleratorManager::kNormalPriority, 151 manager_.Register(accelerator_b, AcceleratorManager::kNormalPriority,
98 &target); 152 &target);
153 EXPECT_EQ("Register b", delegate_.GetAndClearCommands());
99 154
100 // Unregistering a different accelerator does not affect the other 155 // Unregistering a different accelerator does not affect the other
101 // accelerator. 156 // accelerator.
102 manager_.Unregister(accelerator_b, &target); 157 manager_.Unregister(accelerator_b, &target);
158 EXPECT_EQ("Unregister b", delegate_.GetAndClearCommands());
103 EXPECT_TRUE(manager_.Process(accelerator_a)); 159 EXPECT_TRUE(manager_.Process(accelerator_a));
104 EXPECT_EQ(1, target.accelerator_pressed_count()); 160 EXPECT_EQ(1, target.accelerator_pressed_count());
105 161
106 // The unregistered accelerator is no longer processed. 162 // The unregistered accelerator is no longer processed.
107 target.set_accelerator_pressed_count(0); 163 target.set_accelerator_pressed_count(0);
108 manager_.Unregister(accelerator_a, &target); 164 manager_.Unregister(accelerator_a, &target);
165 EXPECT_EQ("Unregister a", delegate_.GetAndClearCommands());
109 EXPECT_FALSE(manager_.Process(accelerator_a)); 166 EXPECT_FALSE(manager_.Process(accelerator_a));
110 EXPECT_EQ(0, target.accelerator_pressed_count()); 167 EXPECT_EQ(0, target.accelerator_pressed_count());
111 } 168 }
112 169
113 TEST_F(AcceleratorManagerTest, UnregisterAll) { 170 TEST_F(AcceleratorManagerTest, UnregisterAll) {
114 const Accelerator accelerator_a(VKEY_A, EF_NONE); 171 const Accelerator accelerator_a(VKEY_A, EF_NONE);
172 delegate_.SetIdForAccelerator(accelerator_a, "a");
115 TestTarget target1; 173 TestTarget target1;
116 manager_.Register(accelerator_a, AcceleratorManager::kNormalPriority, 174 manager_.Register(accelerator_a, AcceleratorManager::kNormalPriority,
117 &target1); 175 &target1);
118 const Accelerator accelerator_b(VKEY_B, EF_NONE); 176 const Accelerator accelerator_b(VKEY_B, EF_NONE);
177 delegate_.SetIdForAccelerator(accelerator_b, "b");
119 manager_.Register(accelerator_b, AcceleratorManager::kNormalPriority, 178 manager_.Register(accelerator_b, AcceleratorManager::kNormalPriority,
120 &target1); 179 &target1);
121 const Accelerator accelerator_c(VKEY_C, EF_NONE); 180 const Accelerator accelerator_c(VKEY_C, EF_NONE);
181 delegate_.SetIdForAccelerator(accelerator_c, "c");
122 TestTarget target2; 182 TestTarget target2;
123 manager_.Register(accelerator_c, AcceleratorManager::kNormalPriority, 183 manager_.Register(accelerator_c, AcceleratorManager::kNormalPriority,
124 &target2); 184 &target2);
185 EXPECT_EQ("Register a Register b Register c",
186 delegate_.GetAndClearCommands());
125 manager_.UnregisterAll(&target1); 187 manager_.UnregisterAll(&target1);
188 {
189 const std::string commands = delegate_.GetAndClearCommands();
190 // Ordering is not guaranteed.
191 EXPECT_TRUE(commands == "Unregister a Unregister b" ||
192 commands == "Unregister b Unregister a");
193 }
126 194
127 // All the accelerators registered for |target1| are no longer processed. 195 // All the accelerators registered for |target1| are no longer processed.
128 EXPECT_FALSE(manager_.Process(accelerator_a)); 196 EXPECT_FALSE(manager_.Process(accelerator_a));
129 EXPECT_FALSE(manager_.Process(accelerator_b)); 197 EXPECT_FALSE(manager_.Process(accelerator_b));
130 EXPECT_EQ(0, target1.accelerator_pressed_count()); 198 EXPECT_EQ(0, target1.accelerator_pressed_count());
131 199
132 // UnregisterAll with a different target does not affect the other target. 200 // UnregisterAll with a different target does not affect the other target.
133 EXPECT_TRUE(manager_.Process(accelerator_c)); 201 EXPECT_TRUE(manager_.Process(accelerator_c));
134 EXPECT_EQ(1, target2.accelerator_pressed_count()); 202 EXPECT_EQ(1, target2.accelerator_pressed_count());
135 } 203 }
(...skipping 33 matching lines...) Expand 10 before | Expand all | Expand 10 after
169 const base::string16 test_text = test_accelerator.GetShortcutText(); 237 const base::string16 test_text = test_accelerator.GetShortcutText();
170 EXPECT_FALSE(manager_.Process(test_accelerator)) 238 EXPECT_FALSE(manager_.Process(test_accelerator))
171 << text << ", " << test_text; // different modifiers 239 << text << ", " << test_text; // different modifiers
172 } 240 }
173 241
174 EXPECT_EQ(last_count + 1, target.accelerator_pressed_count()) << text; 242 EXPECT_EQ(last_count + 1, target.accelerator_pressed_count()) << text;
175 manager_.UnregisterAll(&target); 243 manager_.UnregisterAll(&target);
176 } 244 }
177 } 245 }
178 246
247 // Verifies delegate is notifed correctly when unregistering and registering
248 // with the same accelerator.
249 TEST_F(AcceleratorManagerTest, Reregister) {
250 const Accelerator accelerator_a(VKEY_A, EF_NONE);
251 TestTarget target;
252 delegate_.SetIdForAccelerator(accelerator_a, "a");
253 manager_.Register(accelerator_a, AcceleratorManager::kNormalPriority,
254 &target);
255 EXPECT_EQ("Register a", delegate_.GetAndClearCommands());
256 manager_.UnregisterAll(&target);
257 EXPECT_EQ("Unregister a", delegate_.GetAndClearCommands());
258 manager_.Register(accelerator_a, AcceleratorManager::kNormalPriority,
259 &target);
260 EXPECT_EQ("Register a", delegate_.GetAndClearCommands());
261 }
262
179 } // namespace test 263 } // namespace test
180 } // namespace ui 264 } // namespace ui
OLDNEW
« no previous file with comments | « ui/base/accelerators/accelerator_manager_delegate.h ('k') | ui/base/ui_base.gyp » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698