| 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 | 
|---|