Index: chrome/browser/cocoa/bookmark_bar_folder_controller_unittest.mm |
=================================================================== |
--- chrome/browser/cocoa/bookmark_bar_folder_controller_unittest.mm (revision 54167) |
+++ chrome/browser/cocoa/bookmark_bar_folder_controller_unittest.mm (working copy) |
@@ -121,7 +121,7 @@ |
class BookmarkBarFolderControllerTest : public CocoaTest { |
public: |
BrowserTestHelper helper_; |
- scoped_nsobject<BookmarkBarController> parentBarController_; |
+ scoped_nsobject<BookmarkBarController> bar_; |
const BookmarkNode* folderA_; // owned by model |
const BookmarkNode* longTitleNode_; // owned by model |
@@ -149,21 +149,21 @@ |
model->AddURL(folderB, folderB->GetChildCount(), L"t", |
GURL("http://www.google.com/c")); |
- parentBarController_.reset( |
+ bar_.reset( |
[[BookmarkBarControllerChildFolderRedirect alloc] |
initWithBrowser:helper_.browser() |
initialWidth:300 |
delegate:nil |
resizeDelegate:nil]); |
- [parentBarController_ loaded:model]; |
+ [bar_ loaded:model]; |
// Make parent frame for bookmark bar then open it. |
NSRect frame = [[test_window() contentView] frame]; |
frame = NSInsetRect(frame, 100, 200); |
NSView* fakeToolbarView = [[[NSView alloc] initWithFrame:frame] |
autorelease]; |
[[test_window() contentView] addSubview:fakeToolbarView]; |
- [fakeToolbarView addSubview:[parentBarController_ view]]; |
- [parentBarController_ setBookmarkBarEnabled:YES]; |
+ [fakeToolbarView addSubview:[bar_ view]]; |
+ [bar_ setBookmarkBarEnabled:YES]; |
} |
// Remove the bookmark with the long title. |
@@ -187,13 +187,12 @@ |
// Return a simple BookmarkBarFolderController. |
BookmarkBarFolderControllerPong* SimpleBookmarkBarFolderController() { |
- BookmarkButton* parentButton = [[parentBarController_ buttons] |
- objectAtIndex:0]; |
+ BookmarkButton* parentButton = [[bar_ buttons] objectAtIndex:0]; |
BookmarkBarFolderControllerPong* c = |
[[BookmarkBarFolderControllerPong alloc] |
initWithParentButton:parentButton |
parentController:nil |
- barController:parentBarController_]; |
+ barController:bar_]; |
[c window]; // Force nib load. |
return c; |
} |
@@ -241,8 +240,7 @@ |
} |
TEST_F(BookmarkBarFolderControllerTest, BasicPosition) { |
- BookmarkButton* parentButton = [[parentBarController_ buttons] |
- objectAtIndex:0]; |
+ BookmarkButton* parentButton = [[bar_ buttons] objectAtIndex:0]; |
EXPECT_TRUE(parentButton); |
// If parent is a BookmarkBarController, grow down. |
@@ -250,7 +248,7 @@ |
bbfc.reset([[BookmarkBarFolderControllerLow alloc] |
initWithParentButton:parentButton |
parentController:nil |
- barController:parentBarController_]); |
+ barController:bar_]); |
[bbfc window]; |
[bbfc setRealTopLeft:YES]; |
NSPoint pt = [bbfc windowTopLeftForWidth:0]; // screen coords |
@@ -272,7 +270,7 @@ |
bbfc2.reset([[BookmarkBarFolderControllerLow alloc] |
initWithParentButton:[[bbfc buttons] objectAtIndex:0] |
parentController:bbfc.get() |
- barController:parentBarController_]); |
+ barController:bar_]); |
[bbfc2 window]; |
[bbfc2 setRealTopLeft:YES]; |
pt = [bbfc2 windowTopLeftForWidth:0]; |
@@ -297,8 +295,7 @@ |
// Setup initial state for opening all folders. |
folder = parent; |
- BookmarkButton* parentButton = [[parentBarController_ buttons] |
- objectAtIndex:0]; |
+ BookmarkButton* parentButton = [[bar_ buttons] objectAtIndex:0]; |
BookmarkBarFolderController* parentController = nil; |
EXPECT_TRUE(parentButton); |
@@ -310,7 +307,7 @@ |
[[BookmarkBarFolderControllerNoLevel alloc] |
initWithParentButton:parentButton |
parentController:parentController |
- barController:parentBarController_]; |
+ barController:bar_]; |
[folder_controller_array addObject:bbfcl]; |
[bbfcl autorelease]; |
[bbfcl window]; |
@@ -412,7 +409,7 @@ |
scoped_nsobject<BookmarkBarFolderControllerPong> bbfc; |
bbfc.reset(SimpleBookmarkBarFolderController()); |
EXPECT_TRUE(bbfc.get()); |
- [parentBarController_ setChildFolderDelegate:bbfc.get()]; |
+ [bar_ setChildFolderDelegate:bbfc.get()]; |
EXPECT_FALSE([bbfc childFolderWillShow]); |
[bbfc openBookmarkFolderFromButton:[[bbfc buttons] objectAtIndex:0]]; |
@@ -422,7 +419,7 @@ |
[bbfc closeBookmarkFolder:nil]; |
EXPECT_TRUE([bbfc childFolderWillClose]); |
- [parentBarController_ setChildFolderDelegate:nil]; |
+ [bar_ setChildFolderDelegate:nil]; |
} |
// Make sure bookmark folders have variable widths. |
@@ -505,6 +502,59 @@ |
} |
} |
+// Folder menu sizing and placementwhile deleting bookmarks and scrolling tests. |
+TEST_F(BookmarkBarFolderControllerTest, MenuPlacementWhileScrollingDeleting) { |
+ scoped_nsobject<BookmarkBarFolderController> bbfc; |
+ AddLotsOfNodes(); |
+ bbfc.reset(SimpleBookmarkBarFolderController()); |
+ [bbfc showWindow:bbfc.get()]; |
+ NSWindow* menuWindow = [bbfc window]; |
+ BookmarkBarFolderController* folder = [bar_ folderController]; |
+ NSArray* buttons = [folder buttons]; |
+ |
+ // Before scrolling any, delete a bookmark and make sure the window top has |
+ // not moved. Pick a button which is near the top and visible. |
+ CGFloat oldTop = [menuWindow frame].origin.y + NSHeight([menuWindow frame]); |
+ BookmarkButton* button = [buttons objectAtIndex:3]; |
+ [folder deleteBookmark:button]; |
+ CGFloat newTop = [menuWindow frame].origin.y + NSHeight([menuWindow frame]); |
+ EXPECT_CGFLOAT_EQ(oldTop, newTop); |
+ |
+ // Scroll so that both the top and bottom scroll arrows show, make sure |
+ // the top of the window has moved up, then delete a visible button and |
+ // make sure the top has not moved. |
+ oldTop = newTop; |
+ const CGFloat scrollOneBookmark = bookmarks::kBookmarkButtonHeight + |
+ bookmarks::kBookmarkVerticalPadding; |
+ NSUInteger buttonCounter = 0; |
+ NSUInteger extraButtonLimit = 3; |
+ while (![bbfc canScrollDown] || extraButtonLimit > 0) { |
+ [bbfc performOneScroll:scrollOneBookmark]; |
+ ++buttonCounter; |
+ if ([bbfc canScrollDown]) |
+ --extraButtonLimit; |
+ } |
+ newTop = [menuWindow frame].origin.y + NSHeight([menuWindow frame]); |
+ EXPECT_NE(oldTop, newTop); |
+ oldTop = newTop; |
+ button = [buttons objectAtIndex:buttonCounter + 3]; |
+ [folder deleteBookmark:button]; |
+ newTop = [menuWindow frame].origin.y + NSHeight([menuWindow frame]); |
+ EXPECT_CGFLOAT_EQ(oldTop, newTop); |
+ |
+ // Scroll so that the top scroll arrow is no longer showing, make sure |
+ // the top of the window has not moved, then delete a visible button and |
+ // make sure the top has not moved. |
+ while ([bbfc canScrollDown]) { |
+ [bbfc performOneScroll:-scrollOneBookmark]; |
+ --buttonCounter; |
+ } |
+ button = [buttons objectAtIndex:buttonCounter + 3]; |
+ [folder deleteBookmark:button]; |
+ newTop = [menuWindow frame].origin.y + NSHeight([menuWindow frame]); |
+ EXPECT_CGFLOAT_EQ(oldTop, newTop); |
+} |
+ |
@interface FakedDragInfo : NSObject { |
@public |
NSPoint dropLocation_; |
@@ -1080,7 +1130,8 @@ |
EXPECT_TRUE(folderController); |
NSWindow* folderMenu = [folderController window]; |
EXPECT_TRUE(folderMenu); |
- CGFloat expectedHeight = (CGFloat)bookmarks::kBookmarkButtonHeight; |
+ CGFloat expectedHeight = (CGFloat)bookmarks::kBookmarkButtonHeight + |
+ bookmarks::kBookmarkVerticalPadding; |
NSRect menuFrame = [folderMenu frame]; |
CGFloat menuHeight = NSHeight(menuFrame); |
EXPECT_CGFLOAT_EQ(expectedHeight, menuHeight); |