| Index: chrome/browser/ui/cocoa/reload_button_unittest.mm
|
| ===================================================================
|
| --- chrome/browser/ui/cocoa/reload_button_unittest.mm (revision 71837)
|
| +++ chrome/browser/ui/cocoa/reload_button_unittest.mm (working copy)
|
| @@ -1,259 +0,0 @@
|
| -// Copyright (c) 2010 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 "chrome/browser/ui/cocoa/reload_button.h"
|
| -
|
| -#include "base/scoped_nsobject.h"
|
| -#include "chrome/app/chrome_command_ids.h"
|
| -#import "chrome/browser/ui/cocoa/cocoa_test_helper.h"
|
| -#import "chrome/browser/ui/cocoa/test_event_utils.h"
|
| -#import "testing/gtest_mac.h"
|
| -#include "testing/platform_test.h"
|
| -#import "third_party/ocmock/OCMock/OCMock.h"
|
| -
|
| -@protocol TargetActionMock <NSObject>
|
| -- (void)anAction:(id)sender;
|
| -@end
|
| -
|
| -namespace {
|
| -
|
| -class ReloadButtonTest : public CocoaTest {
|
| - public:
|
| - ReloadButtonTest() {
|
| - NSRect frame = NSMakeRect(0, 0, 20, 20);
|
| - scoped_nsobject<ReloadButton> button(
|
| - [[ReloadButton alloc] initWithFrame:frame]);
|
| - button_ = button.get();
|
| -
|
| - // Set things up so unit tests have a reliable baseline.
|
| - [button_ setTag:IDC_RELOAD];
|
| - [button_ awakeFromNib];
|
| -
|
| - [[test_window() contentView] addSubview:button_];
|
| - }
|
| -
|
| - ReloadButton* button_;
|
| -};
|
| -
|
| -TEST_VIEW(ReloadButtonTest, button_)
|
| -
|
| -// Test that mouse-tracking is setup and does the right thing.
|
| -TEST_F(ReloadButtonTest, IsMouseInside) {
|
| - EXPECT_TRUE([[button_ trackingAreas] containsObject:[button_ trackingArea]]);
|
| -
|
| - EXPECT_FALSE([button_ isMouseInside]);
|
| - [button_ mouseEntered:nil];
|
| - EXPECT_TRUE([button_ isMouseInside]);
|
| - [button_ mouseExited:nil];
|
| -}
|
| -
|
| -// Verify that multiple clicks do not result in multiple messages to
|
| -// the target.
|
| -TEST_F(ReloadButtonTest, IgnoredMultiClick) {
|
| - id mock_target = [OCMockObject mockForProtocol:@protocol(TargetActionMock)];
|
| - [button_ setTarget:mock_target];
|
| - [button_ setAction:@selector(anAction:)];
|
| -
|
| - // Expect the action once.
|
| - [[mock_target expect] anAction:button_];
|
| -
|
| - const std::pair<NSEvent*,NSEvent*> click_one =
|
| - test_event_utils::MouseClickInView(button_, 1);
|
| - const std::pair<NSEvent*,NSEvent*> click_two =
|
| - test_event_utils::MouseClickInView(button_, 2);
|
| - [NSApp postEvent:click_one.second atStart:YES];
|
| - [button_ mouseDown:click_one.first];
|
| - [NSApp postEvent:click_two.second atStart:YES];
|
| - [button_ mouseDown:click_two.first];
|
| -
|
| - [button_ setTarget:nil];
|
| -}
|
| -
|
| -TEST_F(ReloadButtonTest, UpdateTag) {
|
| - [button_ setTag:IDC_STOP];
|
| -
|
| - [button_ updateTag:IDC_RELOAD];
|
| - EXPECT_EQ(IDC_RELOAD, [button_ tag]);
|
| - NSImage* reloadImage = [button_ image];
|
| - NSString* const reloadToolTip = [button_ toolTip];
|
| -
|
| - [button_ updateTag:IDC_STOP];
|
| - EXPECT_EQ(IDC_STOP, [button_ tag]);
|
| - NSImage* stopImage = [button_ image];
|
| - NSString* const stopToolTip = [button_ toolTip];
|
| - EXPECT_NSNE(reloadImage, stopImage);
|
| - EXPECT_NSNE(reloadToolTip, stopToolTip);
|
| -
|
| - [button_ updateTag:IDC_RELOAD];
|
| - EXPECT_EQ(IDC_RELOAD, [button_ tag]);
|
| - EXPECT_NSEQ(reloadImage, [button_ image]);
|
| - EXPECT_NSEQ(reloadToolTip, [button_ toolTip]);
|
| -}
|
| -
|
| -// Test that when forcing the mode, it takes effect immediately,
|
| -// regardless of whether the mouse is hovering.
|
| -TEST_F(ReloadButtonTest, SetIsLoadingForce) {
|
| - EXPECT_FALSE([button_ isMouseInside]);
|
| - EXPECT_EQ(IDC_RELOAD, [button_ tag]);
|
| -
|
| - // Changes to stop immediately.
|
| - [button_ setIsLoading:YES force:YES];
|
| - EXPECT_EQ(IDC_STOP, [button_ tag]);
|
| -
|
| - // Changes to reload immediately.
|
| - [button_ setIsLoading:NO force:YES];
|
| - EXPECT_EQ(IDC_RELOAD, [button_ tag]);
|
| -
|
| - // Changes to stop immediately when the mouse is hovered, and
|
| - // doesn't change when the mouse exits.
|
| - [button_ mouseEntered:nil];
|
| - EXPECT_TRUE([button_ isMouseInside]);
|
| - [button_ setIsLoading:YES force:YES];
|
| - EXPECT_EQ(IDC_STOP, [button_ tag]);
|
| - [button_ mouseExited:nil];
|
| - EXPECT_FALSE([button_ isMouseInside]);
|
| - EXPECT_EQ(IDC_STOP, [button_ tag]);
|
| -
|
| - // Changes to reload immediately when the mouse is hovered, and
|
| - // doesn't change when the mouse exits.
|
| - [button_ mouseEntered:nil];
|
| - EXPECT_TRUE([button_ isMouseInside]);
|
| - [button_ setIsLoading:NO force:YES];
|
| - EXPECT_EQ(IDC_RELOAD, [button_ tag]);
|
| - [button_ mouseExited:nil];
|
| - EXPECT_FALSE([button_ isMouseInside]);
|
| - EXPECT_EQ(IDC_RELOAD, [button_ tag]);
|
| -}
|
| -
|
| -// Test that without force, stop mode is set immediately, but reload
|
| -// is affected by the hover status.
|
| -TEST_F(ReloadButtonTest, SetIsLoadingNoForceUnHover) {
|
| - EXPECT_FALSE([button_ isMouseInside]);
|
| - EXPECT_EQ(IDC_RELOAD, [button_ tag]);
|
| -
|
| - // Changes to stop immediately when the mouse is not hovering.
|
| - [button_ setIsLoading:YES force:NO];
|
| - EXPECT_EQ(IDC_STOP, [button_ tag]);
|
| -
|
| - // Changes to reload immediately when the mouse is not hovering.
|
| - [button_ setIsLoading:NO force:NO];
|
| - EXPECT_EQ(IDC_RELOAD, [button_ tag]);
|
| -
|
| - // Changes to stop immediately when the mouse is hovered, and
|
| - // doesn't change when the mouse exits.
|
| - [button_ mouseEntered:nil];
|
| - EXPECT_TRUE([button_ isMouseInside]);
|
| - [button_ setIsLoading:YES force:NO];
|
| - EXPECT_EQ(IDC_STOP, [button_ tag]);
|
| - [button_ mouseExited:nil];
|
| - EXPECT_FALSE([button_ isMouseInside]);
|
| - EXPECT_EQ(IDC_STOP, [button_ tag]);
|
| -
|
| - // Does not change to reload immediately when the mouse is hovered,
|
| - // changes when the mouse exits.
|
| - [button_ mouseEntered:nil];
|
| - EXPECT_TRUE([button_ isMouseInside]);
|
| - [button_ setIsLoading:NO force:NO];
|
| - EXPECT_EQ(IDC_STOP, [button_ tag]);
|
| - [button_ mouseExited:nil];
|
| - EXPECT_FALSE([button_ isMouseInside]);
|
| - EXPECT_EQ(IDC_RELOAD, [button_ tag]);
|
| -}
|
| -
|
| -// Test that without force, stop mode is set immediately, and reload
|
| -// will be set after a timeout.
|
| -// TODO(shess): Reenable, http://crbug.com/61485
|
| -TEST_F(ReloadButtonTest, DISABLED_SetIsLoadingNoForceTimeout) {
|
| - // When the event loop first spins, some delayed tracking-area setup
|
| - // is done, which causes -mouseExited: to be called. Spin it at
|
| - // least once, and dequeue any pending events.
|
| - // TODO(shess): It would be more reasonable to have an MockNSTimer
|
| - // factory for the class to use, which this code could fire
|
| - // directly.
|
| - while ([NSApp nextEventMatchingMask:NSAnyEventMask
|
| - untilDate:nil
|
| - inMode:NSDefaultRunLoopMode
|
| - dequeue:YES]) {
|
| - }
|
| -
|
| - const NSTimeInterval kShortTimeout = 0.1;
|
| - [ReloadButton setPendingReloadTimeout:kShortTimeout];
|
| -
|
| - EXPECT_FALSE([button_ isMouseInside]);
|
| - EXPECT_EQ(IDC_RELOAD, [button_ tag]);
|
| -
|
| - // Move the mouse into the button and press it.
|
| - [button_ mouseEntered:nil];
|
| - EXPECT_TRUE([button_ isMouseInside]);
|
| - [button_ setIsLoading:YES force:NO];
|
| - EXPECT_EQ(IDC_STOP, [button_ tag]);
|
| -
|
| - // Does not change to reload immediately when the mouse is hovered.
|
| - EXPECT_TRUE([button_ isMouseInside]);
|
| - [button_ setIsLoading:NO force:NO];
|
| - EXPECT_TRUE([button_ isMouseInside]);
|
| - EXPECT_EQ(IDC_STOP, [button_ tag]);
|
| - EXPECT_TRUE([button_ isMouseInside]);
|
| -
|
| - // Spin event loop until the timeout passes.
|
| - NSDate* pastTimeout = [NSDate dateWithTimeIntervalSinceNow:2 * kShortTimeout];
|
| - [NSApp nextEventMatchingMask:NSAnyEventMask
|
| - untilDate:pastTimeout
|
| - inMode:NSDefaultRunLoopMode
|
| - dequeue:NO];
|
| -
|
| - // Mouse is still hovered, button is in reload mode. If the mouse
|
| - // is no longer hovered, see comment at top of function.
|
| - EXPECT_TRUE([button_ isMouseInside]);
|
| - EXPECT_EQ(IDC_RELOAD, [button_ tag]);
|
| -}
|
| -
|
| -// Test that pressing stop after reload mode has been requested
|
| -// doesn't forward the stop message.
|
| -TEST_F(ReloadButtonTest, StopAfterReloadSet) {
|
| - id mock_target = [OCMockObject mockForProtocol:@protocol(TargetActionMock)];
|
| - [button_ setTarget:mock_target];
|
| - [button_ setAction:@selector(anAction:)];
|
| -
|
| - EXPECT_FALSE([button_ isMouseInside]);
|
| -
|
| - // Get to stop mode.
|
| - [button_ setIsLoading:YES force:YES];
|
| - EXPECT_EQ(IDC_STOP, [button_ tag]);
|
| - EXPECT_TRUE([button_ isEnabled]);
|
| -
|
| - // Expect the action once.
|
| - [[mock_target expect] anAction:button_];
|
| -
|
| - // Clicking in stop mode should send the action and transition to
|
| - // reload mode.
|
| - const std::pair<NSEvent*,NSEvent*> click =
|
| - test_event_utils::MouseClickInView(button_, 1);
|
| - [NSApp postEvent:click.second atStart:YES];
|
| - [button_ mouseDown:click.first];
|
| - EXPECT_EQ(IDC_RELOAD, [button_ tag]);
|
| - EXPECT_TRUE([button_ isEnabled]);
|
| -
|
| - // Get back to stop mode.
|
| - [button_ setIsLoading:YES force:YES];
|
| - EXPECT_EQ(IDC_STOP, [button_ tag]);
|
| - EXPECT_TRUE([button_ isEnabled]);
|
| -
|
| - // If hover prevented reload mode immediately taking effect, clicks should do
|
| - // nothing, because the button should be disabled.
|
| - [button_ mouseEntered:nil];
|
| - EXPECT_TRUE([button_ isMouseInside]);
|
| - [button_ setIsLoading:NO force:NO];
|
| - EXPECT_EQ(IDC_STOP, [button_ tag]);
|
| - EXPECT_FALSE([button_ isEnabled]);
|
| - [NSApp postEvent:click.second atStart:YES];
|
| - [button_ mouseDown:click.first];
|
| - EXPECT_EQ(IDC_STOP, [button_ tag]);
|
| -
|
| - [button_ setTarget:nil];
|
| -}
|
| -
|
| -} // namespace
|
|
|