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 3// found in the LICENSE file. 4 5#import <Cocoa/Cocoa.h> 6 7#include "base/message_loop/message_loop.h" 8#import "chrome/browser/ui/cocoa/bookmarks/bookmark_bar_controller.h" 9#import "chrome/browser/ui/cocoa/bookmarks/bookmark_bar_folder_hover_state.h" 10#import "chrome/browser/ui/cocoa/cocoa_test_helper.h" 11 12namespace { 13 14class BookmarkBarFolderHoverStateTest : public CocoaTest { 15}; 16 17// Hover state machine interface. 18// A strict call order is implied with these calls. It is ONLY valid to make 19// these specific state transitions. 20TEST_F(BookmarkBarFolderHoverStateTest, HoverState) { 21 base::MessageLoopForUI message_loop; 22 base::scoped_nsobject<BookmarkBarFolderHoverState> bbfhs; 23 bbfhs.reset([[BookmarkBarFolderHoverState alloc] init]); 24 25 // Initial state. 26 EXPECT_FALSE([bbfhs hoverButton]); 27 ASSERT_EQ(kHoverStateClosed, [bbfhs hoverState]); 28 29 base::scoped_nsobject<BookmarkButton> button; 30 button.reset([[BookmarkButton alloc] initWithFrame:NSMakeRect(0, 0, 20, 20)]); 31 32 // Test transition from closed to opening. 33 ASSERT_EQ(kHoverStateClosed, [bbfhs hoverState]); 34 [bbfhs scheduleOpenBookmarkFolderOnHoverButton:button]; 35 ASSERT_EQ(kHoverStateOpening, [bbfhs hoverState]); 36 37 // Test transition from opening to closed (aka cancel open). 38 [bbfhs cancelPendingOpenBookmarkFolderOnHoverButton]; 39 ASSERT_EQ(kHoverStateClosed, [bbfhs hoverState]); 40 ASSERT_EQ(nil, [bbfhs hoverButton]); 41 42 // Test transition from closed to opening. 43 ASSERT_EQ(kHoverStateClosed, [bbfhs hoverState]); 44 [bbfhs scheduleOpenBookmarkFolderOnHoverButton:button]; 45 ASSERT_EQ(kHoverStateOpening, [bbfhs hoverState]); 46 47 // Test transition from opening to opened. 48 message_loop.PostDelayedTask( 49 FROM_HERE, 50 base::MessageLoop::QuitClosure(), 51 base::TimeDelta::FromMilliseconds( 52 bookmarks::kDragHoverOpenDelay * 1000.0 * 1.5)); 53 message_loop.Run(); 54 ASSERT_EQ(kHoverStateOpen, [bbfhs hoverState]); 55 ASSERT_EQ(button, [bbfhs hoverButton]); 56 57 // Test transition from opening to opened. 58 [bbfhs scheduleCloseBookmarkFolderOnHoverButton]; 59 ASSERT_EQ(kHoverStateClosing, [bbfhs hoverState]); 60 61 // Test transition from closing to open (aka cancel close). 62 [bbfhs cancelPendingCloseBookmarkFolderOnHoverButton]; 63 ASSERT_EQ(kHoverStateOpen, [bbfhs hoverState]); 64 ASSERT_EQ(button, [bbfhs hoverButton]); 65 66 // Test transition from closing to closed. 67 [bbfhs scheduleCloseBookmarkFolderOnHoverButton]; 68 ASSERT_EQ(kHoverStateClosing, [bbfhs hoverState]); 69 message_loop.PostDelayedTask( 70 FROM_HERE, 71 base::MessageLoop::QuitClosure(), 72 base::TimeDelta::FromMilliseconds( 73 bookmarks::kDragHoverCloseDelay * 1000.0 * 1.5)); 74 message_loop.Run(); 75 ASSERT_EQ(kHoverStateClosed, [bbfhs hoverState]); 76 ASSERT_EQ(nil, [bbfhs hoverButton]); 77} 78 79} // namespace 80