Home | History | Annotate | Download | only in views
      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.
      4 
      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"
      9 
     10 template<ui::KeyboardCode KEYCODE, int EXPECTED_COMMAND>
     11 class MenuControllerMnemonicTest : public MenuTestBase {
     12  public:
     13   MenuControllerMnemonicTest() {
     14   }
     15 
     16   virtual ~MenuControllerMnemonicTest() {
     17   }
     18 
     19   // MenuTestBase overrides:
     20   virtual void BuildMenu(views::MenuItemView* menu) OVERRIDE {
     21     ASSERT_NE(ui::VKEY_DIVIDE, '/');
     22     menu->AppendMenuItemWithLabel(1, base::ASCIIToUTF16("One&/"));
     23     menu->AppendMenuItemWithLabel(2, base::ASCIIToUTF16("Two"));
     24   }
     25 
     26   virtual void DoTestWithMenuOpen() {
     27     ASSERT_TRUE(menu()->GetSubmenu()->IsShowing());
     28     KeyPress(KEYCODE,
     29              CreateEventTask(this, &MenuControllerMnemonicTest::Step2));
     30   }
     31 
     32   void Step2() {
     33     ASSERT_EQ(EXPECTED_COMMAND, last_command());
     34     if (EXPECTED_COMMAND == 0) {
     35       KeyPress(ui::VKEY_ESCAPE,
     36                CreateEventTask(this, &MenuControllerMnemonicTest::Step3));
     37     } else {
     38       ASSERT_FALSE(menu()->GetSubmenu()->IsShowing());
     39       Done();
     40     }
     41   }
     42 
     43   void Step3() {
     44     ASSERT_FALSE(menu()->GetSubmenu()->IsShowing());
     45     Done();
     46   }
     47 
     48  private:
     49   DISALLOW_COPY_AND_ASSIGN(MenuControllerMnemonicTest);
     50 };
     51 
     52 // Pressing the mnemonic for a menu item should execute the command for that
     53 // menu item.
     54 typedef MenuControllerMnemonicTest<ui::VKEY_DIVIDE,1>
     55     MenuControllerMnemonicTestMnemonicMatch;
     56 VIEW_TEST(MenuControllerMnemonicTestMnemonicMatch, MnemonicMatch);
     57 
     58 // Pressing a key which matches the first letter of the menu item's title
     59 // should execute the command for that menu item.
     60 typedef MenuControllerMnemonicTest<ui::VKEY_T,2>
     61     MenuControllerMnemonicTestTitleMatch;
     62 VIEW_TEST(MenuControllerMnemonicTestTitleMatch, TitleMatch);
     63 
     64 // Pressing an arbitrary key should not execute any commands.
     65 typedef MenuControllerMnemonicTest<ui::VKEY_A,0>
     66     MenuControllerMnemonicTestNoMatch;
     67 VIEW_TEST(MenuControllerMnemonicTestNoMatch, NoMatch);
     68