Index: chrome/browser/cocoa/bookmark_bar_controller_unittest.mm |
=================================================================== |
--- chrome/browser/cocoa/bookmark_bar_controller_unittest.mm (revision 21121) |
+++ chrome/browser/cocoa/bookmark_bar_controller_unittest.mm (working copy) |
@@ -4,6 +4,7 @@ |
#import <Cocoa/Cocoa.h> |
+#include "base/basictypes.h" |
#include "base/scoped_nsobject.h" |
#import "chrome/browser/cocoa/bookmark_bar_controller.h" |
#include "chrome/browser/cocoa/browser_test_helper.h" |
@@ -13,17 +14,21 @@ |
// Pretend BookmarkURLOpener delegate to keep track of requests |
@interface BookmarkURLOpenerPong : NSObject<BookmarkURLOpener> { |
@public |
- GURL url_; |
- WindowOpenDisposition disposition_; |
+ std::vector<GURL> urls_; |
+ std::vector<WindowOpenDisposition> dispositions_; |
} |
@end |
@implementation BookmarkURLOpenerPong |
- (void)openBookmarkURL:(const GURL&)url |
disposition:(WindowOpenDisposition)disposition { |
- url_ = url; |
- disposition_ = disposition; |
+ urls_.push_back(url); |
+ dispositions_.push_back(disposition); |
} |
+- (void)clear { |
+ urls_.clear(); |
+ dispositions_.clear(); |
+} |
@end |
@@ -83,14 +88,42 @@ |
// make sure it's open so certain things aren't no-ops |
[bar_ toggleBookmarkBar]; |
+ |
+ // Create a menu/item to act like a sender |
+ menu_.reset([[NSMenu alloc] initWithTitle:@"I_dont_care"]); |
+ menu_item_.reset([[NSMenuItem alloc] |
+ initWithTitle:@"still_dont_care" |
+ action:NULL |
+ keyEquivalent:@""]); |
+ cell_.reset([[NSButtonCell alloc] init]); |
+ [menu_item_ setMenu:menu_.get()]; |
+ [menu_ setDelegate:cell_.get()]; |
} |
+ // Return a menu item that points to the right URL. |
+ NSMenuItem* ItemForBookmarkBarMenu(GURL& gurl) { |
+ node_.reset(new BookmarkNode(gurl)); |
+ [cell_ setRepresentedObject:[NSValue valueWithPointer:node_.get()]]; |
+ return menu_item_; |
+ } |
+ |
+ // Does NOT take ownership of node. |
+ NSMenuItem* ItemForBookmarkBarMenu(const BookmarkNode* node) { |
+ [cell_ setRepresentedObject:[NSValue valueWithPointer:node]]; |
+ return menu_item_; |
+ } |
+ |
+ |
CocoaTestHelper cocoa_helper_; // Inits Cocoa, creates window, etc... |
scoped_nsobject<NSView> content_area_; |
scoped_nsobject<NSView> infobar_view_; |
scoped_nsobject<NSView> parent_view_; |
BrowserTestHelper helper_; |
scoped_nsobject<BookmarkBarController> bar_; |
+ scoped_nsobject<NSMenu> menu_; |
+ scoped_nsobject<NSMenuItem> menu_item_; |
+ scoped_nsobject<NSButtonCell> cell_; |
+ scoped_ptr<BookmarkNode> node_; |
}; |
TEST_F(BookmarkBarControllerTest, ShowHide) { |
@@ -139,8 +172,8 @@ |
[cell setRepresentedObject:[NSValue valueWithPointer:node.get()]]; |
[bar_ openBookmark:button]; |
- EXPECT_EQ(pong.get()->url_, node->GetURL()); |
- EXPECT_EQ(pong.get()->disposition_, CURRENT_TAB); |
+ EXPECT_EQ(pong.get()->urls_[0], node->GetURL()); |
+ EXPECT_EQ(pong.get()->dispositions_[0], CURRENT_TAB); |
[bar_ setDelegate:nil]; |
} |
@@ -152,15 +185,6 @@ |
init]); |
[bar_ setDelegate:pong.get()]; |
- scoped_nsobject<NSMenu> menu([[NSMenu alloc] initWithTitle:@"I_dont_care"]); |
- scoped_nsobject<NSMenuItem> item([[NSMenuItem alloc] |
- initWithTitle:@"still_dont_care" |
- action:NULL |
- keyEquivalent:@""]); |
- scoped_nsobject<NSButtonCell> cell([[NSButtonCell alloc] init]); |
- [item setMenu:menu.get()]; |
- [menu setDelegate:cell]; |
- |
const char* urls[] = { "http://walla.walla.ding.dong.com", |
"http://i_dont_know.com", |
"http://cee.enn.enn.dot.com" }; |
@@ -173,13 +197,14 @@ |
for (unsigned int i = 0; |
i < sizeof(dispositions)/sizeof(dispositions[0]); |
i++) { |
- scoped_ptr<BookmarkNode> node(new BookmarkNode(GURL(urls[i]))); |
- [cell setRepresentedObject:[NSValue valueWithPointer:node.get()]]; |
- [bar_ performSelector:selectors[i] withObject:item.get()]; |
- EXPECT_EQ(pong.get()->url_, node->GetURL()); |
- EXPECT_EQ(pong.get()->disposition_, dispositions[i]); |
- [cell setRepresentedObject:nil]; |
+ GURL gurl(urls[i]); |
+ [bar_ performSelector:selectors[i] |
+ withObject:ItemForBookmarkBarMenu(gurl)]; |
+ EXPECT_EQ(pong.get()->urls_[0], gurl); |
+ EXPECT_EQ(pong.get()->dispositions_[0], dispositions[i]); |
+ [pong clear]; |
} |
+ [bar_ setDelegate:nil]; |
} |
TEST_F(BookmarkBarControllerTest, TestAddRemoveAndClear) { |
@@ -278,6 +303,69 @@ |
EXPECT_GE(frame_2.origin.x, frame_1.origin.x + frame_1.size.width); |
} |
+TEST_F(BookmarkBarControllerTest, DeleteBookmark) { |
+ BookmarkModel* model = helper_.profile()->GetBookmarkModel(); |
+ |
+ const char* urls[] = { "https://secret.url.com", |
+ "http://super.duper.web.site.for.doodz.gov", |
+ "http://www.foo-bar-baz.com/" }; |
+ const BookmarkNode* parent = model->GetBookmarkBarNode(); |
+ for (unsigned int i = 0; i < arraysize(urls); i++) { |
+ model->AddURL(parent, parent->GetChildCount(), |
+ L"title", GURL(urls[i])); |
+ } |
+ EXPECT_EQ(3, parent->GetChildCount()); |
+ const BookmarkNode* middle_node = parent->GetChild(1); |
+ |
+ NSMenuItem* item = ItemForBookmarkBarMenu(middle_node); |
+ [bar_ deleteBookmark:item]; |
+ EXPECT_EQ(2, parent->GetChildCount()); |
+ EXPECT_EQ(parent->GetChild(0)->GetURL(), GURL(urls[0])); |
+ // node 2 moved into spot 1 |
+ EXPECT_EQ(parent->GetChild(1)->GetURL(), GURL(urls[2])); |
+} |
+ |
+TEST_F(BookmarkBarControllerTest, OpenAllBookmarks) { |
+ scoped_nsobject<BookmarkURLOpenerPong> pong([[BookmarkURLOpenerPong alloc] |
+ init]); |
+ [bar_ setDelegate:pong.get()]; |
+ |
+ BookmarkModel* model = helper_.profile()->GetBookmarkModel(); |
+ const BookmarkNode* parent = model->GetBookmarkBarNode(); |
+ // { one, { two-one, two-two }, three } |
+ model->AddURL(parent, parent->GetChildCount(), |
+ L"title", GURL("http://one.com")); |
+ const BookmarkNode* folder = model->AddGroup(parent, |
+ parent->GetChildCount(), |
+ L"group"); |
+ model->AddURL(folder, folder->GetChildCount(), |
+ L"title", GURL("http://two-one.com")); |
+ model->AddURL(folder, folder->GetChildCount(), |
+ L"title", GURL("http://two-two.com")); |
+ model->AddURL(parent, parent->GetChildCount(), |
+ L"title", GURL("https://three.com")); |
+ [bar_ openAllBookmarks:nil]; |
+ |
+ EXPECT_EQ(pong.get()->urls_.size(), 4U); |
+ EXPECT_EQ(pong.get()->dispositions_.size(), 4U); |
+ |
+ // I can't use EXPECT_EQ() here since the macro can't expand |
+ // properly (no way to print the value of an iterator). |
+ std::vector<GURL>::iterator i; |
+ std::vector<GURL>::iterator begin = pong.get()->urls_.begin(); |
+ std::vector<GURL>::iterator end = pong.get()->urls_.end(); |
+ i = find(begin, end, GURL("http://two-one.com")); |
+ EXPECT_FALSE(i == end); |
+ i = find(begin, end, GURL("https://three.com")); |
+ EXPECT_FALSE(i == end); |
+ i = find(begin, end, GURL("https://will-not-be-found.com")); |
+ EXPECT_TRUE(i == end); |
+ |
+ EXPECT_EQ(pong.get()->dispositions_[3], NEW_BACKGROUND_TAB); |
+ |
+ [bar_ setDelegate:nil]; |
+} |
+ |
// TODO(jrg): write a test to confirm that nodeFavIconLoaded calls |
// checkForBookmarkButtonGrowth:. |
@@ -300,4 +388,9 @@ |
[[bar_ view] display]; |
} |
+// Cannot test these methods since they simply call a single static |
+// method, BookmarkEditor::Show(), which is impossible to mock. |
+// editBookmark:, addPage: |
+ |
+ |
} // namespace |