Index: chrome/browser/ui/cocoa/tab_controller_unittest.mm |
=================================================================== |
--- chrome/browser/ui/cocoa/tab_controller_unittest.mm (revision 71805) |
+++ chrome/browser/ui/cocoa/tab_controller_unittest.mm (working copy) |
@@ -1,333 +0,0 @@ |
-// Copyright (c) 2009 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. |
- |
-#import <Cocoa/Cocoa.h> |
- |
-#import "base/scoped_nsobject.h" |
-#import "chrome/browser/ui/cocoa/tab_controller.h" |
-#import "chrome/browser/ui/cocoa/tab_controller_target.h" |
-#include "chrome/browser/ui/cocoa/cocoa_test_helper.h" |
-#include "testing/gtest/include/gtest/gtest.h" |
-#import "testing/gtest_mac.h" |
-#include "testing/platform_test.h" |
- |
-// Implements the target interface for the tab, which gets sent messages when |
-// the tab is clicked on by the user and when its close box is clicked. |
-@interface TabControllerTestTarget : NSObject<TabControllerTarget> { |
- @private |
- bool selected_; |
- bool closed_; |
-} |
-- (bool)selected; |
-- (bool)closed; |
-@end |
- |
-@implementation TabControllerTestTarget |
-- (bool)selected { |
- return selected_; |
-} |
-- (bool)closed { |
- return closed_; |
-} |
-- (void)selectTab:(id)sender { |
- selected_ = true; |
-} |
-- (void)closeTab:(id)sender { |
- closed_ = true; |
-} |
-- (void)mouseTimer:(NSTimer*)timer { |
- // Fire the mouseUp to break the TabView drag loop. |
- NSEvent* current = [NSApp currentEvent]; |
- NSWindow* window = [timer userInfo]; |
- NSEvent* up = [NSEvent mouseEventWithType:NSLeftMouseUp |
- location:[current locationInWindow] |
- modifierFlags:0 |
- timestamp:[current timestamp] |
- windowNumber:[window windowNumber] |
- context:nil |
- eventNumber:0 |
- clickCount:1 |
- pressure:1.0]; |
- [window postEvent:up atStart:YES]; |
-} |
-- (void)commandDispatch:(TabStripModel::ContextMenuCommand)command |
- forController:(TabController*)controller { |
-} |
-- (BOOL)isCommandEnabled:(TabStripModel::ContextMenuCommand)command |
- forController:(TabController*)controller { |
- return NO; |
-} |
-@end |
- |
-namespace { |
- |
-CGFloat LeftMargin(NSRect superFrame, NSRect subFrame) { |
- return NSMinX(subFrame) - NSMinX(superFrame); |
-} |
- |
-CGFloat RightMargin(NSRect superFrame, NSRect subFrame) { |
- return NSMaxX(superFrame) - NSMaxX(subFrame); |
-} |
- |
-// The dragging code in TabView makes heavy use of autorelease pools so |
-// inherit from CocoaTest to have one created for us. |
-class TabControllerTest : public CocoaTest { |
- public: |
- TabControllerTest() { } |
-}; |
- |
-// Tests creating the controller, sticking it in a window, and removing it. |
-TEST_F(TabControllerTest, Creation) { |
- NSWindow* window = test_window(); |
- scoped_nsobject<TabController> controller([[TabController alloc] init]); |
- [[window contentView] addSubview:[controller view]]; |
- EXPECT_TRUE([controller tabView]); |
- EXPECT_EQ([[controller view] window], window); |
- [[controller view] display]; // Test drawing to ensure nothing leaks/crashes. |
- [[controller view] removeFromSuperview]; |
-} |
- |
-// Tests sending it a close message and ensuring that the target/action get |
-// called. Mimics the user clicking on the close button in the tab. |
-TEST_F(TabControllerTest, Close) { |
- NSWindow* window = test_window(); |
- scoped_nsobject<TabController> controller([[TabController alloc] init]); |
- [[window contentView] addSubview:[controller view]]; |
- |
- scoped_nsobject<TabControllerTestTarget> target( |
- [[TabControllerTestTarget alloc] init]); |
- EXPECT_FALSE([target closed]); |
- [controller setTarget:target]; |
- EXPECT_EQ(target.get(), [controller target]); |
- |
- [controller closeTab:nil]; |
- EXPECT_TRUE([target closed]); |
- |
- [[controller view] removeFromSuperview]; |
-} |
- |
-// Tests setting the |selected| property via code. |
-TEST_F(TabControllerTest, APISelection) { |
- NSWindow* window = test_window(); |
- scoped_nsobject<TabController> controller([[TabController alloc] init]); |
- [[window contentView] addSubview:[controller view]]; |
- |
- EXPECT_FALSE([controller selected]); |
- [controller setSelected:YES]; |
- EXPECT_TRUE([controller selected]); |
- |
- [[controller view] removeFromSuperview]; |
-} |
- |
-// Tests that setting the title of a tab sets the tooltip as well. |
-TEST_F(TabControllerTest, ToolTip) { |
- NSWindow* window = test_window(); |
- |
- scoped_nsobject<TabController> controller([[TabController alloc] init]); |
- [[window contentView] addSubview:[controller view]]; |
- |
- EXPECT_TRUE([[controller toolTip] length] == 0); |
- NSString *tooltip_string = @"Some text to use as a tab title"; |
- [controller setTitle:tooltip_string]; |
- EXPECT_NSEQ(tooltip_string, [controller toolTip]); |
-} |
- |
-// Tests setting the |loading| property via code. |
-TEST_F(TabControllerTest, Loading) { |
- NSWindow* window = test_window(); |
- scoped_nsobject<TabController> controller([[TabController alloc] init]); |
- [[window contentView] addSubview:[controller view]]; |
- |
- EXPECT_EQ(kTabDone, [controller loadingState]); |
- [controller setLoadingState:kTabWaiting]; |
- EXPECT_EQ(kTabWaiting, [controller loadingState]); |
- [controller setLoadingState:kTabLoading]; |
- EXPECT_EQ(kTabLoading, [controller loadingState]); |
- [controller setLoadingState:kTabDone]; |
- EXPECT_EQ(kTabDone, [controller loadingState]); |
- |
- [[controller view] removeFromSuperview]; |
-} |
- |
-// Tests selecting the tab with the mouse click and ensuring the target/action |
-// get called. |
-TEST_F(TabControllerTest, UserSelection) { |
- NSWindow* window = test_window(); |
- |
- // Create a tab at a known location in the window that we can click on |
- // to activate selection. |
- scoped_nsobject<TabController> controller([[TabController alloc] init]); |
- [[window contentView] addSubview:[controller view]]; |
- NSRect frame = [[controller view] frame]; |
- frame.size.width = [TabController minTabWidth]; |
- frame.origin = NSMakePoint(0, 0); |
- [[controller view] setFrame:frame]; |
- |
- // Set the target and action. |
- scoped_nsobject<TabControllerTestTarget> target( |
- [[TabControllerTestTarget alloc] init]); |
- EXPECT_FALSE([target selected]); |
- [controller setTarget:target]; |
- [controller setAction:@selector(selectTab:)]; |
- EXPECT_EQ(target.get(), [controller target]); |
- EXPECT_EQ(@selector(selectTab:), [controller action]); |
- |
- // In order to track a click, we have to fake a mouse down and a mouse |
- // up, but the down goes into a tight drag loop. To break the loop, we have |
- // to fire a timer that sends a mouse up event while the "drag" is ongoing. |
- [NSTimer scheduledTimerWithTimeInterval:0.1 |
- target:target.get() |
- selector:@selector(mouseTimer:) |
- userInfo:window |
- repeats:NO]; |
- NSEvent* current = [NSApp currentEvent]; |
- NSPoint click_point = NSMakePoint(frame.size.width / 2, |
- frame.size.height / 2); |
- NSEvent* down = [NSEvent mouseEventWithType:NSLeftMouseDown |
- location:click_point |
- modifierFlags:0 |
- timestamp:[current timestamp] |
- windowNumber:[window windowNumber] |
- context:nil |
- eventNumber:0 |
- clickCount:1 |
- pressure:1.0]; |
- [[controller view] mouseDown:down]; |
- |
- // Check our target was told the tab got selected. |
- EXPECT_TRUE([target selected]); |
- |
- [[controller view] removeFromSuperview]; |
-} |
- |
-TEST_F(TabControllerTest, IconCapacity) { |
- NSWindow* window = test_window(); |
- scoped_nsobject<TabController> controller([[TabController alloc] init]); |
- [[window contentView] addSubview:[controller view]]; |
- int cap = [controller iconCapacity]; |
- EXPECT_GE(cap, 1); |
- |
- NSRect frame = [[controller view] frame]; |
- frame.size.width += 500; |
- [[controller view] setFrame:frame]; |
- int newcap = [controller iconCapacity]; |
- EXPECT_GT(newcap, cap); |
-} |
- |
-TEST_F(TabControllerTest, ShouldShowIcon) { |
- NSWindow* window = test_window(); |
- scoped_nsobject<TabController> controller([[TabController alloc] init]); |
- [[window contentView] addSubview:[controller view]]; |
- int cap = [controller iconCapacity]; |
- EXPECT_GT(cap, 0); |
- |
- // Tab is minimum width, both icon and close box should be hidden. |
- NSRect frame = [[controller view] frame]; |
- frame.size.width = [TabController minTabWidth]; |
- [[controller view] setFrame:frame]; |
- EXPECT_FALSE([controller shouldShowIcon]); |
- EXPECT_FALSE([controller shouldShowCloseButton]); |
- |
- // Setting the icon when tab is at min width should not show icon (bug 18359). |
- scoped_nsobject<NSView> newIcon( |
- [[NSView alloc] initWithFrame:NSMakeRect(0, 0, 16, 16)]); |
- [controller setIconView:newIcon.get()]; |
- EXPECT_TRUE([newIcon isHidden]); |
- |
- // Tab is at selected minimum width. Since it's selected, the close box |
- // should be visible. |
- [controller setSelected:YES]; |
- frame = [[controller view] frame]; |
- frame.size.width = [TabController minSelectedTabWidth]; |
- [[controller view] setFrame:frame]; |
- EXPECT_FALSE([controller shouldShowIcon]); |
- EXPECT_TRUE([newIcon isHidden]); |
- EXPECT_TRUE([controller shouldShowCloseButton]); |
- |
- // Test expanding the tab to max width and ensure the icon and close box |
- // get put back, even when de-selected. |
- frame.size.width = [TabController maxTabWidth]; |
- [[controller view] setFrame:frame]; |
- EXPECT_TRUE([controller shouldShowIcon]); |
- EXPECT_FALSE([newIcon isHidden]); |
- EXPECT_TRUE([controller shouldShowCloseButton]); |
- [controller setSelected:NO]; |
- EXPECT_TRUE([controller shouldShowIcon]); |
- EXPECT_TRUE([controller shouldShowCloseButton]); |
- |
- cap = [controller iconCapacity]; |
- EXPECT_GT(cap, 0); |
-} |
- |
-TEST_F(TabControllerTest, Menu) { |
- NSWindow* window = test_window(); |
- scoped_nsobject<TabController> controller([[TabController alloc] init]); |
- [[window contentView] addSubview:[controller view]]; |
- int cap = [controller iconCapacity]; |
- EXPECT_GT(cap, 0); |
- |
- // Asking the view for its menu should yield a valid menu. |
- NSMenu* menu = [[controller view] menu]; |
- EXPECT_TRUE(menu); |
- EXPECT_GT([menu numberOfItems], 0); |
-} |
- |
-// Tests that the title field is correctly positioned and sized when the |
-// view is resized. |
-TEST_F(TabControllerTest, TitleViewLayout) { |
- NSWindow* window = test_window(); |
- |
- scoped_nsobject<TabController> controller([[TabController alloc] init]); |
- [[window contentView] addSubview:[controller view]]; |
- NSRect tabFrame = [[controller view] frame]; |
- tabFrame.size.width = [TabController maxTabWidth]; |
- [[controller view] setFrame:tabFrame]; |
- |
- const NSRect originalTabFrame = [[controller view] frame]; |
- const NSRect originalIconFrame = [[controller iconView] frame]; |
- const NSRect originalCloseFrame = [[controller closeButton] frame]; |
- const NSRect originalTitleFrame = [[controller titleView] frame]; |
- |
- // Sanity check the start state. |
- EXPECT_FALSE([[controller iconView] isHidden]); |
- EXPECT_FALSE([[controller closeButton] isHidden]); |
- EXPECT_GT(NSWidth([[controller view] frame]), |
- NSWidth([[controller titleView] frame])); |
- |
- // Resize the tab so that that the it shrinks. |
- tabFrame.size.width = [TabController minTabWidth]; |
- [[controller view] setFrame:tabFrame]; |
- |
- // The icon view and close button should be hidden and the title view should |
- // be resize to take up their space. |
- EXPECT_TRUE([[controller iconView] isHidden]); |
- EXPECT_TRUE([[controller closeButton] isHidden]); |
- EXPECT_GT(NSWidth([[controller view] frame]), |
- NSWidth([[controller titleView] frame])); |
- EXPECT_EQ(LeftMargin(originalTabFrame, originalIconFrame), |
- LeftMargin([[controller view] frame], |
- [[controller titleView] frame])); |
- EXPECT_EQ(RightMargin(originalTabFrame, originalCloseFrame), |
- RightMargin([[controller view] frame], |
- [[controller titleView] frame])); |
- |
- // Resize the tab so that that the it grows. |
- tabFrame.size.width = [TabController maxTabWidth] * 0.75; |
- [[controller view] setFrame:tabFrame]; |
- |
- // The icon view and close button should be visible again and the title view |
- // should be resized to make room for them. |
- EXPECT_FALSE([[controller iconView] isHidden]); |
- EXPECT_FALSE([[controller closeButton] isHidden]); |
- EXPECT_GT(NSWidth([[controller view] frame]), |
- NSWidth([[controller titleView] frame])); |
- EXPECT_EQ(LeftMargin(originalTabFrame, originalTitleFrame), |
- LeftMargin([[controller view] frame], |
- [[controller titleView] frame])); |
- EXPECT_EQ(RightMargin(originalTabFrame, originalTitleFrame), |
- RightMargin([[controller view] frame], |
- [[controller titleView] frame])); |
-} |
- |
-} // namespace |