Index: chrome/browser/ui/cocoa/bookmarks/bookmark_bar_folder_view_unittest.mm |
diff --git a/chrome/browser/ui/cocoa/bookmarks/bookmark_bar_folder_view_unittest.mm b/chrome/browser/ui/cocoa/bookmarks/bookmark_bar_folder_view_unittest.mm |
new file mode 100644 |
index 0000000000000000000000000000000000000000..aecb48f493e17d4cf176f68f81369e086607ff7a |
--- /dev/null |
+++ b/chrome/browser/ui/cocoa/bookmarks/bookmark_bar_folder_view_unittest.mm |
@@ -0,0 +1,151 @@ |
+// Copyright (c) 2011 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. |
+ |
+#include "base/memory/scoped_nsobject.h" |
+#import "chrome/browser/ui/cocoa/bookmarks/bookmark_bar_folder_controller.h" |
+#import "chrome/browser/ui/cocoa/bookmarks/bookmark_bar_folder_view.h" |
+#import "chrome/browser/ui/cocoa/bookmarks/bookmark_button.h" |
+#import "chrome/browser/ui/cocoa/bookmarks/bookmark_folder_target.h" |
+#import "chrome/browser/ui/cocoa/cocoa_test_helper.h" |
+#import "chrome/browser/ui/cocoa/url_drop_target.h" |
+#include "testing/gtest/include/gtest/gtest.h" |
+#include "testing/platform_test.h" |
+#import "third_party/mozilla/NSPasteboard+Utils.h" |
+#import "third_party/ocmock/OCMock/OCMock.h" |
+#import "third_party/ocmock/ocmock_extensions.h" |
+ |
+// Allows us to verify BookmarkBarFolderView. |
+@interface BookmarkBarFolderView(TestingAPI) |
+ |
+@property(readonly, nonatomic) BOOL dropIndicatorShown; |
+@property(readonly, nonatomic) CGFloat dropIndicatorPosition; |
+ |
+-(void)setController:(id<BookmarkButtonControllerProtocol>)controller; |
+ |
+@end |
+ |
+@implementation BookmarkBarFolderView(TestingAPI) |
+ |
+-(void)setController:(id<BookmarkButtonControllerProtocol>)controller { |
+ controller_ = controller; |
+} |
+ |
+-(BOOL)dropIndicatorShown { |
+ return dropIndicatorShown_; |
+} |
+ |
+-(CGFloat)dropIndicatorPosition { |
+ return dropIndicatorPosition_; |
+} |
+ |
+@end |
+ |
+namespace { |
+ |
+// Some values used for mocks and fakes. |
+const CGFloat kFakeIndicatorPos = 7.0; |
+const NSPoint kPoint = {10, 10}; |
+ |
+class BookmarkBarFolderViewTest : public CocoaTest { |
+ public: |
+ virtual void SetUp() { |
+ CocoaTest::SetUp(); |
+ view_.reset([[BookmarkBarFolderView alloc] init]); |
+ mock_controller_.reset([GetMockController(YES) retain]); |
+ [view_ awakeFromNib]; |
+ [view_ setController:mock_controller_]; |
+ } |
+ |
+ virtual void TearDown() { |
+ [mock_controller_ verify]; |
+ CocoaTest::TearDown(); |
+ } |
+ |
+ id GetFakePasteboardForType(NSString* dataType) { |
+ id pasteboard = [OCMockObject mockForClass:[NSPasteboard class]]; |
+ [[[pasteboard stub] andReturn:[NSData data]] dataForType:dataType]; |
+ [[[pasteboard stub] andReturn:nil] dataForType:OCMOCK_ANY]; |
+ [[[pasteboard stub] andReturnBool:YES] containsURLData]; |
+ [[pasteboard stub] getURLs:[OCMArg setTo:nil] |
+ andTitles:[OCMArg setTo:nil] |
+ convertingFilenames:YES]; |
+ return pasteboard; |
+ } |
+ |
+ id GetFakeDragInfoForType(NSString* dataType) { |
+ // Need something non-nil to return as the draggingSource. |
+ id source = [OCMockObject mockForClass:[NSObject class]]; |
+ id drag_info = [OCMockObject mockForProtocol:@protocol(NSDraggingInfo)]; |
+ id pasteboard = GetFakePasteboardForType(dataType); |
+ [[[drag_info stub] andReturn:pasteboard] draggingPasteboard]; |
+ [[[drag_info stub] andReturnNSPoint:kPoint] draggingLocation]; |
+ [[[drag_info stub] andReturn:source] draggingSource]; |
+ [[[drag_info stub] |
+ andReturnUnsignedInteger:NSDragOperationCopy | NSDragOperationMove] |
+ draggingSourceOperationMask]; |
+ return drag_info; |
+ } |
+ |
+ id GetMockController(BOOL show_indicator) { |
+ id mock_controller |
+ = [OCMockObject mockForClass:[BookmarkBarFolderController class]]; |
+ [[[mock_controller stub] andReturnBool:YES] |
+ draggingAllowed:OCMOCK_ANY]; |
+ [[[mock_controller stub] andReturnBool:show_indicator] |
+ shouldShowIndicatorShownForPoint:kPoint]; |
+ [[[mock_controller stub] andReturnFloat:kFakeIndicatorPos] |
+ indicatorPosForDragToPoint:kPoint]; |
+ return mock_controller; |
+ } |
+ |
+ scoped_nsobject<id> mock_controller_; |
+ scoped_nsobject<BookmarkBarFolderView> view_; |
+}; |
+ |
+TEST_F(BookmarkBarFolderViewTest, BookmarkButtonDragAndDrop) { |
+ id drag_info = GetFakeDragInfoForType(kBookmarkButtonDragType); |
+ [[[mock_controller_ expect] andReturnUnsignedInteger:NSDragOperationNone] |
+ draggingEntered:drag_info]; |
+ [[[mock_controller_ expect] andReturnBool:NO] dragBookmarkData:drag_info]; |
+ [[[mock_controller_ expect] andReturnBool:YES] dragButton:OCMOCK_ANY |
+ to:kPoint |
+ copy:NO]; |
+ |
+ EXPECT_EQ([view_ draggingEntered:drag_info], NSDragOperationMove); |
+ EXPECT_TRUE([view_ performDragOperation:drag_info]); |
+} |
+ |
+TEST_F(BookmarkBarFolderViewTest, URLDragAndDrop) { |
+ NSArray* dragTypes = [URLDropTargetHandler handledDragTypes]; |
+ for (NSString* type in dragTypes) { |
+ id drag_info = GetFakeDragInfoForType(type); |
+ [[[mock_controller_ expect] andReturnUnsignedInteger:NSDragOperationNone] |
+ draggingEntered:drag_info]; |
+ [[[mock_controller_ expect] andReturnBool:NO] dragBookmarkData:drag_info]; |
+ [[[mock_controller_ expect] andReturnBool:YES] addURLs:OCMOCK_ANY |
+ withTitles:OCMOCK_ANY |
+ at:kPoint]; |
+ EXPECT_EQ([view_ draggingEntered:drag_info], NSDragOperationMove); |
+ EXPECT_TRUE([view_ performDragOperation:drag_info]); |
+ [mock_controller_ verify]; |
+ } |
+} |
+ |
+TEST_F(BookmarkBarFolderViewTest, BookmarkButtonDropIndicator) { |
+ id drag_info = GetFakeDragInfoForType(kBookmarkButtonDragType); |
+ [[[mock_controller_ expect] andReturnUnsignedInteger:NSDragOperationNone] |
+ draggingEntered:drag_info]; |
+ EXPECT_EQ([view_ draggingEntered:drag_info], NSDragOperationMove); |
+ [mock_controller_ verify]; |
+ EXPECT_TRUE([view_ dropIndicatorShown]); |
+ EXPECT_EQ([view_ dropIndicatorPosition], kFakeIndicatorPos); |
+ mock_controller_.reset([GetMockController(NO) retain]); |
+ [view_ setController:mock_controller_]; |
+ [[[mock_controller_ expect] andReturnUnsignedInteger:NSDragOperationNone] |
+ draggingEntered:drag_info]; |
+ EXPECT_EQ([view_ draggingEntered:drag_info], NSDragOperationMove); |
+ EXPECT_FALSE([view_ dropIndicatorShown]); |
+} |
+ |
+} // namespace |