OLD | NEW |
1 // Copyright (c) 2010 The Chromium Authors. All rights reserved. | 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 | 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/basictypes.h" |
8 #include "base/scoped_nsobject.h" | 8 #include "base/scoped_nsobject.h" |
9 #import "chrome/browser/cocoa/bookmark_bar_constants.h" // namespace bookmarks | 9 #import "chrome/browser/cocoa/bookmark_bar_constants.h" // namespace bookmarks |
10 #import "chrome/browser/cocoa/bookmark_bar_controller.h" | 10 #import "chrome/browser/cocoa/bookmark_bar_controller.h" |
(...skipping 103 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
114 - (void)childFolderWillClose:(id<BookmarkButtonControllerProtocol>)child { | 114 - (void)childFolderWillClose:(id<BookmarkButtonControllerProtocol>)child { |
115 [childFolderDelegate_ childFolderWillClose:child]; | 115 [childFolderDelegate_ childFolderWillClose:child]; |
116 } | 116 } |
117 | 117 |
118 @end | 118 @end |
119 | 119 |
120 | 120 |
121 class BookmarkBarFolderControllerTest : public CocoaTest { | 121 class BookmarkBarFolderControllerTest : public CocoaTest { |
122 public: | 122 public: |
123 BrowserTestHelper helper_; | 123 BrowserTestHelper helper_; |
124 scoped_nsobject<BookmarkBarController> parentBarController_; | 124 scoped_nsobject<BookmarkBarController> bar_; |
125 const BookmarkNode* folderA_; // owned by model | 125 const BookmarkNode* folderA_; // owned by model |
126 const BookmarkNode* longTitleNode_; // owned by model | 126 const BookmarkNode* longTitleNode_; // owned by model |
127 | 127 |
128 BookmarkBarFolderControllerTest() { | 128 BookmarkBarFolderControllerTest() { |
129 BookmarkModel* model = helper_.profile()->GetBookmarkModel(); | 129 BookmarkModel* model = helper_.profile()->GetBookmarkModel(); |
130 const BookmarkNode* parent = model->GetBookmarkBarNode(); | 130 const BookmarkNode* parent = model->GetBookmarkBarNode(); |
131 const BookmarkNode* folderA = model->AddGroup(parent, | 131 const BookmarkNode* folderA = model->AddGroup(parent, |
132 parent->GetChildCount(), | 132 parent->GetChildCount(), |
133 L"group"); | 133 L"group"); |
134 folderA_ = folderA; | 134 folderA_ = folderA; |
135 model->AddGroup(parent, parent->GetChildCount(), | 135 model->AddGroup(parent, parent->GetChildCount(), |
136 L"sibbling group"); | 136 L"sibbling group"); |
137 const BookmarkNode* folderB = model->AddGroup(folderA, | 137 const BookmarkNode* folderB = model->AddGroup(folderA, |
138 folderA->GetChildCount(), | 138 folderA->GetChildCount(), |
139 L"subgroup 1"); | 139 L"subgroup 1"); |
140 model->AddGroup(folderA, | 140 model->AddGroup(folderA, |
141 folderA->GetChildCount(), | 141 folderA->GetChildCount(), |
142 L"subgroup 2"); | 142 L"subgroup 2"); |
143 model->AddURL(folderA, folderA->GetChildCount(), L"title a", | 143 model->AddURL(folderA, folderA->GetChildCount(), L"title a", |
144 GURL("http://www.google.com/a")); | 144 GURL("http://www.google.com/a")); |
145 longTitleNode_ = model->AddURL( | 145 longTitleNode_ = model->AddURL( |
146 folderA, folderA->GetChildCount(), | 146 folderA, folderA->GetChildCount(), |
147 L"title super duper long long whoa momma title you betcha", | 147 L"title super duper long long whoa momma title you betcha", |
148 GURL("http://www.google.com/b")); | 148 GURL("http://www.google.com/b")); |
149 model->AddURL(folderB, folderB->GetChildCount(), L"t", | 149 model->AddURL(folderB, folderB->GetChildCount(), L"t", |
150 GURL("http://www.google.com/c")); | 150 GURL("http://www.google.com/c")); |
151 | 151 |
152 parentBarController_.reset( | 152 bar_.reset( |
153 [[BookmarkBarControllerChildFolderRedirect alloc] | 153 [[BookmarkBarControllerChildFolderRedirect alloc] |
154 initWithBrowser:helper_.browser() | 154 initWithBrowser:helper_.browser() |
155 initialWidth:300 | 155 initialWidth:300 |
156 delegate:nil | 156 delegate:nil |
157 resizeDelegate:nil]); | 157 resizeDelegate:nil]); |
158 [parentBarController_ loaded:model]; | 158 [bar_ loaded:model]; |
159 // Make parent frame for bookmark bar then open it. | 159 // Make parent frame for bookmark bar then open it. |
160 NSRect frame = [[test_window() contentView] frame]; | 160 NSRect frame = [[test_window() contentView] frame]; |
161 frame = NSInsetRect(frame, 100, 200); | 161 frame = NSInsetRect(frame, 100, 200); |
162 NSView* fakeToolbarView = [[[NSView alloc] initWithFrame:frame] | 162 NSView* fakeToolbarView = [[[NSView alloc] initWithFrame:frame] |
163 autorelease]; | 163 autorelease]; |
164 [[test_window() contentView] addSubview:fakeToolbarView]; | 164 [[test_window() contentView] addSubview:fakeToolbarView]; |
165 [fakeToolbarView addSubview:[parentBarController_ view]]; | 165 [fakeToolbarView addSubview:[bar_ view]]; |
166 [parentBarController_ setBookmarkBarEnabled:YES]; | 166 [bar_ setBookmarkBarEnabled:YES]; |
167 } | 167 } |
168 | 168 |
169 // Remove the bookmark with the long title. | 169 // Remove the bookmark with the long title. |
170 void RemoveLongTitleNode() { | 170 void RemoveLongTitleNode() { |
171 BookmarkModel* model = helper_.profile()->GetBookmarkModel(); | 171 BookmarkModel* model = helper_.profile()->GetBookmarkModel(); |
172 model->Remove(longTitleNode_->GetParent(), | 172 model->Remove(longTitleNode_->GetParent(), |
173 longTitleNode_->GetParent()->IndexOfChild(longTitleNode_)); | 173 longTitleNode_->GetParent()->IndexOfChild(longTitleNode_)); |
174 } | 174 } |
175 | 175 |
176 // Add LOTS of nodes to our model if needed (e.g. scrolling). | 176 // Add LOTS of nodes to our model if needed (e.g. scrolling). |
177 // Returns the number of nodes added. | 177 // Returns the number of nodes added. |
178 int AddLotsOfNodes() { | 178 int AddLotsOfNodes() { |
179 BookmarkModel* model = helper_.profile()->GetBookmarkModel(); | 179 BookmarkModel* model = helper_.profile()->GetBookmarkModel(); |
180 for (int i = 0; i < kLotsOfNodesCount; i++) { | 180 for (int i = 0; i < kLotsOfNodesCount; i++) { |
181 model->AddURL(folderA_, folderA_->GetChildCount(), L"repeated title", | 181 model->AddURL(folderA_, folderA_->GetChildCount(), L"repeated title", |
182 GURL("http://www.google.com/repeated/url")); | 182 GURL("http://www.google.com/repeated/url")); |
183 } | 183 } |
184 return kLotsOfNodesCount; | 184 return kLotsOfNodesCount; |
185 } | 185 } |
186 | 186 |
187 | 187 |
188 // Return a simple BookmarkBarFolderController. | 188 // Return a simple BookmarkBarFolderController. |
189 BookmarkBarFolderControllerPong* SimpleBookmarkBarFolderController() { | 189 BookmarkBarFolderControllerPong* SimpleBookmarkBarFolderController() { |
190 BookmarkButton* parentButton = [[parentBarController_ buttons] | 190 BookmarkButton* parentButton = [[bar_ buttons] objectAtIndex:0]; |
191 objectAtIndex:0]; | |
192 BookmarkBarFolderControllerPong* c = | 191 BookmarkBarFolderControllerPong* c = |
193 [[BookmarkBarFolderControllerPong alloc] | 192 [[BookmarkBarFolderControllerPong alloc] |
194 initWithParentButton:parentButton | 193 initWithParentButton:parentButton |
195 parentController:nil | 194 parentController:nil |
196 barController:parentBarController_]; | 195 barController:bar_]; |
197 [c window]; // Force nib load. | 196 [c window]; // Force nib load. |
198 return c; | 197 return c; |
199 } | 198 } |
200 }; | 199 }; |
201 | 200 |
202 TEST_F(BookmarkBarFolderControllerTest, InitCreateAndDelete) { | 201 TEST_F(BookmarkBarFolderControllerTest, InitCreateAndDelete) { |
203 scoped_nsobject<BookmarkBarFolderController> bbfc; | 202 scoped_nsobject<BookmarkBarFolderController> bbfc; |
204 bbfc.reset(SimpleBookmarkBarFolderController()); | 203 bbfc.reset(SimpleBookmarkBarFolderController()); |
205 | 204 |
206 // Make sure none of the buttons overlap, that all are inside | 205 // Make sure none of the buttons overlap, that all are inside |
(...skipping 27 matching lines...) Expand all Loading... |
234 TEST_F(BookmarkBarFolderControllerTest, ReleaseOnClose) { | 233 TEST_F(BookmarkBarFolderControllerTest, ReleaseOnClose) { |
235 scoped_nsobject<BookmarkBarFolderController> bbfc; | 234 scoped_nsobject<BookmarkBarFolderController> bbfc; |
236 bbfc.reset(SimpleBookmarkBarFolderController()); | 235 bbfc.reset(SimpleBookmarkBarFolderController()); |
237 EXPECT_TRUE(bbfc.get()); | 236 EXPECT_TRUE(bbfc.get()); |
238 | 237 |
239 [bbfc retain]; // stop the scoped_nsobject from doing anything | 238 [bbfc retain]; // stop the scoped_nsobject from doing anything |
240 [[bbfc window] close]; // trigger an autorelease of bbfc.get() | 239 [[bbfc window] close]; // trigger an autorelease of bbfc.get() |
241 } | 240 } |
242 | 241 |
243 TEST_F(BookmarkBarFolderControllerTest, BasicPosition) { | 242 TEST_F(BookmarkBarFolderControllerTest, BasicPosition) { |
244 BookmarkButton* parentButton = [[parentBarController_ buttons] | 243 BookmarkButton* parentButton = [[bar_ buttons] objectAtIndex:0]; |
245 objectAtIndex:0]; | |
246 EXPECT_TRUE(parentButton); | 244 EXPECT_TRUE(parentButton); |
247 | 245 |
248 // If parent is a BookmarkBarController, grow down. | 246 // If parent is a BookmarkBarController, grow down. |
249 scoped_nsobject<BookmarkBarFolderControllerLow> bbfc; | 247 scoped_nsobject<BookmarkBarFolderControllerLow> bbfc; |
250 bbfc.reset([[BookmarkBarFolderControllerLow alloc] | 248 bbfc.reset([[BookmarkBarFolderControllerLow alloc] |
251 initWithParentButton:parentButton | 249 initWithParentButton:parentButton |
252 parentController:nil | 250 parentController:nil |
253 barController:parentBarController_]); | 251 barController:bar_]); |
254 [bbfc window]; | 252 [bbfc window]; |
255 [bbfc setRealTopLeft:YES]; | 253 [bbfc setRealTopLeft:YES]; |
256 NSPoint pt = [bbfc windowTopLeftForWidth:0]; // screen coords | 254 NSPoint pt = [bbfc windowTopLeftForWidth:0]; // screen coords |
257 NSPoint buttonOriginInScreen = | 255 NSPoint buttonOriginInScreen = |
258 [[parentButton window] | 256 [[parentButton window] |
259 convertBaseToScreen:[parentButton | 257 convertBaseToScreen:[parentButton |
260 convertRectToBase:[parentButton frame]].origin]; | 258 convertRectToBase:[parentButton frame]].origin]; |
261 // Within margin | 259 // Within margin |
262 EXPECT_LE(abs(pt.x - buttonOriginInScreen.x), 2); | 260 EXPECT_LE(abs(pt.x - buttonOriginInScreen.x), 2); |
263 EXPECT_LE(abs(pt.y - buttonOriginInScreen.y), 2); | 261 EXPECT_LE(abs(pt.y - buttonOriginInScreen.y), 2); |
264 | 262 |
265 // Make sure we see the window shift left if it spills off the screen | 263 // Make sure we see the window shift left if it spills off the screen |
266 pt = [bbfc windowTopLeftForWidth:0]; | 264 pt = [bbfc windowTopLeftForWidth:0]; |
267 NSPoint shifted = [bbfc windowTopLeftForWidth:9999999]; | 265 NSPoint shifted = [bbfc windowTopLeftForWidth:9999999]; |
268 EXPECT_LT(shifted.x, pt.x); | 266 EXPECT_LT(shifted.x, pt.x); |
269 | 267 |
270 // If parent is a BookmarkBarFolderController, grow right. | 268 // If parent is a BookmarkBarFolderController, grow right. |
271 scoped_nsobject<BookmarkBarFolderControllerLow> bbfc2; | 269 scoped_nsobject<BookmarkBarFolderControllerLow> bbfc2; |
272 bbfc2.reset([[BookmarkBarFolderControllerLow alloc] | 270 bbfc2.reset([[BookmarkBarFolderControllerLow alloc] |
273 initWithParentButton:[[bbfc buttons] objectAtIndex:0] | 271 initWithParentButton:[[bbfc buttons] objectAtIndex:0] |
274 parentController:bbfc.get() | 272 parentController:bbfc.get() |
275 barController:parentBarController_]); | 273 barController:bar_]); |
276 [bbfc2 window]; | 274 [bbfc2 window]; |
277 [bbfc2 setRealTopLeft:YES]; | 275 [bbfc2 setRealTopLeft:YES]; |
278 pt = [bbfc2 windowTopLeftForWidth:0]; | 276 pt = [bbfc2 windowTopLeftForWidth:0]; |
279 // We're now overlapping the window a bit. | 277 // We're now overlapping the window a bit. |
280 EXPECT_EQ(pt.x, NSMaxX([[bbfc.get() window] frame]) - | 278 EXPECT_EQ(pt.x, NSMaxX([[bbfc.get() window] frame]) - |
281 bookmarks::kBookmarkMenuOverlap); | 279 bookmarks::kBookmarkMenuOverlap); |
282 } | 280 } |
283 | 281 |
284 // Confirm we grow right until end of screen, then start growing left | 282 // Confirm we grow right until end of screen, then start growing left |
285 // until end of screen again, then right. | 283 // until end of screen again, then right. |
286 TEST_F(BookmarkBarFolderControllerTest, PositionRightLeftRight) { | 284 TEST_F(BookmarkBarFolderControllerTest, PositionRightLeftRight) { |
287 BookmarkModel* model = helper_.profile()->GetBookmarkModel(); | 285 BookmarkModel* model = helper_.profile()->GetBookmarkModel(); |
288 const BookmarkNode* parent = model->GetBookmarkBarNode(); | 286 const BookmarkNode* parent = model->GetBookmarkBarNode(); |
289 const BookmarkNode* folder = parent; | 287 const BookmarkNode* folder = parent; |
290 | 288 |
291 const int count = 100; | 289 const int count = 100; |
292 int i; | 290 int i; |
293 // Make some super duper deeply nested folders. | 291 // Make some super duper deeply nested folders. |
294 for (i=0; i<count; i++) { | 292 for (i=0; i<count; i++) { |
295 folder = model->AddGroup(folder, 0, L"nested folder"); | 293 folder = model->AddGroup(folder, 0, L"nested folder"); |
296 } | 294 } |
297 | 295 |
298 // Setup initial state for opening all folders. | 296 // Setup initial state for opening all folders. |
299 folder = parent; | 297 folder = parent; |
300 BookmarkButton* parentButton = [[parentBarController_ buttons] | 298 BookmarkButton* parentButton = [[bar_ buttons] objectAtIndex:0]; |
301 objectAtIndex:0]; | |
302 BookmarkBarFolderController* parentController = nil; | 299 BookmarkBarFolderController* parentController = nil; |
303 EXPECT_TRUE(parentButton); | 300 EXPECT_TRUE(parentButton); |
304 | 301 |
305 // Open them all. | 302 // Open them all. |
306 scoped_nsobject<NSMutableArray> folder_controller_array; | 303 scoped_nsobject<NSMutableArray> folder_controller_array; |
307 folder_controller_array.reset([[NSMutableArray array] retain]); | 304 folder_controller_array.reset([[NSMutableArray array] retain]); |
308 for (i=0; i<count; i++) { | 305 for (i=0; i<count; i++) { |
309 BookmarkBarFolderControllerNoLevel* bbfcl = | 306 BookmarkBarFolderControllerNoLevel* bbfcl = |
310 [[BookmarkBarFolderControllerNoLevel alloc] | 307 [[BookmarkBarFolderControllerNoLevel alloc] |
311 initWithParentButton:parentButton | 308 initWithParentButton:parentButton |
312 parentController:parentController | 309 parentController:parentController |
313 barController:parentBarController_]; | 310 barController:bar_]; |
314 [folder_controller_array addObject:bbfcl]; | 311 [folder_controller_array addObject:bbfcl]; |
315 [bbfcl autorelease]; | 312 [bbfcl autorelease]; |
316 [bbfcl window]; | 313 [bbfcl window]; |
317 parentController = bbfcl; | 314 parentController = bbfcl; |
318 parentButton = [[bbfcl buttons] objectAtIndex:0]; | 315 parentButton = [[bbfcl buttons] objectAtIndex:0]; |
319 } | 316 } |
320 | 317 |
321 // Make vector of all x positions. | 318 // Make vector of all x positions. |
322 std::vector<CGFloat> leftPositions; | 319 std::vector<CGFloat> leftPositions; |
323 for (i=0; i<count; i++) { | 320 for (i=0; i<count; i++) { |
(...skipping 81 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
405 | 402 |
406 // Close it --> all gone! | 403 // Close it --> all gone! |
407 [bbfc closeBookmarkFolder:nil]; | 404 [bbfc closeBookmarkFolder:nil]; |
408 EXPECT_FALSE([bbfc folderController]); | 405 EXPECT_FALSE([bbfc folderController]); |
409 } | 406 } |
410 | 407 |
411 TEST_F(BookmarkBarFolderControllerTest, ChildFolderCallbacks) { | 408 TEST_F(BookmarkBarFolderControllerTest, ChildFolderCallbacks) { |
412 scoped_nsobject<BookmarkBarFolderControllerPong> bbfc; | 409 scoped_nsobject<BookmarkBarFolderControllerPong> bbfc; |
413 bbfc.reset(SimpleBookmarkBarFolderController()); | 410 bbfc.reset(SimpleBookmarkBarFolderController()); |
414 EXPECT_TRUE(bbfc.get()); | 411 EXPECT_TRUE(bbfc.get()); |
415 [parentBarController_ setChildFolderDelegate:bbfc.get()]; | 412 [bar_ setChildFolderDelegate:bbfc.get()]; |
416 | 413 |
417 EXPECT_FALSE([bbfc childFolderWillShow]); | 414 EXPECT_FALSE([bbfc childFolderWillShow]); |
418 [bbfc openBookmarkFolderFromButton:[[bbfc buttons] objectAtIndex:0]]; | 415 [bbfc openBookmarkFolderFromButton:[[bbfc buttons] objectAtIndex:0]]; |
419 EXPECT_TRUE([bbfc childFolderWillShow]); | 416 EXPECT_TRUE([bbfc childFolderWillShow]); |
420 | 417 |
421 EXPECT_FALSE([bbfc childFolderWillClose]); | 418 EXPECT_FALSE([bbfc childFolderWillClose]); |
422 [bbfc closeBookmarkFolder:nil]; | 419 [bbfc closeBookmarkFolder:nil]; |
423 EXPECT_TRUE([bbfc childFolderWillClose]); | 420 EXPECT_TRUE([bbfc childFolderWillClose]); |
424 | 421 |
425 [parentBarController_ setChildFolderDelegate:nil]; | 422 [bar_ setChildFolderDelegate:nil]; |
426 } | 423 } |
427 | 424 |
428 // Make sure bookmark folders have variable widths. | 425 // Make sure bookmark folders have variable widths. |
429 TEST_F(BookmarkBarFolderControllerTest, ChildFolderWidth) { | 426 TEST_F(BookmarkBarFolderControllerTest, ChildFolderWidth) { |
430 scoped_nsobject<BookmarkBarFolderController> bbfc; | 427 scoped_nsobject<BookmarkBarFolderController> bbfc; |
431 | 428 |
432 bbfc.reset(SimpleBookmarkBarFolderController()); | 429 bbfc.reset(SimpleBookmarkBarFolderController()); |
433 EXPECT_TRUE(bbfc.get()); | 430 EXPECT_TRUE(bbfc.get()); |
434 [bbfc showWindow:bbfc.get()]; | 431 [bbfc showWindow:bbfc.get()]; |
435 CGFloat wideWidth = NSWidth([[bbfc window] frame]); | 432 CGFloat wideWidth = NSWidth([[bbfc window] frame]); |
(...skipping 62 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
498 // way. | 495 // way. |
499 for (int i=0; i<nodecount+50; i++) { | 496 for (int i=0; i<nodecount+50; i++) { |
500 CGFloat height = NSHeight([[bbfc window] frame]); | 497 CGFloat height = NSHeight([[bbfc window] frame]); |
501 [bbfc performOneScroll:-60]; | 498 [bbfc performOneScroll:-60]; |
502 EXPECT_EQ(height, NSHeight([[bbfc window] frame])); | 499 EXPECT_EQ(height, NSHeight([[bbfc window] frame])); |
503 EXPECT_TRUE(NSContainsRect(screenFrame, | 500 EXPECT_TRUE(NSContainsRect(screenFrame, |
504 [[bbfc window] frame])); | 501 [[bbfc window] frame])); |
505 } | 502 } |
506 } | 503 } |
507 | 504 |
| 505 // Folder menu sizing and placementwhile deleting bookmarks and scrolling tests. |
| 506 TEST_F(BookmarkBarFolderControllerTest, MenuPlacementWhileScrollingDeleting) { |
| 507 scoped_nsobject<BookmarkBarFolderController> bbfc; |
| 508 AddLotsOfNodes(); |
| 509 bbfc.reset(SimpleBookmarkBarFolderController()); |
| 510 [bbfc showWindow:bbfc.get()]; |
| 511 NSWindow* menuWindow = [bbfc window]; |
| 512 BookmarkBarFolderController* folder = [bar_ folderController]; |
| 513 NSArray* buttons = [folder buttons]; |
| 514 |
| 515 // Before scrolling any, delete a bookmark and make sure the window top has |
| 516 // not moved. Pick a button which is near the top and visible. |
| 517 CGFloat oldTop = [menuWindow frame].origin.y + NSHeight([menuWindow frame]); |
| 518 BookmarkButton* button = [buttons objectAtIndex:3]; |
| 519 [folder deleteBookmark:button]; |
| 520 CGFloat newTop = [menuWindow frame].origin.y + NSHeight([menuWindow frame]); |
| 521 EXPECT_CGFLOAT_EQ(oldTop, newTop); |
| 522 |
| 523 // Scroll so that both the top and bottom scroll arrows show, make sure |
| 524 // the top of the window has moved up, then delete a visible button and |
| 525 // make sure the top has not moved. |
| 526 oldTop = newTop; |
| 527 const CGFloat scrollOneBookmark = bookmarks::kBookmarkButtonHeight + |
| 528 bookmarks::kBookmarkVerticalPadding; |
| 529 NSUInteger buttonCounter = 0; |
| 530 NSUInteger extraButtonLimit = 3; |
| 531 while (![bbfc canScrollDown] || extraButtonLimit > 0) { |
| 532 [bbfc performOneScroll:scrollOneBookmark]; |
| 533 ++buttonCounter; |
| 534 if ([bbfc canScrollDown]) |
| 535 --extraButtonLimit; |
| 536 } |
| 537 newTop = [menuWindow frame].origin.y + NSHeight([menuWindow frame]); |
| 538 EXPECT_NE(oldTop, newTop); |
| 539 oldTop = newTop; |
| 540 button = [buttons objectAtIndex:buttonCounter + 3]; |
| 541 [folder deleteBookmark:button]; |
| 542 newTop = [menuWindow frame].origin.y + NSHeight([menuWindow frame]); |
| 543 EXPECT_CGFLOAT_EQ(oldTop, newTop); |
| 544 |
| 545 // Scroll so that the top scroll arrow is no longer showing, make sure |
| 546 // the top of the window has not moved, then delete a visible button and |
| 547 // make sure the top has not moved. |
| 548 while ([bbfc canScrollDown]) { |
| 549 [bbfc performOneScroll:-scrollOneBookmark]; |
| 550 --buttonCounter; |
| 551 } |
| 552 button = [buttons objectAtIndex:buttonCounter + 3]; |
| 553 [folder deleteBookmark:button]; |
| 554 newTop = [menuWindow frame].origin.y + NSHeight([menuWindow frame]); |
| 555 EXPECT_CGFLOAT_EQ(oldTop, newTop); |
| 556 } |
| 557 |
508 @interface FakedDragInfo : NSObject { | 558 @interface FakedDragInfo : NSObject { |
509 @public | 559 @public |
510 NSPoint dropLocation_; | 560 NSPoint dropLocation_; |
511 NSDragOperation sourceMask_; | 561 NSDragOperation sourceMask_; |
512 } | 562 } |
513 @property (nonatomic, assign) NSPoint dropLocation; | 563 @property (nonatomic, assign) NSPoint dropLocation; |
514 - (void)setDraggingSourceOperationMask:(NSDragOperation)mask; | 564 - (void)setDraggingSourceOperationMask:(NSDragOperation)mask; |
515 @end | 565 @end |
516 | 566 |
517 @implementation FakedDragInfo | 567 @implementation FakedDragInfo |
(...skipping 555 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1073 L"BIG"); | 1123 L"BIG"); |
1074 | 1124 |
1075 // Pop open the new folder window and verify it has one (empty) item. | 1125 // Pop open the new folder window and verify it has one (empty) item. |
1076 BookmarkButton* button = [bar_ buttonWithTitleEqualTo:@"BIG"]; | 1126 BookmarkButton* button = [bar_ buttonWithTitleEqualTo:@"BIG"]; |
1077 [[button target] performSelector:@selector(openBookmarkFolderFromButton:) | 1127 [[button target] performSelector:@selector(openBookmarkFolderFromButton:) |
1078 withObject:button]; | 1128 withObject:button]; |
1079 BookmarkBarFolderController* folderController = [bar_ folderController]; | 1129 BookmarkBarFolderController* folderController = [bar_ folderController]; |
1080 EXPECT_TRUE(folderController); | 1130 EXPECT_TRUE(folderController); |
1081 NSWindow* folderMenu = [folderController window]; | 1131 NSWindow* folderMenu = [folderController window]; |
1082 EXPECT_TRUE(folderMenu); | 1132 EXPECT_TRUE(folderMenu); |
1083 CGFloat expectedHeight = (CGFloat)bookmarks::kBookmarkButtonHeight; | 1133 CGFloat expectedHeight = (CGFloat)bookmarks::kBookmarkButtonHeight + |
| 1134 bookmarks::kBookmarkVerticalPadding; |
1084 NSRect menuFrame = [folderMenu frame]; | 1135 NSRect menuFrame = [folderMenu frame]; |
1085 CGFloat menuHeight = NSHeight(menuFrame); | 1136 CGFloat menuHeight = NSHeight(menuFrame); |
1086 EXPECT_CGFLOAT_EQ(expectedHeight, menuHeight); | 1137 EXPECT_CGFLOAT_EQ(expectedHeight, menuHeight); |
1087 EXPECT_FALSE([folderController scrollable]); | 1138 EXPECT_FALSE([folderController scrollable]); |
1088 | 1139 |
1089 // Now add a real bookmark and reopen. | 1140 // Now add a real bookmark and reopen. |
1090 model.AddURL(folder, folder->GetChildCount(), L"a", GURL("http://a.com/")); | 1141 model.AddURL(folder, folder->GetChildCount(), L"a", GURL("http://a.com/")); |
1091 folderController = [bar_ folderController]; | 1142 folderController = [bar_ folderController]; |
1092 EXPECT_TRUE(folderController); | 1143 EXPECT_TRUE(folderController); |
1093 folderMenu = [folderController window]; | 1144 folderMenu = [folderController window]; |
(...skipping 269 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1363 [folder deleteBookmark:folder]; | 1414 [folder deleteBookmark:folder]; |
1364 EXPECT_FALSE([folder folderController]); | 1415 EXPECT_FALSE([folder folderController]); |
1365 } | 1416 } |
1366 | 1417 |
1367 // TODO(jrg): draggingEntered: and draggingExited: trigger timers so | 1418 // TODO(jrg): draggingEntered: and draggingExited: trigger timers so |
1368 // they are hard to test. Factor out "fire timers" into routines | 1419 // they are hard to test. Factor out "fire timers" into routines |
1369 // which can be overridden to fire immediately to make behavior | 1420 // which can be overridden to fire immediately to make behavior |
1370 // confirmable. | 1421 // confirmable. |
1371 // There is a similar problem with mouseEnteredButton: and | 1422 // There is a similar problem with mouseEnteredButton: and |
1372 // mouseExitedButton:. | 1423 // mouseExitedButton:. |
OLD | NEW |