1a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)// Copyright 2014 The Chromium Authors. All rights reserved. 2a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be 3a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)// found in the LICENSE file. 4a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) 5a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)#include "base/strings/utf_string_conversions.h" 6a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)#include "chrome/browser/ui/views/menu_test_base.h" 7a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)#include "ui/views/controls/menu/menu_item_view.h" 8a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)#include "ui/views/controls/menu/submenu_view.h" 9a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) 10a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)template<ui::KeyboardCode KEYCODE, int EXPECTED_COMMAND> 11a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)class MenuControllerMnemonicTest : public MenuTestBase { 12a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) public: 13a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) MenuControllerMnemonicTest() { 14a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) } 15a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) 16a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) virtual ~MenuControllerMnemonicTest() { 17a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) } 18a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) 19a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) // MenuTestBase overrides: 20a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) virtual void BuildMenu(views::MenuItemView* menu) OVERRIDE { 21a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) ASSERT_NE(ui::VKEY_DIVIDE, '/'); 22a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) menu->AppendMenuItemWithLabel(1, base::ASCIIToUTF16("One&/")); 23a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) menu->AppendMenuItemWithLabel(2, base::ASCIIToUTF16("Two")); 24a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) } 25a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) 26a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) virtual void DoTestWithMenuOpen() { 27a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) ASSERT_TRUE(menu()->GetSubmenu()->IsShowing()); 28a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) KeyPress(KEYCODE, 29a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) CreateEventTask(this, &MenuControllerMnemonicTest::Step2)); 30a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) } 31a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) 32a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) void Step2() { 33a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) ASSERT_EQ(EXPECTED_COMMAND, last_command()); 34a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) if (EXPECTED_COMMAND == 0) { 35a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) KeyPress(ui::VKEY_ESCAPE, 36a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) CreateEventTask(this, &MenuControllerMnemonicTest::Step3)); 37a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) } else { 38a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) ASSERT_FALSE(menu()->GetSubmenu()->IsShowing()); 39a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) Done(); 40a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) } 41a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) } 42a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) 43a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) void Step3() { 44a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) ASSERT_FALSE(menu()->GetSubmenu()->IsShowing()); 45a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) Done(); 46a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) } 47a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) 48a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) private: 49a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) DISALLOW_COPY_AND_ASSIGN(MenuControllerMnemonicTest); 50a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)}; 51a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) 52a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)// Pressing the mnemonic for a menu item should execute the command for that 53a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)// menu item. 54a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)typedef MenuControllerMnemonicTest<ui::VKEY_DIVIDE, 1> 55a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) MenuControllerMnemonicTestMnemonicMatch; 56a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)VIEW_TEST(MenuControllerMnemonicTestMnemonicMatch, MnemonicMatch); 57a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) 58a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)// Pressing a key which matches the first letter of the menu item's title 59a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)// should execute the command for that menu item. 60a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)typedef MenuControllerMnemonicTest<ui::VKEY_T, 2> 61a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) MenuControllerMnemonicTestTitleMatch; 62a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)VIEW_TEST(MenuControllerMnemonicTestTitleMatch, TitleMatch); 63a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) 64a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)// Pressing an arbitrary key should not execute any commands. 65a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)typedef MenuControllerMnemonicTest<ui::VKEY_A, 0> 66a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) MenuControllerMnemonicTestNoMatch; 67a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)VIEW_TEST(MenuControllerMnemonicTestNoMatch, NoMatch); 68