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

Side by Side Diff: chrome/browser/ui/views/menu_item_view_test.cc

Issue 168033003: Pass in correct parameter to MenuController::SelectByChar() on Linux Aura (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Created 6 years, 10 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 | Annotate | Revision Log
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 "base/callback.h"
6 #include "base/strings/utf_string_conversions.h" 5 #include "base/strings/utf_string_conversions.h"
7 #include "chrome/test/base/interactive_test_utils.h" 6 #include "chrome/browser/ui/views/menu_test_base.h"
8 #include "chrome/test/base/ui_test_utils.h"
9 #include "chrome/test/base/view_event_test_base.h"
10 #include "ui/base/test/ui_controls.h"
11 #include "ui/views/controls/button/menu_button.h"
12 #include "ui/views/controls/button/menu_button_listener.h"
13 #include "ui/views/controls/menu/menu_controller.h"
14 #include "ui/views/controls/menu/menu_item_view.h" 7 #include "ui/views/controls/menu/menu_item_view.h"
15 #include "ui/views/controls/menu/menu_runner.h"
16 #include "ui/views/controls/menu/submenu_view.h" 8 #include "ui/views/controls/menu/submenu_view.h"
17 #include "ui/views/widget/root_view.h"
18 #include "ui/views/widget/widget.h"
19 9
20 using base::ASCIIToUTF16; 10 using base::ASCIIToUTF16;
21 11
22 // This is a convenience base class for all tests to provide some
23 // common functionality. It sets up a MenuButton and a MenuItemView
24 // and clicks the MenuButton.
25 //
26 // Subclasses should implement:
27 // BuildMenu() populate the menu
28 // DoTestOnMessageLoop() initiate the test
29 //
30 // Subclasses can call:
31 // Click() to post a mouse click on a View
32 //
33 // Although it should be possible to post a menu multiple times,
34 // MenuItemView prevents repeated activation of a menu by clicks too
35 // close in time.
36 class MenuItemViewTestBase : public ViewEventTestBase,
37 public views::MenuButtonListener,
38 public views::MenuDelegate {
39 public:
40 MenuItemViewTestBase()
41 : ViewEventTestBase(),
42 button_(NULL),
43 menu_(NULL) {
44 }
45
46 virtual ~MenuItemViewTestBase() {
47 }
48
49 // ViewEventTestBase implementation.
50
51 virtual void SetUp() OVERRIDE {
52 button_ = new views::MenuButton(
53 NULL, ASCIIToUTF16("Menu Test"), this, true);
54 menu_ = new views::MenuItemView(this);
55 BuildMenu(menu_);
56 menu_runner_.reset(new views::MenuRunner(menu_));
57
58 ViewEventTestBase::SetUp();
59 }
60
61 virtual void TearDown() OVERRIDE {
62 menu_runner_.reset(NULL);
63 menu_ = NULL;
64 ViewEventTestBase::TearDown();
65 }
66
67 virtual views::View* CreateContentsView() OVERRIDE {
68 return button_;
69 }
70
71 virtual gfx::Size GetPreferredSize() OVERRIDE {
72 return button_->GetPreferredSize();
73 }
74
75 // views::MenuButtonListener implementation.
76 virtual void OnMenuButtonClicked(views::View* source,
77 const gfx::Point& point) OVERRIDE {
78 gfx::Point screen_location;
79 views::View::ConvertPointToScreen(source, &screen_location);
80 gfx::Rect bounds(screen_location, source->size());
81 ignore_result(menu_runner_->RunMenuAt(
82 source->GetWidget(),
83 button_,
84 bounds,
85 views::MenuItemView::TOPLEFT,
86 ui::MENU_SOURCE_NONE,
87 views::MenuRunner::HAS_MNEMONICS));
88 }
89
90 protected:
91 // Generate a mouse click on the specified view and post a new task.
92 virtual void Click(views::View* view, const base::Closure& next) {
93 ui_test_utils::MoveMouseToCenterAndPress(
94 view,
95 ui_controls::LEFT,
96 ui_controls::DOWN | ui_controls::UP,
97 next);
98 }
99
100 virtual void BuildMenu(views::MenuItemView* menu) {
101 }
102
103 views::MenuButton* button_;
104 views::MenuItemView* menu_;
105 scoped_ptr<views::MenuRunner> menu_runner_;
106 };
107
108 // Simple test for clicking a menu item. This template class clicks on an 12 // Simple test for clicking a menu item. This template class clicks on an
109 // item and checks that the returned id matches. The index of the item 13 // item and checks that the returned id matches. The index of the item
110 // is the template argument. 14 // is the template argument.
111 template<int INDEX> 15 template<int INDEX>
112 class MenuItemViewTestBasic : public MenuItemViewTestBase { 16 class MenuItemViewTestBasic : public MenuTestBase {
113 public: 17 public:
114 MenuItemViewTestBasic() : 18 MenuItemViewTestBasic() {
115 last_command_(0) {
116 } 19 }
117 20
118 virtual ~MenuItemViewTestBasic() { 21 virtual ~MenuItemViewTestBasic() {
119 } 22 }
120 23
121 // views::MenuDelegate implementation 24 // MenuTestBase implementation
122 virtual void ExecuteCommand(int id) OVERRIDE {
123 last_command_ = id;
124 }
125
126 // MenuItemViewTestBase implementation
127 virtual void BuildMenu(views::MenuItemView* menu) OVERRIDE { 25 virtual void BuildMenu(views::MenuItemView* menu) OVERRIDE {
128 menu->AppendMenuItemWithLabel(1, ASCIIToUTF16("item 1")); 26 menu->AppendMenuItemWithLabel(1, ASCIIToUTF16("item 1"));
129 menu->AppendMenuItemWithLabel(2, ASCIIToUTF16("item 2")); 27 menu->AppendMenuItemWithLabel(2, ASCIIToUTF16("item 2"));
130 menu->AppendSeparator(); 28 menu->AppendSeparator();
131 menu->AppendMenuItemWithLabel(3, ASCIIToUTF16("item 3")); 29 menu->AppendMenuItemWithLabel(3, ASCIIToUTF16("item 3"));
132 } 30 }
133 31
134 // ViewEventTestBase implementation
135 virtual void DoTestOnMessageLoop() OVERRIDE {
136 Click(button_, CreateEventTask(this, &MenuItemViewTestBasic::Step1));
137 }
138
139 // Click on item INDEX. 32 // Click on item INDEX.
140 void Step1() { 33 virtual void DoTestWithMenuOpen() OVERRIDE {
141 ASSERT_TRUE(menu_); 34 views::SubmenuView* submenu = menu()->GetSubmenu();
142
143 views::SubmenuView* submenu = menu_->GetSubmenu();
144 ASSERT_TRUE(submenu); 35 ASSERT_TRUE(submenu);
145 ASSERT_TRUE(submenu->IsShowing()); 36 ASSERT_TRUE(submenu->IsShowing());
146 ASSERT_EQ(3, submenu->GetMenuItemCount()); 37 ASSERT_EQ(3, submenu->GetMenuItemCount());
147 38
148 // click an item and pass control to the next step 39 // click an item and pass control to the next step
149 views::MenuItemView* item = submenu->GetMenuItemAt(INDEX); 40 views::MenuItemView* item = submenu->GetMenuItemAt(INDEX);
150 ASSERT_TRUE(item); 41 ASSERT_TRUE(item);
151 Click(item, CreateEventTask(this, &MenuItemViewTestBasic::Step2)); 42 Click(item, CreateEventTask(this, &MenuItemViewTestBasic::Step2));
152 } 43 }
153 44
154 // Check the clicked item and complete the test. 45 // Check the clicked item and complete the test.
155 void Step2() { 46 void Step2() {
156 ASSERT_FALSE(menu_->GetSubmenu()->IsShowing()); 47 ASSERT_FALSE(menu()->GetSubmenu()->IsShowing());
157 ASSERT_EQ(INDEX + 1,last_command_); 48 ASSERT_EQ(INDEX + 1, last_command());
158 Done(); 49 Done();
159 } 50 }
160 51
161 private: 52 private:
162 int last_command_; 53 DISALLOW_COPY_AND_ASSIGN(MenuItemViewTestBasic);
163 }; 54 };
164 55
165 // Click each item of a 3-item menu (with separator). 56 // Click each item of a 3-item menu (with separator).
166 typedef MenuItemViewTestBasic<0> MenuItemViewTestBasic0; 57 typedef MenuItemViewTestBasic<0> MenuItemViewTestBasic0;
167 typedef MenuItemViewTestBasic<1> MenuItemViewTestBasic1; 58 typedef MenuItemViewTestBasic<1> MenuItemViewTestBasic1;
168 typedef MenuItemViewTestBasic<2> MenuItemViewTestBasic2; 59 typedef MenuItemViewTestBasic<2> MenuItemViewTestBasic2;
169 VIEW_TEST(MenuItemViewTestBasic0, SelectItem0) 60 VIEW_TEST(MenuItemViewTestBasic0, SelectItem0)
170 VIEW_TEST(MenuItemViewTestBasic1, SelectItem1) 61 VIEW_TEST(MenuItemViewTestBasic1, SelectItem1)
171 VIEW_TEST(MenuItemViewTestBasic2, SelectItem2) 62 VIEW_TEST(MenuItemViewTestBasic2, SelectItem2)
172 63
173 // Test class for inserting a menu item while the menu is open. 64 // Test class for inserting a menu item while the menu is open.
174 template<int INSERT_INDEX, int SELECT_INDEX> 65 template<int INSERT_INDEX, int SELECT_INDEX>
175 class MenuItemViewTestInsert : public MenuItemViewTestBase { 66 class MenuItemViewTestInsert : public MenuTestBase {
176 public: 67 public:
177 MenuItemViewTestInsert() : 68 MenuItemViewTestInsert() : inserted_item_(NULL) {
178 last_command_(0),
179 inserted_item_(NULL) {
180 } 69 }
181 70
182 virtual ~MenuItemViewTestInsert() { 71 virtual ~MenuItemViewTestInsert() {
183 } 72 }
184 73
185 // views::MenuDelegate implementation 74 // MenuTestBase implementation
186 virtual void ExecuteCommand(int id) OVERRIDE {
187 last_command_ = id;
188 }
189
190 // MenuItemViewTestBase implementation
191 virtual void BuildMenu(views::MenuItemView* menu) OVERRIDE { 75 virtual void BuildMenu(views::MenuItemView* menu) OVERRIDE {
192 menu->AppendMenuItemWithLabel(1, ASCIIToUTF16("item 1")); 76 menu->AppendMenuItemWithLabel(1, ASCIIToUTF16("item 1"));
193 menu->AppendMenuItemWithLabel(2, ASCIIToUTF16("item 2")); 77 menu->AppendMenuItemWithLabel(2, ASCIIToUTF16("item 2"));
194 } 78 }
195 79
196 // ViewEventTestBase implementation
197 virtual void DoTestOnMessageLoop() OVERRIDE {
198 Click(button_, CreateEventTask(this, &MenuItemViewTestInsert::Step1));
199 }
200
201 // Insert item at INSERT_INDEX and click item at SELECT_INDEX. 80 // Insert item at INSERT_INDEX and click item at SELECT_INDEX.
202 void Step1() { 81 virtual void DoTestWithMenuOpen() OVERRIDE {
203 ASSERT_TRUE(menu_); 82 views::SubmenuView* submenu = menu()->GetSubmenu();
204
205 views::SubmenuView* submenu = menu_->GetSubmenu();
206 ASSERT_TRUE(submenu); 83 ASSERT_TRUE(submenu);
207 ASSERT_TRUE(submenu->IsShowing()); 84 ASSERT_TRUE(submenu->IsShowing());
208 ASSERT_EQ(2, submenu->GetMenuItemCount()); 85 ASSERT_EQ(2, submenu->GetMenuItemCount());
209 86
210 inserted_item_ = menu_->AddMenuItemAt(INSERT_INDEX, 87 inserted_item_ = menu()->AddMenuItemAt(INSERT_INDEX,
211 1000, 88 1000,
212 ASCIIToUTF16("inserted item"), 89 ASCIIToUTF16("inserted item"),
213 base::string16(), 90 base::string16(),
214 base::string16(), 91 base::string16(),
215 gfx::ImageSkia(), 92 gfx::ImageSkia(),
216 views::MenuItemView::NORMAL, 93 views::MenuItemView::NORMAL,
217 ui::NORMAL_SEPARATOR); 94 ui::NORMAL_SEPARATOR);
218 ASSERT_TRUE(inserted_item_); 95 ASSERT_TRUE(inserted_item_);
219 menu_->ChildrenChanged(); 96 menu()->ChildrenChanged();
220 97
221 // click an item and pass control to the next step 98 // click an item and pass control to the next step
222 views::MenuItemView* item = submenu->GetMenuItemAt(SELECT_INDEX); 99 views::MenuItemView* item = submenu->GetMenuItemAt(SELECT_INDEX);
223 ASSERT_TRUE(item); 100 ASSERT_TRUE(item);
224 Click(item, CreateEventTask(this, &MenuItemViewTestInsert::Step2)); 101 Click(item, CreateEventTask(this, &MenuItemViewTestInsert::Step2));
225 } 102 }
226 103
227 // Check clicked item and complete test. 104 // Check clicked item and complete test.
228 void Step2() { 105 void Step2() {
229 ASSERT_TRUE(menu_); 106 views::SubmenuView* submenu = menu()->GetSubmenu();
230
231 views::SubmenuView* submenu = menu_->GetSubmenu();
232 ASSERT_TRUE(submenu); 107 ASSERT_TRUE(submenu);
233 ASSERT_FALSE(submenu->IsShowing()); 108 ASSERT_FALSE(submenu->IsShowing());
234 ASSERT_EQ(3, submenu->GetMenuItemCount()); 109 ASSERT_EQ(3, submenu->GetMenuItemCount());
235 110
236 if (SELECT_INDEX == INSERT_INDEX) 111 if (SELECT_INDEX == INSERT_INDEX)
237 ASSERT_EQ(1000, last_command_); 112 ASSERT_EQ(1000, last_command());
238 else if (SELECT_INDEX < INSERT_INDEX) 113 else if (SELECT_INDEX < INSERT_INDEX)
239 ASSERT_EQ(SELECT_INDEX + 1, last_command_); 114 ASSERT_EQ(SELECT_INDEX + 1, last_command());
240 else 115 else
241 ASSERT_EQ(SELECT_INDEX, last_command_); 116 ASSERT_EQ(SELECT_INDEX, last_command());
242 117
243 Done(); 118 Done();
244 } 119 }
245 120
246 private: 121 private:
247 int last_command_;
248 views::MenuItemView* inserted_item_; 122 views::MenuItemView* inserted_item_;
123
124 DISALLOW_COPY_AND_ASSIGN(MenuItemViewTestInsert);
249 }; 125 };
250 126
251 // MenuItemViewTestInsertXY inserts an item at index X and selects the 127 // MenuItemViewTestInsertXY inserts an item at index X and selects the
252 // item at index Y (after the insertion). The tests here cover 128 // item at index Y (after the insertion). The tests here cover
253 // inserting at the beginning, middle, and end, crossbarred with 129 // inserting at the beginning, middle, and end, crossbarred with
254 // selecting the first and last item. 130 // selecting the first and last item.
255 typedef MenuItemViewTestInsert<0,0> MenuItemViewTestInsert00; 131 typedef MenuItemViewTestInsert<0,0> MenuItemViewTestInsert00;
256 typedef MenuItemViewTestInsert<0,2> MenuItemViewTestInsert02; 132 typedef MenuItemViewTestInsert<0,2> MenuItemViewTestInsert02;
257 typedef MenuItemViewTestInsert<1,0> MenuItemViewTestInsert10; 133 typedef MenuItemViewTestInsert<1,0> MenuItemViewTestInsert10;
258 typedef MenuItemViewTestInsert<1,2> MenuItemViewTestInsert12; 134 typedef MenuItemViewTestInsert<1,2> MenuItemViewTestInsert12;
259 typedef MenuItemViewTestInsert<2,0> MenuItemViewTestInsert20; 135 typedef MenuItemViewTestInsert<2,0> MenuItemViewTestInsert20;
260 typedef MenuItemViewTestInsert<2,2> MenuItemViewTestInsert22; 136 typedef MenuItemViewTestInsert<2,2> MenuItemViewTestInsert22;
261 VIEW_TEST(MenuItemViewTestInsert00, InsertItem00) 137 VIEW_TEST(MenuItemViewTestInsert00, InsertItem00)
262 VIEW_TEST(MenuItemViewTestInsert02, InsertItem02) 138 VIEW_TEST(MenuItemViewTestInsert02, InsertItem02)
263 VIEW_TEST(MenuItemViewTestInsert10, InsertItem10) 139 VIEW_TEST(MenuItemViewTestInsert10, InsertItem10)
264 VIEW_TEST(MenuItemViewTestInsert12, InsertItem12) 140 VIEW_TEST(MenuItemViewTestInsert12, InsertItem12)
265 VIEW_TEST(MenuItemViewTestInsert20, InsertItem20) 141 VIEW_TEST(MenuItemViewTestInsert20, InsertItem20)
266 VIEW_TEST(MenuItemViewTestInsert22, InsertItem22) 142 VIEW_TEST(MenuItemViewTestInsert22, InsertItem22)
267 143
268 // Test class for inserting a menu item while a submenu is open. 144 // Test class for inserting a menu item while a submenu is open.
269 template<int INSERT_INDEX> 145 template<int INSERT_INDEX>
270 class MenuItemViewTestInsertWithSubmenu : public MenuItemViewTestBase { 146 class MenuItemViewTestInsertWithSubmenu : public MenuTestBase {
271 public: 147 public:
272 MenuItemViewTestInsertWithSubmenu() : 148 MenuItemViewTestInsertWithSubmenu() :
273 last_command_(0),
274 submenu_(NULL), 149 submenu_(NULL),
275 inserted_item_(NULL) { 150 inserted_item_(NULL) {
276 } 151 }
277 152
278 virtual ~MenuItemViewTestInsertWithSubmenu() { 153 virtual ~MenuItemViewTestInsertWithSubmenu() {
279 } 154 }
280 155
281 // views::MenuDelegate implementation 156 // MenuTestBase implementation
282 virtual void ExecuteCommand(int id) OVERRIDE {
283 last_command_ = id;
284 }
285
286 // MenuItemViewTestBase implementation
287 virtual void BuildMenu(views::MenuItemView* menu) OVERRIDE { 157 virtual void BuildMenu(views::MenuItemView* menu) OVERRIDE {
288 submenu_ = menu->AppendSubMenu(1, ASCIIToUTF16("My Submenu")); 158 submenu_ = menu->AppendSubMenu(1, ASCIIToUTF16("My Submenu"));
289 submenu_->AppendMenuItemWithLabel(101, ASCIIToUTF16("submenu item 1")); 159 submenu_->AppendMenuItemWithLabel(101, ASCIIToUTF16("submenu item 1"));
290 submenu_->AppendMenuItemWithLabel(101, ASCIIToUTF16("submenu item 2")); 160 submenu_->AppendMenuItemWithLabel(101, ASCIIToUTF16("submenu item 2"));
291 menu->AppendMenuItemWithLabel(2, ASCIIToUTF16("item 2")); 161 menu->AppendMenuItemWithLabel(2, ASCIIToUTF16("item 2"));
292 } 162 }
293 163
294 // ViewEventTestBase implementation
295 virtual void DoTestOnMessageLoop() OVERRIDE {
296 Click(button_,
297 CreateEventTask(this, &MenuItemViewTestInsertWithSubmenu::Step1));
298 }
299
300 // Post submenu. 164 // Post submenu.
301 void Step1() { 165 virtual void DoTestWithMenuOpen() OVERRIDE {
302 Click(submenu_, 166 Click(submenu_,
303 CreateEventTask(this, &MenuItemViewTestInsertWithSubmenu::Step2)); 167 CreateEventTask(this, &MenuItemViewTestInsertWithSubmenu::Step2));
304 } 168 }
305 169
306 // Insert item at INSERT_INDEX. 170 // Insert item at INSERT_INDEX.
307 void Step2() { 171 void Step2() {
308 inserted_item_ = menu_->AddMenuItemAt(INSERT_INDEX, 172 inserted_item_ = menu()->AddMenuItemAt(INSERT_INDEX,
309 1000, 173 1000,
310 ASCIIToUTF16("inserted item"), 174 ASCIIToUTF16("inserted item"),
311 base::string16(), 175 base::string16(),
312 base::string16(), 176 base::string16(),
313 gfx::ImageSkia(), 177 gfx::ImageSkia(),
314 views::MenuItemView::NORMAL, 178 views::MenuItemView::NORMAL,
315 ui::NORMAL_SEPARATOR); 179 ui::NORMAL_SEPARATOR);
316 ASSERT_TRUE(inserted_item_); 180 ASSERT_TRUE(inserted_item_);
317 menu_->ChildrenChanged(); 181 menu()->ChildrenChanged();
318 182
319 Click(inserted_item_, 183 Click(inserted_item_,
320 CreateEventTask(this, &MenuItemViewTestInsertWithSubmenu::Step3)); 184 CreateEventTask(this, &MenuItemViewTestInsertWithSubmenu::Step3));
321 } 185 }
322 186
323 void Step3() { 187 void Step3() {
324 Done(); 188 Done();
325 } 189 }
326 190
327 private: 191 private:
328 int last_command_;
329 views::MenuItemView* submenu_; 192 views::MenuItemView* submenu_;
330 views::MenuItemView* inserted_item_; 193 views::MenuItemView* inserted_item_;
194
195 DISALLOW_COPY_AND_ASSIGN(MenuItemViewTestInsertWithSubmenu);
331 }; 196 };
332 197
333 // MenuItemViewTestInsertWithSubmenuX posts a menu and its submenu, 198 // MenuItemViewTestInsertWithSubmenuX posts a menu and its submenu,
334 // then inserts an item in the top-level menu at X. 199 // then inserts an item in the top-level menu at X.
335 typedef MenuItemViewTestInsertWithSubmenu<0> MenuItemViewTestInsertWithSubmenu0; 200 typedef MenuItemViewTestInsertWithSubmenu<0> MenuItemViewTestInsertWithSubmenu0;
336 typedef MenuItemViewTestInsertWithSubmenu<1> MenuItemViewTestInsertWithSubmenu1; 201 typedef MenuItemViewTestInsertWithSubmenu<1> MenuItemViewTestInsertWithSubmenu1;
337 VIEW_TEST(MenuItemViewTestInsertWithSubmenu0, InsertItemWithSubmenu0) 202 VIEW_TEST(MenuItemViewTestInsertWithSubmenu0, InsertItemWithSubmenu0)
338 VIEW_TEST(MenuItemViewTestInsertWithSubmenu1, InsertItemWithSubmenu1) 203 VIEW_TEST(MenuItemViewTestInsertWithSubmenu1, InsertItemWithSubmenu1)
339 204
340 // Test class for removing a menu item while the menu is open. 205 // Test class for removing a menu item while the menu is open.
341 template<int REMOVE_INDEX, int SELECT_INDEX> 206 template<int REMOVE_INDEX, int SELECT_INDEX>
342 class MenuItemViewTestRemove : public MenuItemViewTestBase { 207 class MenuItemViewTestRemove : public MenuTestBase {
343 public: 208 public:
344 MenuItemViewTestRemove() 209 MenuItemViewTestRemove() {
345 : last_command_(0) {
346 } 210 }
347 211
348 virtual ~MenuItemViewTestRemove() { 212 virtual ~MenuItemViewTestRemove() {
349 } 213 }
350 214
351 // views::MenuDelegate implementation 215 // MenuTestBase implementation
352 virtual void ExecuteCommand(int id) OVERRIDE {
353 last_command_ = id;
354 }
355
356 // MenuItemViewTestBase implementation
357 virtual void BuildMenu(views::MenuItemView* menu) OVERRIDE { 216 virtual void BuildMenu(views::MenuItemView* menu) OVERRIDE {
358 menu->AppendMenuItemWithLabel(1, ASCIIToUTF16("item 1")); 217 menu->AppendMenuItemWithLabel(1, ASCIIToUTF16("item 1"));
359 menu->AppendMenuItemWithLabel(2, ASCIIToUTF16("item 2")); 218 menu->AppendMenuItemWithLabel(2, ASCIIToUTF16("item 2"));
360 menu->AppendMenuItemWithLabel(3, ASCIIToUTF16("item 3")); 219 menu->AppendMenuItemWithLabel(3, ASCIIToUTF16("item 3"));
361 } 220 }
362 221
363 // ViewEventTestBase implementation
364 virtual void DoTestOnMessageLoop() OVERRIDE {
365 Click(button_, CreateEventTask(this, &MenuItemViewTestRemove::Step1));
366 }
367
368 // Remove item at REMOVE_INDEX and click item at SELECT_INDEX. 222 // Remove item at REMOVE_INDEX and click item at SELECT_INDEX.
369 void Step1() { 223 virtual void DoTestWithMenuOpen() OVERRIDE {
370 ASSERT_TRUE(menu_); 224 views::SubmenuView* submenu = menu()->GetSubmenu();
371
372 views::SubmenuView* submenu = menu_->GetSubmenu();
373 ASSERT_TRUE(submenu); 225 ASSERT_TRUE(submenu);
374 ASSERT_TRUE(submenu->IsShowing()); 226 ASSERT_TRUE(submenu->IsShowing());
375 ASSERT_EQ(3, submenu->GetMenuItemCount()); 227 ASSERT_EQ(3, submenu->GetMenuItemCount());
376 228
377 // remove 229 // remove
378 menu_->RemoveMenuItemAt(REMOVE_INDEX); 230 menu()->RemoveMenuItemAt(REMOVE_INDEX);
379 menu_->ChildrenChanged(); 231 menu()->ChildrenChanged();
380 232
381 // click 233 // click
382 views::MenuItemView* item = submenu->GetMenuItemAt(SELECT_INDEX); 234 views::MenuItemView* item = submenu->GetMenuItemAt(SELECT_INDEX);
383 ASSERT_TRUE(item); 235 ASSERT_TRUE(item);
384 Click(item, CreateEventTask(this, &MenuItemViewTestRemove::Step2)); 236 Click(item, CreateEventTask(this, &MenuItemViewTestRemove::Step2));
385 } 237 }
386 238
387 // Check clicked item and complete test. 239 // Check clicked item and complete test.
388 void Step2() { 240 void Step2() {
389 ASSERT_TRUE(menu_); 241 views::SubmenuView* submenu = menu()->GetSubmenu();
390
391 views::SubmenuView* submenu = menu_->GetSubmenu();
392 ASSERT_TRUE(submenu); 242 ASSERT_TRUE(submenu);
393 ASSERT_FALSE(submenu->IsShowing()); 243 ASSERT_FALSE(submenu->IsShowing());
394 ASSERT_EQ(2, submenu->GetMenuItemCount()); 244 ASSERT_EQ(2, submenu->GetMenuItemCount());
395 245
396 if (SELECT_INDEX < REMOVE_INDEX) 246 if (SELECT_INDEX < REMOVE_INDEX)
397 ASSERT_EQ(SELECT_INDEX + 1, last_command_); 247 ASSERT_EQ(SELECT_INDEX + 1, last_command());
398 else 248 else
399 ASSERT_EQ(SELECT_INDEX + 2, last_command_); 249 ASSERT_EQ(SELECT_INDEX + 2, last_command());
400 250
401 Done(); 251 Done();
402 } 252 }
403 253
404 private: 254 private:
405 int last_command_; 255 DISALLOW_COPY_AND_ASSIGN(MenuItemViewTestRemove);
406 }; 256 };
407 257
408 typedef MenuItemViewTestRemove<0,0> MenuItemViewTestRemove00; 258 typedef MenuItemViewTestRemove<0,0> MenuItemViewTestRemove00;
409 typedef MenuItemViewTestRemove<0,1> MenuItemViewTestRemove01; 259 typedef MenuItemViewTestRemove<0,1> MenuItemViewTestRemove01;
410 typedef MenuItemViewTestRemove<1,0> MenuItemViewTestRemove10; 260 typedef MenuItemViewTestRemove<1,0> MenuItemViewTestRemove10;
411 typedef MenuItemViewTestRemove<1,1> MenuItemViewTestRemove11; 261 typedef MenuItemViewTestRemove<1,1> MenuItemViewTestRemove11;
412 typedef MenuItemViewTestRemove<2,0> MenuItemViewTestRemove20; 262 typedef MenuItemViewTestRemove<2,0> MenuItemViewTestRemove20;
413 typedef MenuItemViewTestRemove<2,1> MenuItemViewTestRemove21; 263 typedef MenuItemViewTestRemove<2,1> MenuItemViewTestRemove21;
414 VIEW_TEST(MenuItemViewTestRemove00, RemoveItem00) 264 VIEW_TEST(MenuItemViewTestRemove00, RemoveItem00)
415 VIEW_TEST(MenuItemViewTestRemove01, RemoveItem01) 265 VIEW_TEST(MenuItemViewTestRemove01, RemoveItem01)
416 VIEW_TEST(MenuItemViewTestRemove10, RemoveItem10) 266 VIEW_TEST(MenuItemViewTestRemove10, RemoveItem10)
417 VIEW_TEST(MenuItemViewTestRemove11, RemoveItem11) 267 VIEW_TEST(MenuItemViewTestRemove11, RemoveItem11)
418 VIEW_TEST(MenuItemViewTestRemove20, RemoveItem20) 268 VIEW_TEST(MenuItemViewTestRemove20, RemoveItem20)
419 VIEW_TEST(MenuItemViewTestRemove21, RemoveItem21) 269 VIEW_TEST(MenuItemViewTestRemove21, RemoveItem21)
420 270
421 // Test class for removing a menu item while a submenu is open. 271 // Test class for removing a menu item while a submenu is open.
422 template<int REMOVE_INDEX> 272 template<int REMOVE_INDEX>
423 class MenuItemViewTestRemoveWithSubmenu : public MenuItemViewTestBase { 273 class MenuItemViewTestRemoveWithSubmenu : public MenuTestBase {
424 public: 274 public:
425 MenuItemViewTestRemoveWithSubmenu() : 275 MenuItemViewTestRemoveWithSubmenu() : submenu_(NULL) {
426 last_command_(0),
427 submenu_(NULL) {
428 } 276 }
429 277
430 virtual ~MenuItemViewTestRemoveWithSubmenu() { 278 virtual ~MenuItemViewTestRemoveWithSubmenu() {
431 } 279 }
432 280
433 // views::MenuDelegate implementation 281 // MenuTestBase implementation
434 virtual void ExecuteCommand(int id) OVERRIDE {
435 last_command_ = id;
436 }
437
438 // MenuItemViewTestBase implementation
439 virtual void BuildMenu(views::MenuItemView* menu) OVERRIDE { 282 virtual void BuildMenu(views::MenuItemView* menu) OVERRIDE {
440 menu->AppendMenuItemWithLabel(1, ASCIIToUTF16("item 1")); 283 menu->AppendMenuItemWithLabel(1, ASCIIToUTF16("item 1"));
441 submenu_ = menu->AppendSubMenu(2, ASCIIToUTF16("My Submenu")); 284 submenu_ = menu->AppendSubMenu(2, ASCIIToUTF16("My Submenu"));
442 submenu_->AppendMenuItemWithLabel(101, ASCIIToUTF16("submenu item 1")); 285 submenu_->AppendMenuItemWithLabel(101, ASCIIToUTF16("submenu item 1"));
443 submenu_->AppendMenuItemWithLabel(102, ASCIIToUTF16("submenu item 2")); 286 submenu_->AppendMenuItemWithLabel(102, ASCIIToUTF16("submenu item 2"));
444 } 287 }
445 288
446 // ViewEventTestBase implementation
447 virtual void DoTestOnMessageLoop() OVERRIDE {
448 Click(button_,
449 CreateEventTask(this, &MenuItemViewTestRemoveWithSubmenu::Step1));
450 }
451
452 // Post submenu. 289 // Post submenu.
453 void Step1() { 290 virtual void DoTestWithMenuOpen() OVERRIDE {
454 ASSERT_TRUE(menu_); 291 views::SubmenuView* submenu = menu()->GetSubmenu();
455
456 views::SubmenuView* submenu = menu_->GetSubmenu();
457 ASSERT_TRUE(submenu); 292 ASSERT_TRUE(submenu);
458 ASSERT_TRUE(submenu->IsShowing()); 293 ASSERT_TRUE(submenu->IsShowing());
459 294
460 Click(submenu_, 295 Click(submenu_,
461 CreateEventTask(this, &MenuItemViewTestRemoveWithSubmenu::Step2)); 296 CreateEventTask(this, &MenuItemViewTestRemoveWithSubmenu::Step2));
462 } 297 }
463 298
464 // Remove item at REMOVE_INDEX and select it to exit the menu loop. 299 // Remove item at REMOVE_INDEX and press escape to exit the menu loop.
465 void Step2() { 300 void Step2() {
466 ASSERT_TRUE(menu_); 301 views::SubmenuView* submenu = menu()->GetSubmenu();
467
468 views::SubmenuView* submenu = menu_->GetSubmenu();
469 ASSERT_TRUE(submenu); 302 ASSERT_TRUE(submenu);
470 ASSERT_TRUE(submenu->IsShowing()); 303 ASSERT_TRUE(submenu->IsShowing());
471 ASSERT_EQ(2, submenu->GetMenuItemCount()); 304 ASSERT_EQ(2, submenu->GetMenuItemCount());
472 305
473 // remove 306 // remove
474 menu_->RemoveMenuItemAt(REMOVE_INDEX); 307 menu()->RemoveMenuItemAt(REMOVE_INDEX);
475 menu_->ChildrenChanged(); 308 menu()->ChildrenChanged();
476 309
477 // click 310 // click
478 Click(button_, 311 KeyPress(ui::VKEY_ESCAPE,
479 CreateEventTask(this, &MenuItemViewTestRemoveWithSubmenu::Step3)); 312 CreateEventTask(this, &MenuItemViewTestRemoveWithSubmenu::Step3));
480 } 313 }
481 314
482 void Step3() { 315 void Step3() {
483 ASSERT_TRUE(menu_); 316 views::SubmenuView* submenu = menu()->GetSubmenu();
484
485 views::SubmenuView* submenu = menu_->GetSubmenu();
486 ASSERT_TRUE(submenu); 317 ASSERT_TRUE(submenu);
487 ASSERT_FALSE(submenu->IsShowing()); 318 ASSERT_FALSE(submenu->IsShowing());
488 ASSERT_EQ(1, submenu->GetMenuItemCount()); 319 ASSERT_EQ(1, submenu->GetMenuItemCount());
489 320
490 Done(); 321 Done();
491 } 322 }
492 323
493 private: 324 private:
494 int last_command_;
495 views::MenuItemView* submenu_; 325 views::MenuItemView* submenu_;
326
327 DISALLOW_COPY_AND_ASSIGN(MenuItemViewTestRemoveWithSubmenu);
496 }; 328 };
497 329
498 typedef MenuItemViewTestRemoveWithSubmenu<0> MenuItemViewTestRemoveWithSubmenu0; 330 typedef MenuItemViewTestRemoveWithSubmenu<0> MenuItemViewTestRemoveWithSubmenu0;
499 typedef MenuItemViewTestRemoveWithSubmenu<1> MenuItemViewTestRemoveWithSubmenu1; 331 typedef MenuItemViewTestRemoveWithSubmenu<1> MenuItemViewTestRemoveWithSubmenu1;
500 VIEW_TEST(MenuItemViewTestRemoveWithSubmenu0, RemoveItemWithSubmenu0) 332 VIEW_TEST(MenuItemViewTestRemoveWithSubmenu0, RemoveItemWithSubmenu0)
501 VIEW_TEST(MenuItemViewTestRemoveWithSubmenu1, RemoveItemWithSubmenu1) 333 VIEW_TEST(MenuItemViewTestRemoveWithSubmenu1, RemoveItemWithSubmenu1)
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698