menu_controller_interactive_uitest.cc revision 6e8cce623b6e4fe0c9e4af605d675dd9d0338c38
1a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch// Copyright 2014 The Chromium Authors. All rights reserved.
2a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch// Use of this source code is governed by a BSD-style license that can be
3a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch// found in the LICENSE file.
45f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)
5a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch#include "base/strings/utf_string_conversions.h"
6a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch#include "chrome/browser/ui/views/menu_test_base.h"
7a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch#include "ui/views/controls/menu/menu_item_view.h"
8a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch#include "ui/views/controls/menu/submenu_view.h"
9010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)
10a02191e04bc25c4935f804f2c080ae28663d096dBen Murdochtemplate<ui::KeyboardCode KEYCODE, int EXPECTED_COMMAND>
11a02191e04bc25c4935f804f2c080ae28663d096dBen Murdochclass MenuControllerMnemonicTest : public MenuTestBase {
12010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) public:
13a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch  MenuControllerMnemonicTest() {
14a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch  }
15a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch
16a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch  virtual ~MenuControllerMnemonicTest() {
17a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch  }
18a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch
19a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch  // MenuTestBase overrides:
20a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch  virtual void BuildMenu(views::MenuItemView* menu) OVERRIDE {
21a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch    ASSERT_NE(ui::VKEY_DIVIDE, '/');
22a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch    menu->AppendMenuItemWithLabel(1, base::ASCIIToUTF16("One&/"));
23a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch    menu->AppendMenuItemWithLabel(2, base::ASCIIToUTF16("Two"));
24a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch  }
25a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch
26a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch  virtual void DoTestWithMenuOpen() {
27a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch    ASSERT_TRUE(menu()->GetSubmenu()->IsShowing());
28a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch    KeyPress(KEYCODE,
29a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch             CreateEventTask(this, &MenuControllerMnemonicTest::Step2));
30a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch  }
31a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch
32a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch  void Step2() {
33a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch    ASSERT_EQ(EXPECTED_COMMAND, last_command());
34a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch    if (EXPECTED_COMMAND == 0) {
35a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch      KeyPress(ui::VKEY_ESCAPE,
36a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch               CreateEventTask(this, &MenuControllerMnemonicTest::Step3));
37a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch    } else {
38a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch      ASSERT_FALSE(menu()->GetSubmenu()->IsShowing());
39a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch      Done();
40a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch    }
41a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch  }
42a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch
43a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch  void Step3() {
44a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch    ASSERT_FALSE(menu()->GetSubmenu()->IsShowing());
45a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch    Done();
46a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch  }
47a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch
48a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch private:
49a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch  DISALLOW_COPY_AND_ASSIGN(MenuControllerMnemonicTest);
50a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch};
51a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch
52a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch// Pressing the mnemonic for a menu item should execute the command for that
53a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch// menu item.
54a02191e04bc25c4935f804f2c080ae28663d096dBen Murdochtypedef MenuControllerMnemonicTest<ui::VKEY_DIVIDE,1>
55a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch    MenuControllerMnemonicTestMnemonicMatch;
56a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch
57a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch#if defined(USE_OZONE)
58a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch// ozone bringup - http://crbug.com/401304
59a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch#define MAYBE_MnemonicMatch DISABLED_MnemonicMatch
60a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch#else
61a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch#define MAYBE_MnemonicMatch MnemonicMatch
62a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch#endif
63a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch
64a02191e04bc25c4935f804f2c080ae28663d096dBen MurdochVIEW_TEST(MenuControllerMnemonicTestMnemonicMatch, MAYBE_MnemonicMatch);
65a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch
66a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch// Pressing a key which matches the first letter of the menu item's title
67a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch// should execute the command for that menu item.
68a02191e04bc25c4935f804f2c080ae28663d096dBen Murdochtypedef MenuControllerMnemonicTest<ui::VKEY_T,2>
69a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch    MenuControllerMnemonicTestTitleMatch;
70a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch
71a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch#if defined(USE_OZONE)
72a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch// ozone bringup - http://crbug.com/401304
73a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch#define MAYBE_TitleMatch DISABLED_TitleMatch
74a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch#else
75a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch#define MAYBE_TitleMatch TitleMatch
76a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch#endif
77a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch
78a02191e04bc25c4935f804f2c080ae28663d096dBen MurdochVIEW_TEST(MenuControllerMnemonicTestTitleMatch, MAYBE_TitleMatch);
79a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch
80a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch// Pressing an arbitrary key should not execute any commands.
81a02191e04bc25c4935f804f2c080ae28663d096dBen Murdochtypedef MenuControllerMnemonicTest<ui::VKEY_A,0>
82a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch    MenuControllerMnemonicTestNoMatch;
83a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch
84a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch#if defined(USE_OZONE)
85a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch// ozone bringup - http://crbug.com/401304
86a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch#define MAYBE_NoMatch DISABLED_NoMatch
87a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch#else
88a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch#define MAYBE_NoMatch NoMatch
89a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch#endif
90a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch
91VIEW_TEST(MenuControllerMnemonicTestNoMatch, MAYBE_NoMatch);
92