1 // Copyright (c) 2011 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 #ifndef CHROME_TEST_BASE_MENU_MODEL_TEST_H_ 6 #define CHROME_TEST_BASE_MENU_MODEL_TEST_H_ 7 8 #include "ui/base/accelerators/accelerator.h" 9 #include "ui/base/models/simple_menu_model.h" 10 11 // A mix-in class to be used in addition to something that derrives from 12 // testing::Test to provide some extra functionality for testing menu models. 13 class MenuModelTest { 14 public: 15 MenuModelTest() {} 16 virtual ~MenuModelTest() {} 17 18 protected: 19 // A menu delegate that counts the number of times certain things are called 20 // to make sure things are hooked up properly. 21 class Delegate : public ui::SimpleMenuModel::Delegate, 22 public ui::AcceleratorProvider { 23 public: 24 Delegate() : execute_count_(0), enable_count_(0) {} 25 26 virtual bool IsCommandIdChecked(int command_id) const OVERRIDE; 27 virtual bool IsCommandIdEnabled(int command_id) const OVERRIDE; 28 virtual bool GetAcceleratorForCommandId( 29 int command_id, 30 ui::Accelerator* accelerator) OVERRIDE; 31 virtual void ExecuteCommand(int command_id, int event_flags) OVERRIDE; 32 33 int execute_count_; 34 mutable int enable_count_; 35 }; 36 37 // Recursively checks the enabled state and executes a command on every item 38 // that's not a separator or a submenu parent item. The returned count should 39 // match the number of times the delegate is called to ensure every item 40 // works. 41 void CountEnabledExecutable(ui::MenuModel* model, int* count); 42 43 Delegate delegate_; 44 }; 45 46 #endif // CHROME_TEST_BASE_MENU_MODEL_TEST_H_ 47