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. 13class 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