Index: chrome/browser/ui/views/bookmarks/bookmark_bar_view_unittest.cc |
diff --git a/chrome/browser/ui/views/bookmarks/bookmark_bar_view_unittest.cc b/chrome/browser/ui/views/bookmarks/bookmark_bar_view_unittest.cc |
index 14609fb80bdb732af28f011c3725ac2b5e0b76a3..60f6f04c0cc08eb712ac38bb2796677f53fc1425 100644 |
--- a/chrome/browser/ui/views/bookmarks/bookmark_bar_view_unittest.cc |
+++ b/chrome/browser/ui/views/bookmarks/bookmark_bar_view_unittest.cc |
@@ -5,6 +5,7 @@ |
#include "chrome/browser/ui/views/bookmarks/bookmark_bar_view.h" |
#include "base/prefs/pref_service.h" |
+#include "base/strings/utf_string_conversions.h" |
#include "base/values.h" |
#include "chrome/browser/bookmarks/bookmark_model_factory.h" |
#include "chrome/browser/profiles/profile.h" |
@@ -23,6 +24,7 @@ |
#include "components/search_engines/template_url_service.h" |
#include "components/search_engines/template_url_service_client.h" |
#include "ui/views/controls/button/label_button.h" |
+#include "ui/views/controls/button/menu_button.h" |
class BookmarkBarViewTest : public BrowserWithTestWindowTest { |
public: |
@@ -42,15 +44,47 @@ class BookmarkBarViewTest : public BrowserWithTestWindowTest { |
} |
protected: |
- TestingProfile* CreateProfile() override { |
- TestingProfile* profile = BrowserWithTestWindowTest::CreateProfile(); |
- // TemplateURLService is normally NULL during testing. Instant extended |
- // needs this service so set a custom factory function. |
- TemplateURLServiceFactory::GetInstance()->SetTestingFactory( |
- profile, &BookmarkBarViewTest::CreateTemplateURLService); |
- return profile; |
+ // Returns a string containing the label of each of the buttons on the |
+ // bookmark bar. Each label is separated by a space. |
+ std::string GetStringForButtons() { |
+ std::string result; |
+ for (int i = 0; i < test_helper_->GetBookmarkButtonCount(); ++i) { |
msw
2014/10/27 20:40:25
Doesn't GetBookmarkButtonCount include invisible b
sky
2014/10/27 21:48:18
Indeed. I changed things around and made the names
|
+ if (i != 0) |
+ result += " "; |
+ result += |
+ base::UTF16ToASCII(test_helper_->GetBookmarkButton(i)->GetText()); |
+ } |
+ return result; |
+ } |
+ |
+ // Continues sizing the bookmark bar until it has |count| buttons. |
+ void SizeUntil(int count) { |
+ const int start_width = bookmark_bar_view_->width(); |
+ const int height = bookmark_bar_view_->GetPreferredSize().height(); |
+ for (int i = 0; i < 100 && |
msw
2014/10/27 20:40:25
nit: why not just do a while loop that increases b
sky
2014/10/27 21:48:18
If this gets to 100 something is likely very wrong
msw
2014/10/27 22:50:18
Acknowledged.
|
+ test_helper_->GetBookmarkButtonCount() < count; ++i) { |
+ bookmark_bar_view_->SetBounds(0, 0, start_width + i * 10, height); |
+ bookmark_bar_view_->Layout(); |
+ } |
} |
+ const BookmarkNode* GetBookmarkBarNode() { |
+ return BookmarkModelFactory::GetForProfile(profile())->bookmark_bar_node(); |
+ } |
+ |
+ void WaitForBookmarkModelToLoad() { |
+ bookmarks::test::WaitForBookmarkModelToLoad( |
+ BookmarkModelFactory::GetForProfile(profile())); |
+ } |
+ |
+ // Adds nodes to the bookmark bar node from |string|. See |
+ // bookmarks::test::AddNodesFromModelString() for details on |string|. |
+ void AddNodesToBookmarkBarFromModelString(const std::string& string) { |
+ bookmarks::test::AddNodesFromModelString( |
+ BookmarkModelFactory::GetForProfile(profile()), |
+ GetBookmarkBarNode(), |
+ string); |
+ } |
// Creates the BookmarkBarView and BookmarkBarViewTestHelper. Generally you'll |
// want to use CreateBookmarkModelAndBookmarkBarView(), but use this if |
// need to create the BookmarkBarView after the model has populated. |
@@ -63,11 +97,20 @@ class BookmarkBarViewTest : public BrowserWithTestWindowTest { |
// BookmarkBarView. |
void CreateBookmarkModelAndBookmarkBarView() { |
profile()->CreateBookmarkModel(true); |
- bookmarks::test::WaitForBookmarkModelToLoad( |
- BookmarkModelFactory::GetForProfile(profile())); |
+ WaitForBookmarkModelToLoad(); |
CreateBookmarkBarView(); |
} |
+ // BrowserWithTestWindowTest: |
+ TestingProfile* CreateProfile() override { |
+ TestingProfile* profile = BrowserWithTestWindowTest::CreateProfile(); |
+ // TemplateURLService is normally NULL during testing. Instant extended |
+ // needs this service so set a custom factory function. |
+ TemplateURLServiceFactory::GetInstance()->SetTestingFactory( |
+ profile, &BookmarkBarViewTest::CreateTemplateURLService); |
+ return profile; |
+ } |
+ |
scoped_ptr<BookmarkBarViewTestHelper> test_helper_; |
scoped_ptr<BookmarkBarView> bookmark_bar_view_; |
@@ -109,6 +152,159 @@ TEST_F(BookmarkBarViewTest, AppsShortcutVisibility) { |
EXPECT_FALSE(test_helper_->apps_page_shortcut()->visible()); |
} |
+// Various assertions around visibilty of the overflow_button. |
+TEST_F(BookmarkBarViewTest, OverflowVisibility) { |
+ profile()->CreateBookmarkModel(true); |
+ CreateBookmarkBarView(); |
+ EXPECT_FALSE(test_helper_->overflow_button()->visible()); |
+ |
+ WaitForBookmarkModelToLoad(); |
+ AddNodesToBookmarkBarFromModelString("a b c d e f "); |
+ EXPECT_TRUE(test_helper_->overflow_button()->visible()); |
+ |
+ SizeUntil(1); |
+ EXPECT_EQ(1, test_helper_->GetBookmarkButtonCount()); |
+ EXPECT_TRUE(test_helper_->overflow_button()->visible()); |
+ |
+ // Go really big, which should force all buttons to be added. |
+ bookmark_bar_view_->SetBounds( |
+ 0, 0, 5000, bookmark_bar_view_->bounds().height()); |
+ bookmark_bar_view_->Layout(); |
+ EXPECT_EQ(6, test_helper_->GetBookmarkButtonCount()); |
+ EXPECT_FALSE(test_helper_->overflow_button()->visible()); |
msw
2014/10/27 20:40:25
nit: test shrinking the bookmark bar view here.
sky
2014/10/27 21:48:18
Done.
|
+} |
+ |
+// Verifies buttons get added correctly when BookmarkBarView is created after |
+// the model and the model has nodes. |
+TEST_F(BookmarkBarViewTest, ButtonsDynamicallyAddedAfterModelHasNodes) { |
+ profile()->CreateBookmarkModel(true); |
+ WaitForBookmarkModelToLoad(); |
+ AddNodesToBookmarkBarFromModelString("a b c d e f "); |
+ CreateBookmarkBarView(); |
+ EXPECT_EQ(0, test_helper_->GetBookmarkButtonCount()); |
+ |
+ SizeUntil(1); |
+ EXPECT_EQ(1, test_helper_->GetBookmarkButtonCount()); |
+ |
+ // Go really big, which should force all buttons to be added. |
+ bookmark_bar_view_->SetBounds( |
+ 0, 0, 5000, bookmark_bar_view_->bounds().height()); |
+ bookmark_bar_view_->Layout(); |
+ EXPECT_EQ(6, test_helper_->GetBookmarkButtonCount()); |
+} |
+ |
+// Verifies buttons are added as the model and size change. |
msw
2014/10/27 20:40:25
So this test is just like above, but doesn't call
sky
2014/10/27 21:48:18
Done.
|
+TEST_F(BookmarkBarViewTest, ButtonsDynamicallyAdded) { |
+ CreateBookmarkModelAndBookmarkBarView(); |
+ AddNodesToBookmarkBarFromModelString("a b c d e f "); |
+ EXPECT_EQ(0, test_helper_->GetBookmarkButtonCount()); |
+ SizeUntil(1); |
+ EXPECT_EQ(1, test_helper_->GetBookmarkButtonCount()); |
+ |
+ // Go really big, which should force all buttons to be added. |
+ bookmark_bar_view_->SetBounds( |
+ 0, 0, 5000, bookmark_bar_view_->bounds().height()); |
+ bookmark_bar_view_->Layout(); |
+ EXPECT_EQ(6, test_helper_->GetBookmarkButtonCount()); |
+} |
+ |
+TEST_F(BookmarkBarViewTest, AddNodesWhenBarAlreadySized) { |
+ CreateBookmarkModelAndBookmarkBarView(); |
+ bookmark_bar_view_->SetBounds( |
+ 0, 0, 5000, bookmark_bar_view_->bounds().height()); |
+ AddNodesToBookmarkBarFromModelString("a b c d e f "); |
+ bookmark_bar_view_->Layout(); |
+ EXPECT_EQ("a b c d e f", GetStringForButtons()); |
+} |
+ |
+// Various assertions for removing nodes. |
+TEST_F(BookmarkBarViewTest, RemoveNode) { |
+ CreateBookmarkModelAndBookmarkBarView(); |
+ const BookmarkNode* bookmark_bar_node = |
+ BookmarkModelFactory::GetForProfile(profile())->bookmark_bar_node(); |
+ AddNodesToBookmarkBarFromModelString("a b c d e f "); |
+ EXPECT_EQ(0, test_helper_->GetBookmarkButtonCount()); |
msw
2014/10/27 20:40:25
nit: is it worthwhile for multiple tests to expect
sky
2014/10/27 21:48:18
I view it like a DCHECK. If this fails then the re
msw
2014/10/27 22:50:18
Acknowledged.
|
+ SizeUntil(1); |
+ EXPECT_EQ(1, test_helper_->GetBookmarkButtonCount()); |
+ |
+ // Remove the 2nd node, should still only have 1 visible. |
+ BookmarkModelFactory::GetForProfile(profile())->Remove(bookmark_bar_node, 1); |
+ EXPECT_EQ(1, test_helper_->GetBookmarkButtonCount()); |
msw
2014/10/27 20:40:25
nit: EXPECT_EQ("a", GetStringForButtons()); instea
sky
2014/10/27 21:48:18
Done.
|
+ |
+ // Remove the first node, should force a new button (for the 'c' node). |
+ BookmarkModelFactory::GetForProfile(profile())->Remove(bookmark_bar_node, 0); |
+ ASSERT_EQ("c", GetStringForButtons()); |
+} |
+ |
+// Assertions for moving a node on the bookmark bar. |
+TEST_F(BookmarkBarViewTest, MoveNode) { |
+ CreateBookmarkModelAndBookmarkBarView(); |
+ const BookmarkNode* bookmark_bar_node = |
+ BookmarkModelFactory::GetForProfile(profile())->bookmark_bar_node(); |
+ AddNodesToBookmarkBarFromModelString("a b c d e f "); |
+ EXPECT_EQ(0, test_helper_->GetBookmarkButtonCount()); |
+ |
+ // Move 'c' first resulting in 'c a b d e f'. |
+ BookmarkModelFactory::GetForProfile(profile()) |
+ ->Move(bookmark_bar_node->GetChild(2), bookmark_bar_node, 0); |
+ EXPECT_EQ(0, test_helper_->GetBookmarkButtonCount()); |
+ |
+ // Make enough room for 1 node. |
+ SizeUntil(1); |
+ EXPECT_EQ("c", GetStringForButtons()); |
+ |
+ // Move 'f' first, resulting in 'f c a b d e'. |
+ BookmarkModelFactory::GetForProfile(profile()) |
+ ->Move(bookmark_bar_node->GetChild(5), bookmark_bar_node, 0); |
+ // Even though only one node fits, the second node isn't deleted. |
+ SizeUntil(2); |
+ EXPECT_EQ("f c", GetStringForButtons()); |
+ |
+ // Move 'f' to the end, resulting in 'c a b d e f'. |
+ BookmarkModelFactory::GetForProfile(profile()) |
+ ->Move(bookmark_bar_node->GetChild(0), bookmark_bar_node, 6); |
+ // Even though only one node fits, the second node isn't deleted. |
msw
2014/10/27 20:40:25
nit: revise this comment to match the check.
sky
2014/10/27 21:48:18
Done.
|
+ EXPECT_EQ("c", GetStringForButtons()); |
+ |
+ // Move 'c' after 'a', resulting in 'a c b d e f'. |
+ BookmarkModelFactory::GetForProfile(profile()) |
+ ->Move(bookmark_bar_node->GetChild(0), bookmark_bar_node, 2); |
+ // Even though only one node fits, the second node isn't deleted. |
msw
2014/10/27 20:40:25
nit: revise this comment to match the check.
sky
2014/10/27 21:48:18
Done.
|
+ EXPECT_EQ("a", GetStringForButtons()); |
+} |
+ |
+// Assertions for changing the title of a node. |
msw
2014/10/27 20:40:25
Should we test that increasing the name length cou
sky
2014/10/27 21:48:18
Done.
|
+TEST_F(BookmarkBarViewTest, ChangeTitle) { |
+ CreateBookmarkModelAndBookmarkBarView(); |
+ const BookmarkNode* bookmark_bar_node = GetBookmarkBarNode(); |
+ AddNodesToBookmarkBarFromModelString("a b c d e f "); |
+ EXPECT_EQ(0, test_helper_->GetBookmarkButtonCount()); |
+ |
+ BookmarkModelFactory::GetForProfile(profile()) |
+ ->SetTitle(bookmark_bar_node->GetChild(0), base::ASCIIToUTF16("a1")); |
+ EXPECT_EQ(0, test_helper_->GetBookmarkButtonCount()); |
+ |
+ // Make enough room for 1 node. |
+ SizeUntil(1); |
+ EXPECT_EQ("a1", GetStringForButtons()); |
+ |
+ BookmarkModelFactory::GetForProfile(profile()) |
+ ->SetTitle(bookmark_bar_node->GetChild(1), base::ASCIIToUTF16("b1")); |
+ EXPECT_EQ("a1", GetStringForButtons()); |
+ |
+ BookmarkModelFactory::GetForProfile(profile()) |
+ ->SetTitle(bookmark_bar_node->GetChild(5), base::ASCIIToUTF16("f1")); |
+ EXPECT_EQ("a1", GetStringForButtons()); |
+ |
+ BookmarkModelFactory::GetForProfile(profile()) |
+ ->SetTitle(bookmark_bar_node->GetChild(3), base::ASCIIToUTF16("d1")); |
+ |
+ bookmark_bar_view_->SetBounds( |
+ 0, 0, 5000, bookmark_bar_view_->bounds().height()); |
+ bookmark_bar_view_->Layout(); |
+ EXPECT_EQ("a1 b1 c d1 e f1", GetStringForButtons()); |
+} |
+ |
#if !defined(OS_CHROMEOS) |
// Verifies that the apps shortcut is shown or hidden following the policy |
// value. This policy (and the apps shortcut) isn't present on ChromeOS. |