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

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

Issue 2586333003: Make mash register initial batch of accelerators in single shot. (Closed)
Patch Set: Remove temporary vector. Add comments. Add AddAcceleratorToVector to use in OnAcceleratorRegistered… Created 3 years, 12 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
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> 7 #include <map>
8 8
9 #include "base/compiler_specific.h" 9 #include "base/compiler_specific.h"
10 #include "base/macros.h" 10 #include "base/macros.h"
(...skipping 72 matching lines...) Expand 10 before | Expand all | Expand 10 after
83 const std::string& id) { 83 const std::string& id) {
84 accelerator_to_id_[accelerator] = id; 84 accelerator_to_id_[accelerator] = id;
85 } 85 }
86 86
87 std::string GetAndClearCommands() { 87 std::string GetAndClearCommands() {
88 std::string commands; 88 std::string commands;
89 std::swap(commands, commands_); 89 std::swap(commands, commands_);
90 return commands; 90 return commands;
91 } 91 }
92 92
93 void OnAcceleratorsRegistered(
94 const std::vector<ui::Accelerator>& accelerators) override {
95 for (auto iter = accelerators.begin(); iter != accelerators.end(); ++iter)
96 OnAcceleratorRegistered(*iter);
97 }
98
99 void OnAcceleratorsUnregistered(
100 std::vector<ui::Accelerator>& accelerators) override {
101 for (auto iter = accelerators.begin(); iter != accelerators.end(); ++iter)
102 OnAcceleratorUnregistered(*iter);
103 }
93 // AcceleratorManagerDelegate: 104 // AcceleratorManagerDelegate:
mfomitchev 2016/12/22 21:18:55 The comment should be preceeding the first method
thanhph 2016/12/24 18:52:16 Done, cool!
94 void OnAcceleratorRegistered(const Accelerator& accelerator) override { 105 void OnAcceleratorRegistered(const Accelerator& accelerator) override {
95 if (!commands_.empty()) 106 if (!commands_.empty())
96 commands_ += " "; 107 commands_ += " ";
97 commands_ += "Register " + accelerator_to_id_[accelerator]; 108 commands_ += "Register " + accelerator_to_id_[accelerator];
98 } 109 }
99 void OnAcceleratorUnregistered(const Accelerator& accelerator) override { 110 void OnAcceleratorUnregistered(const Accelerator& accelerator) override {
100 if (!commands_.empty()) 111 if (!commands_.empty())
101 commands_ += " "; 112 commands_ += " ";
102 commands_ += "Unregister " + accelerator_to_id_[accelerator]; 113 commands_ += "Unregister " + accelerator_to_id_[accelerator];
103 } 114 }
(...skipping 14 matching lines...) Expand all
118 129
119 protected: 130 protected:
120 TestAcceleratorManagerDelegate delegate_; 131 TestAcceleratorManagerDelegate delegate_;
121 AcceleratorManager manager_; 132 AcceleratorManager manager_;
122 }; 133 };
123 134
124 TEST_F(AcceleratorManagerTest, Register) { 135 TEST_F(AcceleratorManagerTest, Register) {
125 const Accelerator accelerator_a(VKEY_A, EF_NONE); 136 const Accelerator accelerator_a(VKEY_A, EF_NONE);
126 TestTarget target; 137 TestTarget target;
127 delegate_.SetIdForAccelerator(accelerator_a, "a"); 138 delegate_.SetIdForAccelerator(accelerator_a, "a");
128 manager_.Register(accelerator_a, AcceleratorManager::kNormalPriority, 139 const std::vector<ui::Accelerator>& accelerators = {accelerator_a};
129 &target); 140 manager_.Register(accelerators, AcceleratorManager::kNormalPriority, &target);
130 EXPECT_EQ("Register a", delegate_.GetAndClearCommands()); 141 EXPECT_EQ("Register a", delegate_.GetAndClearCommands());
131 142
132 // The registered accelerator is processed. 143 // The registered accelerator is processed.
133 EXPECT_TRUE(manager_.Process(accelerator_a)); 144 EXPECT_TRUE(manager_.Process(accelerator_a));
134 EXPECT_EQ(1, target.accelerator_pressed_count()); 145 EXPECT_EQ(1, target.accelerator_pressed_count());
135 } 146 }
136 147
137 TEST_F(AcceleratorManagerTest, RegisterMultipleTarget) { 148 TEST_F(AcceleratorManagerTest, RegisterMultipleTarget) {
138 const Accelerator accelerator_a(VKEY_A, EF_NONE); 149 const Accelerator accelerator_a(VKEY_A, EF_NONE);
139 delegate_.SetIdForAccelerator(accelerator_a, "a"); 150 delegate_.SetIdForAccelerator(accelerator_a, "a");
140 TestTarget target1; 151 TestTarget target1;
141 manager_.Register(accelerator_a, AcceleratorManager::kNormalPriority, 152 const std::vector<ui::Accelerator>& accelerators = {accelerator_a};
153 manager_.Register(accelerators, AcceleratorManager::kNormalPriority,
142 &target1); 154 &target1);
143 EXPECT_EQ("Register a", delegate_.GetAndClearCommands()); 155 EXPECT_EQ("Register a", delegate_.GetAndClearCommands());
144 TestTarget target2; 156 TestTarget target2;
145 manager_.Register(accelerator_a, AcceleratorManager::kNormalPriority, 157 manager_.Register(accelerators, AcceleratorManager::kNormalPriority,
146 &target2); 158 &target2);
147 // Registering the same command shouldn't notify the delegate. 159 // Registering the same command shouldn't notify the delegate.
148 EXPECT_TRUE(delegate_.GetAndClearCommands().empty()); 160 EXPECT_TRUE(delegate_.GetAndClearCommands().empty());
149 161
150 // If multiple targets are registered with the same accelerator, the target 162 // If multiple targets are registered with the same accelerator, the target
151 // registered later processes the accelerator. 163 // registered later processes the accelerator.
152 EXPECT_TRUE(manager_.Process(accelerator_a)); 164 EXPECT_TRUE(manager_.Process(accelerator_a));
153 EXPECT_EQ(0, target1.accelerator_pressed_count()); 165 EXPECT_EQ(0, target1.accelerator_pressed_count());
154 EXPECT_EQ(1, target2.accelerator_pressed_count()); 166 EXPECT_EQ(1, target2.accelerator_pressed_count());
155 } 167 }
156 168
157 TEST_F(AcceleratorManagerTest, Unregister) { 169 TEST_F(AcceleratorManagerTest, Unregister) {
158 const Accelerator accelerator_a(VKEY_A, EF_NONE); 170 const Accelerator accelerator_a(VKEY_A, EF_NONE);
159 delegate_.SetIdForAccelerator(accelerator_a, "a"); 171 delegate_.SetIdForAccelerator(accelerator_a, "a");
160 TestTarget target; 172 TestTarget target;
161 manager_.Register(accelerator_a, AcceleratorManager::kNormalPriority, 173
162 &target);
163 EXPECT_EQ("Register a", delegate_.GetAndClearCommands());
164 const Accelerator accelerator_b(VKEY_B, EF_NONE); 174 const Accelerator accelerator_b(VKEY_B, EF_NONE);
165 delegate_.SetIdForAccelerator(accelerator_b, "b"); 175 delegate_.SetIdForAccelerator(accelerator_b, "b");
166 manager_.Register(accelerator_b, AcceleratorManager::kNormalPriority, 176
167 &target); 177 const std::vector<ui::Accelerator>& accelerators = {accelerator_a,
168 EXPECT_EQ("Register b", delegate_.GetAndClearCommands()); 178 accelerator_b};
179
180 manager_.Register(accelerators, AcceleratorManager::kNormalPriority, &target);
181
182 EXPECT_EQ("Register a Register b", delegate_.GetAndClearCommands());
169 183
170 // Unregistering a different accelerator does not affect the other 184 // Unregistering a different accelerator does not affect the other
171 // accelerator. 185 // accelerator.
172 manager_.Unregister(accelerator_b, &target); 186 manager_.Unregister(accelerator_b, &target);
173 EXPECT_EQ("Unregister b", delegate_.GetAndClearCommands()); 187 EXPECT_EQ("Unregister b", delegate_.GetAndClearCommands());
174 EXPECT_TRUE(manager_.Process(accelerator_a)); 188 EXPECT_TRUE(manager_.Process(accelerator_a));
175 EXPECT_EQ(1, target.accelerator_pressed_count()); 189 EXPECT_EQ(1, target.accelerator_pressed_count());
176 190
177 // The unregistered accelerator is no longer processed. 191 // The unregistered accelerator is no longer processed.
178 target.set_accelerator_pressed_count(0); 192 target.set_accelerator_pressed_count(0);
179 manager_.Unregister(accelerator_a, &target); 193 manager_.Unregister(accelerator_a, &target);
180 EXPECT_EQ("Unregister a", delegate_.GetAndClearCommands()); 194 EXPECT_EQ("Unregister a", delegate_.GetAndClearCommands());
181 EXPECT_FALSE(manager_.Process(accelerator_a)); 195 EXPECT_FALSE(manager_.Process(accelerator_a));
182 EXPECT_EQ(0, target.accelerator_pressed_count()); 196 EXPECT_EQ(0, target.accelerator_pressed_count());
183 } 197 }
184 198
185 TEST_F(AcceleratorManagerTest, UnregisterAll) { 199 TEST_F(AcceleratorManagerTest, UnregisterAll) {
186 const Accelerator accelerator_a(VKEY_A, EF_NONE); 200 const Accelerator accelerator_a(VKEY_A, EF_NONE);
187 delegate_.SetIdForAccelerator(accelerator_a, "a"); 201 delegate_.SetIdForAccelerator(accelerator_a, "a");
188 TestTarget target1; 202 TestTarget target1;
189 manager_.Register(accelerator_a, AcceleratorManager::kNormalPriority, 203
190 &target1);
191 const Accelerator accelerator_b(VKEY_B, EF_NONE); 204 const Accelerator accelerator_b(VKEY_B, EF_NONE);
192 delegate_.SetIdForAccelerator(accelerator_b, "b"); 205 delegate_.SetIdForAccelerator(accelerator_b, "b");
193 manager_.Register(accelerator_b, AcceleratorManager::kNormalPriority, 206
207 const std::vector<ui::Accelerator>& accelerators = {accelerator_a,
208 accelerator_b};
209
210 manager_.Register(accelerators, AcceleratorManager::kNormalPriority,
194 &target1); 211 &target1);
212
195 const Accelerator accelerator_c(VKEY_C, EF_NONE); 213 const Accelerator accelerator_c(VKEY_C, EF_NONE);
196 delegate_.SetIdForAccelerator(accelerator_c, "c"); 214 delegate_.SetIdForAccelerator(accelerator_c, "c");
215
216 const std::vector<ui::Accelerator>& accelerators_2 = {accelerator_c};
217
197 TestTarget target2; 218 TestTarget target2;
198 manager_.Register(accelerator_c, AcceleratorManager::kNormalPriority, 219 manager_.Register(accelerators_2, AcceleratorManager::kNormalPriority,
199 &target2); 220 &target2);
221
200 EXPECT_EQ("Register a Register b Register c", 222 EXPECT_EQ("Register a Register b Register c",
201 delegate_.GetAndClearCommands()); 223 delegate_.GetAndClearCommands());
202 manager_.UnregisterAll(&target1); 224 manager_.UnregisterAll(&target1);
203 { 225 {
204 const std::string commands = delegate_.GetAndClearCommands(); 226 const std::string commands = delegate_.GetAndClearCommands();
205 // Ordering is not guaranteed. 227 // Ordering is not guaranteed.
206 EXPECT_TRUE(commands == "Unregister a Unregister b" || 228 EXPECT_TRUE(commands == "Unregister a Unregister b" ||
207 commands == "Unregister b Unregister a"); 229 commands == "Unregister b Unregister a");
208 } 230 }
209 231
210 // All the accelerators registered for |target1| are no longer processed. 232 // All the accelerators registered for |target1| are no longer processed.
211 EXPECT_FALSE(manager_.Process(accelerator_a)); 233 EXPECT_FALSE(manager_.Process(accelerator_a));
212 EXPECT_FALSE(manager_.Process(accelerator_b)); 234 EXPECT_FALSE(manager_.Process(accelerator_b));
213 EXPECT_EQ(0, target1.accelerator_pressed_count()); 235 EXPECT_EQ(0, target1.accelerator_pressed_count());
214 236
215 // UnregisterAll with a different target does not affect the other target. 237 // UnregisterAll with a different target does not affect the other target.
216 EXPECT_TRUE(manager_.Process(accelerator_c)); 238 EXPECT_TRUE(manager_.Process(accelerator_c));
217 EXPECT_EQ(1, target2.accelerator_pressed_count()); 239 EXPECT_EQ(1, target2.accelerator_pressed_count());
218 } 240 }
219 241
220 TEST_F(AcceleratorManagerTest, Process) { 242 TEST_F(AcceleratorManagerTest, Process) {
221 TestTarget target; 243 TestTarget target;
222 244
223 // Test all cases of possible modifiers. 245 // Test all cases of possible modifiers.
224 for (size_t i = 0; i < (1 << arraysize(kAcceleratorModifiers)); ++i) { 246 for (size_t i = 0; i < (1 << arraysize(kAcceleratorModifiers)); ++i) {
225 const int modifiers = BuildAcceleratorModifier(i); 247 const int modifiers = BuildAcceleratorModifier(i);
226 Accelerator accelerator(GetAccelerator(VKEY_A, modifiers)); 248 Accelerator accelerator(GetAccelerator(VKEY_A, modifiers));
227 manager_.Register(accelerator, AcceleratorManager::kNormalPriority, 249 const std::vector<ui::Accelerator>& accelerators = {accelerator};
250 manager_.Register(accelerators, AcceleratorManager::kNormalPriority,
228 &target); 251 &target);
229 252
230 // The registered accelerator is processed. 253 // The registered accelerator is processed.
231 const int last_count = target.accelerator_pressed_count(); 254 const int last_count = target.accelerator_pressed_count();
232 EXPECT_TRUE(manager_.Process(accelerator)) << i; 255 EXPECT_TRUE(manager_.Process(accelerator)) << i;
233 EXPECT_EQ(last_count + 1, target.accelerator_pressed_count()) << i; 256 EXPECT_EQ(last_count + 1, target.accelerator_pressed_count()) << i;
234 257
235 // The non-registered accelerators are not processed. 258 // The non-registered accelerators are not processed.
236 accelerator.set_type(ET_UNKNOWN); 259 accelerator.set_type(ET_UNKNOWN);
237 EXPECT_FALSE(manager_.Process(accelerator)) << i; // different type 260 EXPECT_FALSE(manager_.Process(accelerator)) << i; // different type
(...skipping 22 matching lines...) Expand all
260 manager_.UnregisterAll(&target); 283 manager_.UnregisterAll(&target);
261 } 284 }
262 } 285 }
263 286
264 // Verifies delegate is notifed correctly when unregistering and registering 287 // Verifies delegate is notifed correctly when unregistering and registering
265 // with the same accelerator. 288 // with the same accelerator.
266 TEST_F(AcceleratorManagerTest, Reregister) { 289 TEST_F(AcceleratorManagerTest, Reregister) {
267 const Accelerator accelerator_a(VKEY_A, EF_NONE); 290 const Accelerator accelerator_a(VKEY_A, EF_NONE);
268 TestTarget target; 291 TestTarget target;
269 delegate_.SetIdForAccelerator(accelerator_a, "a"); 292 delegate_.SetIdForAccelerator(accelerator_a, "a");
270 manager_.Register(accelerator_a, AcceleratorManager::kNormalPriority, 293 const std::vector<ui::Accelerator>& accelerators = {accelerator_a};
271 &target); 294 manager_.Register(accelerators, AcceleratorManager::kNormalPriority, &target);
272 EXPECT_EQ("Register a", delegate_.GetAndClearCommands()); 295 EXPECT_EQ("Register a", delegate_.GetAndClearCommands());
273 manager_.UnregisterAll(&target); 296 manager_.UnregisterAll(&target);
274 EXPECT_EQ("Unregister a", delegate_.GetAndClearCommands()); 297 EXPECT_EQ("Unregister a", delegate_.GetAndClearCommands());
275 manager_.Register(accelerator_a, AcceleratorManager::kNormalPriority, 298 manager_.Register(accelerators, AcceleratorManager::kNormalPriority, &target);
276 &target);
277 EXPECT_EQ("Register a", delegate_.GetAndClearCommands()); 299 EXPECT_EQ("Register a", delegate_.GetAndClearCommands());
278 } 300 }
279 301
280 } // namespace test 302 } // namespace test
281 } // namespace ui 303 } // namespace ui
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698