// Copyright (c) 2011 The Chromium Authors. All rights reserved. // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. #ifndef CHROME_TEST_BASE_MENU_MODEL_TEST_H_ #define CHROME_TEST_BASE_MENU_MODEL_TEST_H_ #include "ui/base/accelerators/accelerator.h" #include "ui/base/models/simple_menu_model.h" // A mix-in class to be used in addition to something that derrives from // testing::Test to provide some extra functionality for testing menu models. class MenuModelTest { public: MenuModelTest() {} virtual ~MenuModelTest() {} protected: // A menu delegate that counts the number of times certain things are called // to make sure things are hooked up properly. class Delegate : public ui::SimpleMenuModel::Delegate, public ui::AcceleratorProvider { public: Delegate() : execute_count_(0), enable_count_(0) {} virtual bool IsCommandIdChecked(int command_id) const OVERRIDE; virtual bool IsCommandIdEnabled(int command_id) const OVERRIDE; virtual bool GetAcceleratorForCommandId( int command_id, ui::Accelerator* accelerator) OVERRIDE; virtual void ExecuteCommand(int command_id, int event_flags) OVERRIDE; int execute_count_; mutable int enable_count_; }; // Recursively checks the enabled state and executes a command on every item // that's not a separator or a submenu parent item. The returned count should // match the number of times the delegate is called to ensure every item // works. void CountEnabledExecutable(ui::MenuModel* model, int* count); Delegate delegate_; }; #endif // CHROME_TEST_BASE_MENU_MODEL_TEST_H_