Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(748)

Side by Side Diff: chrome/browser/ui/cocoa/bookmarks/bookmark_bar_folder_view_unittest.mm

Issue 7039047: Clean up bookmark_bar_folder_view testing. Specifically get it working with OCMock. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Created 9 years, 7 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
OLDNEW
1 // Copyright (c) 2011 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2011 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "base/memory/scoped_nsobject.h" 5 #include "base/memory/scoped_nsobject.h"
6 #import "chrome/browser/ui/cocoa/bookmarks/bookmark_bar_controller.h" 6 #import "chrome/browser/ui/cocoa/bookmarks/bookmark_bar_folder_controller.h"
7 #import "chrome/browser/ui/cocoa/bookmarks/bookmark_bar_folder_view.h" 7 #import "chrome/browser/ui/cocoa/bookmarks/bookmark_bar_folder_view.h"
8 #import "chrome/browser/ui/cocoa/bookmarks/bookmark_button.h" 8 #import "chrome/browser/ui/cocoa/bookmarks/bookmark_button.h"
9 #import "chrome/browser/ui/cocoa/bookmarks/bookmark_folder_target.h" 9 #import "chrome/browser/ui/cocoa/bookmarks/bookmark_folder_target.h"
10 #import "chrome/browser/ui/cocoa/cocoa_test_helper.h" 10 #import "chrome/browser/ui/cocoa/cocoa_test_helper.h"
11 #import "chrome/browser/ui/cocoa/url_drop_target.h" 11 #import "chrome/browser/ui/cocoa/url_drop_target.h"
12 #include "testing/gtest/include/gtest/gtest.h" 12 #include "testing/gtest/include/gtest/gtest.h"
13 #include "testing/platform_test.h" 13 #include "testing/platform_test.h"
14 #import "third_party/mozilla/NSPasteboard+Utils.h" 14 #import "third_party/mozilla/NSPasteboard+Utils.h"
15 #import "third_party/ocmock/OCMock/OCMock.h"
15 16
16 namespace { 17 namespace {
17 const CGFloat kFakeIndicatorPos = 7.0;
18 };
19 18
20 // Fake DraggingInfo, fake BookmarkBarController, fake NSPasteboard... 19 // Some values used for mocks and fakes.
21 @interface FakeDraggingInfo : NSObject { 20 const CGFloat kFakeIndicatorPos = 7.0;
22 @public 21 const NSPoint kPoint = {10, 10};
23 BOOL dragButtonToPong_; 22 const BOOL kYes = YES;
24 BOOL dragURLsPong_; 23 const BOOL kNo = NO;
25 BOOL dragBookmarkDataPong_;
26 BOOL dropIndicatorShown_;
27 BOOL draggingEnteredCalled_;
28 // Only mock one type of drag data at a time.
29 NSString* dragDataType_;
30 }
31 @property (readwrite) BOOL dropIndicatorShown;
32 @property (readwrite) BOOL draggingEnteredCalled;
33 @property (copy) NSString* dragDataType;
34 @end
35
36 @implementation FakeDraggingInfo
37
38 @synthesize dropIndicatorShown = dropIndicatorShown_;
39 @synthesize draggingEnteredCalled = draggingEnteredCalled_;
40 @synthesize dragDataType = dragDataType_;
41
42 - (id)init {
43 if ((self = [super init])) {
44 dropIndicatorShown_ = YES;
45 }
46 return self;
47 }
48
49 - (void)dealloc {
50 [dragDataType_ release];
51 [super dealloc];
52 }
53
54 - (void)reset {
55 [dragDataType_ release];
56 dragDataType_ = nil;
57 dragButtonToPong_ = NO;
58 dragURLsPong_ = NO;
59 dragBookmarkDataPong_ = NO;
60 dropIndicatorShown_ = YES;
61 draggingEnteredCalled_ = NO;
62 }
63
64 // NSDragInfo mocking functions.
65
66 - (id)draggingPasteboard {
67 return self;
68 }
69
70 // So we can look local.
71 - (id)draggingSource {
72 return self;
73 }
74
75 - (NSDragOperation)draggingSourceOperationMask {
76 return NSDragOperationCopy | NSDragOperationMove;
77 }
78
79 - (NSPoint)draggingLocation {
80 return NSMakePoint(10, 10);
81 }
82
83 // NSPasteboard mocking functions.
84
85 - (BOOL)containsURLData {
86 NSArray* urlTypes = [URLDropTargetHandler handledDragTypes];
87 if (dragDataType_)
88 return [urlTypes containsObject:dragDataType_];
89 return NO;
90 }
91
92 - (NSData*)dataForType:(NSString*)type {
93 if (dragDataType_ && [dragDataType_ isEqualToString:type])
94 return [NSData data]; // Return something, anything.
95 return nil;
96 }
97
98 // Fake a controller for callback ponging
99
100 - (BOOL)dragButton:(BookmarkButton*)button to:(NSPoint)point copy:(BOOL)copy {
101 dragButtonToPong_ = YES;
102 return YES;
103 }
104
105 - (BOOL)addURLs:(NSArray*)urls withTitles:(NSArray*)titles at:(NSPoint)point {
106 dragURLsPong_ = YES;
107 return YES;
108 }
109
110 - (void)getURLs:(NSArray**)outUrls
111 andTitles:(NSArray**)outTitles
112 convertingFilenames:(BOOL)convertFilenames {
113 }
114
115 - (BOOL)dragBookmarkData:(id<NSDraggingInfo>)info {
116 dragBookmarkDataPong_ = YES;
117 return NO;
118 }
119
120 // Confirm the pongs.
121
122 - (BOOL)dragButtonToPong {
123 return dragButtonToPong_;
124 }
125
126 - (BOOL)dragURLsPong {
127 return dragURLsPong_;
128 }
129
130 - (BOOL)dragBookmarkDataPong {
131 return dragBookmarkDataPong_;
132 }
133
134 - (CGFloat)indicatorPosForDragToPoint:(NSPoint)point {
135 return kFakeIndicatorPos;
136 }
137
138 - (BOOL)shouldShowIndicatorShownForPoint:(NSPoint)point {
139 return dropIndicatorShown_;
140 }
141
142 - (BOOL)draggingAllowed:(id<NSDraggingInfo>)info {
143 return YES;
144 }
145
146 - (NSDragOperation)draggingEntered:(id<NSDraggingInfo>)info {
147 draggingEnteredCalled_ = YES;
148 return NSDragOperationNone;
149 }
150
151 @end
152
153 namespace {
154 24
155 class BookmarkBarFolderViewTest : public CocoaTest { 25 class BookmarkBarFolderViewTest : public CocoaTest {
156 public: 26 public:
157 virtual void SetUp() { 27 virtual void SetUp() {
158 CocoaTest::SetUp(); 28 CocoaTest::SetUp();
159 view_.reset([[BookmarkBarFolderView alloc] init]); 29 view_.reset([[BookmarkBarFolderView alloc] init]);
30 mock_controller_.reset([GetMockController(YES) retain]);
31 [view_ awakeFromNib];
32 [view_ setController:mock_controller_];
160 } 33 }
161 34
35 virtual void TearDown() {
36 [mock_controller_ verify];
37 CocoaTest::TearDown();
38 }
39
40 id GetFakePasteboardForType(NSString* dataType) {
41 id pasteboard = [OCMockObject mockForClass:[NSPasteboard class]];
42 [[[pasteboard stub] andReturn:[NSData data]] dataForType:dataType];
43 [[[pasteboard stub] andReturn:nil] dataForType:OCMOCK_ANY];
44 [[[pasteboard stub] andReturnValue:OCMOCK_VALUE(kYes)] containsURLData];
45 [[pasteboard stub] getURLs:[OCMArg setTo:nil]
46 andTitles:[OCMArg setTo:nil]
47 convertingFilenames:YES];
48 return pasteboard;
49 }
50
51 id GetFakeDragInfoForType(NSString* dataType) {
52 id drag_info = [OCMockObject mockForProtocol:@protocol(NSDraggingInfo)];
53 id pasteboard = GetFakePasteboardForType(dataType);
54 [[[drag_info stub] andReturn:pasteboard] draggingPasteboard];
55 [[[drag_info stub] andReturnValue:[NSValue valueWithPoint:kPoint]]
56 draggingLocation];
57 [[[drag_info stub] andReturn:drag_info]
58 draggingSource];
59 NSDragOperation drag_operation = NSDragOperationCopy | NSDragOperationMove;
60 [[[drag_info stub] andReturnValue:OCMOCK_VALUE(drag_operation)]
61 draggingSourceOperationMask];
62 return drag_info;
63 }
64
65 id GetMockController(BOOL show_indicator) {
66 id mock_controller
67 = [OCMockObject mockForClass:[BookmarkBarFolderController class]];
68 [[[mock_controller stub] andReturnValue:OCMOCK_VALUE(kYes)]
69 draggingAllowed:OCMOCK_ANY];
70 [[[mock_controller stub] andReturnValue:OCMOCK_VALUE(show_indicator)]
71 shouldShowIndicatorShownForPoint:kPoint];
72 [[[mock_controller stub] andReturnValue:OCMOCK_VALUE(kFakeIndicatorPos)]
73 indicatorPosForDragToPoint:kPoint];
74 return mock_controller;
75 }
76
77 scoped_nsobject<id> mock_controller_;
162 scoped_nsobject<BookmarkBarFolderView> view_; 78 scoped_nsobject<BookmarkBarFolderView> view_;
163 }; 79 };
164 80
81
mrossetti 2011/05/18 20:38:30 Nit: extra line.
165 TEST_F(BookmarkBarFolderViewTest, BookmarkButtonDragAndDrop) { 82 TEST_F(BookmarkBarFolderViewTest, BookmarkButtonDragAndDrop) {
166 [view_ awakeFromNib]; 83 id drag_info = GetFakeDragInfoForType(kBookmarkButtonDragType);
167 scoped_nsobject<FakeDraggingInfo> info([[FakeDraggingInfo alloc] init]); 84 NSDragOperation expectedValue = NSDragOperationNone;
168 [view_ setController:info.get()]; 85 [[[mock_controller_ expect] andReturnValue:OCMOCK_VALUE(expectedValue)]
169 [info reset]; 86 draggingEntered:drag_info];
87 [[[mock_controller_ expect] andReturnValue:OCMOCK_VALUE(kNo)]
88 dragBookmarkData:drag_info];
89 [[[mock_controller_ expect] andReturnValue:OCMOCK_VALUE(kYes)]
90 dragButton:OCMOCK_ANY to:kPoint copy:NO];
170 91
171 [info setDragDataType:kBookmarkButtonDragType]; 92 EXPECT_EQ([view_ draggingEntered:drag_info], NSDragOperationMove);
172 EXPECT_EQ([view_ draggingEntered:(id)info.get()], NSDragOperationMove); 93 EXPECT_TRUE([view_ performDragOperation:drag_info]);
173 EXPECT_TRUE([view_ performDragOperation:(id)info.get()]);
174 EXPECT_TRUE([info dragButtonToPong]);
175 EXPECT_FALSE([info dragURLsPong]);
176 EXPECT_TRUE([info dragBookmarkDataPong]);
177 } 94 }
178 95
179 TEST_F(BookmarkBarFolderViewTest, URLDragAndDrop) { 96 TEST_F(BookmarkBarFolderViewTest, URLDragAndDrop) {
180 [view_ awakeFromNib];
181 scoped_nsobject<FakeDraggingInfo> info([[FakeDraggingInfo alloc] init]);
182 [view_ setController:info.get()];
183 [info reset];
184
185 NSArray* dragTypes = [URLDropTargetHandler handledDragTypes]; 97 NSArray* dragTypes = [URLDropTargetHandler handledDragTypes];
186 for (NSString* type in dragTypes) { 98 for (NSString* type in dragTypes) {
187 [info setDragDataType:type]; 99 id drag_info = GetFakeDragInfoForType(type);
188 EXPECT_EQ([view_ draggingEntered:(id)info.get()], NSDragOperationMove); 100 NSDragOperation expectedValue = NSDragOperationNone;
189 EXPECT_TRUE([view_ performDragOperation:(id)info.get()]); 101 [[[mock_controller_ expect] andReturnValue:OCMOCK_VALUE(expectedValue)]
190 EXPECT_FALSE([info dragButtonToPong]); 102 draggingEntered:drag_info];
191 EXPECT_TRUE([info dragURLsPong]); 103 [[[mock_controller_ expect] andReturnValue:OCMOCK_VALUE(kNo)]
192 EXPECT_TRUE([info dragBookmarkDataPong]); 104 dragBookmarkData:drag_info];
193 [info reset]; 105 [[[mock_controller_ expect] andReturnValue:OCMOCK_VALUE(kYes)]
106 addURLs:OCMOCK_ANY withTitles:OCMOCK_ANY at:kPoint];
107 EXPECT_EQ([view_ draggingEntered:drag_info], NSDragOperationMove);
108 EXPECT_TRUE([view_ performDragOperation:drag_info]);
109 [mock_controller_ verify];
194 } 110 }
195 } 111 }
196 112
197 TEST_F(BookmarkBarFolderViewTest, BookmarkButtonDropIndicator) { 113 TEST_F(BookmarkBarFolderViewTest, BookmarkButtonDropIndicator) {
198 [view_ awakeFromNib];
199 scoped_nsobject<FakeDraggingInfo> info([[FakeDraggingInfo alloc] init]);
200 [view_ setController:info.get()];
201 [info reset];
202 114
mrossetti 2011/05/18 20:38:30 Nit: Extra line.
203 [info setDragDataType:kBookmarkButtonDragType]; 115 id drag_info = GetFakeDragInfoForType(kBookmarkButtonDragType);
204 EXPECT_FALSE([info draggingEnteredCalled]); 116 NSDragOperation expectedValue = NSDragOperationNone;
205 EXPECT_EQ([view_ draggingEntered:(id)info.get()], NSDragOperationMove); 117 [[[mock_controller_ expect] andReturnValue:OCMOCK_VALUE(expectedValue)]
206 EXPECT_TRUE([info draggingEnteredCalled]); // Ensure controller pinged. 118 draggingEntered:drag_info];
119 EXPECT_EQ([view_ draggingEntered:drag_info], NSDragOperationMove);
120 [mock_controller_ verify];
207 EXPECT_TRUE([view_ dropIndicatorShown]); 121 EXPECT_TRUE([view_ dropIndicatorShown]);
208 EXPECT_EQ([view_ dropIndicatorPosition], kFakeIndicatorPos); 122 EXPECT_EQ([view_ dropIndicatorPosition], kFakeIndicatorPos);
209 123 mock_controller_.reset([GetMockController(NO) retain]);
210 [info setDropIndicatorShown:NO]; 124 [view_ setController:mock_controller_];
211 EXPECT_EQ([view_ draggingEntered:(id)info.get()], NSDragOperationMove); 125 [[[mock_controller_ expect] andReturnValue:OCMOCK_VALUE(expectedValue)]
126 draggingEntered:drag_info];
127 EXPECT_EQ([view_ draggingEntered:drag_info], NSDragOperationMove);
212 EXPECT_FALSE([view_ dropIndicatorShown]); 128 EXPECT_FALSE([view_ dropIndicatorShown]);
213 } 129 }
214 130
215 } // namespace 131 } // namespace
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698