OLD | NEW |
1 // Copyright (c) 2011 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2011 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 "chrome/browser/automation/ui_controls.h" | 5 #include "chrome/browser/automation/ui_controls.h" |
6 #include "chrome/test/base/view_event_test_base.h" | 6 #include "chrome/test/base/view_event_test_base.h" |
7 #include "views/controls/button/menu_button.h" | 7 #include "views/controls/button/menu_button.h" |
8 #include "views/controls/menu/menu_controller.h" | 8 #include "views/controls/menu/menu_controller.h" |
9 #include "views/controls/menu/menu_item_view.h" | 9 #include "views/controls/menu/menu_item_view.h" |
| 10 #include "views/controls/menu/menu_runner.h" |
10 #include "views/controls/menu/submenu_view.h" | 11 #include "views/controls/menu/submenu_view.h" |
11 #include "views/controls/menu/view_menu_delegate.h" | 12 #include "views/controls/menu/view_menu_delegate.h" |
12 #include "views/widget/root_view.h" | 13 #include "views/widget/root_view.h" |
13 #include "views/widget/widget.h" | 14 #include "views/widget/widget.h" |
14 | 15 |
15 // This is a convenience base class for all tests to provide some | 16 // This is a convenience base class for all tests to provide some |
16 // common functionality. It sets up a MenuButton and a MenuItemView | 17 // common functionality. It sets up a MenuButton and a MenuItemView |
17 // and clicks the MenuButton. | 18 // and clicks the MenuButton. |
18 // | 19 // |
19 // Subclasses should implement: | 20 // Subclasses should implement: |
20 // BuildMenu() populate the menu | 21 // BuildMenu() populate the menu |
21 // DoTestOnMessageLoop() initiate the test | 22 // DoTestOnMessageLoop() initiate the test |
22 // | 23 // |
23 // Subclasses can call: | 24 // Subclasses can call: |
24 // Click() to post a mouse click on a View | 25 // Click() to post a mouse click on a View |
25 // | 26 // |
26 // Although it should be possible to post a menu multiple times, | 27 // Although it should be possible to post a menu multiple times, |
27 // MenuItemView prevents repeated activation of a menu by clicks too | 28 // MenuItemView prevents repeated activation of a menu by clicks too |
28 // close in time. | 29 // close in time. |
29 class MenuItemViewTestBase : public ViewEventTestBase, | 30 class MenuItemViewTestBase : public ViewEventTestBase, |
30 public views::ViewMenuDelegate, | 31 public views::ViewMenuDelegate, |
31 public views::MenuDelegate { | 32 public views::MenuDelegate { |
32 public: | 33 public: |
33 MenuItemViewTestBase() : | 34 MenuItemViewTestBase() |
34 ViewEventTestBase(), | 35 : ViewEventTestBase(), |
35 button_(NULL), | 36 button_(NULL), |
36 menu_(NULL) { | 37 menu_(NULL) { |
37 } | 38 } |
38 | 39 |
39 virtual ~MenuItemViewTestBase() { | 40 virtual ~MenuItemViewTestBase() { |
40 } | 41 } |
41 | 42 |
42 // ViewEventTestBase implementation. | 43 // ViewEventTestBase implementation. |
43 | 44 |
44 virtual void SetUp() OVERRIDE { | 45 virtual void SetUp() OVERRIDE { |
45 button_ = new views::MenuButton(NULL, L"Menu Test", this, true); | 46 button_ = new views::MenuButton(NULL, L"Menu Test", this, true); |
46 menu_.reset(new views::MenuItemView(this)); | 47 menu_ = new views::MenuItemView(this); |
47 BuildMenu(menu_.get()); | 48 BuildMenu(menu_); |
| 49 menu_runner_.reset(new views::MenuRunner(menu_)); |
48 | 50 |
49 ViewEventTestBase::SetUp(); | 51 ViewEventTestBase::SetUp(); |
50 } | 52 } |
51 | 53 |
52 virtual void TearDown() OVERRIDE { | 54 virtual void TearDown() OVERRIDE { |
53 menu_.reset(NULL); | 55 menu_runner_.reset(NULL); |
| 56 menu_ = NULL; |
54 ViewEventTestBase::TearDown(); | 57 ViewEventTestBase::TearDown(); |
55 } | 58 } |
56 | 59 |
57 virtual views::View* CreateContentsView() OVERRIDE { | 60 virtual views::View* CreateContentsView() OVERRIDE { |
58 return button_; | 61 return button_; |
59 } | 62 } |
60 | 63 |
61 virtual gfx::Size GetPreferredSize() OVERRIDE { | 64 virtual gfx::Size GetPreferredSize() OVERRIDE { |
62 return button_->GetPreferredSize(); | 65 return button_->GetPreferredSize(); |
63 } | 66 } |
64 | 67 |
65 // views::ViewMenuDelegate implementation. | 68 // views::ViewMenuDelegate implementation. |
66 virtual void RunMenu(views::View* source, const gfx::Point& pt) OVERRIDE { | 69 virtual void RunMenu(views::View* source, const gfx::Point& pt) OVERRIDE { |
67 gfx::Point screen_location; | 70 gfx::Point screen_location; |
68 views::View::ConvertPointToScreen(source, &screen_location); | 71 views::View::ConvertPointToScreen(source, &screen_location); |
69 gfx::Rect bounds(screen_location, source->size()); | 72 gfx::Rect bounds(screen_location, source->size()); |
70 menu_->RunMenuAt( | 73 ignore_result(menu_runner_->RunMenuAt( |
71 source->GetWidget(), | 74 source->GetWidget(), |
72 button_, | 75 button_, |
73 bounds, | 76 bounds, |
74 views::MenuItemView::TOPLEFT, | 77 views::MenuItemView::TOPLEFT, |
75 true); | 78 views::MenuRunner::HAS_MNEMONICS)); |
76 } | 79 } |
77 | 80 |
78 protected: | 81 protected: |
79 // Generate a mouse click on the specified view and post a new task. | 82 // Generate a mouse click on the specified view and post a new task. |
80 virtual void Click(views::View* view, Task* next) { | 83 virtual void Click(views::View* view, Task* next) { |
81 ui_controls::MoveMouseToCenterAndPress( | 84 ui_controls::MoveMouseToCenterAndPress( |
82 view, | 85 view, |
83 ui_controls::LEFT, | 86 ui_controls::LEFT, |
84 ui_controls::DOWN | ui_controls::UP, | 87 ui_controls::DOWN | ui_controls::UP, |
85 next); | 88 next); |
86 } | 89 } |
87 | 90 |
88 virtual void BuildMenu(views::MenuItemView* menu) { | 91 virtual void BuildMenu(views::MenuItemView* menu) { |
89 } | 92 } |
90 | 93 |
91 views::MenuButton* button_; | 94 views::MenuButton* button_; |
92 scoped_ptr<views::MenuItemView> menu_; | 95 views::MenuItemView* menu_; |
| 96 scoped_ptr<views::MenuRunner> menu_runner_; |
93 }; | 97 }; |
94 | 98 |
95 // Simple test for clicking a menu item. This template class clicks on an | 99 // Simple test for clicking a menu item. This template class clicks on an |
96 // item and checks that the returned id matches. The index of the item | 100 // item and checks that the returned id matches. The index of the item |
97 // is the template argument. | 101 // is the template argument. |
98 template<int INDEX> | 102 template<int INDEX> |
99 class MenuItemViewTestBasic : public MenuItemViewTestBase { | 103 class MenuItemViewTestBasic : public MenuItemViewTestBase { |
100 public: | 104 public: |
101 MenuItemViewTestBasic() : | 105 MenuItemViewTestBasic() : |
102 last_command_(0) { | 106 last_command_(0) { |
(...skipping 15 matching lines...) Expand all Loading... |
118 menu->AppendMenuItemWithLabel(3, L"item 3"); | 122 menu->AppendMenuItemWithLabel(3, L"item 3"); |
119 } | 123 } |
120 | 124 |
121 // ViewEventTestBase implementation | 125 // ViewEventTestBase implementation |
122 virtual void DoTestOnMessageLoop() OVERRIDE { | 126 virtual void DoTestOnMessageLoop() OVERRIDE { |
123 Click(button_, CreateEventTask(this, &MenuItemViewTestBasic::Step1)); | 127 Click(button_, CreateEventTask(this, &MenuItemViewTestBasic::Step1)); |
124 } | 128 } |
125 | 129 |
126 // Click on item INDEX. | 130 // Click on item INDEX. |
127 void Step1() { | 131 void Step1() { |
128 ASSERT_TRUE(menu_.get()); | 132 ASSERT_TRUE(menu_); |
129 | 133 |
130 views::SubmenuView* submenu = menu_->GetSubmenu(); | 134 views::SubmenuView* submenu = menu_->GetSubmenu(); |
131 ASSERT_TRUE(submenu); | 135 ASSERT_TRUE(submenu); |
132 ASSERT_TRUE(submenu->IsShowing()); | 136 ASSERT_TRUE(submenu->IsShowing()); |
133 ASSERT_EQ(3, submenu->GetMenuItemCount()); | 137 ASSERT_EQ(3, submenu->GetMenuItemCount()); |
134 | 138 |
135 // click an item and pass control to the next step | 139 // click an item and pass control to the next step |
136 views::MenuItemView* item = submenu->GetMenuItemAt(INDEX); | 140 views::MenuItemView* item = submenu->GetMenuItemAt(INDEX); |
137 ASSERT_TRUE(item); | 141 ASSERT_TRUE(item); |
138 Click(item, CreateEventTask(this, &MenuItemViewTestBasic::Step2)); | 142 Click(item, CreateEventTask(this, &MenuItemViewTestBasic::Step2)); |
(...skipping 41 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
180 menu->AppendMenuItemWithLabel(2, L"item 2"); | 184 menu->AppendMenuItemWithLabel(2, L"item 2"); |
181 } | 185 } |
182 | 186 |
183 // ViewEventTestBase implementation | 187 // ViewEventTestBase implementation |
184 virtual void DoTestOnMessageLoop() OVERRIDE { | 188 virtual void DoTestOnMessageLoop() OVERRIDE { |
185 Click(button_, CreateEventTask(this, &MenuItemViewTestInsert::Step1)); | 189 Click(button_, CreateEventTask(this, &MenuItemViewTestInsert::Step1)); |
186 } | 190 } |
187 | 191 |
188 // Insert item at INSERT_INDEX and click item at SELECT_INDEX. | 192 // Insert item at INSERT_INDEX and click item at SELECT_INDEX. |
189 void Step1() { | 193 void Step1() { |
190 ASSERT_TRUE(menu_.get()); | 194 ASSERT_TRUE(menu_); |
191 | 195 |
192 views::SubmenuView* submenu = menu_->GetSubmenu(); | 196 views::SubmenuView* submenu = menu_->GetSubmenu(); |
193 ASSERT_TRUE(submenu); | 197 ASSERT_TRUE(submenu); |
194 ASSERT_TRUE(submenu->IsShowing()); | 198 ASSERT_TRUE(submenu->IsShowing()); |
195 ASSERT_EQ(2, submenu->GetMenuItemCount()); | 199 ASSERT_EQ(2, submenu->GetMenuItemCount()); |
196 | 200 |
197 inserted_item_ = menu_->AddMenuItemAt(INSERT_INDEX, 1000, | 201 inserted_item_ = menu_->AddMenuItemAt(INSERT_INDEX, 1000, |
198 L"inserted item", SkBitmap(), | 202 L"inserted item", SkBitmap(), |
199 views::MenuItemView::NORMAL); | 203 views::MenuItemView::NORMAL); |
200 ASSERT_TRUE(inserted_item_); | 204 ASSERT_TRUE(inserted_item_); |
201 menu_->ChildrenChanged(); | 205 menu_->ChildrenChanged(); |
202 | 206 |
203 // click an item and pass control to the next step | 207 // click an item and pass control to the next step |
204 views::MenuItemView* item = submenu->GetMenuItemAt(SELECT_INDEX); | 208 views::MenuItemView* item = submenu->GetMenuItemAt(SELECT_INDEX); |
205 ASSERT_TRUE(item); | 209 ASSERT_TRUE(item); |
206 Click(item, CreateEventTask(this, &MenuItemViewTestInsert::Step2)); | 210 Click(item, CreateEventTask(this, &MenuItemViewTestInsert::Step2)); |
207 } | 211 } |
208 | 212 |
209 // Check clicked item and complete test. | 213 // Check clicked item and complete test. |
210 void Step2() { | 214 void Step2() { |
211 ASSERT_TRUE(menu_.get()); | 215 ASSERT_TRUE(menu_); |
212 | 216 |
213 views::SubmenuView* submenu = menu_->GetSubmenu(); | 217 views::SubmenuView* submenu = menu_->GetSubmenu(); |
214 ASSERT_TRUE(submenu); | 218 ASSERT_TRUE(submenu); |
215 ASSERT_FALSE(submenu->IsShowing()); | 219 ASSERT_FALSE(submenu->IsShowing()); |
216 ASSERT_EQ(3, submenu->GetMenuItemCount()); | 220 ASSERT_EQ(3, submenu->GetMenuItemCount()); |
217 | 221 |
218 if (SELECT_INDEX == INSERT_INDEX) | 222 if (SELECT_INDEX == INSERT_INDEX) |
219 ASSERT_EQ(1000, last_command_); | 223 ASSERT_EQ(1000, last_command_); |
220 else if (SELECT_INDEX < INSERT_INDEX) | 224 else if (SELECT_INDEX < INSERT_INDEX) |
221 ASSERT_EQ(SELECT_INDEX + 1, last_command_); | 225 ASSERT_EQ(SELECT_INDEX + 1, last_command_); |
(...skipping 89 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
311 // then inserts an item in the top-level menu at X. | 315 // then inserts an item in the top-level menu at X. |
312 typedef MenuItemViewTestInsertWithSubmenu<0> MenuItemViewTestInsertWithSubmenu0; | 316 typedef MenuItemViewTestInsertWithSubmenu<0> MenuItemViewTestInsertWithSubmenu0; |
313 typedef MenuItemViewTestInsertWithSubmenu<1> MenuItemViewTestInsertWithSubmenu1; | 317 typedef MenuItemViewTestInsertWithSubmenu<1> MenuItemViewTestInsertWithSubmenu1; |
314 VIEW_TEST(MenuItemViewTestInsertWithSubmenu0, InsertItemWithSubmenu0) | 318 VIEW_TEST(MenuItemViewTestInsertWithSubmenu0, InsertItemWithSubmenu0) |
315 VIEW_TEST(MenuItemViewTestInsertWithSubmenu1, InsertItemWithSubmenu1) | 319 VIEW_TEST(MenuItemViewTestInsertWithSubmenu1, InsertItemWithSubmenu1) |
316 | 320 |
317 // Test class for removing a menu item while the menu is open. | 321 // Test class for removing a menu item while the menu is open. |
318 template<int REMOVE_INDEX, int SELECT_INDEX> | 322 template<int REMOVE_INDEX, int SELECT_INDEX> |
319 class MenuItemViewTestRemove : public MenuItemViewTestBase { | 323 class MenuItemViewTestRemove : public MenuItemViewTestBase { |
320 public: | 324 public: |
321 MenuItemViewTestRemove() : | 325 MenuItemViewTestRemove() |
322 last_command_(0) { | 326 : last_command_(0) { |
323 } | 327 } |
324 | 328 |
325 virtual ~MenuItemViewTestRemove() { | 329 virtual ~MenuItemViewTestRemove() { |
326 } | 330 } |
327 | 331 |
328 // views::MenuDelegate implementation | 332 // views::MenuDelegate implementation |
329 virtual void ExecuteCommand(int id) OVERRIDE { | 333 virtual void ExecuteCommand(int id) OVERRIDE { |
330 last_command_ = id; | 334 last_command_ = id; |
331 } | 335 } |
332 | 336 |
333 // MenuItemViewTestBase implementation | 337 // MenuItemViewTestBase implementation |
334 virtual void BuildMenu(views::MenuItemView* menu) OVERRIDE { | 338 virtual void BuildMenu(views::MenuItemView* menu) OVERRIDE { |
335 menu->AppendMenuItemWithLabel(1, L"item 1"); | 339 menu->AppendMenuItemWithLabel(1, L"item 1"); |
336 menu->AppendMenuItemWithLabel(2, L"item 2"); | 340 menu->AppendMenuItemWithLabel(2, L"item 2"); |
337 menu->AppendMenuItemWithLabel(3, L"item 3"); | 341 menu->AppendMenuItemWithLabel(3, L"item 3"); |
338 } | 342 } |
339 | 343 |
340 // ViewEventTestBase implementation | 344 // ViewEventTestBase implementation |
341 virtual void DoTestOnMessageLoop() OVERRIDE { | 345 virtual void DoTestOnMessageLoop() OVERRIDE { |
342 Click(button_, CreateEventTask(this, &MenuItemViewTestRemove::Step1)); | 346 Click(button_, CreateEventTask(this, &MenuItemViewTestRemove::Step1)); |
343 } | 347 } |
344 | 348 |
345 // Remove item at REMOVE_INDEX and click item at SELECT_INDEX. | 349 // Remove item at REMOVE_INDEX and click item at SELECT_INDEX. |
346 void Step1() { | 350 void Step1() { |
347 ASSERT_TRUE(menu_.get()); | 351 ASSERT_TRUE(menu_); |
348 | 352 |
349 views::SubmenuView* submenu = menu_->GetSubmenu(); | 353 views::SubmenuView* submenu = menu_->GetSubmenu(); |
350 ASSERT_TRUE(submenu); | 354 ASSERT_TRUE(submenu); |
351 ASSERT_TRUE(submenu->IsShowing()); | 355 ASSERT_TRUE(submenu->IsShowing()); |
352 ASSERT_EQ(3, submenu->GetMenuItemCount()); | 356 ASSERT_EQ(3, submenu->GetMenuItemCount()); |
353 | 357 |
354 // remove | 358 // remove |
355 menu_->RemoveMenuItemAt(REMOVE_INDEX); | 359 menu_->RemoveMenuItemAt(REMOVE_INDEX); |
356 menu_->ChildrenChanged(); | 360 menu_->ChildrenChanged(); |
357 | 361 |
358 // click | 362 // click |
359 views::MenuItemView* item = submenu->GetMenuItemAt(SELECT_INDEX); | 363 views::MenuItemView* item = submenu->GetMenuItemAt(SELECT_INDEX); |
360 ASSERT_TRUE(item); | 364 ASSERT_TRUE(item); |
361 Click(item, CreateEventTask(this, &MenuItemViewTestRemove::Step2)); | 365 Click(item, CreateEventTask(this, &MenuItemViewTestRemove::Step2)); |
362 } | 366 } |
363 | 367 |
364 // Check clicked item and complete test. | 368 // Check clicked item and complete test. |
365 void Step2() { | 369 void Step2() { |
366 ASSERT_TRUE(menu_.get()); | 370 ASSERT_TRUE(menu_); |
367 | 371 |
368 views::SubmenuView* submenu = menu_->GetSubmenu(); | 372 views::SubmenuView* submenu = menu_->GetSubmenu(); |
369 ASSERT_TRUE(submenu); | 373 ASSERT_TRUE(submenu); |
370 ASSERT_FALSE(submenu->IsShowing()); | 374 ASSERT_FALSE(submenu->IsShowing()); |
371 ASSERT_EQ(2, submenu->GetMenuItemCount()); | 375 ASSERT_EQ(2, submenu->GetMenuItemCount()); |
372 | 376 |
373 if (SELECT_INDEX < REMOVE_INDEX) | 377 if (SELECT_INDEX < REMOVE_INDEX) |
374 ASSERT_EQ(SELECT_INDEX + 1, last_command_); | 378 ASSERT_EQ(SELECT_INDEX + 1, last_command_); |
375 else | 379 else |
376 ASSERT_EQ(SELECT_INDEX + 2, last_command_); | 380 ASSERT_EQ(SELECT_INDEX + 2, last_command_); |
(...skipping 44 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
421 } | 425 } |
422 | 426 |
423 // ViewEventTestBase implementation | 427 // ViewEventTestBase implementation |
424 virtual void DoTestOnMessageLoop() OVERRIDE { | 428 virtual void DoTestOnMessageLoop() OVERRIDE { |
425 Click(button_, | 429 Click(button_, |
426 CreateEventTask(this, &MenuItemViewTestRemoveWithSubmenu::Step1)); | 430 CreateEventTask(this, &MenuItemViewTestRemoveWithSubmenu::Step1)); |
427 } | 431 } |
428 | 432 |
429 // Post submenu. | 433 // Post submenu. |
430 void Step1() { | 434 void Step1() { |
431 ASSERT_TRUE(menu_.get()); | 435 ASSERT_TRUE(menu_); |
432 | 436 |
433 views::SubmenuView* submenu = menu_->GetSubmenu(); | 437 views::SubmenuView* submenu = menu_->GetSubmenu(); |
434 ASSERT_TRUE(submenu); | 438 ASSERT_TRUE(submenu); |
435 ASSERT_TRUE(submenu->IsShowing()); | 439 ASSERT_TRUE(submenu->IsShowing()); |
436 | 440 |
437 Click(submenu_, | 441 Click(submenu_, |
438 CreateEventTask(this, &MenuItemViewTestRemoveWithSubmenu::Step2)); | 442 CreateEventTask(this, &MenuItemViewTestRemoveWithSubmenu::Step2)); |
439 } | 443 } |
440 | 444 |
441 // Remove item at REMOVE_INDEX and select it to exit the menu loop. | 445 // Remove item at REMOVE_INDEX and select it to exit the menu loop. |
442 void Step2() { | 446 void Step2() { |
443 ASSERT_TRUE(menu_.get()); | 447 ASSERT_TRUE(menu_); |
444 | 448 |
445 views::SubmenuView* submenu = menu_->GetSubmenu(); | 449 views::SubmenuView* submenu = menu_->GetSubmenu(); |
446 ASSERT_TRUE(submenu); | 450 ASSERT_TRUE(submenu); |
447 ASSERT_TRUE(submenu->IsShowing()); | 451 ASSERT_TRUE(submenu->IsShowing()); |
448 ASSERT_EQ(2, submenu->GetMenuItemCount()); | 452 ASSERT_EQ(2, submenu->GetMenuItemCount()); |
449 | 453 |
450 // remove | 454 // remove |
451 menu_->RemoveMenuItemAt(REMOVE_INDEX); | 455 menu_->RemoveMenuItemAt(REMOVE_INDEX); |
452 menu_->ChildrenChanged(); | 456 menu_->ChildrenChanged(); |
453 | 457 |
454 // click | 458 // click |
455 Click(button_, | 459 Click(button_, |
456 CreateEventTask(this, &MenuItemViewTestRemoveWithSubmenu::Step3)); | 460 CreateEventTask(this, &MenuItemViewTestRemoveWithSubmenu::Step3)); |
457 } | 461 } |
458 | 462 |
459 void Step3() { | 463 void Step3() { |
460 ASSERT_TRUE(menu_.get()); | 464 ASSERT_TRUE(menu_); |
461 | 465 |
462 views::SubmenuView* submenu = menu_->GetSubmenu(); | 466 views::SubmenuView* submenu = menu_->GetSubmenu(); |
463 ASSERT_TRUE(submenu); | 467 ASSERT_TRUE(submenu); |
464 ASSERT_FALSE(submenu->IsShowing()); | 468 ASSERT_FALSE(submenu->IsShowing()); |
465 ASSERT_EQ(1, submenu->GetMenuItemCount()); | 469 ASSERT_EQ(1, submenu->GetMenuItemCount()); |
466 | 470 |
467 Done(); | 471 Done(); |
468 } | 472 } |
469 | 473 |
470 private: | 474 private: |
471 int last_command_; | 475 int last_command_; |
472 views::MenuItemView* submenu_; | 476 views::MenuItemView* submenu_; |
473 }; | 477 }; |
474 | 478 |
475 typedef MenuItemViewTestRemoveWithSubmenu<0> MenuItemViewTestRemoveWithSubmenu0; | 479 typedef MenuItemViewTestRemoveWithSubmenu<0> MenuItemViewTestRemoveWithSubmenu0; |
476 typedef MenuItemViewTestRemoveWithSubmenu<1> MenuItemViewTestRemoveWithSubmenu1; | 480 typedef MenuItemViewTestRemoveWithSubmenu<1> MenuItemViewTestRemoveWithSubmenu1; |
477 VIEW_TEST(MenuItemViewTestRemoveWithSubmenu0, RemoveItemWithSubmenu0) | 481 VIEW_TEST(MenuItemViewTestRemoveWithSubmenu0, RemoveItemWithSubmenu0) |
478 VIEW_TEST(MenuItemViewTestRemoveWithSubmenu1, RemoveItemWithSubmenu1) | 482 VIEW_TEST(MenuItemViewTestRemoveWithSubmenu1, RemoveItemWithSubmenu1) |
OLD | NEW |