OLD | NEW |
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) |
OLD | NEW |