| OLD | NEW |
| (Empty) |
| 1 // Copyright (c) 2010 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/scoped_nsobject.h" | |
| 6 #include "chrome/app/chrome_command_ids.h" | |
| 7 #include "chrome/browser/ui/cocoa/browser_test_helper.h" | |
| 8 #import "chrome/browser/ui/cocoa/cocoa_test_helper.h" | |
| 9 #import "chrome/browser/ui/cocoa/toolbar_controller.h" | |
| 10 #import "chrome/browser/ui/cocoa/wrench_menu_controller.h" | |
| 11 #import "chrome/browser/ui/cocoa/view_resizer_pong.h" | |
| 12 #include "chrome/browser/ui/toolbar/wrench_menu_model.h" | |
| 13 #include "testing/gmock/include/gmock/gmock.h" | |
| 14 #include "testing/gtest/include/gtest/gtest.h" | |
| 15 #include "testing/platform_test.h" | |
| 16 | |
| 17 // Override to avoid dealing with run loops in the testing environment. | |
| 18 @implementation WrenchMenuController (UnitTesting) | |
| 19 - (void)dispatchCommandInternal:(NSInteger)tag { | |
| 20 [self wrenchMenuModel]->ExecuteCommand(tag); | |
| 21 } | |
| 22 @end | |
| 23 | |
| 24 | |
| 25 namespace { | |
| 26 | |
| 27 class MockWrenchMenuModel : public WrenchMenuModel { | |
| 28 public: | |
| 29 MockWrenchMenuModel() : WrenchMenuModel() {} | |
| 30 ~MockWrenchMenuModel() { | |
| 31 // This dirty, ugly hack gets around a bug in the test. In | |
| 32 // ~WrenchMenuModel(), there's a call to TabstripModel::RemoveObserver(this) | |
| 33 // which mysteriously leads to this crash: http://crbug.com/49206 . It | |
| 34 // seems that the vector of observers is getting hosed somewhere between | |
| 35 // |-[ToolbarController dealloc]| and ~MockWrenchMenuModel(). This line | |
| 36 // short-circuits the parent destructor to avoid this crash. | |
| 37 tabstrip_model_ = NULL; | |
| 38 } | |
| 39 MOCK_METHOD1(ExecuteCommand, void(int command_id)); | |
| 40 }; | |
| 41 | |
| 42 class WrenchMenuControllerTest : public CocoaTest { | |
| 43 public: | |
| 44 void SetUp() { | |
| 45 Browser* browser = helper_.browser(); | |
| 46 resize_delegate_.reset([[ViewResizerPong alloc] init]); | |
| 47 toolbar_controller_.reset( | |
| 48 [[ToolbarController alloc] initWithModel:browser->toolbar_model() | |
| 49 commands:browser->command_updater() | |
| 50 profile:helper_.profile() | |
| 51 browser:browser | |
| 52 resizeDelegate:resize_delegate_.get()]); | |
| 53 EXPECT_TRUE([toolbar_controller_ view]); | |
| 54 NSView* parent = [test_window() contentView]; | |
| 55 [parent addSubview:[toolbar_controller_ view]]; | |
| 56 } | |
| 57 | |
| 58 WrenchMenuController* controller() { | |
| 59 return [toolbar_controller_ wrenchMenuController]; | |
| 60 } | |
| 61 | |
| 62 BrowserTestHelper helper_; | |
| 63 scoped_nsobject<ViewResizerPong> resize_delegate_; | |
| 64 MockWrenchMenuModel fake_model_; | |
| 65 scoped_nsobject<ToolbarController> toolbar_controller_; | |
| 66 }; | |
| 67 | |
| 68 TEST_F(WrenchMenuControllerTest, Initialized) { | |
| 69 EXPECT_TRUE([controller() menu]); | |
| 70 EXPECT_GE([[controller() menu] numberOfItems], 5); | |
| 71 } | |
| 72 | |
| 73 TEST_F(WrenchMenuControllerTest, DispatchSimple) { | |
| 74 scoped_nsobject<NSButton> button([[NSButton alloc] init]); | |
| 75 [button setTag:IDC_ZOOM_PLUS]; | |
| 76 | |
| 77 // Set fake model to test dispatching. | |
| 78 EXPECT_CALL(fake_model_, ExecuteCommand(IDC_ZOOM_PLUS)); | |
| 79 [controller() setModel:&fake_model_]; | |
| 80 | |
| 81 [controller() dispatchWrenchMenuCommand:button.get()]; | |
| 82 } | |
| 83 | |
| 84 } // namespace | |
| OLD | NEW |