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 |
index df2e98fb118ac90edcc4cb35aebb2610b97b2f1c..c7f399a3840c7f4431adc1ff56726029a65bc5c2 100644 |
--- a/chrome/browser/ui/cocoa/bookmarks/bookmark_bar_folder_view_unittest.mm |
+++ b/chrome/browser/ui/cocoa/bookmarks/bookmark_bar_folder_view_unittest.mm |
@@ -3,7 +3,7 @@ |
// found in the LICENSE file. |
#include "base/memory/scoped_nsobject.h" |
-#import "chrome/browser/ui/cocoa/bookmarks/bookmark_bar_controller.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" |
@@ -12,203 +12,117 @@ |
#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" |
namespace { |
- const CGFloat kFakeIndicatorPos = 7.0; |
-}; |
- |
-// Fake DraggingInfo, fake BookmarkBarController, fake NSPasteboard... |
-@interface FakeDraggingInfo : NSObject { |
- @public |
- BOOL dragButtonToPong_; |
- BOOL dragURLsPong_; |
- BOOL dragBookmarkDataPong_; |
- BOOL dropIndicatorShown_; |
- BOOL draggingEnteredCalled_; |
- // Only mock one type of drag data at a time. |
- NSString* dragDataType_; |
-} |
-@property (readwrite) BOOL dropIndicatorShown; |
-@property (readwrite) BOOL draggingEnteredCalled; |
-@property (copy) NSString* dragDataType; |
-@end |
- |
-@implementation FakeDraggingInfo |
- |
-@synthesize dropIndicatorShown = dropIndicatorShown_; |
-@synthesize draggingEnteredCalled = draggingEnteredCalled_; |
-@synthesize dragDataType = dragDataType_; |
- |
-- (id)init { |
- if ((self = [super init])) { |
- dropIndicatorShown_ = YES; |
- } |
- return self; |
-} |
- |
-- (void)dealloc { |
- [dragDataType_ release]; |
- [super dealloc]; |
-} |
- |
-- (void)reset { |
- [dragDataType_ release]; |
- dragDataType_ = nil; |
- dragButtonToPong_ = NO; |
- dragURLsPong_ = NO; |
- dragBookmarkDataPong_ = NO; |
- dropIndicatorShown_ = YES; |
- draggingEnteredCalled_ = NO; |
-} |
- |
-// NSDragInfo mocking functions. |
- |
-- (id)draggingPasteboard { |
- return self; |
-} |
- |
-// So we can look local. |
-- (id)draggingSource { |
- return self; |
-} |
- |
-- (NSDragOperation)draggingSourceOperationMask { |
- return NSDragOperationCopy | NSDragOperationMove; |
-} |
- |
-- (NSPoint)draggingLocation { |
- return NSMakePoint(10, 10); |
-} |
- |
-// NSPasteboard mocking functions. |
- |
-- (BOOL)containsURLData { |
- NSArray* urlTypes = [URLDropTargetHandler handledDragTypes]; |
- if (dragDataType_) |
- return [urlTypes containsObject:dragDataType_]; |
- return NO; |
-} |
-- (NSData*)dataForType:(NSString*)type { |
- if (dragDataType_ && [dragDataType_ isEqualToString:type]) |
- return [NSData data]; // Return something, anything. |
- return nil; |
-} |
- |
-// Fake a controller for callback ponging |
- |
-- (BOOL)dragButton:(BookmarkButton*)button to:(NSPoint)point copy:(BOOL)copy { |
- dragButtonToPong_ = YES; |
- return YES; |
-} |
- |
-- (BOOL)addURLs:(NSArray*)urls withTitles:(NSArray*)titles at:(NSPoint)point { |
- dragURLsPong_ = YES; |
- return YES; |
-} |
- |
-- (void)getURLs:(NSArray**)outUrls |
- andTitles:(NSArray**)outTitles |
- convertingFilenames:(BOOL)convertFilenames { |
-} |
- |
-- (BOOL)dragBookmarkData:(id<NSDraggingInfo>)info { |
- dragBookmarkDataPong_ = YES; |
- return NO; |
-} |
- |
-// Confirm the pongs. |
- |
-- (BOOL)dragButtonToPong { |
- return dragButtonToPong_; |
-} |
- |
-- (BOOL)dragURLsPong { |
- return dragURLsPong_; |
-} |
- |
-- (BOOL)dragBookmarkDataPong { |
- return dragBookmarkDataPong_; |
-} |
- |
-- (CGFloat)indicatorPosForDragToPoint:(NSPoint)point { |
- return kFakeIndicatorPos; |
-} |
- |
-- (BOOL)shouldShowIndicatorShownForPoint:(NSPoint)point { |
- return dropIndicatorShown_; |
-} |
- |
-- (BOOL)draggingAllowed:(id<NSDraggingInfo>)info { |
- return YES; |
-} |
- |
-- (NSDragOperation)draggingEntered:(id<NSDraggingInfo>)info { |
- draggingEnteredCalled_ = YES; |
- return NSDragOperationNone; |
-} |
- |
-@end |
- |
-namespace { |
+// Some values used for mocks and fakes. |
+const CGFloat kFakeIndicatorPos = 7.0; |
+const NSPoint kPoint = {10, 10}; |
+const BOOL kYes = YES; |
+const BOOL kNo = NO; |
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] andReturnValue:OCMOCK_VALUE(kYes)] containsURLData]; |
+ [[pasteboard stub] getURLs:[OCMArg setTo:nil] |
+ andTitles:[OCMArg setTo:nil] |
+ convertingFilenames:YES]; |
+ return pasteboard; |
} |
+ id GetFakeDragInfoForType(NSString* dataType) { |
+ id drag_info = [OCMockObject mockForProtocol:@protocol(NSDraggingInfo)]; |
+ id pasteboard = GetFakePasteboardForType(dataType); |
+ [[[drag_info stub] andReturn:pasteboard] draggingPasteboard]; |
+ [[[drag_info stub] andReturnValue:[NSValue valueWithPoint:kPoint]] |
+ draggingLocation]; |
+ [[[drag_info stub] andReturn:drag_info] |
+ draggingSource]; |
+ NSDragOperation drag_operation = NSDragOperationCopy | NSDragOperationMove; |
+ [[[drag_info stub] andReturnValue:OCMOCK_VALUE(drag_operation)] |
+ draggingSourceOperationMask]; |
+ return drag_info; |
+ } |
+ |
+ id GetMockController(BOOL show_indicator) { |
+ id mock_controller |
+ = [OCMockObject mockForClass:[BookmarkBarFolderController class]]; |
+ [[[mock_controller stub] andReturnValue:OCMOCK_VALUE(kYes)] |
+ draggingAllowed:OCMOCK_ANY]; |
+ [[[mock_controller stub] andReturnValue:OCMOCK_VALUE(show_indicator)] |
+ shouldShowIndicatorShownForPoint:kPoint]; |
+ [[[mock_controller stub] andReturnValue:OCMOCK_VALUE(kFakeIndicatorPos)] |
+ indicatorPosForDragToPoint:kPoint]; |
+ return mock_controller; |
+ } |
+ |
+ scoped_nsobject<id> mock_controller_; |
scoped_nsobject<BookmarkBarFolderView> view_; |
}; |
TEST_F(BookmarkBarFolderViewTest, BookmarkButtonDragAndDrop) { |
- [view_ awakeFromNib]; |
- scoped_nsobject<FakeDraggingInfo> info([[FakeDraggingInfo alloc] init]); |
- [view_ setController:info.get()]; |
- [info reset]; |
+ id drag_info = GetFakeDragInfoForType(kBookmarkButtonDragType); |
+ NSDragOperation expectedValue = NSDragOperationNone; |
+ [[[mock_controller_ expect] andReturnValue:OCMOCK_VALUE(expectedValue)] |
+ draggingEntered:drag_info]; |
+ [[[mock_controller_ expect] andReturnValue:OCMOCK_VALUE(kNo)] |
+ dragBookmarkData:drag_info]; |
+ [[[mock_controller_ expect] andReturnValue:OCMOCK_VALUE(kYes)] |
+ dragButton:OCMOCK_ANY to:kPoint copy:NO]; |
- [info setDragDataType:kBookmarkButtonDragType]; |
- EXPECT_EQ([view_ draggingEntered:(id)info.get()], NSDragOperationMove); |
- EXPECT_TRUE([view_ performDragOperation:(id)info.get()]); |
- EXPECT_TRUE([info dragButtonToPong]); |
- EXPECT_FALSE([info dragURLsPong]); |
- EXPECT_TRUE([info dragBookmarkDataPong]); |
+ EXPECT_EQ([view_ draggingEntered:drag_info], NSDragOperationMove); |
+ EXPECT_TRUE([view_ performDragOperation:drag_info]); |
} |
TEST_F(BookmarkBarFolderViewTest, URLDragAndDrop) { |
- [view_ awakeFromNib]; |
- scoped_nsobject<FakeDraggingInfo> info([[FakeDraggingInfo alloc] init]); |
- [view_ setController:info.get()]; |
- [info reset]; |
- |
NSArray* dragTypes = [URLDropTargetHandler handledDragTypes]; |
for (NSString* type in dragTypes) { |
- [info setDragDataType:type]; |
- EXPECT_EQ([view_ draggingEntered:(id)info.get()], NSDragOperationMove); |
- EXPECT_TRUE([view_ performDragOperation:(id)info.get()]); |
- EXPECT_FALSE([info dragButtonToPong]); |
- EXPECT_TRUE([info dragURLsPong]); |
- EXPECT_TRUE([info dragBookmarkDataPong]); |
- [info reset]; |
+ id drag_info = GetFakeDragInfoForType(type); |
+ NSDragOperation expectedValue = NSDragOperationNone; |
+ [[[mock_controller_ expect] andReturnValue:OCMOCK_VALUE(expectedValue)] |
+ draggingEntered:drag_info]; |
+ [[[mock_controller_ expect] andReturnValue:OCMOCK_VALUE(kNo)] |
+ dragBookmarkData:drag_info]; |
+ [[[mock_controller_ expect] andReturnValue:OCMOCK_VALUE(kYes)] |
+ 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) { |
- [view_ awakeFromNib]; |
- scoped_nsobject<FakeDraggingInfo> info([[FakeDraggingInfo alloc] init]); |
- [view_ setController:info.get()]; |
- [info reset]; |
- |
- [info setDragDataType:kBookmarkButtonDragType]; |
- EXPECT_FALSE([info draggingEnteredCalled]); |
- EXPECT_EQ([view_ draggingEntered:(id)info.get()], NSDragOperationMove); |
- EXPECT_TRUE([info draggingEnteredCalled]); // Ensure controller pinged. |
+ id drag_info = GetFakeDragInfoForType(kBookmarkButtonDragType); |
+ NSDragOperation expectedValue = NSDragOperationNone; |
+ [[[mock_controller_ expect] andReturnValue:OCMOCK_VALUE(expectedValue)] |
+ draggingEntered:drag_info]; |
+ EXPECT_EQ([view_ draggingEntered:drag_info], NSDragOperationMove); |
+ [mock_controller_ verify]; |
EXPECT_TRUE([view_ dropIndicatorShown]); |
EXPECT_EQ([view_ dropIndicatorPosition], kFakeIndicatorPos); |
- |
- [info setDropIndicatorShown:NO]; |
- EXPECT_EQ([view_ draggingEntered:(id)info.get()], NSDragOperationMove); |
+ mock_controller_.reset([GetMockController(NO) retain]); |
+ [view_ setController:mock_controller_]; |
+ [[[mock_controller_ expect] andReturnValue:OCMOCK_VALUE(expectedValue)] |
+ draggingEntered:drag_info]; |
+ EXPECT_EQ([view_ draggingEntered:drag_info], NSDragOperationMove); |
EXPECT_FALSE([view_ dropIndicatorShown]); |
} |