| OLD | NEW |
| 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/basictypes.h" |
| 8 #include "base/scoped_nsobject.h" | 8 #include "base/scoped_nsobject.h" |
| 9 #include "base/sys_string_conversions.h" | 9 #include "base/sys_string_conversions.h" |
| 10 #import "chrome/browser/cocoa/bookmark_bar_constants.h" | 10 #import "chrome/browser/cocoa/bookmark_bar_constants.h" |
| 11 #import "chrome/browser/cocoa/bookmark_bar_controller.h" | 11 #import "chrome/browser/cocoa/bookmark_bar_controller.h" |
| 12 #import "chrome/browser/cocoa/bookmark_bar_view.h" | 12 #import "chrome/browser/cocoa/bookmark_bar_view.h" |
| 13 #import "chrome/browser/cocoa/bookmark_menu.h" |
| 13 #include "chrome/browser/cocoa/browser_test_helper.h" | 14 #include "chrome/browser/cocoa/browser_test_helper.h" |
| 14 #import "chrome/browser/cocoa/cocoa_test_helper.h" | 15 #import "chrome/browser/cocoa/cocoa_test_helper.h" |
| 15 #include "chrome/browser/cocoa/test_event_utils.h" | 16 #include "chrome/browser/cocoa/test_event_utils.h" |
| 16 #import "chrome/browser/cocoa/view_resizer_pong.h" | 17 #import "chrome/browser/cocoa/view_resizer_pong.h" |
| 17 #include "chrome/common/pref_names.h" | 18 #include "chrome/common/pref_names.h" |
| 18 #include "testing/gtest/include/gtest/gtest.h" | 19 #include "testing/gtest/include/gtest/gtest.h" |
| 19 #include "testing/platform_test.h" | 20 #include "testing/platform_test.h" |
| 20 | 21 |
| 21 // Just like a BookmarkBarController but openURL: is stubbed out. | 22 // Just like a BookmarkBarController but openURL: is stubbed out. |
| 22 @interface BookmarkBarControllerNoOpen : BookmarkBarController { | 23 @interface BookmarkBarControllerNoOpen : BookmarkBarController { |
| (...skipping 70 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 93 bar_.reset( | 94 bar_.reset( |
| 94 [[BookmarkBarControllerNoOpen alloc] | 95 [[BookmarkBarControllerNoOpen alloc] |
| 95 initWithBrowser:helper_.browser() | 96 initWithBrowser:helper_.browser() |
| 96 initialWidth:NSWidth(parent_frame) | 97 initialWidth:NSWidth(parent_frame) |
| 97 delegate:nil | 98 delegate:nil |
| 98 resizeDelegate:resizeDelegate_.get()]); | 99 resizeDelegate:resizeDelegate_.get()]); |
| 99 | 100 |
| 100 InstallAndToggleBar(bar_.get()); | 101 InstallAndToggleBar(bar_.get()); |
| 101 | 102 |
| 102 // Create a menu/item to act like a sender | 103 // Create a menu/item to act like a sender |
| 103 menu_.reset([[NSMenu alloc] initWithTitle:@"I_dont_care"]); | 104 menu_.reset([[BookmarkMenu alloc] initWithTitle:@"I_dont_care"]); |
| 104 menu_item_.reset([[NSMenuItem alloc] | 105 menu_item_.reset([[NSMenuItem alloc] |
| 105 initWithTitle:@"still_dont_care" | 106 initWithTitle:@"still_dont_care" |
| 106 action:NULL | 107 action:NULL |
| 107 keyEquivalent:@""]); | 108 keyEquivalent:@""]); |
| 108 cell_.reset([[NSButtonCell alloc] init]); | 109 cell_.reset([[NSButtonCell alloc] init]); |
| 109 [menu_item_ setMenu:menu_.get()]; | 110 [menu_item_ setMenu:menu_.get()]; |
| 110 [menu_ setDelegate:cell_.get()]; | 111 [menu_ setDelegate:cell_.get()]; |
| 111 } | 112 } |
| 112 | 113 |
| 113 void InstallAndToggleBar(BookmarkBarController* bar) { | 114 void InstallAndToggleBar(BookmarkBarController* bar) { |
| (...skipping 14 matching lines...) Expand all Loading... |
| 128 // Update the state of the bookmark bar. | 129 // Update the state of the bookmark bar. |
| 129 void UpdateBookmarkBar() { | 130 void UpdateBookmarkBar() { |
| 130 [bar_ updateAndShowNormalBar:[bar_ isShownAsToolbar] | 131 [bar_ updateAndShowNormalBar:[bar_ isShownAsToolbar] |
| 131 showDetachedBar:[bar_ isShownAsDetachedBar] | 132 showDetachedBar:[bar_ isShownAsDetachedBar] |
| 132 withAnimation:NO]; | 133 withAnimation:NO]; |
| 133 } | 134 } |
| 134 | 135 |
| 135 // Return a menu item that points to the right URL. | 136 // Return a menu item that points to the right URL. |
| 136 NSMenuItem* ItemForBookmarkBarMenu(GURL& gurl) { | 137 NSMenuItem* ItemForBookmarkBarMenu(GURL& gurl) { |
| 137 node_.reset(new BookmarkNode(gurl)); | 138 node_.reset(new BookmarkNode(gurl)); |
| 138 [cell_ setRepresentedObject:[NSValue valueWithPointer:node_.get()]]; | 139 [menu_ setRepresentedObject:[NSValue valueWithPointer:node_.get()]]; |
| 139 return menu_item_; | 140 return menu_item_; |
| 140 } | 141 } |
| 141 | 142 |
| 142 // Does NOT take ownership of node. | 143 // Does NOT take ownership of node. |
| 143 NSMenuItem* ItemForBookmarkBarMenu(const BookmarkNode* node) { | 144 NSMenuItem* ItemForBookmarkBarMenu(const BookmarkNode* node) { |
| 144 [cell_ setRepresentedObject:[NSValue valueWithPointer:node]]; | 145 [menu_ setRepresentedObject:[NSValue valueWithPointer:node]]; |
| 145 return menu_item_; | 146 return menu_item_; |
| 146 } | 147 } |
| 147 | 148 |
| 148 CocoaTestHelper cocoa_helper_; // Inits Cocoa, creates window, etc... | 149 CocoaTestHelper cocoa_helper_; // Inits Cocoa, creates window, etc... |
| 149 scoped_nsobject<NSView> parent_view_; | 150 scoped_nsobject<NSView> parent_view_; |
| 150 BrowserTestHelper helper_; | 151 BrowserTestHelper helper_; |
| 151 scoped_nsobject<ViewResizerPong> resizeDelegate_; | 152 scoped_nsobject<ViewResizerPong> resizeDelegate_; |
| 152 scoped_nsobject<BookmarkBarControllerNoOpen> bar_; | 153 scoped_nsobject<BookmarkBarControllerNoOpen> bar_; |
| 153 scoped_nsobject<NSMenu> menu_; | 154 scoped_nsobject<BookmarkMenu> menu_; |
| 154 scoped_nsobject<NSMenuItem> menu_item_; | 155 scoped_nsobject<NSMenuItem> menu_item_; |
| 155 scoped_nsobject<NSButtonCell> cell_; | 156 scoped_nsobject<NSButtonCell> cell_; |
| 156 scoped_ptr<BookmarkNode> node_; | 157 scoped_ptr<BookmarkNode> node_; |
| 157 }; | 158 }; |
| 158 | 159 |
| 159 TEST_F(BookmarkBarControllerTest, ShowWhenShowBookmarkBarTrue) { | 160 TEST_F(BookmarkBarControllerTest, ShowWhenShowBookmarkBarTrue) { |
| 160 [bar_ updateAndShowNormalBar:YES | 161 [bar_ updateAndShowNormalBar:YES |
| 161 showDetachedBar:NO | 162 showDetachedBar:NO |
| 162 withAnimation:NO]; | 163 withAnimation:NO]; |
| 163 EXPECT_TRUE([bar_ isShownAsToolbar]); | 164 EXPECT_TRUE([bar_ isShownAsToolbar]); |
| (...skipping 349 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 513 L"title", GURL("http://one.com")); | 514 L"title", GURL("http://one.com")); |
| 514 const BookmarkNode* folder = model->AddGroup(parent, | 515 const BookmarkNode* folder = model->AddGroup(parent, |
| 515 parent->GetChildCount(), | 516 parent->GetChildCount(), |
| 516 L"group"); | 517 L"group"); |
| 517 model->AddURL(folder, folder->GetChildCount(), | 518 model->AddURL(folder, folder->GetChildCount(), |
| 518 L"title", GURL("http://two-one.com")); | 519 L"title", GURL("http://two-one.com")); |
| 519 model->AddURL(folder, folder->GetChildCount(), | 520 model->AddURL(folder, folder->GetChildCount(), |
| 520 L"title", GURL("http://two-two.com")); | 521 L"title", GURL("http://two-two.com")); |
| 521 model->AddURL(parent, parent->GetChildCount(), | 522 model->AddURL(parent, parent->GetChildCount(), |
| 522 L"title", GURL("https://three.com")); | 523 L"title", GURL("https://three.com")); |
| 523 [bar_ openAllBookmarks:nil]; | |
| 524 | 524 |
| 525 // Our first OpenAll... is from the bar itself. |
| 526 [bar_ openAllBookmarks:ItemForBookmarkBarMenu(parent)]; |
| 525 EXPECT_EQ(bar_.get()->urls_.size(), 4U); | 527 EXPECT_EQ(bar_.get()->urls_.size(), 4U); |
| 526 EXPECT_EQ(bar_.get()->dispositions_.size(), 4U); | 528 EXPECT_EQ(bar_.get()->dispositions_.size(), 4U); |
| 527 | 529 |
| 528 // I can't use EXPECT_EQ() here since the macro can't expand | 530 // I can't use EXPECT_EQ() here since the macro can't expand |
| 529 // properly (no way to print the value of an iterator). | 531 // properly (no way to print the value of an iterator). |
| 530 std::vector<GURL>::iterator i; | 532 std::vector<GURL>::iterator i; |
| 531 std::vector<GURL>::iterator begin = bar_.get()->urls_.begin(); | 533 std::vector<GURL>::iterator begin = bar_.get()->urls_.begin(); |
| 532 std::vector<GURL>::iterator end = bar_.get()->urls_.end(); | 534 std::vector<GURL>::iterator end = bar_.get()->urls_.end(); |
| 533 i = find(begin, end, GURL("http://two-one.com")); | 535 i = find(begin, end, GURL("http://two-one.com")); |
| 534 EXPECT_FALSE(i == end); | 536 EXPECT_FALSE(i == end); |
| 535 i = find(begin, end, GURL("https://three.com")); | 537 i = find(begin, end, GURL("https://three.com")); |
| 536 EXPECT_FALSE(i == end); | 538 EXPECT_FALSE(i == end); |
| 537 i = find(begin, end, GURL("https://will-not-be-found.com")); | 539 i = find(begin, end, GURL("https://will-not-be-found.com")); |
| 538 EXPECT_TRUE(i == end); | 540 EXPECT_TRUE(i == end); |
| 539 | 541 |
| 540 EXPECT_EQ(bar_.get()->dispositions_[3], NEW_BACKGROUND_TAB); | 542 EXPECT_EQ(bar_.get()->dispositions_[3], NEW_BACKGROUND_TAB); |
| 543 |
| 544 // Now try an OpenAll... from a folder node. |
| 545 bar_.get()->urls_.clear(); |
| 546 bar_.get()->dispositions_.clear(); |
| 547 [bar_ openAllBookmarks:ItemForBookmarkBarMenu(folder)]; |
| 548 |
| 549 EXPECT_EQ(bar_.get()->urls_.size(), 2U); |
| 550 EXPECT_EQ(bar_.get()->dispositions_.size(), 2U); |
| 541 } | 551 } |
| 542 | 552 |
| 543 // TODO(jrg): write a test to confirm that nodeFavIconLoaded calls | 553 // TODO(jrg): write a test to confirm that nodeFavIconLoaded calls |
| 544 // checkForBookmarkButtonGrowth:. | 554 // checkForBookmarkButtonGrowth:. |
| 545 | 555 |
| 546 TEST_F(BookmarkBarControllerTest, Cell) { | 556 TEST_F(BookmarkBarControllerTest, Cell) { |
| 547 BookmarkModel* model = helper_.profile()->GetBookmarkModel(); | 557 BookmarkModel* model = helper_.profile()->GetBookmarkModel(); |
| 548 [bar_ loaded:model]; | 558 [bar_ loaded:model]; |
| 549 | 559 |
| 550 const BookmarkNode* parent = model->GetBookmarkBarNode(); | 560 const BookmarkNode* parent = model->GetBookmarkBarNode(); |
| (...skipping 133 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 684 BookmarkModel* model = helper_.profile()->GetBookmarkModel(); | 694 BookmarkModel* model = helper_.profile()->GetBookmarkModel(); |
| 685 const BookmarkNode* parent = model->GetBookmarkBarNode(); | 695 const BookmarkNode* parent = model->GetBookmarkBarNode(); |
| 686 [bar_ addURLs:nsurls withTitles:nstitles at:NSZeroPoint]; | 696 [bar_ addURLs:nsurls withTitles:nstitles at:NSZeroPoint]; |
| 687 EXPECT_EQ(3, parent->GetChildCount()); | 697 EXPECT_EQ(3, parent->GetChildCount()); |
| 688 for (int i = 0; i < parent->GetChildCount(); ++i) { | 698 for (int i = 0; i < parent->GetChildCount(); ++i) { |
| 689 EXPECT_EQ(parent->GetChild(i)->GetURL(), GURL(urls[i])); | 699 EXPECT_EQ(parent->GetChild(i)->GetURL(), GURL(urls[i])); |
| 690 EXPECT_EQ(parent->GetChild(i)->GetTitle(), titles[i]); | 700 EXPECT_EQ(parent->GetChild(i)->GetTitle(), titles[i]); |
| 691 } | 701 } |
| 692 } | 702 } |
| 693 | 703 |
| 704 TEST_F(BookmarkBarControllerTest, TestButtonOrBar) { |
| 705 BookmarkModel* model = helper_.profile()->GetBookmarkModel(); |
| 706 GURL gurl1("http://www.google.com"); |
| 707 std::wstring title1(L"x"); |
| 708 model->SetURLStarred(gurl1, title1, true); |
| 709 |
| 710 GURL gurl2("http://www.google.com/gurl_power"); |
| 711 std::wstring title2(L"gurl power"); |
| 712 model->SetURLStarred(gurl2, title2, true); |
| 713 |
| 714 NSButton* first = [[bar_ buttons] objectAtIndex:0]; |
| 715 NSButton* second = [[bar_ buttons] objectAtIndex:1]; |
| 716 EXPECT_TRUE(first && second); |
| 717 |
| 718 NSMenuItem* menuItem = [[[first cell] menu] itemAtIndex:0]; |
| 719 BookmarkNode* node = [bar_ nodeFromMenuItem:menuItem]; |
| 720 EXPECT_TRUE(node); |
| 721 EXPECT_EQ(node, model->GetBookmarkBarNode()->GetChild(0)); |
| 722 |
| 723 menuItem = [[[second cell] menu] itemAtIndex:0]; |
| 724 node = [bar_ nodeFromMenuItem:menuItem]; |
| 725 EXPECT_TRUE(node); |
| 726 EXPECT_EQ(node, model->GetBookmarkBarNode()->GetChild(1)); |
| 727 |
| 728 menuItem = [[[bar_ view] menu] itemAtIndex:0]; |
| 729 node = [bar_ nodeFromMenuItem:menuItem]; |
| 730 EXPECT_TRUE(node); |
| 731 EXPECT_EQ(node, model->GetBookmarkBarNode()); |
| 732 } |
| 733 |
| 734 TEST_F(BookmarkBarControllerTest, TestMenuNodeAndDisable) { |
| 735 BookmarkModel* model = helper_.profile()->GetBookmarkModel(); |
| 736 const BookmarkNode* parent = model->GetBookmarkBarNode(); |
| 737 const BookmarkNode* folder = model->AddGroup(parent, |
| 738 parent->GetChildCount(), |
| 739 L"group"); |
| 740 NSButton* button = [[bar_ buttons] objectAtIndex:0]; |
| 741 EXPECT_TRUE(button); |
| 742 |
| 743 // Confirm the menu knows which node it is talking about |
| 744 BookmarkMenu* menu = static_cast<BookmarkMenu*>([[button cell] menu]); |
| 745 EXPECT_TRUE(menu); |
| 746 EXPECT_TRUE([menu isKindOfClass:[BookmarkMenu class]]); |
| 747 EXPECT_EQ(folder, [menu node]); |
| 748 |
| 749 // Make sure "Open All" is disabled (nothing to open -- no children!) |
| 750 // (Assumes "Open All" is the 1st item) |
| 751 NSMenuItem* item = [menu itemAtIndex:0]; |
| 752 EXPECT_FALSE([bar_ validateUserInterfaceItem:item]); |
| 753 |
| 754 // Now add a child and make sure the item would be enabled. |
| 755 model->AddURL(folder, folder->GetChildCount(), |
| 756 L"super duper wide title", |
| 757 GURL("http://superfriends.hall-of-justice.edu")); |
| 758 EXPECT_TRUE([bar_ validateUserInterfaceItem:item]); |
| 759 } |
| 760 |
| 694 } // namespace | 761 } // namespace |
| OLD | NEW |