| OLD | NEW |
| 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 #include "base/memory/scoped_nsobject.h" | 5 #include "base/mac/scoped_nsobject.h" |
| 6 #import "chrome/browser/ui/cocoa/clickhold_button_cell.h" | 6 #import "chrome/browser/ui/cocoa/clickhold_button_cell.h" |
| 7 #import "chrome/browser/ui/cocoa/cocoa_test_helper.h" | 7 #import "chrome/browser/ui/cocoa/cocoa_test_helper.h" |
| 8 #import "chrome/browser/ui/cocoa/menu_button.h" | 8 #import "chrome/browser/ui/cocoa/menu_button.h" |
| 9 | 9 |
| 10 @interface MenuButtonTestDelegate : NSObject<NSMenuDelegate> { | 10 @interface MenuButtonTestDelegate : NSObject<NSMenuDelegate> { |
| 11 @private | 11 @private |
| 12 scoped_nsobject<NSMenu> menu_; | 12 base::scoped_nsobject<NSMenu> menu_; |
| 13 BOOL open_; | 13 BOOL open_; |
| 14 BOOL didOpen_; | 14 BOOL didOpen_; |
| 15 } | 15 } |
| 16 - (BOOL)isOpen; | 16 - (BOOL)isOpen; |
| 17 - (BOOL)didOpen; | 17 - (BOOL)didOpen; |
| 18 @end | 18 @end |
| 19 | 19 |
| 20 @implementation MenuButtonTestDelegate | 20 @implementation MenuButtonTestDelegate |
| 21 - (id)initWithMenu:(NSMenu*)menu { | 21 - (id)initWithMenu:(NSMenu*)menu { |
| 22 if ((self = [super init])) { | 22 if ((self = [super init])) { |
| (...skipping 30 matching lines...) Expand all Loading... |
| 53 open_ = NO; | 53 open_ = NO; |
| 54 } | 54 } |
| 55 @end | 55 @end |
| 56 | 56 |
| 57 namespace { | 57 namespace { |
| 58 | 58 |
| 59 class MenuButtonTest : public CocoaTest { | 59 class MenuButtonTest : public CocoaTest { |
| 60 public: | 60 public: |
| 61 MenuButtonTest() { | 61 MenuButtonTest() { |
| 62 NSRect frame = NSMakeRect(0, 0, 50, 30); | 62 NSRect frame = NSMakeRect(0, 0, 50, 30); |
| 63 scoped_nsobject<MenuButton> button( | 63 base::scoped_nsobject<MenuButton> button( |
| 64 [[MenuButton alloc] initWithFrame:frame]); | 64 [[MenuButton alloc] initWithFrame:frame]); |
| 65 button_ = button.get(); | 65 button_ = button.get(); |
| 66 scoped_nsobject<ClickHoldButtonCell> cell( | 66 base::scoped_nsobject<ClickHoldButtonCell> cell( |
| 67 [[ClickHoldButtonCell alloc] initTextCell:@"Testing"]); | 67 [[ClickHoldButtonCell alloc] initTextCell:@"Testing"]); |
| 68 [button_ setCell:cell.get()]; | 68 [button_ setCell:cell.get()]; |
| 69 [[test_window() contentView] addSubview:button_]; | 69 [[test_window() contentView] addSubview:button_]; |
| 70 } | 70 } |
| 71 | 71 |
| 72 NSMenu* CreateMenu() { | 72 NSMenu* CreateMenu() { |
| 73 NSMenu* menu = [[NSMenu alloc] initWithTitle:@""]; | 73 NSMenu* menu = [[NSMenu alloc] initWithTitle:@""]; |
| 74 [menu insertItemWithTitle:@"" action:nil keyEquivalent:@"" atIndex:0]; | 74 [menu insertItemWithTitle:@"" action:nil keyEquivalent:@"" atIndex:0]; |
| 75 [menu insertItemWithTitle:@"foo" action:nil keyEquivalent:@"" atIndex:1]; | 75 [menu insertItemWithTitle:@"foo" action:nil keyEquivalent:@"" atIndex:1]; |
| 76 [menu insertItemWithTitle:@"bar" action:nil keyEquivalent:@"" atIndex:2]; | 76 [menu insertItemWithTitle:@"bar" action:nil keyEquivalent:@"" atIndex:2]; |
| (...skipping 18 matching lines...) Expand all Loading... |
| 95 return event; | 95 return event; |
| 96 } | 96 } |
| 97 | 97 |
| 98 MenuButton* button_; | 98 MenuButton* button_; |
| 99 }; | 99 }; |
| 100 | 100 |
| 101 TEST_VIEW(MenuButtonTest, button_); | 101 TEST_VIEW(MenuButtonTest, button_); |
| 102 | 102 |
| 103 // Test assigning a menu, again mostly to ensure nothing leaks or crashes. | 103 // Test assigning a menu, again mostly to ensure nothing leaks or crashes. |
| 104 TEST_F(MenuButtonTest, MenuAssign) { | 104 TEST_F(MenuButtonTest, MenuAssign) { |
| 105 scoped_nsobject<NSMenu> menu(CreateMenu()); | 105 base::scoped_nsobject<NSMenu> menu(CreateMenu()); |
| 106 ASSERT_TRUE(menu.get()); | 106 ASSERT_TRUE(menu.get()); |
| 107 | 107 |
| 108 [button_ setAttachedMenu:menu]; | 108 [button_ setAttachedMenu:menu]; |
| 109 EXPECT_TRUE([button_ attachedMenu]); | 109 EXPECT_TRUE([button_ attachedMenu]); |
| 110 } | 110 } |
| 111 | 111 |
| 112 TEST_F(MenuButtonTest, OpenOnClick) { | 112 TEST_F(MenuButtonTest, OpenOnClick) { |
| 113 scoped_nsobject<NSMenu> menu(CreateMenu()); | 113 base::scoped_nsobject<NSMenu> menu(CreateMenu()); |
| 114 ASSERT_TRUE(menu.get()); | 114 ASSERT_TRUE(menu.get()); |
| 115 | 115 |
| 116 scoped_nsobject<MenuButtonTestDelegate> delegate( | 116 base::scoped_nsobject<MenuButtonTestDelegate> delegate( |
| 117 [[MenuButtonTestDelegate alloc] initWithMenu:menu.get()]); | 117 [[MenuButtonTestDelegate alloc] initWithMenu:menu.get()]); |
| 118 ASSERT_TRUE(delegate.get()); | 118 ASSERT_TRUE(delegate.get()); |
| 119 | 119 |
| 120 [menu setDelegate:delegate.get()]; | 120 [menu setDelegate:delegate.get()]; |
| 121 [button_ setAttachedMenu:menu]; | 121 [button_ setAttachedMenu:menu]; |
| 122 [button_ setOpenMenuOnClick:YES]; | 122 [button_ setOpenMenuOnClick:YES]; |
| 123 | 123 |
| 124 EXPECT_FALSE([delegate isOpen]); | 124 EXPECT_FALSE([delegate isOpen]); |
| 125 EXPECT_FALSE([delegate didOpen]); | 125 EXPECT_FALSE([delegate didOpen]); |
| 126 | 126 |
| 127 // Should open the menu. | 127 // Should open the menu. |
| 128 [button_ performClick:nil]; | 128 [button_ performClick:nil]; |
| 129 | 129 |
| 130 EXPECT_TRUE([delegate didOpen]); | 130 EXPECT_TRUE([delegate didOpen]); |
| 131 EXPECT_FALSE([delegate isOpen]); | 131 EXPECT_FALSE([delegate isOpen]); |
| 132 } | 132 } |
| 133 | 133 |
| 134 TEST_F(MenuButtonTest, OpenOnRightClick) { | 134 TEST_F(MenuButtonTest, OpenOnRightClick) { |
| 135 scoped_nsobject<NSMenu> menu(CreateMenu()); | 135 base::scoped_nsobject<NSMenu> menu(CreateMenu()); |
| 136 ASSERT_TRUE(menu.get()); | 136 ASSERT_TRUE(menu.get()); |
| 137 | 137 |
| 138 scoped_nsobject<MenuButtonTestDelegate> delegate( | 138 base::scoped_nsobject<MenuButtonTestDelegate> delegate( |
| 139 [[MenuButtonTestDelegate alloc] initWithMenu:menu.get()]); | 139 [[MenuButtonTestDelegate alloc] initWithMenu:menu.get()]); |
| 140 ASSERT_TRUE(delegate.get()); | 140 ASSERT_TRUE(delegate.get()); |
| 141 | 141 |
| 142 [menu setDelegate:delegate.get()]; | 142 [menu setDelegate:delegate.get()]; |
| 143 [button_ setAttachedMenu:menu]; | 143 [button_ setAttachedMenu:menu]; |
| 144 [button_ setOpenMenuOnClick:YES]; | 144 [button_ setOpenMenuOnClick:YES]; |
| 145 // Right click is enabled. | 145 // Right click is enabled. |
| 146 [button_ setOpenMenuOnRightClick:YES]; | 146 [button_ setOpenMenuOnRightClick:YES]; |
| 147 | 147 |
| 148 EXPECT_FALSE([delegate isOpen]); | 148 EXPECT_FALSE([delegate isOpen]); |
| 149 EXPECT_FALSE([delegate didOpen]); | 149 EXPECT_FALSE([delegate didOpen]); |
| 150 | 150 |
| 151 // Should open the menu. | 151 // Should open the menu. |
| 152 NSEvent* event = MouseDownEvent(NSRightMouseDown); | 152 NSEvent* event = MouseDownEvent(NSRightMouseDown); |
| 153 [button_ rightMouseDown:event]; | 153 [button_ rightMouseDown:event]; |
| 154 | 154 |
| 155 EXPECT_TRUE([delegate didOpen]); | 155 EXPECT_TRUE([delegate didOpen]); |
| 156 EXPECT_FALSE([delegate isOpen]); | 156 EXPECT_FALSE([delegate isOpen]); |
| 157 } | 157 } |
| 158 | 158 |
| 159 TEST_F(MenuButtonTest, DontOpenOnRightClickWithoutSetRightClick) { | 159 TEST_F(MenuButtonTest, DontOpenOnRightClickWithoutSetRightClick) { |
| 160 scoped_nsobject<NSMenu> menu(CreateMenu()); | 160 base::scoped_nsobject<NSMenu> menu(CreateMenu()); |
| 161 ASSERT_TRUE(menu.get()); | 161 ASSERT_TRUE(menu.get()); |
| 162 | 162 |
| 163 scoped_nsobject<MenuButtonTestDelegate> delegate( | 163 base::scoped_nsobject<MenuButtonTestDelegate> delegate( |
| 164 [[MenuButtonTestDelegate alloc] initWithMenu:menu.get()]); | 164 [[MenuButtonTestDelegate alloc] initWithMenu:menu.get()]); |
| 165 ASSERT_TRUE(delegate.get()); | 165 ASSERT_TRUE(delegate.get()); |
| 166 | 166 |
| 167 [menu setDelegate:delegate.get()]; | 167 [menu setDelegate:delegate.get()]; |
| 168 [button_ setAttachedMenu:menu]; | 168 [button_ setAttachedMenu:menu]; |
| 169 [button_ setOpenMenuOnClick:YES]; | 169 [button_ setOpenMenuOnClick:YES]; |
| 170 | 170 |
| 171 EXPECT_FALSE([delegate isOpen]); | 171 EXPECT_FALSE([delegate isOpen]); |
| 172 EXPECT_FALSE([delegate didOpen]); | 172 EXPECT_FALSE([delegate didOpen]); |
| 173 | 173 |
| 174 // Should not open the menu. | 174 // Should not open the menu. |
| 175 NSEvent* event = MouseDownEvent(NSRightMouseDown); | 175 NSEvent* event = MouseDownEvent(NSRightMouseDown); |
| 176 [button_ rightMouseDown:event]; | 176 [button_ rightMouseDown:event]; |
| 177 | 177 |
| 178 EXPECT_FALSE([delegate didOpen]); | 178 EXPECT_FALSE([delegate didOpen]); |
| 179 EXPECT_FALSE([delegate isOpen]); | 179 EXPECT_FALSE([delegate isOpen]); |
| 180 | 180 |
| 181 // Should open the menu in this case. | 181 // Should open the menu in this case. |
| 182 [button_ performClick:nil]; | 182 [button_ performClick:nil]; |
| 183 | 183 |
| 184 EXPECT_TRUE([delegate didOpen]); | 184 EXPECT_TRUE([delegate didOpen]); |
| 185 EXPECT_FALSE([delegate isOpen]); | 185 EXPECT_FALSE([delegate isOpen]); |
| 186 } | 186 } |
| 187 | 187 |
| 188 } // namespace | 188 } // namespace |
| OLD | NEW |