Only grant permissions to new extensions from sync if they have the expected version
[chromium-blink-merge.git] / chrome / browser / ui / views / menu_item_view_interactive_uitest.cc
blob6558aefa7629d940c967de4e82fcfbda18d5546e
1 // Copyright 2014 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
5 #include "base/strings/utf_string_conversions.h"
6 #include "chrome/browser/ui/views/menu_test_base.h"
7 #include "ui/views/controls/menu/menu_item_view.h"
8 #include "ui/views/controls/menu/submenu_view.h"
10 using base::ASCIIToUTF16;
12 // Simple test for clicking a menu item. This template class clicks on an
13 // item and checks that the returned id matches. The index of the item
14 // is the template argument.
15 template<int INDEX>
16 class MenuItemViewTestBasic : public MenuTestBase {
17 public:
18 MenuItemViewTestBasic() {
21 ~MenuItemViewTestBasic() override {
24 // MenuTestBase implementation
25 void BuildMenu(views::MenuItemView* menu) override {
26 menu->AppendMenuItemWithLabel(1, ASCIIToUTF16("item 1"));
27 menu->AppendMenuItemWithLabel(2, ASCIIToUTF16("item 2"));
28 menu->AppendSeparator();
29 menu->AppendMenuItemWithLabel(3, ASCIIToUTF16("item 3"));
32 // Click on item INDEX.
33 void DoTestWithMenuOpen() override {
34 views::SubmenuView* submenu = menu()->GetSubmenu();
35 ASSERT_TRUE(submenu);
36 ASSERT_TRUE(submenu->IsShowing());
37 ASSERT_EQ(3, submenu->GetMenuItemCount());
39 // click an item and pass control to the next step
40 views::MenuItemView* item = submenu->GetMenuItemAt(INDEX);
41 ASSERT_TRUE(item);
42 Click(item, CreateEventTask(this, &MenuItemViewTestBasic::Step2));
45 // Check the clicked item and complete the test.
46 void Step2() {
47 ASSERT_FALSE(menu()->GetSubmenu()->IsShowing());
48 ASSERT_EQ(INDEX + 1, last_command());
49 Done();
52 private:
53 DISALLOW_COPY_AND_ASSIGN(MenuItemViewTestBasic);
56 #if defined(OS_WIN)
57 // flaky on Windows - http://crbug.com/523255
58 #define MAYBE_SelectItem2 DISABLED_SelectItem2
59 #define MAYBE_SelectItem0 DISABLED_SelectItem0
60 #else
61 #define MAYBE_SelectItem2 SelectItem2
62 #define MAYBE_SelectItem0 SelectItem0
63 #endif
65 // Click each item of a 3-item menu (with separator).
66 typedef MenuItemViewTestBasic<0> MenuItemViewTestBasic0;
67 typedef MenuItemViewTestBasic<1> MenuItemViewTestBasic1;
68 typedef MenuItemViewTestBasic<2> MenuItemViewTestBasic2;
69 VIEW_TEST(MenuItemViewTestBasic0, MAYBE_SelectItem0)
70 VIEW_TEST(MenuItemViewTestBasic1, SelectItem1)
72 VIEW_TEST(MenuItemViewTestBasic2, MAYBE_SelectItem2)
74 // Test class for inserting a menu item while the menu is open.
75 template<int INSERT_INDEX, int SELECT_INDEX>
76 class MenuItemViewTestInsert : public MenuTestBase {
77 public:
78 MenuItemViewTestInsert() : inserted_item_(NULL) {
81 ~MenuItemViewTestInsert() override {
84 // MenuTestBase implementation
85 void BuildMenu(views::MenuItemView* menu) override {
86 menu->AppendMenuItemWithLabel(1, ASCIIToUTF16("item 1"));
87 menu->AppendMenuItemWithLabel(2, ASCIIToUTF16("item 2"));
90 // Insert item at INSERT_INDEX and click item at SELECT_INDEX.
91 void DoTestWithMenuOpen() override {
92 LOG(ERROR) << "\nDoTestWithMenuOpen\n";
93 views::SubmenuView* submenu = menu()->GetSubmenu();
94 ASSERT_TRUE(submenu);
95 ASSERT_TRUE(submenu->IsShowing());
96 ASSERT_EQ(2, submenu->GetMenuItemCount());
98 inserted_item_ = menu()->AddMenuItemAt(INSERT_INDEX,
99 1000,
100 ASCIIToUTF16("inserted item"),
101 base::string16(),
102 base::string16(),
103 gfx::ImageSkia(),
104 views::MenuItemView::NORMAL,
105 ui::NORMAL_SEPARATOR);
106 ASSERT_TRUE(inserted_item_);
107 menu()->ChildrenChanged();
109 // click an item and pass control to the next step
110 views::MenuItemView* item = submenu->GetMenuItemAt(SELECT_INDEX);
111 ASSERT_TRUE(item);
112 Click(item, CreateEventTask(this, &MenuItemViewTestInsert::Step2));
115 // Check clicked item and complete test.
116 void Step2() {
117 LOG(ERROR) << "\nStep2\n";
118 views::SubmenuView* submenu = menu()->GetSubmenu();
119 ASSERT_TRUE(submenu);
120 ASSERT_FALSE(submenu->IsShowing());
121 ASSERT_EQ(3, submenu->GetMenuItemCount());
123 if (SELECT_INDEX == INSERT_INDEX)
124 ASSERT_EQ(1000, last_command());
125 else if (SELECT_INDEX < INSERT_INDEX)
126 ASSERT_EQ(SELECT_INDEX + 1, last_command());
127 else
128 ASSERT_EQ(SELECT_INDEX, last_command());
130 LOG(ERROR) << "\nDone\n";
131 Done();
134 private:
135 views::MenuItemView* inserted_item_;
137 DISALLOW_COPY_AND_ASSIGN(MenuItemViewTestInsert);
140 // MenuItemViewTestInsertXY inserts an item at index X and selects the
141 // item at index Y (after the insertion). The tests here cover
142 // inserting at the beginning, middle, and end, crossbarred with
143 // selecting the first and last item.
144 typedef MenuItemViewTestInsert<0,0> MenuItemViewTestInsert00;
145 typedef MenuItemViewTestInsert<0,2> MenuItemViewTestInsert02;
146 typedef MenuItemViewTestInsert<1,0> MenuItemViewTestInsert10;
147 typedef MenuItemViewTestInsert<1,2> MenuItemViewTestInsert12;
148 typedef MenuItemViewTestInsert<2,0> MenuItemViewTestInsert20;
149 typedef MenuItemViewTestInsert<2,2> MenuItemViewTestInsert22;
151 #if defined(OS_WIN)
152 // flaky on Windows - http://crbug.com/523255
153 #define MAYBE_InsertItem00 DISABLED_InsertItem00
154 #define MAYBE_InsertItem02 DISABLED_InsertItem02
155 #define MAYBE_InsertItem10 DISABLED_InsertItem10
156 #else
157 #define MAYBE_InsertItem00 InsertItem00
158 #define MAYBE_InsertItem02 InsertItem02
159 #define MAYBE_InsertItem10 InsertItem10
160 #endif
161 VIEW_TEST(MenuItemViewTestInsert00, MAYBE_InsertItem00)
163 VIEW_TEST(MenuItemViewTestInsert02, MAYBE_InsertItem02)
164 VIEW_TEST(MenuItemViewTestInsert10, MAYBE_InsertItem10)
166 #if defined(OS_WIN)
167 // flaky on Windows - http://crbug.com/523255
168 #define MAYBE_InsertItem12 DISABLED_InsertItem12
169 #else
170 #define MAYBE_InsertItem12 InsertItem12
171 #endif
172 VIEW_TEST(MenuItemViewTestInsert12, MAYBE_InsertItem12)
174 VIEW_TEST(MenuItemViewTestInsert20, InsertItem20)
176 #if defined(OS_WIN)
177 // flaky on Windows - http://crbug.com/523255
178 #define MAYBE_InsertItem22 DISABLED_InsertItem22
179 #else
180 #define MAYBE_InsertItem22 InsertItem22
181 #endif
182 VIEW_TEST(MenuItemViewTestInsert22, MAYBE_InsertItem22)
184 // Test class for inserting a menu item while a submenu is open.
185 template<int INSERT_INDEX>
186 class MenuItemViewTestInsertWithSubmenu : public MenuTestBase {
187 public:
188 MenuItemViewTestInsertWithSubmenu() :
189 submenu_(NULL),
190 inserted_item_(NULL) {
193 ~MenuItemViewTestInsertWithSubmenu() override {
196 // MenuTestBase implementation
197 void BuildMenu(views::MenuItemView* menu) override {
198 submenu_ = menu->AppendSubMenu(1, ASCIIToUTF16("My Submenu"));
199 submenu_->AppendMenuItemWithLabel(101, ASCIIToUTF16("submenu item 1"));
200 submenu_->AppendMenuItemWithLabel(101, ASCIIToUTF16("submenu item 2"));
201 menu->AppendMenuItemWithLabel(2, ASCIIToUTF16("item 2"));
204 // Post submenu.
205 void DoTestWithMenuOpen() override {
206 Click(submenu_,
207 CreateEventTask(this, &MenuItemViewTestInsertWithSubmenu::Step2));
210 // Insert item at INSERT_INDEX.
211 void Step2() {
212 inserted_item_ = menu()->AddMenuItemAt(INSERT_INDEX,
213 1000,
214 ASCIIToUTF16("inserted item"),
215 base::string16(),
216 base::string16(),
217 gfx::ImageSkia(),
218 views::MenuItemView::NORMAL,
219 ui::NORMAL_SEPARATOR);
220 ASSERT_TRUE(inserted_item_);
221 menu()->ChildrenChanged();
223 Click(inserted_item_,
224 CreateEventTask(this, &MenuItemViewTestInsertWithSubmenu::Step3));
227 void Step3() {
228 Done();
231 private:
232 views::MenuItemView* submenu_;
233 views::MenuItemView* inserted_item_;
235 DISALLOW_COPY_AND_ASSIGN(MenuItemViewTestInsertWithSubmenu);
238 // MenuItemViewTestInsertWithSubmenuX posts a menu and its submenu,
239 // then inserts an item in the top-level menu at X.
240 typedef MenuItemViewTestInsertWithSubmenu<0> MenuItemViewTestInsertWithSubmenu0;
241 typedef MenuItemViewTestInsertWithSubmenu<1> MenuItemViewTestInsertWithSubmenu1;
244 #if defined(OS_WIN)
245 // flaky on Windows - http://crbug.com/523255
246 #define MAYBE_InsertItemWithSubmenu0 DISABLED_InsertItemWithSubmenu0
247 #define MAYBE_InsertItemWithSubmenu1 DISABLED_InsertItemWithSubmenu1
248 #else
249 #define MAYBE_InsertItemWithSubmenu0 InsertItemWithSubmenu0
250 #define MAYBE_InsertItemWithSubmenu1 InsertItemWithSubmenu1
251 #endif
252 VIEW_TEST(MenuItemViewTestInsertWithSubmenu0, MAYBE_InsertItemWithSubmenu0)
253 VIEW_TEST(MenuItemViewTestInsertWithSubmenu1, MAYBE_InsertItemWithSubmenu1)
255 // Test class for removing a menu item while the menu is open.
256 template<int REMOVE_INDEX, int SELECT_INDEX>
257 class MenuItemViewTestRemove : public MenuTestBase {
258 public:
259 MenuItemViewTestRemove() {
262 ~MenuItemViewTestRemove() override {
265 // MenuTestBase implementation
266 void BuildMenu(views::MenuItemView* menu) override {
267 menu->AppendMenuItemWithLabel(1, ASCIIToUTF16("item 1"));
268 menu->AppendMenuItemWithLabel(2, ASCIIToUTF16("item 2"));
269 menu->AppendMenuItemWithLabel(3, ASCIIToUTF16("item 3"));
272 // Remove item at REMOVE_INDEX and click item at SELECT_INDEX.
273 void DoTestWithMenuOpen() override {
274 views::SubmenuView* submenu = menu()->GetSubmenu();
275 ASSERT_TRUE(submenu);
276 ASSERT_TRUE(submenu->IsShowing());
277 ASSERT_EQ(3, submenu->GetMenuItemCount());
279 // remove
280 menu()->RemoveMenuItemAt(REMOVE_INDEX);
281 menu()->ChildrenChanged();
283 // click
284 views::MenuItemView* item = submenu->GetMenuItemAt(SELECT_INDEX);
285 ASSERT_TRUE(item);
286 Click(item, CreateEventTask(this, &MenuItemViewTestRemove::Step2));
289 // Check clicked item and complete test.
290 void Step2() {
291 views::SubmenuView* submenu = menu()->GetSubmenu();
292 ASSERT_TRUE(submenu);
293 ASSERT_FALSE(submenu->IsShowing());
294 ASSERT_EQ(2, submenu->GetMenuItemCount());
296 if (SELECT_INDEX < REMOVE_INDEX)
297 ASSERT_EQ(SELECT_INDEX + 1, last_command());
298 else
299 ASSERT_EQ(SELECT_INDEX + 2, last_command());
301 Done();
304 private:
305 DISALLOW_COPY_AND_ASSIGN(MenuItemViewTestRemove);
308 typedef MenuItemViewTestRemove<0,0> MenuItemViewTestRemove00;
309 typedef MenuItemViewTestRemove<0,1> MenuItemViewTestRemove01;
310 typedef MenuItemViewTestRemove<1,0> MenuItemViewTestRemove10;
311 typedef MenuItemViewTestRemove<1,1> MenuItemViewTestRemove11;
312 typedef MenuItemViewTestRemove<2,0> MenuItemViewTestRemove20;
313 typedef MenuItemViewTestRemove<2,1> MenuItemViewTestRemove21;
314 VIEW_TEST(MenuItemViewTestRemove00, RemoveItem00)
315 VIEW_TEST(MenuItemViewTestRemove01, RemoveItem01)
317 #if defined(OS_WIN)
318 // flaky on Windows - http://crbug.com/523255
319 #define MAYBE_RemoveItem10 DISABLED_RemoveItem10
320 #else
321 #define MAYBE_RemoveItem10 RemoveItem10
322 #endif
323 VIEW_TEST(MenuItemViewTestRemove10, MAYBE_RemoveItem10)
325 #if defined(OS_WIN)
326 // flaky on Windows - http://crbug.com/523255
327 #define MAYBE_RemoveItem11 DISABLED_RemoveItem11
328 #else
329 #define MAYBE_RemoveItem11 RemoveItem11
330 #endif
331 VIEW_TEST(MenuItemViewTestRemove11, MAYBE_RemoveItem11)
333 #if defined(OS_WIN)
334 // flaky on Windows - http://crbug.com/523255
335 #define MAYBE_RemoveItem20 DISABLED_RemoveItem20
336 #else
337 #define MAYBE_RemoveItem20 RemoveItem20
338 #endif
339 VIEW_TEST(MenuItemViewTestRemove20, MAYBE_RemoveItem20)
341 VIEW_TEST(MenuItemViewTestRemove21, RemoveItem21)
343 // Test class for removing a menu item while a submenu is open.
344 template<int REMOVE_INDEX>
345 class MenuItemViewTestRemoveWithSubmenu : public MenuTestBase {
346 public:
347 MenuItemViewTestRemoveWithSubmenu() : submenu_(NULL) {
350 ~MenuItemViewTestRemoveWithSubmenu() override {
353 // MenuTestBase implementation
354 void BuildMenu(views::MenuItemView* menu) override {
355 menu->AppendMenuItemWithLabel(1, ASCIIToUTF16("item 1"));
356 submenu_ = menu->AppendSubMenu(2, ASCIIToUTF16("My Submenu"));
357 submenu_->AppendMenuItemWithLabel(101, ASCIIToUTF16("submenu item 1"));
358 submenu_->AppendMenuItemWithLabel(102, ASCIIToUTF16("submenu item 2"));
361 // Post submenu.
362 void DoTestWithMenuOpen() override {
363 views::SubmenuView* submenu = menu()->GetSubmenu();
364 ASSERT_TRUE(submenu);
365 ASSERT_TRUE(submenu->IsShowing());
367 Click(submenu_,
368 CreateEventTask(this, &MenuItemViewTestRemoveWithSubmenu::Step2));
371 // Remove item at REMOVE_INDEX and press escape to exit the menu loop.
372 void Step2() {
373 views::SubmenuView* submenu = menu()->GetSubmenu();
374 ASSERT_TRUE(submenu);
375 ASSERT_TRUE(submenu->IsShowing());
376 ASSERT_EQ(2, submenu->GetMenuItemCount());
378 // remove
379 menu()->RemoveMenuItemAt(REMOVE_INDEX);
380 menu()->ChildrenChanged();
382 // click
383 KeyPress(ui::VKEY_ESCAPE,
384 CreateEventTask(this, &MenuItemViewTestRemoveWithSubmenu::Step3));
387 void Step3() {
388 views::SubmenuView* submenu = menu()->GetSubmenu();
389 ASSERT_TRUE(submenu);
390 ASSERT_FALSE(submenu->IsShowing());
391 ASSERT_EQ(1, submenu->GetMenuItemCount());
393 Done();
396 private:
397 views::MenuItemView* submenu_;
399 DISALLOW_COPY_AND_ASSIGN(MenuItemViewTestRemoveWithSubmenu);
402 typedef MenuItemViewTestRemoveWithSubmenu<0> MenuItemViewTestRemoveWithSubmenu0;
403 typedef MenuItemViewTestRemoveWithSubmenu<1> MenuItemViewTestRemoveWithSubmenu1;
405 #if defined(USE_OZONE) || defined(OS_WIN)
406 // ozone bringup - http://crbug.com/401304
407 // flaky on Windows - http://crbug.com/523255
408 #define MAYBE_RemoveItemWithSubmenu0 DISABLED_RemoveItemWithSubmenu0
409 #define MAYBE_RemoveItemWithSubmenu1 DISABLED_RemoveItemWithSubmenu1
410 #else
411 #define MAYBE_RemoveItemWithSubmenu0 RemoveItemWithSubmenu0
412 #define MAYBE_RemoveItemWithSubmenu1 RemoveItemWithSubmenu1
413 #endif
414 VIEW_TEST(MenuItemViewTestRemoveWithSubmenu0, MAYBE_RemoveItemWithSubmenu0)
415 VIEW_TEST(MenuItemViewTestRemoveWithSubmenu1, MAYBE_RemoveItemWithSubmenu1)