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

Side by Side Diff: chrome/browser/cocoa/bookmark_bar_controller_unittest.mm

Issue 155874: Implement bookmark editor (no tree yet) (Closed) Base URL: svn://chrome-svn/chrome/trunk/src/
Patch Set: '' Created 11 years, 5 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) 2009 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2009 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 #import <Cocoa/Cocoa.h> 5 #import <Cocoa/Cocoa.h>
6 6
7 #include "base/basictypes.h"
7 #include "base/scoped_nsobject.h" 8 #include "base/scoped_nsobject.h"
8 #import "chrome/browser/cocoa/bookmark_bar_controller.h" 9 #import "chrome/browser/cocoa/bookmark_bar_controller.h"
9 #include "chrome/browser/cocoa/browser_test_helper.h" 10 #include "chrome/browser/cocoa/browser_test_helper.h"
10 #import "chrome/browser/cocoa/cocoa_test_helper.h" 11 #import "chrome/browser/cocoa/cocoa_test_helper.h"
11 #include "testing/gtest/include/gtest/gtest.h" 12 #include "testing/gtest/include/gtest/gtest.h"
12 13
13 // Pretend BookmarkURLOpener delegate to keep track of requests 14 // Pretend BookmarkURLOpener delegate to keep track of requests
14 @interface BookmarkURLOpenerPong : NSObject<BookmarkURLOpener> { 15 @interface BookmarkURLOpenerPong : NSObject<BookmarkURLOpener> {
15 @public 16 @public
16 GURL url_; 17 std::vector<GURL> urls_;
17 WindowOpenDisposition disposition_; 18 std::vector<WindowOpenDisposition> dispositions_;
18 } 19 }
19 @end 20 @end
20 21
21 @implementation BookmarkURLOpenerPong 22 @implementation BookmarkURLOpenerPong
22 - (void)openBookmarkURL:(const GURL&)url 23 - (void)openBookmarkURL:(const GURL&)url
23 disposition:(WindowOpenDisposition)disposition { 24 disposition:(WindowOpenDisposition)disposition {
24 url_ = url; 25 urls_.push_back(url);
25 disposition_ = disposition; 26 dispositions_.push_back(disposition);
27 }
28 - (void)clear {
29 urls_.clear();
30 dispositions_.clear();
26 } 31 }
27 @end 32 @end
28 33
29 34
30 // NSCell that is pre-provided with a desired size that becomes the 35 // NSCell that is pre-provided with a desired size that becomes the
31 // return value for -(NSSize)cellSize:. 36 // return value for -(NSSize)cellSize:.
32 @interface CellWithDesiredSize : NSCell { 37 @interface CellWithDesiredSize : NSCell {
33 @private 38 @private
34 NSSize cellSize_; 39 NSSize cellSize_;
35 } 40 }
(...skipping 40 matching lines...) Expand 10 before | Expand all | Expand 10 after
76 [bar_ view]; // force loading of the nib 81 [bar_ view]; // force loading of the nib
77 82
78 // Awkwardness to look like we've been installed. 83 // Awkwardness to look like we've been installed.
79 [parent_view_ addSubview:[bar_ view]]; 84 [parent_view_ addSubview:[bar_ view]];
80 NSRect frame = [[[bar_ view] superview] frame]; 85 NSRect frame = [[[bar_ view] superview] frame];
81 frame.origin.y = 100; 86 frame.origin.y = 100;
82 [[[bar_ view] superview] setFrame:frame]; 87 [[[bar_ view] superview] setFrame:frame];
83 88
84 // make sure it's open so certain things aren't no-ops 89 // make sure it's open so certain things aren't no-ops
85 [bar_ toggleBookmarkBar]; 90 [bar_ toggleBookmarkBar];
91
92 // Create a menu/item to act like a sender
93 menu_.reset([[NSMenu alloc] initWithTitle:@"I_dont_care"]);
94 menu_item_.reset([[NSMenuItem alloc]
95 initWithTitle:@"still_dont_care"
96 action:NULL
97 keyEquivalent:@""]);
98 cell_.reset([[NSButtonCell alloc] init]);
99 [menu_item_ setMenu:menu_.get()];
100 [menu_ setDelegate:cell_.get()];
86 } 101 }
87 102
103 // Return a menu item that points to the right URL.
104 NSMenuItem* ItemForBookmarkBarMenu(GURL& gurl) {
105 node_.reset(new BookmarkNode(gurl));
106 [cell_ setRepresentedObject:[NSValue valueWithPointer:node_.get()]];
107 return menu_item_;
108 }
109
110 // Does NOT take ownership of node.
111 NSMenuItem* ItemForBookmarkBarMenu(const BookmarkNode* node) {
112 [cell_ setRepresentedObject:[NSValue valueWithPointer:node]];
113 return menu_item_;
114 }
115
116
88 CocoaTestHelper cocoa_helper_; // Inits Cocoa, creates window, etc... 117 CocoaTestHelper cocoa_helper_; // Inits Cocoa, creates window, etc...
89 scoped_nsobject<NSView> content_area_; 118 scoped_nsobject<NSView> content_area_;
90 scoped_nsobject<NSView> infobar_view_; 119 scoped_nsobject<NSView> infobar_view_;
91 scoped_nsobject<NSView> parent_view_; 120 scoped_nsobject<NSView> parent_view_;
92 BrowserTestHelper helper_; 121 BrowserTestHelper helper_;
93 scoped_nsobject<BookmarkBarController> bar_; 122 scoped_nsobject<BookmarkBarController> bar_;
123 scoped_nsobject<NSMenu> menu_;
124 scoped_nsobject<NSMenuItem> menu_item_;
125 scoped_nsobject<NSButtonCell> cell_;
126 scoped_ptr<BookmarkNode> node_;
94 }; 127 };
95 128
96 TEST_F(BookmarkBarControllerTest, ShowHide) { 129 TEST_F(BookmarkBarControllerTest, ShowHide) {
97 // The test class opens the bar by default since many actions are 130 // The test class opens the bar by default since many actions are
98 // no-ops with it closed. Set back to closed as a baseline. 131 // no-ops with it closed. Set back to closed as a baseline.
99 if ([bar_ isBookmarkBarVisible]) 132 if ([bar_ isBookmarkBarVisible])
100 [bar_ toggleBookmarkBar]; 133 [bar_ toggleBookmarkBar];
101 134
102 // Start hidden. 135 // Start hidden.
103 EXPECT_FALSE([bar_ isBookmarkBarVisible]); 136 EXPECT_FALSE([bar_ isBookmarkBarVisible]);
(...skipping 28 matching lines...) Expand all
132 scoped_nsobject<BookmarkURLOpenerPong> pong([[BookmarkURLOpenerPong alloc] 165 scoped_nsobject<BookmarkURLOpenerPong> pong([[BookmarkURLOpenerPong alloc]
133 init]); 166 init]);
134 [bar_ setDelegate:pong.get()]; 167 [bar_ setDelegate:pong.get()];
135 168
136 scoped_nsobject<NSButtonCell> cell([[NSButtonCell alloc] init]); 169 scoped_nsobject<NSButtonCell> cell([[NSButtonCell alloc] init]);
137 scoped_nsobject<NSButton> button([[NSButton alloc] init]); 170 scoped_nsobject<NSButton> button([[NSButton alloc] init]);
138 [button setCell:cell.get()]; 171 [button setCell:cell.get()];
139 [cell setRepresentedObject:[NSValue valueWithPointer:node.get()]]; 172 [cell setRepresentedObject:[NSValue valueWithPointer:node.get()]];
140 173
141 [bar_ openBookmark:button]; 174 [bar_ openBookmark:button];
142 EXPECT_EQ(pong.get()->url_, node->GetURL()); 175 EXPECT_EQ(pong.get()->urls_[0], node->GetURL());
143 EXPECT_EQ(pong.get()->disposition_, CURRENT_TAB); 176 EXPECT_EQ(pong.get()->dispositions_[0], CURRENT_TAB);
144 177
145 [bar_ setDelegate:nil]; 178 [bar_ setDelegate:nil];
146 } 179 }
147 180
148 // Confirm opening of bookmarks works from the menus (different 181 // Confirm opening of bookmarks works from the menus (different
149 // dispositions than clicking on the button). 182 // dispositions than clicking on the button).
150 TEST_F(BookmarkBarControllerTest, OpenBookmarkFromMenus) { 183 TEST_F(BookmarkBarControllerTest, OpenBookmarkFromMenus) {
151 scoped_nsobject<BookmarkURLOpenerPong> pong([[BookmarkURLOpenerPong alloc] 184 scoped_nsobject<BookmarkURLOpenerPong> pong([[BookmarkURLOpenerPong alloc]
152 init]); 185 init]);
153 [bar_ setDelegate:pong.get()]; 186 [bar_ setDelegate:pong.get()];
154 187
155 scoped_nsobject<NSMenu> menu([[NSMenu alloc] initWithTitle:@"I_dont_care"]);
156 scoped_nsobject<NSMenuItem> item([[NSMenuItem alloc]
157 initWithTitle:@"still_dont_care"
158 action:NULL
159 keyEquivalent:@""]);
160 scoped_nsobject<NSButtonCell> cell([[NSButtonCell alloc] init]);
161 [item setMenu:menu.get()];
162 [menu setDelegate:cell];
163
164 const char* urls[] = { "http://walla.walla.ding.dong.com", 188 const char* urls[] = { "http://walla.walla.ding.dong.com",
165 "http://i_dont_know.com", 189 "http://i_dont_know.com",
166 "http://cee.enn.enn.dot.com" }; 190 "http://cee.enn.enn.dot.com" };
167 SEL selectors[] = { @selector(openBookmarkInNewForegroundTab:), 191 SEL selectors[] = { @selector(openBookmarkInNewForegroundTab:),
168 @selector(openBookmarkInNewWindow:), 192 @selector(openBookmarkInNewWindow:),
169 @selector(openBookmarkInIncognitoWindow:) }; 193 @selector(openBookmarkInIncognitoWindow:) };
170 WindowOpenDisposition dispositions[] = { NEW_FOREGROUND_TAB, 194 WindowOpenDisposition dispositions[] = { NEW_FOREGROUND_TAB,
171 NEW_WINDOW, 195 NEW_WINDOW,
172 OFF_THE_RECORD }; 196 OFF_THE_RECORD };
173 for (unsigned int i = 0; 197 for (unsigned int i = 0;
174 i < sizeof(dispositions)/sizeof(dispositions[0]); 198 i < sizeof(dispositions)/sizeof(dispositions[0]);
175 i++) { 199 i++) {
176 scoped_ptr<BookmarkNode> node(new BookmarkNode(GURL(urls[i]))); 200 GURL gurl(urls[i]);
177 [cell setRepresentedObject:[NSValue valueWithPointer:node.get()]]; 201 [bar_ performSelector:selectors[i]
178 [bar_ performSelector:selectors[i] withObject:item.get()]; 202 withObject:ItemForBookmarkBarMenu(gurl)];
179 EXPECT_EQ(pong.get()->url_, node->GetURL()); 203 EXPECT_EQ(pong.get()->urls_[0], gurl);
180 EXPECT_EQ(pong.get()->disposition_, dispositions[i]); 204 EXPECT_EQ(pong.get()->dispositions_[0], dispositions[i]);
181 [cell setRepresentedObject:nil]; 205 [pong clear];
182 } 206 }
207 [bar_ setDelegate:nil];
183 } 208 }
184 209
185 TEST_F(BookmarkBarControllerTest, TestAddRemoveAndClear) { 210 TEST_F(BookmarkBarControllerTest, TestAddRemoveAndClear) {
186 BookmarkModel* model = helper_.profile()->GetBookmarkModel(); 211 BookmarkModel* model = helper_.profile()->GetBookmarkModel();
187 212
188 EXPECT_EQ(0U, [[bar_ buttons] count]); 213 EXPECT_EQ(0U, [[bar_ buttons] count]);
189 unsigned int initial_subview_count = [[[bar_ view] subviews] count]; 214 unsigned int initial_subview_count = [[[bar_ view] subviews] count];
190 215
191 // Make sure a redundant call doesn't choke 216 // Make sure a redundant call doesn't choke
192 [bar_ clearBookmarkBar]; 217 [bar_ clearBookmarkBar];
(...skipping 78 matching lines...) Expand 10 before | Expand all | Expand 10 after
271 296
272 // Make sure the 1st button is now wider, the 2nd one is moved over, 297 // Make sure the 1st button is now wider, the 2nd one is moved over,
273 // and they don't overlap. 298 // and they don't overlap.
274 NSRect frame_1 = [[[bar_ buttons] objectAtIndex:0] frame]; 299 NSRect frame_1 = [[[bar_ buttons] objectAtIndex:0] frame];
275 NSRect frame_2 = [[[bar_ buttons] objectAtIndex:1] frame]; 300 NSRect frame_2 = [[[bar_ buttons] objectAtIndex:1] frame];
276 EXPECT_GT(frame_1.size.width, width_1); 301 EXPECT_GT(frame_1.size.width, width_1);
277 EXPECT_GT(frame_2.origin.x, x_2); 302 EXPECT_GT(frame_2.origin.x, x_2);
278 EXPECT_GE(frame_2.origin.x, frame_1.origin.x + frame_1.size.width); 303 EXPECT_GE(frame_2.origin.x, frame_1.origin.x + frame_1.size.width);
279 } 304 }
280 305
306 TEST_F(BookmarkBarControllerTest, DeleteBookmark) {
307 BookmarkModel* model = helper_.profile()->GetBookmarkModel();
308
309 const char* urls[] = { "https://secret.url.com",
310 "http://super.duper.web.site.for.doodz.gov",
311 "http://www.foo-bar-baz.com/" };
312 const BookmarkNode* parent = model->GetBookmarkBarNode();
313 for (unsigned int i = 0; i < arraysize(urls); i++) {
314 model->AddURL(parent, parent->GetChildCount(),
315 L"title", GURL(urls[i]));
316 }
317 EXPECT_EQ(3, parent->GetChildCount());
318 const BookmarkNode* middle_node = parent->GetChild(1);
319
320 NSMenuItem* item = ItemForBookmarkBarMenu(middle_node);
321 [bar_ deleteBookmark:item];
322 EXPECT_EQ(2, parent->GetChildCount());
323 EXPECT_EQ(parent->GetChild(0)->GetURL(), GURL(urls[0]));
324 // node 2 moved into spot 1
325 EXPECT_EQ(parent->GetChild(1)->GetURL(), GURL(urls[2]));
326 }
327
328 TEST_F(BookmarkBarControllerTest, OpenAllBookmarks) {
329 scoped_nsobject<BookmarkURLOpenerPong> pong([[BookmarkURLOpenerPong alloc]
330 init]);
331 [bar_ setDelegate:pong.get()];
332
333 BookmarkModel* model = helper_.profile()->GetBookmarkModel();
334 const BookmarkNode* parent = model->GetBookmarkBarNode();
335 // { one, { two-one, two-two }, three }
336 model->AddURL(parent, parent->GetChildCount(),
337 L"title", GURL("http://one.com"));
338 const BookmarkNode* folder = model->AddGroup(parent,
339 parent->GetChildCount(),
340 L"group");
341 model->AddURL(folder, folder->GetChildCount(),
342 L"title", GURL("http://two-one.com"));
343 model->AddURL(folder, folder->GetChildCount(),
344 L"title", GURL("http://two-two.com"));
345 model->AddURL(parent, parent->GetChildCount(),
346 L"title", GURL("https://three.com"));
347 [bar_ openAllBookmarks:nil];
348
349 EXPECT_EQ(pong.get()->urls_.size(), 4U);
350 EXPECT_EQ(pong.get()->dispositions_.size(), 4U);
351
352 // I can't use EXPECT_EQ() here since the macro can't expand
353 // properly (no way to print the value of an iterator).
354 std::vector<GURL>::iterator i;
355 std::vector<GURL>::iterator begin = pong.get()->urls_.begin();
356 std::vector<GURL>::iterator end = pong.get()->urls_.end();
357 i = find(begin, end, GURL("http://two-one.com"));
358 EXPECT_FALSE(i == end);
359 i = find(begin, end, GURL("https://three.com"));
360 EXPECT_FALSE(i == end);
361 i = find(begin, end, GURL("https://will-not-be-found.com"));
362 EXPECT_TRUE(i == end);
363
364 EXPECT_EQ(pong.get()->dispositions_[3], NEW_BACKGROUND_TAB);
365
366 [bar_ setDelegate:nil];
367 }
368
281 // TODO(jrg): write a test to confirm that nodeFavIconLoaded calls 369 // TODO(jrg): write a test to confirm that nodeFavIconLoaded calls
282 // checkForBookmarkButtonGrowth:. 370 // checkForBookmarkButtonGrowth:.
283 371
284 // TODO(jrg): Make sure showing the bookmark bar calls loaded: (to 372 // TODO(jrg): Make sure showing the bookmark bar calls loaded: (to
285 // process bookmarks) 373 // process bookmarks)
286 TEST_F(BookmarkBarControllerTest, ShowAndLoad) { 374 TEST_F(BookmarkBarControllerTest, ShowAndLoad) {
287 } 375 }
288 376
289 // TODO(jrg): Test cellForBookmarkNode: 377 // TODO(jrg): Test cellForBookmarkNode:
290 TEST_F(BookmarkBarControllerTest, Cell) { 378 TEST_F(BookmarkBarControllerTest, Cell) {
291 } 379 }
292 380
293 TEST_F(BookmarkBarControllerTest, Contents) { 381 TEST_F(BookmarkBarControllerTest, Contents) {
294 // TODO(jrg): addNodesToBar has a LOT of TODOs; when flushed out, write 382 // TODO(jrg): addNodesToBar has a LOT of TODOs; when flushed out, write
295 // appropriate tests. 383 // appropriate tests.
296 } 384 }
297 385
298 // Test drawing, mostly to ensure nothing leaks or crashes. 386 // Test drawing, mostly to ensure nothing leaks or crashes.
299 TEST_F(BookmarkBarControllerTest, Display) { 387 TEST_F(BookmarkBarControllerTest, Display) {
300 [[bar_ view] display]; 388 [[bar_ view] display];
301 } 389 }
302 390
391 // Cannot test these methods since they simply call a single static
392 // method, BookmarkEditor::Show(), which is impossible to mock.
393 // editBookmark:, addPage:
394
395
303 } // namespace 396 } // namespace
OLDNEW
« no previous file with comments | « chrome/browser/cocoa/bookmark_bar_controller.mm ('k') | chrome/browser/cocoa/bookmark_editor_controller.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698