Home | History | Annotate | Download | only in bookmarks
      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