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 #import <Cocoa/Cocoa.h> 6 7 #include "base/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/browser_test_helper.h" 11 #import "chrome/browser/ui/cocoa/cocoa_test_helper.h" 12 13 namespace { 14 15 typedef CocoaTest BookmarkBarFolderHoverStateTest; 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. 20 TEST(BookmarkBarFolderHoverStateTest, HoverState) { 21 BrowserTestHelper helper; 22 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 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 MessageLoop::current()->PostDelayedTask( 49 FROM_HERE, 50 new MessageLoop::QuitTask, 51 bookmarks::kDragHoverOpenDelay * 1000.0 * 1.5); 52 MessageLoop::current()->Run(); 53 ASSERT_EQ(kHoverStateOpen, [bbfhs hoverState]); 54 ASSERT_EQ(button, [bbfhs hoverButton]); 55 56 // Test transition from opening to opened. 57 [bbfhs scheduleCloseBookmarkFolderOnHoverButton]; 58 ASSERT_EQ(kHoverStateClosing, [bbfhs hoverState]); 59 60 // Test transition from closing to open (aka cancel close). 61 [bbfhs cancelPendingCloseBookmarkFolderOnHoverButton]; 62 ASSERT_EQ(kHoverStateOpen, [bbfhs hoverState]); 63 ASSERT_EQ(button, [bbfhs hoverButton]); 64 65 // Test transition from closing to closed. 66 [bbfhs scheduleCloseBookmarkFolderOnHoverButton]; 67 ASSERT_EQ(kHoverStateClosing, [bbfhs hoverState]); 68 MessageLoop::current()->PostDelayedTask( 69 FROM_HERE, 70 new MessageLoop::QuitTask, 71 bookmarks::kDragHoverCloseDelay * 1000.0 * 1.5); 72 MessageLoop::current()->Run(); 73 ASSERT_EQ(kHoverStateClosed, [bbfhs hoverState]); 74 ASSERT_EQ(nil, [bbfhs hoverButton]); 75 } 76 77 } // namespace 78