diff options
author | tejasshah@google.com <tejasshah@google.com@0039d316-1c4b-4281-b951-d872f2087c98> | 2009-10-05 18:49:56 +0000 |
---|---|---|
committer | tejasshah@google.com <tejasshah@google.com@0039d316-1c4b-4281-b951-d872f2087c98> | 2009-10-05 18:49:56 +0000 |
commit | 845869f1b42667a7fc246663625a257c425cf9a9 (patch) | |
tree | 2d02671e057e4abd7c9d7be27cd67373a5da7879 /chrome | |
parent | 2c205b2b7f5864784433bf4db3787be5c9e89082 (diff) | |
download | chromium_src-845869f1b42667a7fc246663625a257c425cf9a9.zip chromium_src-845869f1b42667a7fc246663625a257c425cf9a9.tar.gz chromium_src-845869f1b42667a7fc246663625a257c425cf9a9.tar.bz2 |
Adding lot more Sync Integration Test
Review URL: http://codereview.chromium.org/246022
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@28013 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'chrome')
-rw-r--r-- | chrome/test/live_sync/bookmark_model_verifier.cc | 72 | ||||
-rw-r--r-- | chrome/test/live_sync/bookmark_model_verifier.h | 16 | ||||
-rw-r--r-- | chrome/test/live_sync/two_client_live_bookmarks_sync_test.cc | 1674 |
3 files changed, 1540 insertions, 222 deletions
diff --git a/chrome/test/live_sync/bookmark_model_verifier.cc b/chrome/test/live_sync/bookmark_model_verifier.cc index 6b31eff..517a3cc 100644 --- a/chrome/test/live_sync/bookmark_model_verifier.cc +++ b/chrome/test/live_sync/bookmark_model_verifier.cc @@ -10,6 +10,7 @@ #include <stack> #include "app/tree_node_iterator.h" +#include "base/rand_util.h" #include "chrome/browser/bookmarks/bookmark_model.h" #include "chrome/browser/bookmarks/bookmark_utils.h" #include "chrome/test/live_sync/live_bookmarks_sync_test.h" @@ -74,6 +75,29 @@ void BookmarkModelVerifier::ExpectModelsMatchIncludingFavicon( ASSERT_FALSE(a_iterator.has_next()); } +void BookmarkModelVerifier::VerifyNoDuplicates(BookmarkModel* model) { + TreeNodeIterator<const BookmarkNode> iterator(model->root_node()); + // Pre-order traversal of model tree, looking for duplicate node at + // each step. + while (iterator.has_next()) { + const BookmarkNode* node = iterator.Next(); + std::vector<const BookmarkNode*> nodes; + if (node->GetType() != BookmarkNode::URL) { continue; } + // Get nodes with same URL. + model->GetNodesByURL(node->GetURL(),&nodes); + EXPECT_TRUE(nodes.size()>=1); + for(std::vector<const BookmarkNode*>::const_iterator i=nodes.begin(), e=nodes.end(); i!=e; i++) { + // Skip if it's same node. + int64 id = node->id(); + if ( id == (*i)->id()) { continue; } + else { + // Make sure title are not same. + EXPECT_NE(node->GetTitle(),(*i)->GetTitle()); + } + } + } // end of while +} + void BookmarkModelVerifier::FindNodeInVerifier(BookmarkModel* foreign_model, const BookmarkNode* foreign_node, const BookmarkNode** result) { @@ -114,6 +138,38 @@ const BookmarkNode* BookmarkModelVerifier::AddGroup(BookmarkModel* model, return result; } +const BookmarkNode* BookmarkModelVerifier::AddNonEmptyGroup( + BookmarkModel* model, const BookmarkNode* parent, int index, + const string16& title, int children_count) { + const BookmarkNode* bm_folder = AddGroup(model, parent, index, title); + EXPECT_TRUE(bm_folder); + if (!bm_folder) return NULL; + for (int child_index = 0; child_index < children_count; child_index++) { + int random_int = base::RandInt(1, 100); + // To create randomness in order, 60% of time add bookmarks + if (random_int > 40) { + string16 child_bm_title(bm_folder->GetTitle()); + child_bm_title.append(L"-ChildBM"); + string16 url(L"http://www.nofaviconurl"); + string16 index_str = IntToString16(child_index); + child_bm_title.append(index_str); + url.append(index_str); + url.append(L".com"); + const BookmarkNode* child_nofavicon_bm = + AddURL(model, bm_folder, child_index, child_bm_title, GURL(url)); + } else { + // Remaining % of time - Add Bookmark folders + string16 child_bmfolder_title(bm_folder->GetTitle()); + child_bmfolder_title.append(L"-ChildBMFolder"); + string16 index_str = IntToString16(child_index); + child_bmfolder_title.append(index_str); + const BookmarkNode* child_bm_folder = + AddGroup(model, bm_folder, child_index, child_bmfolder_title); + } + } + return bm_folder; +} + const BookmarkNode* BookmarkModelVerifier::AddURL(BookmarkModel* model, const BookmarkNode* parent, int index, const string16& title, const GURL& url) { @@ -166,15 +222,25 @@ void BookmarkModelVerifier::SortChildren(BookmarkModel* model, verifier_->SortChildren(v_parent); } -void BookmarkModelVerifier::SetURL(BookmarkModel* model, +void BookmarkModelVerifier::ReverseChildOrder(BookmarkModel* model, + const BookmarkNode* parent) { + int child_count = parent->GetChildCount(); + if (child_count <= 0) return; + for (int index = 0; index < child_count; index++) { + Move(model, parent->GetChild(index), parent, child_count-index); + } +} + +const BookmarkNode* BookmarkModelVerifier::SetURL(BookmarkModel* model, const BookmarkNode* node, const GURL& new_url) { const BookmarkNode* v_node = NULL; FindNodeInVerifier(model, node, &v_node); - bookmark_utils::ApplyEditsWithNoGroupChange(model, node->GetParent(), - node, node->GetTitle(), new_url, NULL); + const BookmarkNode* result = bookmark_utils::ApplyEditsWithNoGroupChange( + model, node->GetParent(), node, node->GetTitle(), new_url, NULL); bookmark_utils::ApplyEditsWithNoGroupChange(verifier_, v_node->GetParent(), v_node, v_node->GetTitle(), new_url, NULL); + return result; } #endif // CHROME_PERSONALIZATION diff --git a/chrome/test/live_sync/bookmark_model_verifier.h b/chrome/test/live_sync/bookmark_model_verifier.h index c1ef0fe..43120af 100644 --- a/chrome/test/live_sync/bookmark_model_verifier.h +++ b/chrome/test/live_sync/bookmark_model_verifier.h @@ -35,6 +35,14 @@ class BookmarkModelVerifier { int index, const string16& title); + // Adds the same non-empty folder to |model| and |verifier|. + // It also adds specified number of childern (mix of bm and folder). + const BookmarkNode* AddNonEmptyGroup(BookmarkModel* model, + const BookmarkNode* parent, + int index, + const string16& title, + int children_count); + // Adds the same bookmark to |model| and |verifier|. // See BookmarkModel::AddURL for details. const BookmarkNode* AddURL(BookmarkModel* model, @@ -63,7 +71,11 @@ class BookmarkModelVerifier { // See BookmarkModel::SortChildren for details. void SortChildren(BookmarkModel* model, const BookmarkNode* parent); - void SetURL(BookmarkModel* model, + // Reverses the order of children of the same parent node in |model| + // and |verifier|. + void ReverseChildOrder(BookmarkModel* model, const BookmarkNode* parent); + + const BookmarkNode* SetURL(BookmarkModel* model, const BookmarkNode* node, const GURL& new_url); @@ -81,6 +93,8 @@ class BookmarkModelVerifier { BookmarkModel* actual, bool compare_favicon); + static void VerifyNoDuplicates(BookmarkModel* model); + private: BookmarkModelVerifier(); void FindNodeInVerifier(BookmarkModel* foreign_model, diff --git a/chrome/test/live_sync/two_client_live_bookmarks_sync_test.cc b/chrome/test/live_sync/two_client_live_bookmarks_sync_test.cc index 7cc1ab9..78cedd9 100644 --- a/chrome/test/live_sync/two_client_live_bookmarks_sync_test.cc +++ b/chrome/test/live_sync/two_client_live_bookmarks_sync_test.cc @@ -18,27 +18,118 @@ #include "chrome/test/live_sync/live_bookmarks_sync_test.h" #include "testing/gtest/include/gtest/gtest.h" +// TODO(tejasshah): Move single client tests to separate file. + +// Some Abbreviations Used: +// F -- BookmarkFolder +// BM -- Bookmark +// L -- Level (Depth of bookmark folder) class TwoClientLiveBookmarksSyncTest : public LiveBookmarksSyncTest { public: TwoClientLiveBookmarksSyncTest() { + // This makes sure browser is visible and active while running test. + InProcessBrowserTest::set_show_window(true); // Set the initial timeout value to 5 min. InProcessBrowserTest::SetInitialTimeoutInMS(300000); } virtual ~TwoClientLiveBookmarksSyncTest() {} bool SetupSync() { - profile2_.reset(MakeProfile(L"clienttwo")); + profile2_.reset(MakeProfile(L"client2")); client1_.reset(new ProfileSyncServiceTestHarness( browser()->profile(), username_, password_)); client2_.reset(new ProfileSyncServiceTestHarness( profile2_.get(), username_, password_)); - return client1_->SetupSync() && client2_->SetupSync(); + if (ShouldSetupSyncWithRace()) { + return client1_->SetupSync() && client2_->SetupSync(); + } else { + bool result_client1 = client1_->SetupSync(); + client1()->AwaitSyncCycleCompletion("Initial setup"); + return result_client1 && client2_->SetupSync(); + } } + + // Overwrites ShouldDeleteProfile, so profile doesn't get deleted. virtual bool ShouldDeleteProfile() { return false; } + // Overload this method in inherited class and return false to avoid + // race condition (two clients trying to sync/commit at the same time). + // Race condition may lead to duplicate bookmarks if there is existing + // bookmark model on both clients. + virtual bool ShouldSetupSyncWithRace() { + return true; + } + + // Overload this method in your class and return true to pre-populate + // bookmark files for client2 also. + virtual bool ShouldCopyBookmarksToClient2() { + return false; + } + + // This is used to pre-populate bookmarks hierarchy file to Client1 and + // Verifier Client. + void PrePopulateBookmarksHierarchy(const string16 &bookmarks_file_name) { + // Let's create default profile directory. + FilePath dest_user_data_dir; + PathService::Get(chrome::DIR_USER_DATA, &dest_user_data_dir); + FilePath dest_user_data_dir_default = dest_user_data_dir.Append( + FILE_PATH_LITERAL("Default")); + file_util::CreateDirectoryW(dest_user_data_dir_default); + // Let's create verifier profile directory. + FilePath dest_user_data_dir_verifier = dest_user_data_dir.Append( + FILE_PATH_LITERAL("verifier")); + file_util::CreateDirectoryW(dest_user_data_dir_verifier); + + // Let's prepare sync data source file path. + FilePath sync_data_source; + PathService::Get(base::DIR_SOURCE_ROOT, &sync_data_source); + sync_data_source = sync_data_source.Append(FILE_PATH_LITERAL("chrome")); + sync_data_source = sync_data_source.Append( + FILE_PATH_LITERAL("personalization")); + sync_data_source = sync_data_source.Append(FILE_PATH_LITERAL("test")); + sync_data_source = sync_data_source.Append( + FILE_PATH_LITERAL("live_sync_data")); + FilePath source_file = sync_data_source.Append( + bookmarks_file_name); + ASSERT_TRUE(file_util::PathExists(source_file)); + // Now copy pre-generated bookmark file to default profile. + ASSERT_TRUE(file_util::CopyFileW( + source_file, dest_user_data_dir_default.Append( + FILE_PATH_LITERAL("bookmarks")))); + // Now copy pre-generated bookmark file to verifier profile. + ASSERT_TRUE(file_util::CopyFileW( + source_file, dest_user_data_dir_verifier.Append( + FILE_PATH_LITERAL("bookmarks")))); + + // Let's pre-populate bookmarks file for client2 also if we need to. + if (ShouldCopyBookmarksToClient2()) { + // Let's create verifier profile directory. + FilePath dest_user_data_dir_client2 = dest_user_data_dir.Append( + FILE_PATH_LITERAL("client2")); + file_util::CreateDirectoryW(dest_user_data_dir_client2); + // Now copy pre-generated bookmark file to verifier profile. + ASSERT_TRUE(file_util::CopyFileW( + source_file, dest_user_data_dir_client2.Append( + FILE_PATH_LITERAL("bookmarks")))); + } + } + ProfileSyncServiceTestHarness* client1() { return client1_.get(); } ProfileSyncServiceTestHarness* client2() { return client2_.get(); } + + void set_client1(ProfileSyncServiceTestHarness* p_client1) { + client1_.reset(p_client1); + } + + void set_client2(ProfileSyncServiceTestHarness* p_client2) { + client2_.reset(p_client2); + } + + void set_profile2(Profile* p) { + profile2_.reset(p); + } + Profile* profile1() { return browser()->profile(); } Profile* profile2() { return profile2_.get(); } @@ -55,13 +146,16 @@ class TwoClientLiveBookmarksSyncTest : public LiveBookmarksSyncTest { DISALLOW_COPY_AND_ASSIGN(TwoClientLiveBookmarksSyncTest); }; -class LiveSyncTest_PrePopulatedHistory1K +class LiveSyncTestPrePopulatedHistory1K : public TwoClientLiveBookmarksSyncTest { public: - LiveSyncTest_PrePopulatedHistory1K() {} - virtual ~LiveSyncTest_PrePopulatedHistory1K() {} + LiveSyncTestPrePopulatedHistory1K() {} + virtual ~LiveSyncTestPrePopulatedHistory1K() {} - virtual void SetUp() { + // This is used to pre-populate history data (1K URL Visit)to Client1 + // and Verifier Client. + void PrePopulateHistory1K() { + // Let's copy history files to default profile. FilePath dest_user_data_dir; PathService::Get(chrome::DIR_USER_DATA, &dest_user_data_dir); dest_user_data_dir = dest_user_data_dir.Append( @@ -87,13 +181,105 @@ class LiveSyncTest_PrePopulatedHistory1K ASSERT_TRUE(file_util::CopyFileW(source_file, dest_file)); source_file = sync_data.Next(); } + } + + virtual void SetUp() { + PrePopulateHistory1K(); + LiveBookmarksSyncTest::SetUp(); + } + + private: + DISALLOW_COPY_AND_ASSIGN(LiveSyncTestPrePopulatedHistory1K); +}; + +class LiveSyncTestBasicHierarchy50BM + : public TwoClientLiveBookmarksSyncTest { + public: + LiveSyncTestBasicHierarchy50BM() {} + virtual ~LiveSyncTestBasicHierarchy50BM() {} + + virtual void SetUp() { + const string16 file_name(L"bookmarks_50BM5F3L"); + PrePopulateBookmarksHierarchy(file_name); + LiveBookmarksSyncTest::SetUp(); + } + + private: + DISALLOW_COPY_AND_ASSIGN(LiveSyncTestBasicHierarchy50BM); +}; + +class LiveSyncTestBasicHierarchy50BMBothClients + : public LiveSyncTestBasicHierarchy50BM { + public: + LiveSyncTestBasicHierarchy50BMBothClients() {} + virtual ~LiveSyncTestBasicHierarchy50BMBothClients() {} + // Overloading this method and return true to pre-populate + // bookmark files for client2 also. + virtual bool ShouldCopyBookmarksToClient2() { + return true; + } + + // Overloading to ensure there is no race condition between clients + // while doing initial set up of sync. + virtual bool ShouldSetupSyncWithRace() { + return false; + } + + private: + DISALLOW_COPY_AND_ASSIGN(LiveSyncTestBasicHierarchy50BMBothClients); +}; + +class LiveSyncTestComplexHierarchy800BM + : public TwoClientLiveBookmarksSyncTest { + public: + LiveSyncTestComplexHierarchy800BM() {} + virtual ~LiveSyncTestComplexHierarchy800BM() {} + virtual void SetUp() { + const string16 file_name(L"bookmarks_800BM32F8L"); + TwoClientLiveBookmarksSyncTest::PrePopulateBookmarksHierarchy(file_name); LiveBookmarksSyncTest::SetUp(); } private: - DISALLOW_COPY_AND_ASSIGN(LiveSyncTest_PrePopulatedHistory1K); + DISALLOW_COPY_AND_ASSIGN(LiveSyncTestComplexHierarchy800BM); }; +class LiveSyncTestHugeHierarchy5500BM + : public TwoClientLiveBookmarksSyncTest { + public: + LiveSyncTestHugeHierarchy5500BM() {} + virtual ~LiveSyncTestHugeHierarchy5500BM() {} + virtual void SetUp() { + const string16 file_name(L"bookmarks_5500BM125F25L"); + TwoClientLiveBookmarksSyncTest::PrePopulateBookmarksHierarchy(file_name); + LiveBookmarksSyncTest::SetUp(); + } + virtual bool ShouldSetupSyncWithRace() { + return false; + } + + private: + DISALLOW_COPY_AND_ASSIGN(LiveSyncTestHugeHierarchy5500BM); +}; + +class LiveSyncTestDefaultIEFavorites + : public TwoClientLiveBookmarksSyncTest { + public: + LiveSyncTestDefaultIEFavorites() {} + virtual ~LiveSyncTestDefaultIEFavorites() {} + + virtual void SetUp() { + const string16 file_name(L"bookmarks_default_IE_favorites"); + TwoClientLiveBookmarksSyncTest::PrePopulateBookmarksHierarchy(file_name); + LiveBookmarksSyncTest::SetUp(); + } + + private: + DISALLOW_COPY_AND_ASSIGN(LiveSyncTestDefaultIEFavorites); +}; + + + // Test case Naming Convention: // SC/MC - SingleClient / MultiClient. // Suffix Number - Indicates test scribe testcase ID. @@ -220,8 +406,60 @@ IN_PROC_BROWSER_TEST_F(TwoClientLiveBookmarksSyncTest, Cleanup(); } -IN_PROC_BROWSER_TEST_F(TwoClientLiveBookmarksSyncTest, - SC_CleanAccount_AddFirstFolder_370558) { +// Test Scribe ID - 370439. +IN_PROC_BROWSER_TEST_F(LiveSyncTestDefaultIEFavorites, + SC_BootStrapWithDefaultIEFavorites) { + ASSERT_TRUE(SetupSync()) << "Failed to SetupSync"; + scoped_ptr<BookmarkModelVerifier> verifier(BookmarkModelVerifier::Create()); + BookmarkModel* model_one = profile1()->GetBookmarkModel(); + BookmarkModel* model_two = profile2()->GetBookmarkModel(); + + // Wait for changes to propagate. + ASSERT_TRUE(client1()->AwaitMutualSyncCycleCompletion(client2())); + // Let's compare and make sure both bookmark models are same after sync. + verifier->ExpectMatch(model_one); + verifier->ExpectMatch(model_two); + + Cleanup(); +} + +// Test Scribe ID - 370441. +IN_PROC_BROWSER_TEST_F(LiveSyncTestComplexHierarchy800BM, + SC_BootStrapWithComplexBMHierarchy) { + ASSERT_TRUE(SetupSync()) << "Failed to SetupSync"; + scoped_ptr<BookmarkModelVerifier> verifier(BookmarkModelVerifier::Create()); + BookmarkModel* model_one = profile1()->GetBookmarkModel(); + BookmarkModel* model_two = profile2()->GetBookmarkModel(); + + // Wait for changes to propagate. + ASSERT_TRUE(client1()->AwaitMutualSyncCycleCompletion(client2())); + // Let's compare and make sure both bookmark models are same after sync. + verifier->ExpectMatch(model_one); + verifier->ExpectMatch(model_two); + + Cleanup(); +} + +// Test Scribe ID - 370442. +IN_PROC_BROWSER_TEST_F(LiveSyncTestHugeHierarchy5500BM, + SC_BootStrapWithHugeBMs) { + ASSERT_TRUE(SetupSync()) << "Failed to SetupSync"; + scoped_ptr<BookmarkModelVerifier> verifier(BookmarkModelVerifier::Create()); + BookmarkModel* model_one = profile1()->GetBookmarkModel(); + BookmarkModel* model_two = profile2()->GetBookmarkModel(); + + // Wait for changes to propagate. + ASSERT_TRUE(client1()->AwaitMutualSyncCycleCompletion(client2())); + // Let's compare and make sure both bookmark models are same after sync. + verifier->ExpectMatch(model_one); + verifier->ExpectMatch(model_two); + + Cleanup(); +} + +// Test Scribe ID - 370489. +IN_PROC_BROWSER_TEST_F(LiveSyncTestPrePopulatedHistory1K, + SC_AddFirstBMWithFavicon) { ASSERT_TRUE(SetupSync()) << "Failed to SetupSync"; scoped_ptr<BookmarkModelVerifier> verifier(BookmarkModelVerifier::Create()); @@ -232,19 +470,21 @@ IN_PROC_BROWSER_TEST_F(TwoClientLiveBookmarksSyncTest, verifier->ExpectMatch(model_one); verifier->ExpectMatch(model_two); + // Let's add first bookmark(with favicon) { - // Let's add first bookmark folder to client1 - const BookmarkNode* new_folder_one = - verifier->AddGroup(model_one, bbn_one, 0, L"TestFolder"); + const BookmarkNode* nofavicon_bm = verifier->AddURL(model_one, bbn_one, 0, + L"Welcome to Facebook! | Facebook", GURL("http://www.facebook.com")); } ASSERT_TRUE(client1()->AwaitMutualSyncCycleCompletion(client2())); verifier->ExpectMatch(model_one); - verifier->ExpectMatch(model_two); + BookmarkModelVerifier::ExpectModelsMatchIncludingFavicon(model_one, + model_two, true); Cleanup(); } +// Test Scribe ID - 370558. IN_PROC_BROWSER_TEST_F(TwoClientLiveBookmarksSyncTest, - SC_CleanAccount_AddFirstBMWithoutFavicon_370559) { + SC_AddFirstFolder) { ASSERT_TRUE(SetupSync()) << "Failed to SetupSync"; scoped_ptr<BookmarkModelVerifier> verifier(BookmarkModelVerifier::Create()); @@ -255,10 +495,10 @@ IN_PROC_BROWSER_TEST_F(TwoClientLiveBookmarksSyncTest, verifier->ExpectMatch(model_one); verifier->ExpectMatch(model_two); - // Let's add first bookmark(without favicon) { - const BookmarkNode* nofavicon_bm = verifier->AddURL(model_one, bbn_one, 0, - L"TestBookmark", GURL("http://www.nofaviconurl.com")); + // Let's add first bookmark folder to client1 + const BookmarkNode* new_folder_one = + verifier->AddGroup(model_one, bbn_one, 0, L"TestFolder"); } ASSERT_TRUE(client1()->AwaitMutualSyncCycleCompletion(client2())); verifier->ExpectMatch(model_one); @@ -266,8 +506,9 @@ IN_PROC_BROWSER_TEST_F(TwoClientLiveBookmarksSyncTest, Cleanup(); } -IN_PROC_BROWSER_TEST_F(LiveSyncTest_PrePopulatedHistory1K, - SC_CleanAccount_AddFirstBMWithFavicon_370489) { +// Test Scribe ID - 370559. +IN_PROC_BROWSER_TEST_F(TwoClientLiveBookmarksSyncTest, + SC_AddFirstBMWithoutFavicon) { ASSERT_TRUE(SetupSync()) << "Failed to SetupSync"; scoped_ptr<BookmarkModelVerifier> verifier(BookmarkModelVerifier::Create()); @@ -278,21 +519,20 @@ IN_PROC_BROWSER_TEST_F(LiveSyncTest_PrePopulatedHistory1K, verifier->ExpectMatch(model_one); verifier->ExpectMatch(model_two); - // Let's add first bookmark(with favicon) + // Let's add first bookmark(without favicon) { const BookmarkNode* nofavicon_bm = verifier->AddURL(model_one, bbn_one, 0, - L"Welcome to Facebook! | Facebook", GURL("http://www.facebook.com")); + L"TestBookmark", GURL("http://www.nofaviconurl.com")); } ASSERT_TRUE(client1()->AwaitMutualSyncCycleCompletion(client2())); verifier->ExpectMatch(model_one); - BookmarkModelVerifier::ExpectModelsMatchIncludingFavicon(model_one, - model_two, true); + verifier->ExpectMatch(model_two); Cleanup(); } +// Test Scribe ID - 370560. IN_PROC_BROWSER_TEST_F(TwoClientLiveBookmarksSyncTest, - SC_CleanAccount_AddNonHTTPBMs_370560) { - + SC_AddNonHTTPBMs) { ASSERT_TRUE(SetupSync()) << "Failed to SetupSync"; scoped_ptr<BookmarkModelVerifier> verifier(BookmarkModelVerifier::Create()); BookmarkModel* model_one = profile1()->GetBookmarkModel(); @@ -305,7 +545,7 @@ IN_PROC_BROWSER_TEST_F(TwoClientLiveBookmarksSyncTest, { const BookmarkNode* ftp_bm = verifier->AddURL(model_one, bbn_one, 0, L"FTPBookmark", GURL("ftp://ftp.testbookmark.com")); - const BookmarkNode* file_bm = verifier->AddURL(model_one, bbn_one, 0, + const BookmarkNode* file_bm = verifier->AddURL(model_one, bbn_one, 1, L"FileBookmark", GURL("file:///")); } ASSERT_TRUE(client1()->AwaitMutualSyncCycleCompletion(client2())); @@ -314,8 +554,9 @@ IN_PROC_BROWSER_TEST_F(TwoClientLiveBookmarksSyncTest, Cleanup(); } +// Test Scribe ID - 370561. IN_PROC_BROWSER_TEST_F(TwoClientLiveBookmarksSyncTest, - SC_CleanAccount_AddFirstBM_UnderFolder_370561) { + SC_AddFirstBMUnderFolder) { ASSERT_TRUE(SetupSync()) << "Failed to SetupSync"; scoped_ptr<BookmarkModelVerifier> verifier(BookmarkModelVerifier::Create()); @@ -342,57 +583,163 @@ IN_PROC_BROWSER_TEST_F(TwoClientLiveBookmarksSyncTest, Cleanup(); } +// Test Scribe ID - 370562. IN_PROC_BROWSER_TEST_F(TwoClientLiveBookmarksSyncTest, - SC_SingleClient_RenameBMName_371817) { + SC_AddSeveralBMsUnderBMBarAndOtherBM) { ASSERT_TRUE(SetupSync()) << "Failed to SetupSync"; scoped_ptr<BookmarkModelVerifier> verifier(BookmarkModelVerifier::Create()); BookmarkModel* model_one = profile1()->GetBookmarkModel(); BookmarkModel* model_two = profile2()->GetBookmarkModel(); const BookmarkNode* bbn_one = model_one->GetBookmarkBarNode(); + const BookmarkNode* other_bm_one = model_one->other_node(); verifier->ExpectMatch(model_one); verifier->ExpectMatch(model_two); - // Add first bookmark - const BookmarkNode* test_bm1 = verifier->AddURL( - model_one, bbn_one, 0, L"Test BM", GURL("http://www.bmtest.com")); + // Let's add some bookmarks(without favicon) + for (int index = 0; index < 20; index++) { + string16 title(L"TestBookmark"); + string16 url(L"http://www.nofaviconurl"); + string16 index_str = IntToString16(index); + title.append(index_str); + url.append(index_str); + url.append(L".com"); + const BookmarkNode* nofavicon_bm = + verifier->AddURL(model_one, bbn_one, index, title, GURL(url)); + } + for (int index = 0; index < 10; index++) { + string16 title(L"TestBookmark"); + string16 url(L"http://www.nofaviconurl"); + string16 index_str = IntToString16(index); + title.append(index_str); + url.append(index_str); + url.append(L".com"); + const BookmarkNode* nofavicon_bm = + verifier->AddURL(model_one, other_bm_one, index, title, GURL(url)); + } + ASSERT_TRUE(client1()->AwaitMutualSyncCycleCompletion(client2())); + verifier->ExpectMatch(model_one); + verifier->ExpectMatch(model_two); + Cleanup(); +} + +// Test Scribe ID - 370563. +IN_PROC_BROWSER_TEST_F(TwoClientLiveBookmarksSyncTest, + SC_AddSeveralBMsAndFolders) { + ASSERT_TRUE(SetupSync()) << "Failed to SetupSync"; + scoped_ptr<BookmarkModelVerifier> verifier(BookmarkModelVerifier::Create()); + BookmarkModel* model_one = profile1()->GetBookmarkModel(); + BookmarkModel* model_two = profile2()->GetBookmarkModel(); + const BookmarkNode* bbn_one = model_one->GetBookmarkBarNode(); + const BookmarkNode* other_bm_one = model_one->other_node(); + + verifier->ExpectMatch(model_one); + verifier->ExpectMatch(model_two); + // Let's add some bookmarks(without favicon) + for (int index = 0; index < 15; index++) { + int random_int = base::RandInt(1, 100); + // To create randomness in order, 40% of time add bookmarks + if (random_int > 60) { + string16 title(L"BB - TestBookmark"); + string16 url(L"http://www.nofaviconurl"); + string16 index_str = IntToString16(index); + title.append(index_str); + url.append(index_str); + url.append(L".com"); + const BookmarkNode* nofavicon_bm = + verifier->AddURL(model_one, bbn_one, index, title, GURL(url)); + } else { + // Remaining % of time - Add Bookmark folders + string16 title(L"BB - TestBMFolder"); + string16 index_str = IntToString16(index); + title.append(index_str); + const BookmarkNode* bm_folder = verifier->AddGroup(model_one, bbn_one, + index, title); + int random_int2 = base::RandInt(1, 100); + // 60% of time we will add bookmarks to added folder + if (random_int2 > 40) { + for (int index = 0; index < 20; index++) { + string16 url(L"http://www.nofaviconurl"); + string16 index_str = IntToString16(index); + string16 child_title(title); + child_title.append(L" - ChildTestBM"); + child_title.append(index_str); + url.append(index_str); + url.append(L".com"); + const BookmarkNode* nofavicon_bm = verifier->AddURL(model_one, + bm_folder, index, child_title, GURL(url)); + } + } + } + } + LOG(INFO) << "Adding several bookmarks under other bookmarks"; + for (int index = 0; index < 10; index++) { + string16 title(L"Other - TestBookmark"); + string16 url(L"http://www.nofaviconurl-other"); + string16 index_str = IntToString16(index); + title.append(index_str); + url.append(index_str); + url.append(L".com"); + const BookmarkNode* nofavicon_bm = + verifier->AddURL(model_one, other_bm_one, index, title, GURL(url)); + } ASSERT_TRUE(client1()->AwaitMutualSyncCycleCompletion(client2())); verifier->ExpectMatch(model_one); verifier->ExpectMatch(model_two); + Cleanup(); +} +// Test Scribe ID - 370641. +IN_PROC_BROWSER_TEST_F(TwoClientLiveBookmarksSyncTest, + SC_DuplicateBMWithDifferentURLSameName) { + + ASSERT_TRUE(SetupSync()) << "Failed to SetupSync"; + scoped_ptr<BookmarkModelVerifier> verifier(BookmarkModelVerifier::Create()); + BookmarkModel* model_one = profile1()->GetBookmarkModel(); + BookmarkModel* model_two = profile2()->GetBookmarkModel(); + const BookmarkNode* bbn_one = model_one->GetBookmarkBarNode(); + + verifier->ExpectMatch(model_one); + verifier->ExpectMatch(model_two); + + // Let's add two bookmarks with different URL but same name { - // Rename recently added BM - verifier->SetTitle(model_one, test_bm1, L"New Test BM"); + const BookmarkNode* google_bm = verifier->AddURL(model_one, bbn_one, 0, + L"Google", GURL("http://www.google.com")); + const BookmarkNode* google_news_bm = verifier->AddURL(model_one, bbn_one, 1, + L"Google", GURL("http://www.google.com/news")); } - ASSERT_TRUE(client1()->AwaitMutualSyncCycleCompletion(client2())); verifier->ExpectMatch(model_one); verifier->ExpectMatch(model_two); Cleanup(); } +// Test Scribe ID - 371817. IN_PROC_BROWSER_TEST_F(TwoClientLiveBookmarksSyncTest, - SC_RenameBMFolder_371824) { + SC_RenameBMName) { ASSERT_TRUE(SetupSync()) << "Failed to SetupSync"; scoped_ptr<BookmarkModelVerifier> verifier(BookmarkModelVerifier::Create()); BookmarkModel* model_one = profile1()->GetBookmarkModel(); BookmarkModel* model_two = profile2()->GetBookmarkModel(); const BookmarkNode* bbn_one = model_one->GetBookmarkBarNode(); + verifier->ExpectMatch(model_one); verifier->ExpectMatch(model_two); - - // Let's add first bookmark folder to client1 - const BookmarkNode* new_folder_one = verifier->AddGroup(model_one, bbn_one, 0, - L"TestBMFolder"); + // Add first bookmark + const BookmarkNode* test_bm1 = verifier->AddURL( + model_one, bbn_one, 0, L"Test BM", GURL("http://www.bmtest.com")); ASSERT_TRUE(client1()->AwaitMutualSyncCycleCompletion(client2())); verifier->ExpectMatch(model_one); verifier->ExpectMatch(model_two); - // Rename recently added Bookmark folder - verifier->SetTitle(model_one, new_folder_one, L"New TestBMFolder"); + { + // Rename recently added BM + verifier->SetTitle(model_one, test_bm1, L"New Test BM"); + } ASSERT_TRUE(client1()->AwaitMutualSyncCycleCompletion(client2())); verifier->ExpectMatch(model_one); @@ -400,8 +747,9 @@ IN_PROC_BROWSER_TEST_F(TwoClientLiveBookmarksSyncTest, Cleanup(); } +// Test Scribe ID - 371822. IN_PROC_BROWSER_TEST_F(TwoClientLiveBookmarksSyncTest, - SC_DeleteBM_EmptyAccountAfterThisDelete_371832) { + SC_RenameBMURL) { ASSERT_TRUE(SetupSync()) << "Failed to SetupSync"; scoped_ptr<BookmarkModelVerifier> verifier(BookmarkModelVerifier::Create()); @@ -411,91 +759,76 @@ IN_PROC_BROWSER_TEST_F(TwoClientLiveBookmarksSyncTest, verifier->ExpectMatch(model_one); verifier->ExpectMatch(model_two); - // Let's add first bookmark(without favicon) - { - const BookmarkNode* nofavicon_bm = verifier->AddURL(model_one, bbn_one, 0, - L"TestBookmark", GURL("http://www.nofaviconurl.com")); - } + const BookmarkNode* nofavicon_bm = + verifier->AddURL(model_one, bbn_one, 0, L"Google", + GURL("http://www.google.com")); + ASSERT_TRUE(client1()->AwaitMutualSyncCycleCompletion(client2())); verifier->ExpectMatch(model_one); verifier->ExpectMatch(model_two); - { - // Delete this newly created bookmark - verifier->Remove(model_one, bbn_one, 0); - } - client1()->AwaitMutualSyncCycleCompletionWithConflict(client2()); + // Let's rename/change URL + nofavicon_bm = verifier->SetURL(model_one, nofavicon_bm, + GURL("http://www.cnn.com")); + // Wait for changes to sync and then verify + ASSERT_TRUE(client1()->AwaitMutualSyncCycleCompletion(client2())); verifier->ExpectMatch(model_one); verifier->ExpectMatch(model_two); - Cleanup(); } +// Test Scribe ID - 371824. IN_PROC_BROWSER_TEST_F(TwoClientLiveBookmarksSyncTest, - SC_DeleteBM_NonEmptyAccountAfterThisDelete_371833) { + SC_RenameBMFolder) { ASSERT_TRUE(SetupSync()) << "Failed to SetupSync"; scoped_ptr<BookmarkModelVerifier> verifier(BookmarkModelVerifier::Create()); BookmarkModel* model_one = profile1()->GetBookmarkModel(); BookmarkModel* model_two = profile2()->GetBookmarkModel(); const BookmarkNode* bbn_one = model_one->GetBookmarkBarNode(); - verifier->ExpectMatch(model_one); verifier->ExpectMatch(model_two); - // Let's add some bookmarks(without favicon) - for (int index = 0; index < 20; index++) { - string16 title(L"TestBookmark"); - string16 url(L"http://www.nofaviconurl"); - string16 index_str = IntToString16(index); - title.append(index_str); - url.append(index_str); - url.append(L".com"); - const BookmarkNode* nofavicon_bm = verifier->AddURL( - model_one, bbn_one, index, - title, GURL(url)); - } + + // Let's add first bookmark folder to client1 + const BookmarkNode* new_folder_one = verifier->AddGroup(model_one, bbn_one, 0, + L"TestBMFolder"); + ASSERT_TRUE(client1()->AwaitMutualSyncCycleCompletion(client2())); verifier->ExpectMatch(model_one); verifier->ExpectMatch(model_two); - { - // Delete this newly created bookmark - verifier->Remove(model_one, bbn_one, 0); - } + // Rename recently added Bookmark folder + verifier->SetTitle(model_one, new_folder_one, L"New TestBMFolder"); + ASSERT_TRUE(client1()->AwaitMutualSyncCycleCompletion(client2())); verifier->ExpectMatch(model_one); verifier->ExpectMatch(model_two); - Cleanup(); } +// Test Scribe ID - 371825. IN_PROC_BROWSER_TEST_F(TwoClientLiveBookmarksSyncTest, - SC_RepositioningBM_ab_To_ba_371931) { - + SC_RenameEmptyBMFolder) { ASSERT_TRUE(SetupSync()) << "Failed to SetupSync"; scoped_ptr<BookmarkModelVerifier> verifier(BookmarkModelVerifier::Create()); BookmarkModel* model_one = profile1()->GetBookmarkModel(); BookmarkModel* model_two = profile2()->GetBookmarkModel(); const BookmarkNode* bbn_one = model_one->GetBookmarkBarNode(); + verifier->ExpectMatch(model_one); verifier->ExpectMatch(model_two); - const BookmarkNode* bm_a = verifier->AddURL( - model_one, bbn_one, 0, L"Bookmark A", - GURL("http://www.nofaviconurla.com")); - const BookmarkNode* bm_b = verifier->AddURL( - model_one, bbn_one, 1, L"Bookmark B", - GURL("http://www.nofaviconurlb.com")); + // Let's add first bookmark folder to client1 + const BookmarkNode* bm_folder_one = + verifier->AddGroup(model_one, bbn_one, 0, L"TestFolder"); ASSERT_TRUE(client1()->AwaitMutualSyncCycleCompletion(client2())); verifier->ExpectMatch(model_one); verifier->ExpectMatch(model_two); - { - // Move bm_a to new position - verifier->Move(model_one, bm_a, bbn_one, 2); - } + // Let's rename newly added bookmark folder + verifier->SetTitle(model_one, bm_folder_one, L"New TestFolder"); ASSERT_TRUE(client1()->AwaitMutualSyncCycleCompletion(client2())); verifier->ExpectMatch(model_one); verifier->ExpectMatch(model_two); @@ -503,8 +836,9 @@ IN_PROC_BROWSER_TEST_F(TwoClientLiveBookmarksSyncTest, Cleanup(); } +// Test Scribe ID - 371826. IN_PROC_BROWSER_TEST_F(TwoClientLiveBookmarksSyncTest, - SC_Repositioning_NonEmptyBMFolder_ab_To_ba_372026) { + SC_RenameBMFolderWithLongHierarchy) { ASSERT_TRUE(SetupSync()) << "Failed to SetupSync"; scoped_ptr<BookmarkModelVerifier> verifier(BookmarkModelVerifier::Create()); @@ -515,81 +849,66 @@ IN_PROC_BROWSER_TEST_F(TwoClientLiveBookmarksSyncTest, verifier->ExpectMatch(model_one); verifier->ExpectMatch(model_two); - const BookmarkNode* bm_folder_a = - verifier->AddGroup(model_one, bbn_one, 0, L"TestBMFolderA"); - const BookmarkNode* bm_folder_b = - verifier->AddGroup(model_one, bbn_one, 1, L"TestBMFolderB"); - for (int index = 0; index < 10; index++) { - int random_int = base::RandInt(1, 100); - // To create randomness in order, 60% of time add bookmarks - if (random_int > 40) { - string16 title(L"Folder A - ChildTestBookmark"); - string16 url(L"http://www.nofaviconurl"); - string16 index_str = IntToString16(index); - title.append(index_str); - url.append(index_str); - url.append(L".com"); - const BookmarkNode* nofavicon_bm = - verifier->AddURL(model_one, bm_folder_a, index, title, GURL(url)); - } else { - // Remaining % of time - Add Bookmark folders - string16 title(L"Folder A - ChildTestBMFolder"); - string16 index_str = IntToString16(index); - title.append(index_str); - const BookmarkNode* bm_folder = - verifier->AddGroup(model_one, bm_folder_a, index, title); - } - } + // Let's add first bookmark folder to under bookmark_bar. + const BookmarkNode* test_bm_folder = + verifier->AddGroup(model_one, bbn_one, 0, L"Test BMFolder"); - for (int index = 0; index < 10; index++) { + // Let's add lots of bookmarks and folders underneath test_bm_folder. + for (int index = 0; index < 120; index++) { int random_int = base::RandInt(1, 100); - // To create randomness in order, 60% of time add bookmarks - if (random_int > 40) { - string16 title(L"Folder B - ChildTestBookmark"); + // To create randomness in order, 85% of time add bookmarks + if (random_int > 15) { + string16 title(L"Test BMFolder - ChildTestBookmark"); string16 url(L"http://www.nofaviconurl"); string16 index_str = IntToString16(index); title.append(index_str); url.append(index_str); url.append(L".com"); const BookmarkNode* nofavicon_bm = - verifier->AddURL(model_one, bm_folder_b, index, title, GURL(url)); + verifier->AddURL(model_one, test_bm_folder, index, + title, GURL(url)); } else { // Remaining % of time - Add Bookmark folders - string16 title(L"Folder B - ChildTestBMFolder"); + string16 title(L"Test BMFolder - ChildTestBMFolder"); string16 index_str = IntToString16(index); title.append(index_str); const BookmarkNode* bm_folder = - verifier->AddGroup(model_one, bm_folder_b, index, title); + verifier->AddGroup(model_one, test_bm_folder, index, title); } } ASSERT_TRUE(client1()->AwaitMutualSyncCycleCompletion(client2())); verifier->ExpectMatch(model_one); verifier->ExpectMatch(model_two); - { - // Move bm_a to new position - verifier->Move(model_one, bm_folder_a, bbn_one, 2); - } + + // Let's rename test_bm_folder. + verifier->SetTitle(model_one, test_bm_folder, L"New TestBMFolder"); ASSERT_TRUE(client1()->AwaitMutualSyncCycleCompletion(client2())); verifier->ExpectMatch(model_one); verifier->ExpectMatch(model_two); + Cleanup(); } +// Test Scribe ID - 371827. IN_PROC_BROWSER_TEST_F(TwoClientLiveBookmarksSyncTest, - SC_CleanAccount_AddSeveralBMs_UnderBMBarAndOtherBM_370562) { + SC_RenameBMFolderThatHasParentAndChildren) { ASSERT_TRUE(SetupSync()) << "Failed to SetupSync"; scoped_ptr<BookmarkModelVerifier> verifier(BookmarkModelVerifier::Create()); BookmarkModel* model_one = profile1()->GetBookmarkModel(); BookmarkModel* model_two = profile2()->GetBookmarkModel(); const BookmarkNode* bbn_one = model_one->GetBookmarkBarNode(); - const BookmarkNode* other_bm_one = model_one->other_node(); verifier->ExpectMatch(model_one); verifier->ExpectMatch(model_two); - // Let's add some bookmarks(without favicon) - for (int index = 0; index < 20; index++) { + + // Let's add first bookmark folder to under bookmark_bar. + const BookmarkNode* parent_bm_folder = + verifier->AddGroup(model_one, bbn_one, 0, L"Parent TestBMFolder"); + + // Let's add few bookmarks under bookmark_bar. + for (int index = 1; index < 15; index++) { string16 title(L"TestBookmark"); string16 url(L"http://www.nofaviconurl"); string16 index_str = IntToString16(index); @@ -599,91 +918,50 @@ IN_PROC_BROWSER_TEST_F(TwoClientLiveBookmarksSyncTest, const BookmarkNode* nofavicon_bm = verifier->AddURL(model_one, bbn_one, index, title, GURL(url)); } - for (int index = 0; index < 10; index++) { - string16 title(L"TestBookmark"); - string16 url(L"http://www.nofaviconurl"); - string16 index_str = IntToString16(index); - title.append(index_str); - url.append(index_str); - url.append(L".com"); - const BookmarkNode* nofavicon_bm = - verifier->AddURL(model_one, other_bm_one, index, title, GURL(url)); - } - ASSERT_TRUE(client1()->AwaitMutualSyncCycleCompletion(client2())); - verifier->ExpectMatch(model_one); - verifier->ExpectMatch(model_two); - Cleanup(); -} - -IN_PROC_BROWSER_TEST_F(TwoClientLiveBookmarksSyncTest, - SC_CleanAccount_AddSeveralBMs_And_SeveralFolders_370563) { - - ASSERT_TRUE(SetupSync()) << "Failed to SetupSync"; - scoped_ptr<BookmarkModelVerifier> verifier(BookmarkModelVerifier::Create()); - BookmarkModel* model_one = profile1()->GetBookmarkModel(); - BookmarkModel* model_two = profile2()->GetBookmarkModel(); - const BookmarkNode* bbn_one = model_one->GetBookmarkBarNode(); - const BookmarkNode* other_bm_one = model_one->other_node(); - verifier->ExpectMatch(model_one); - verifier->ExpectMatch(model_two); - // Let's add some bookmarks(without favicon) - for (int index = 0; index < 15; index++) { + // Let's add first bookmark folder under parent_bm_folder. + const BookmarkNode* test_bm_folder = + verifier->AddGroup(model_one, parent_bm_folder, 0, L"Test BMFolder"); + // Let's add lots of bookmarks and folders underneath test_bm_folder. + for (int index = 0; index < 120; index++) { int random_int = base::RandInt(1, 100); - // To create randomness in order, 40% of time add bookmarks - if (random_int > 60) { - string16 title(L"BB - TestBookmark"); + // To create randomness in order, 85% of time add bookmarks + if (random_int > 15) { + string16 title(L"Test BMFolder - ChildTestBookmark"); string16 url(L"http://www.nofaviconurl"); string16 index_str = IntToString16(index); title.append(index_str); url.append(index_str); url.append(L".com"); const BookmarkNode* nofavicon_bm = - verifier->AddURL(model_one, bbn_one, index, title, GURL(url)); + verifier->AddURL(model_one, test_bm_folder, index, + title, GURL(url)); } else { // Remaining % of time - Add Bookmark folders - string16 title(L"BB - TestBMFolder"); + string16 title(L"Test BMFolder - ChildTestBMFolder"); string16 index_str = IntToString16(index); title.append(index_str); - const BookmarkNode* bm_folder = verifier->AddGroup(model_one, bbn_one, - index, title); - int random_int2 = base::RandInt(1, 100); - // 60% of time we will add bookmarks to added folder - if (random_int2 > 40) { - for (int index = 0; index < 20; index++) { - string16 url(L"http://www.nofaviconurl"); - string16 index_str = IntToString16(index); - string16 child_title(title); - child_title.append(L" - ChildTestBM"); - child_title.append(index_str); - url.append(index_str); - url.append(L".com"); - const BookmarkNode* nofavicon_bm = verifier->AddURL(model_one, - bm_folder, index, child_title, GURL(url)); - } - } + const BookmarkNode* bm_folder = + verifier->AddGroup(model_one, test_bm_folder, index, title); } } - LOG(INFO) << "Adding several bookmarks under other bookmarks"; - for (int index = 0; index < 10; index++) { - string16 title(L"Other - TestBookmark"); - string16 url(L"http://www.nofaviconurl-other"); - string16 index_str = IntToString16(index); - title.append(index_str); - url.append(index_str); - url.append(L".com"); - const BookmarkNode* nofavicon_bm = - verifier->AddURL(model_one, other_bm_one, index, title, GURL(url)); - } + ASSERT_TRUE(client1()->AwaitMutualSyncCycleCompletion(client2())); verifier->ExpectMatch(model_one); verifier->ExpectMatch(model_two); + + // Let's rename test_bm_folder. + verifier->SetTitle(model_one, test_bm_folder, L"New TestBMFolder"); + ASSERT_TRUE(client1()->AwaitMutualSyncCycleCompletion(client2())); + verifier->ExpectMatch(model_one); + verifier->ExpectMatch(model_two); + Cleanup(); } +// Test Scribe ID - 371828. IN_PROC_BROWSER_TEST_F(TwoClientLiveBookmarksSyncTest, - SC_RenameBMURL_371822) { - + SC_RenameBMNameAndURL) { ASSERT_TRUE(SetupSync()) << "Failed to SetupSync"; scoped_ptr<BookmarkModelVerifier> verifier(BookmarkModelVerifier::Create()); BookmarkModel* model_one = profile1()->GetBookmarkModel(); @@ -695,14 +973,17 @@ IN_PROC_BROWSER_TEST_F(TwoClientLiveBookmarksSyncTest, // Let's add first bookmark(without favicon) const BookmarkNode* nofavicon_bm = verifier->AddURL(model_one, bbn_one, 0, L"Google", - GURL("http://www.google.com")); + GURL("http://www.google.com")); ASSERT_TRUE(client1()->AwaitMutualSyncCycleCompletion(client2())); verifier->ExpectMatch(model_one); verifier->ExpectMatch(model_two); - // Let's rename/change URL - verifier->SetURL(model_one, nofavicon_bm, GURL("http://www.cnn.com")); + // Let's change the URL. + nofavicon_bm = verifier->SetURL(model_one, nofavicon_bm, + GURL("http://www.cnn.com")); + // Let's change the Name. + verifier->SetTitle(model_one, nofavicon_bm, L"CNN"); // Wait for changes to sync and then verify ASSERT_TRUE(client1()->AwaitMutualSyncCycleCompletion(client2())); verifier->ExpectMatch(model_one); @@ -710,9 +991,9 @@ IN_PROC_BROWSER_TEST_F(TwoClientLiveBookmarksSyncTest, Cleanup(); } +// Test Scribe ID - 371832. IN_PROC_BROWSER_TEST_F(TwoClientLiveBookmarksSyncTest, - SC_RenameEmptyBMFolder_371825) { - + SC_DeleteBMEmptyAccountAfterwards) { ASSERT_TRUE(SetupSync()) << "Failed to SetupSync"; scoped_ptr<BookmarkModelVerifier> verifier(BookmarkModelVerifier::Create()); BookmarkModel* model_one = profile1()->GetBookmarkModel(); @@ -722,16 +1003,57 @@ IN_PROC_BROWSER_TEST_F(TwoClientLiveBookmarksSyncTest, verifier->ExpectMatch(model_one); verifier->ExpectMatch(model_two); - // Let's add first bookmark folder to client1 - const BookmarkNode* bm_folder_one = - verifier->AddGroup(model_one, bbn_one, 0, L"TestFolder"); + // Let's add first bookmark(without favicon) + { + const BookmarkNode* nofavicon_bm = verifier->AddURL(model_one, bbn_one, 0, + L"TestBookmark", GURL("http://www.nofaviconurl.com")); + } + ASSERT_TRUE(client1()->AwaitMutualSyncCycleCompletion(client2())); + verifier->ExpectMatch(model_one); + verifier->ExpectMatch(model_two); + + { + // Delete this newly created bookmark + verifier->Remove(model_one, bbn_one, 0); + } + client1()->AwaitMutualSyncCycleCompletionWithConflict(client2()); + verifier->ExpectMatch(model_one); + verifier->ExpectMatch(model_two); + + Cleanup(); +} +// Test Scribe ID - 371833. +IN_PROC_BROWSER_TEST_F(TwoClientLiveBookmarksSyncTest, + SC_DelBMNonEmptyAccountAfterwards) { + ASSERT_TRUE(SetupSync()) << "Failed to SetupSync"; + scoped_ptr<BookmarkModelVerifier> verifier(BookmarkModelVerifier::Create()); + BookmarkModel* model_one = profile1()->GetBookmarkModel(); + BookmarkModel* model_two = profile2()->GetBookmarkModel(); + const BookmarkNode* bbn_one = model_one->GetBookmarkBarNode(); + + verifier->ExpectMatch(model_one); + verifier->ExpectMatch(model_two); + // Let's add some bookmarks(without favicon) + for (int index = 0; index < 20; index++) { + string16 title(L"TestBookmark"); + string16 url(L"http://www.nofaviconurl"); + string16 index_str = IntToString16(index); + title.append(index_str); + url.append(index_str); + url.append(L".com"); + const BookmarkNode* nofavicon_bm = verifier->AddURL( + model_one, bbn_one, index, + title, GURL(url)); + } ASSERT_TRUE(client1()->AwaitMutualSyncCycleCompletion(client2())); verifier->ExpectMatch(model_one); verifier->ExpectMatch(model_two); - // Let's rename newly added bookmark folder - verifier->SetTitle(model_one, bm_folder_one, L"New TestFolder"); + { + // Delete this newly created bookmark + verifier->Remove(model_one, bbn_one, 0); + } ASSERT_TRUE(client1()->AwaitMutualSyncCycleCompletion(client2())); verifier->ExpectMatch(model_one); verifier->ExpectMatch(model_two); @@ -739,9 +1061,10 @@ IN_PROC_BROWSER_TEST_F(TwoClientLiveBookmarksSyncTest, Cleanup(); } -IN_PROC_BROWSER_TEST_F(TwoClientLiveBookmarksSyncTest, - SC_DeleteFirstBM_Under_BMFolder_NonEmptyFolderAfterDelete_371835) { +// Test Scribe ID - 371835. +IN_PROC_BROWSER_TEST_F(TwoClientLiveBookmarksSyncTest, + SC_DelFirstBMUnderBMFoldNonEmptyFoldAfterwards) { ASSERT_TRUE(SetupSync()) << "Failed to SetupSync"; scoped_ptr<BookmarkModelVerifier> verifier(BookmarkModelVerifier::Create()); BookmarkModel* model_one = profile1()->GetBookmarkModel(); @@ -780,9 +1103,9 @@ IN_PROC_BROWSER_TEST_F(TwoClientLiveBookmarksSyncTest, } +// Test Scribe ID - 371836. IN_PROC_BROWSER_TEST_F(TwoClientLiveBookmarksSyncTest, - SC_DeleteLastBM_Under_BMFolder_NonEmptyFolderAfterDelete_371836) { - + SC_DelLastBMUnderBMFoldNonEmptyFoldAfterwards) { ASSERT_TRUE(SetupSync()) << "Failed to SetupSync"; scoped_ptr<BookmarkModelVerifier> verifier(BookmarkModelVerifier::Create()); BookmarkModel* model_one = profile1()->GetBookmarkModel(); @@ -823,9 +1146,9 @@ IN_PROC_BROWSER_TEST_F(TwoClientLiveBookmarksSyncTest, } +// Test Scribe ID - 371856. IN_PROC_BROWSER_TEST_F(TwoClientLiveBookmarksSyncTest, - SC_DelMiddleBM_Under_BMFold_NonEmptyFoldAfterDel_371856) { - + SC_DelMiddleBMUnderBMFoldNonEmptyFoldAfterwards) { ASSERT_TRUE(SetupSync()) << "Failed to SetupSync"; scoped_ptr<BookmarkModelVerifier> verifier(BookmarkModelVerifier::Create()); BookmarkModel* model_one = profile1()->GetBookmarkModel(); @@ -864,9 +1187,9 @@ IN_PROC_BROWSER_TEST_F(TwoClientLiveBookmarksSyncTest, } +// Test Scribe ID - 371857. IN_PROC_BROWSER_TEST_F(TwoClientLiveBookmarksSyncTest, - SC_DeleteBMs_Under_BMFolder_EmptyFolderAfterDelete_371857) { - + SC_DelBMsUnderBMFoldEmptyFolderAfterwards) { ASSERT_TRUE(SetupSync()) << "Failed to SetupSync"; scoped_ptr<BookmarkModelVerifier> verifier(BookmarkModelVerifier::Create()); BookmarkModel* model_one = profile1()->GetBookmarkModel(); @@ -903,9 +1226,9 @@ IN_PROC_BROWSER_TEST_F(TwoClientLiveBookmarksSyncTest, Cleanup(); } +// Test Scribe ID - 371858. IN_PROC_BROWSER_TEST_F(TwoClientLiveBookmarksSyncTest, - SC_DeleteEmptyBMFolder_EmptyAccountAfterDelete_371858) { - + SC_DelEmptyBMFoldEmptyAccountAfterwards) { ASSERT_TRUE(SetupSync()) << "Failed to SetupSync"; scoped_ptr<BookmarkModelVerifier> verifier(BookmarkModelVerifier::Create()); BookmarkModel* model_one = profile1()->GetBookmarkModel(); @@ -934,9 +1257,9 @@ IN_PROC_BROWSER_TEST_F(TwoClientLiveBookmarksSyncTest, } +// Test Scribe ID - 371869. IN_PROC_BROWSER_TEST_F(TwoClientLiveBookmarksSyncTest, - SC_DeleteEmptyBMFolder_NonEmptyAccountAfterDelete_371869) { - + SC_DelEmptyBMFoldNonEmptyAccountAfterwards) { ASSERT_TRUE(SetupSync()) << "Failed to SetupSync"; scoped_ptr<BookmarkModelVerifier> verifier(BookmarkModelVerifier::Create()); BookmarkModel* model_one = profile1()->GetBookmarkModel(); @@ -985,9 +1308,9 @@ IN_PROC_BROWSER_TEST_F(TwoClientLiveBookmarksSyncTest, Cleanup(); } +// Test Scribe ID - 371879. IN_PROC_BROWSER_TEST_F(TwoClientLiveBookmarksSyncTest, - SC_DeleteBMFolderWithBMs_NonEmptyAccountAfterDelete_371879) { - + SC_DelBMFoldWithBMsNonEmptyAccountAfterwards) { ASSERT_TRUE(SetupSync()) << "Failed to SetupSync"; scoped_ptr<BookmarkModelVerifier> verifier(BookmarkModelVerifier::Create()); BookmarkModel* model_one = profile1()->GetBookmarkModel(); @@ -1052,9 +1375,9 @@ IN_PROC_BROWSER_TEST_F(TwoClientLiveBookmarksSyncTest, } +// Test Scribe ID - 371880. IN_PROC_BROWSER_TEST_F(TwoClientLiveBookmarksSyncTest, - SC_DelBMFoldWithBMsAndBMFolds_NonEmptyACAfterDelete_371880) { - + SC_DelBMFoldWithBMsAndBMFoldsNonEmptyACAfterwards) { ASSERT_TRUE(SetupSync()) << "Failed to SetupSync"; scoped_ptr<BookmarkModelVerifier> verifier(BookmarkModelVerifier::Create()); BookmarkModel* model_one = profile1()->GetBookmarkModel(); @@ -1157,9 +1480,149 @@ IN_PROC_BROWSER_TEST_F(TwoClientLiveBookmarksSyncTest, Cleanup(); } +// Test Scribe ID - 371882. IN_PROC_BROWSER_TEST_F(TwoClientLiveBookmarksSyncTest, - SC_Moving_BMsFromBookmarkBar_To_BMFolder_371954) { + SC_DelBMFoldWithParentAndChildrenBMsAndBMFolds) { + ASSERT_TRUE(SetupSync()) << "Failed to SetupSync"; + scoped_ptr<BookmarkModelVerifier> verifier(BookmarkModelVerifier::Create()); + BookmarkModel* model_one = profile1()->GetBookmarkModel(); + BookmarkModel* model_two = profile2()->GetBookmarkModel(); + const BookmarkNode* bbn_one = model_one->GetBookmarkBarNode(); + + verifier->ExpectMatch(model_one); + verifier->ExpectMatch(model_two); + + // Let's add first bookmark folder to under bookmark_bar. + const BookmarkNode* parent_bm_folder = + verifier->AddGroup(model_one, bbn_one, 0, L"Parent TestBMFolder"); + + // Let's add few bookmarks under bookmark_bar. + for (int index = 1; index < 11; index++) { + string16 title(L"TestBookmark"); + string16 url(L"http://www.nofaviconurl"); + string16 index_str = IntToString16(index); + title.append(index_str); + url.append(index_str); + url.append(L".com"); + const BookmarkNode* nofavicon_bm = + verifier->AddURL(model_one, bbn_one, index, title, GURL(url)); + } + // Let's add first bookmark folder under parent_bm_folder. + const BookmarkNode* test_bm_folder = + verifier->AddGroup(model_one, parent_bm_folder, 0, L"Test BMFolder"); + // Let's add lots of bookmarks and folders underneath test_bm_folder. + for (int index = 0; index < 30; index++) { + int random_int = base::RandInt(1, 100); + // To create randomness in order, 80% of time add bookmarks + if (random_int > 20) { + string16 title(L"Test BMFolder - ChildTestBookmark"); + string16 url(L"http://www.nofaviconurl"); + string16 index_str = IntToString16(index); + title.append(index_str); + url.append(index_str); + url.append(L".com"); + const BookmarkNode* nofavicon_bm = + verifier->AddURL(model_one, test_bm_folder, index, title, + GURL(url)); + } else { + // Remaining % of time - Add Bookmark folders + string16 title(L"Test BMFolder - ChildTestBMFolder"); + string16 index_str = IntToString16(index); + title.append(index_str); + const BookmarkNode* bm_folder = + verifier->AddGroup(model_one, test_bm_folder, index, title); + } + } + + ASSERT_TRUE(client1()->AwaitMutualSyncCycleCompletion(client2())); + verifier->ExpectMatch(model_one); + verifier->ExpectMatch(model_two); + + // Let's delete test_bm_folder + verifier->Remove(model_one, parent_bm_folder, 0); + ASSERT_TRUE(client1()->AwaitMutualSyncCycleCompletion(client2())); + verifier->ExpectMatch(model_one); + verifier->ExpectMatch(model_two); + + Cleanup(); +} + + +// Test Scribe ID - 371931. +IN_PROC_BROWSER_TEST_F(TwoClientLiveBookmarksSyncTest, + SC_ReverseTheOrderOfTwoBMs) { + + ASSERT_TRUE(SetupSync()) << "Failed to SetupSync"; + scoped_ptr<BookmarkModelVerifier> verifier(BookmarkModelVerifier::Create()); + BookmarkModel* model_one = profile1()->GetBookmarkModel(); + BookmarkModel* model_two = profile2()->GetBookmarkModel(); + const BookmarkNode* bbn_one = model_one->GetBookmarkBarNode(); + verifier->ExpectMatch(model_one); + verifier->ExpectMatch(model_two); + + const BookmarkNode* bm_a = verifier->AddURL( + model_one, bbn_one, 0, L"Bookmark A", + GURL("http://www.nofaviconurla.com")); + const BookmarkNode* bm_b = verifier->AddURL( + model_one, bbn_one, 1, L"Bookmark B", + GURL("http://www.nofaviconurlb.com")); + + ASSERT_TRUE(client1()->AwaitMutualSyncCycleCompletion(client2())); + verifier->ExpectMatch(model_one); + verifier->ExpectMatch(model_two); + + { + // Move bm_a to new position + verifier->Move(model_one, bm_a, bbn_one, 2); + } + ASSERT_TRUE(client1()->AwaitMutualSyncCycleCompletion(client2())); + verifier->ExpectMatch(model_one); + verifier->ExpectMatch(model_two); + + Cleanup(); +} + +// Test Scribe ID - 371933. +IN_PROC_BROWSER_TEST_F(TwoClientLiveBookmarksSyncTest, + SC_ReverseTheOrderOf10BMs) { + ASSERT_TRUE(SetupSync()) << "Failed to SetupSync"; + scoped_ptr<BookmarkModelVerifier> verifier(BookmarkModelVerifier::Create()); + BookmarkModel* model_one = profile1()->GetBookmarkModel(); + BookmarkModel* model_two = profile2()->GetBookmarkModel(); + const BookmarkNode* bbn_one = model_one->GetBookmarkBarNode(); + verifier->ExpectMatch(model_one); + verifier->ExpectMatch(model_two); + + // Let's add 10 bookmarks like 0123456789 + for (int index = 0; index < 10; index++) { + string16 title(L"BM-"); + string16 url(L"http://www.nofaviconurl-"); + string16 index_str = IntToString16(index); + title.append(index_str); + url.append(index_str); + url.append(L".com"); + const BookmarkNode* nofavicon_bm = verifier->AddURL(model_one, + bbn_one, index, title, GURL(url)); + } + + ASSERT_TRUE(client1()->AwaitMutualSyncCycleCompletion(client2())); + verifier->ExpectMatch(model_one); + verifier->ExpectMatch(model_two); + + // Shuffle bookmarks to make it look like 9876543210 + verifier->ReverseChildOrder(model_one, bbn_one); + + ASSERT_TRUE(client1()->AwaitMutualSyncCycleCompletion(client2())); + verifier->ExpectMatch(model_one); + verifier->ExpectMatch(model_two); + + Cleanup(); +} + +// Test Scribe ID - 371954. +IN_PROC_BROWSER_TEST_F(TwoClientLiveBookmarksSyncTest, + SC_MovingBMsFromBMBarToBMFolder) { ASSERT_TRUE(SetupSync()) << "Failed to SetupSync"; scoped_ptr<BookmarkModelVerifier> verifier(BookmarkModelVerifier::Create()); BookmarkModel* model_one = profile1()->GetBookmarkModel(); @@ -1202,9 +1665,9 @@ IN_PROC_BROWSER_TEST_F(TwoClientLiveBookmarksSyncTest, Cleanup(); } +// Test Scribe ID - 371957. IN_PROC_BROWSER_TEST_F(TwoClientLiveBookmarksSyncTest, - SC_Moving_BMsFromBMFolder_To_BookmarkBar_371957) { - + SC_MovingBMsFromBMFoldToBMBar) { ASSERT_TRUE(SetupSync()) << "Failed to SetupSync"; scoped_ptr<BookmarkModelVerifier> verifier(BookmarkModelVerifier::Create()); BookmarkModel* model_one = profile1()->GetBookmarkModel(); @@ -1247,4 +1710,779 @@ IN_PROC_BROWSER_TEST_F(TwoClientLiveBookmarksSyncTest, Cleanup(); } +// Test Scribe ID - 371961. +IN_PROC_BROWSER_TEST_F(TwoClientLiveBookmarksSyncTest, + SC_MovingBMsFromParentBMFoldToChildBMFold) { + ASSERT_TRUE(SetupSync()) << "Failed to SetupSync"; + scoped_ptr<BookmarkModelVerifier> verifier(BookmarkModelVerifier::Create()); + BookmarkModel* model_one = profile1()->GetBookmarkModel(); + BookmarkModel* model_two = profile2()->GetBookmarkModel(); + const BookmarkNode* bbn_one = model_one->GetBookmarkBarNode(); + verifier->ExpectMatch(model_one); + verifier->ExpectMatch(model_two); + + const BookmarkNode* parent_folder = + verifier->AddGroup(model_one, bbn_one, 0, L"Test Parent BMFolder"); + + // Let's add bookmarks a,b,c to parent_folder. + const BookmarkNode* bm_a = verifier->AddURL( + model_one, parent_folder, 0, L"Bookmark A", + GURL("http://www.nofaviconurl-a.com")); + const BookmarkNode* bm_b = verifier->AddURL( + model_one, parent_folder, 1, L"Bookmark B", + GURL("http://www.nofaviconurl-b.com")); + const BookmarkNode* bm_c = verifier->AddURL( + model_one, parent_folder, 2, L"Bookmark C", + GURL("http://www.nofaviconurl-c.com")); + const BookmarkNode* child_folder = + verifier->AddGroup(model_one, parent_folder, 3, L"Test Child BMFolder"); + + // Let's add few bookmarks under child_folder. + for (int index = 0; index < 10; index++) { + string16 title(L"TestBookmark"); + string16 url(L"http://www.nofaviconurl"); + string16 index_str = IntToString16(index); + title.append(index_str); + url.append(index_str); + url.append(L".com"); + const BookmarkNode* nofavicon_bm = + verifier->AddURL(model_one, child_folder, index, title, GURL(url)); + } + + ASSERT_TRUE(client1()->AwaitMutualSyncCycleCompletion(client2())); + verifier->ExpectMatch(model_one); + verifier->ExpectMatch(model_two); + + // Let's move bookmark a,b,c to child_folder. + verifier->Move(model_one, bm_a, child_folder, 10); + verifier->Move(model_one, bm_b, child_folder, 11); + verifier->Move(model_one, bm_c, child_folder, 12); + + ASSERT_TRUE(client1()->AwaitMutualSyncCycleCompletion(client2())); + verifier->ExpectMatch(model_one); + verifier->ExpectMatch(model_two); + + Cleanup(); +} + + +// Test Scribe ID - 371964. +IN_PROC_BROWSER_TEST_F(TwoClientLiveBookmarksSyncTest, + SC_MovingBMsFromChildBMFoldToParentBMFold) { + ASSERT_TRUE(SetupSync()) << "Failed to SetupSync"; + scoped_ptr<BookmarkModelVerifier> verifier(BookmarkModelVerifier::Create()); + BookmarkModel* model_one = profile1()->GetBookmarkModel(); + BookmarkModel* model_two = profile2()->GetBookmarkModel(); + const BookmarkNode* bbn_one = model_one->GetBookmarkBarNode(); + verifier->ExpectMatch(model_one); + verifier->ExpectMatch(model_two); + + const BookmarkNode* parent_folder = + verifier->AddGroup(model_one, bbn_one, 0, L"Test Parent BMFolder"); + + // Let's add bookmarks a,b,c to parent_folder. + const BookmarkNode* bm_a = verifier->AddURL( + model_one, parent_folder, 0, L"Bookmark A", + GURL("http://www.nofaviconurl-a.com")); + const BookmarkNode* bm_b = verifier->AddURL( + model_one, parent_folder, 1, L"Bookmark B", + GURL("http://www.nofaviconurl-b.com")); + const BookmarkNode* bm_c = verifier->AddURL( + model_one, parent_folder, 2, L"Bookmark C", + GURL("http://www.nofaviconurl-c.com")); + const BookmarkNode* child_folder = + verifier->AddGroup(model_one, parent_folder, 3, L"Test Child BMFolder"); + + // Let's add bookmarks d,e,f,g,h to child_folder. + const BookmarkNode* bm_d = verifier->AddURL( + model_one, child_folder, 0, L"Bookmark D", + GURL("http://www.nofaviconurl-d.com")); + const BookmarkNode* bm_e = verifier->AddURL( + model_one, child_folder, 1, L"Bookmark E", + GURL("http://www.nofaviconurl-e.com")); + const BookmarkNode* bm_f = verifier->AddURL( + model_one, child_folder, 2, L"Bookmark F", + GURL("http://www.nofaviconurl-f.com")); + const BookmarkNode* bm_g = verifier->AddURL( + model_one, child_folder, 3, L"Bookmark G", + GURL("http://www.nofaviconurl-g.com")); + const BookmarkNode* bm_h = verifier->AddURL( + model_one, child_folder, 4, L"Bookmark H", + GURL("http://www.nofaviconurl-h.com")); + + ASSERT_TRUE(client1()->AwaitMutualSyncCycleCompletion(client2())); + verifier->ExpectMatch(model_one); + verifier->ExpectMatch(model_two); + + // Let's move bookmark d,e,h to parent_folder. + verifier->Move(model_one, bm_d, parent_folder, 4); + verifier->Move(model_one, bm_e, parent_folder, 3); + verifier->Move(model_one, bm_h, parent_folder, 0); + + ASSERT_TRUE(client1()->AwaitMutualSyncCycleCompletion(client2())); + verifier->ExpectMatch(model_one); + verifier->ExpectMatch(model_two); + + Cleanup(); +} + + +// Test Scribe ID - 371967. +IN_PROC_BROWSER_TEST_F(TwoClientLiveBookmarksSyncTest, + SC_HoistBMs10LevelUp) { + ASSERT_TRUE(SetupSync()) << "Failed to SetupSync"; + scoped_ptr<BookmarkModelVerifier> verifier(BookmarkModelVerifier::Create()); + BookmarkModel* model_one = profile1()->GetBookmarkModel(); + BookmarkModel* model_two = profile2()->GetBookmarkModel(); + const BookmarkNode* bbn_one = model_one->GetBookmarkBarNode(); + + verifier->ExpectMatch(model_one); + verifier->ExpectMatch(model_two); + const BookmarkNode* bm_folder = bbn_one; + const BookmarkNode* bm_folder_L10; + const BookmarkNode* bm_folder_L0; + for (int level = 0; level < 15; level++) { + // Let's add some bookmarks(without favicon) to bm_folder. + int child_count = base::RandInt(0, 10); + for (int index = 0; index < child_count; index++) { + string16 title(bm_folder->GetTitle()); + title.append(L"-BM"); + string16 url(L"http://www.nofaviconurl-"); + string16 index_str = IntToString16(index); + title.append(index_str); + url.append(index_str); + url.append(L".com"); + const BookmarkNode* nofavicon_bm = verifier->AddURL(model_one, + bm_folder, index, title, GURL(url)); + } + string16 title(L"Test BMFolder-"); + string16 level_str = IntToString16(level); + title.append(level_str); + + bm_folder = verifier->AddGroup(model_one, + bm_folder, bm_folder->GetChildCount(), title); + // Let's remember first bm folder for later use. + if (level == 0) { + bm_folder_L0 = bm_folder; + } + // Let's remember 10th level bm folder for later use. + if (level == 9) { + bm_folder_L10 = bm_folder; + } + } + const BookmarkNode* bm_a = verifier->AddURL(model_one, + bm_folder_L10, bm_folder_L10->GetChildCount(), L"BM-A", + GURL("http://www.bm-a.com")); + const BookmarkNode* bm_b = verifier->AddURL(model_one, + bm_folder_L10, bm_folder_L10->GetChildCount(), L"BM-B", + GURL("http://www.bm-b.com")); + const BookmarkNode* bm_c = verifier->AddURL(model_one, + bm_folder_L10, bm_folder_L10->GetChildCount(), L"BM-C", + GURL("http://www.bm-c.com")); + // Let's wait till all the changes populate to another client. + ASSERT_TRUE(client1()->AwaitMutualSyncCycleCompletion(client2())); + verifier->ExpectMatch(model_one); + verifier->ExpectMatch(model_two); + + // Let's move bookmark a from bm_folder_L10 to first bookmark folder- at end. + verifier->Move(model_one, bm_a, bm_folder_L0, bm_folder_L0->GetChildCount()); + // Let's move bookmark b to first bookmark folder- at the beginning. + verifier->Move(model_one, bm_b, bm_folder_L0, 0); + // Let's move bookmark c to first bookmark folder- in the middle. + verifier->Move(model_one, bm_c, bm_folder_L0, 1); + + ASSERT_TRUE(client1()->AwaitMutualSyncCycleCompletion(client2())); + verifier->ExpectMatch(model_one); + verifier->ExpectMatch(model_two); + + Cleanup(); +} + +// Test Scribe ID - 371968. +IN_PROC_BROWSER_TEST_F(TwoClientLiveBookmarksSyncTest, + SC_SinkBMs10LevelDown) { + ASSERT_TRUE(SetupSync()) << "Failed to SetupSync"; + scoped_ptr<BookmarkModelVerifier> verifier(BookmarkModelVerifier::Create()); + BookmarkModel* model_one = profile1()->GetBookmarkModel(); + BookmarkModel* model_two = profile2()->GetBookmarkModel(); + const BookmarkNode* bbn_one = model_one->GetBookmarkBarNode(); + + verifier->ExpectMatch(model_one); + verifier->ExpectMatch(model_two); + const BookmarkNode* bm_folder = bbn_one; + const BookmarkNode* bm_folder_L10; + const BookmarkNode* bm_folder_L0; + for (int level = 0; level < 15; level++) { + // Let's add some bookmarks(without favicon) to bm_folder. + int child_count = base::RandInt(0, 10); + for (int index = 0; index < child_count; index++) { + string16 title(bm_folder->GetTitle()); + title.append(L"-BM"); + string16 url(L"http://www.nofaviconurl-"); + string16 index_str = IntToString16(index); + title.append(index_str); + url.append(index_str); + url.append(L".com"); + const BookmarkNode* nofavicon_bm = verifier->AddURL(model_one, + bm_folder, index, title, GURL(url)); + } + string16 title(L"Test BMFolder-"); + string16 level_str = IntToString16(level); + title.append(level_str); + + bm_folder = verifier->AddGroup(model_one, + bm_folder, bm_folder->GetChildCount(), title); + // Let's remember first bm folder for later use. + if (level == 0) { + bm_folder_L0 = bm_folder; + } + // Let's remember 10th level bm folder for later use. + if (level == 9) { + bm_folder_L10 = bm_folder; + } + } + const BookmarkNode* bm_a = verifier->AddURL(model_one, + bm_folder_L10, bm_folder_L0->GetChildCount(), L"BM-A", + GURL("http://www.bm-a.com")); + const BookmarkNode* bm_b = verifier->AddURL(model_one, + bm_folder_L10, bm_folder_L0->GetChildCount(), L"BM-B", + GURL("http://www.bm-b.com")); + const BookmarkNode* bm_c = verifier->AddURL(model_one, + bm_folder_L10, bm_folder_L0->GetChildCount(), L"BM-C", + GURL("http://www.bm-c.com")); + // Let's wait till all the changes populate to another client. + ASSERT_TRUE(client1()->AwaitMutualSyncCycleCompletion(client2())); + verifier->ExpectMatch(model_one); + verifier->ExpectMatch(model_two); + + // Let's move bookmark a from bm_folder_L10 to first bookmark + // folder- at end. + verifier->Move(model_one, bm_a, bm_folder_L10, + bm_folder_L10->GetChildCount()); + // Let's move bookmark b to first bookmark folder- at the beginning. + verifier->Move(model_one, bm_b, bm_folder_L10, 0); + // Let's move bookmark c to first bookmark folder- in the middle. + verifier->Move(model_one, bm_c, bm_folder_L10, 1); + + ASSERT_TRUE(client1()->AwaitMutualSyncCycleCompletion(client2())); + verifier->ExpectMatch(model_one); + verifier->ExpectMatch(model_two); + + Cleanup(); +} + + +// Test Scribe ID - 371980. +IN_PROC_BROWSER_TEST_F(TwoClientLiveBookmarksSyncTest, + SC_SinkEmptyBMFold5LevelsDown) { + ASSERT_TRUE(SetupSync()) << "Failed to SetupSync"; + scoped_ptr<BookmarkModelVerifier> verifier(BookmarkModelVerifier::Create()); + BookmarkModel* model_one = profile1()->GetBookmarkModel(); + BookmarkModel* model_two = profile2()->GetBookmarkModel(); + const BookmarkNode* bbn_one = model_one->GetBookmarkBarNode(); + + verifier->ExpectMatch(model_one); + verifier->ExpectMatch(model_two); + + const BookmarkNode* bm_folder = bbn_one; + const BookmarkNode* bm_folder_L5 = NULL; + for (int level = 0; level < 6; level++) { + // Let's add some bookmarks(without favicon) to bm_folder. + int child_count = base::RandInt(0, 10); + for (int index = 0; index < child_count; index++) { + string16 title(bm_folder->GetTitle()); + title.append(L"-BM"); + string16 url(L"http://www.nofaviconurl-"); + string16 index_str = IntToString16(index); + title.append(index_str); + url.append(index_str); + url.append(L".com"); + const BookmarkNode* nofavicon_bm = verifier->AddURL(model_one, + bm_folder, index, title, GURL(url)); + } + string16 title(L"Test BMFolder-"); + string16 level_str = IntToString16(level); + title.append(level_str); + + bm_folder = verifier->AddGroup(model_one, + bm_folder, bm_folder->GetChildCount(), title); + // Let's remember 5th level bm folder for later use. + if (level == 5) { + bm_folder_L5 = bm_folder; + } + } + const BookmarkNode* empty_bm_folder = verifier->AddGroup(model_one, + bbn_one, bbn_one->GetChildCount(), L"EmptyTest BMFolder"); + + // Let's wait until all the changes populate to another client. + ASSERT_TRUE(client1()->AwaitMutualSyncCycleCompletion(client2())); + verifier->ExpectMatch(model_one); + verifier->ExpectMatch(model_two); + + // Let's move empty_bm_folder from bookmark bar to bm_folder_L5 (at the end). + verifier->Move(model_one, empty_bm_folder, bm_folder_L5, + bm_folder_L5->GetChildCount()); + + ASSERT_TRUE(client1()->AwaitMutualSyncCycleCompletion(client2())); + verifier->ExpectMatch(model_one); + verifier->ExpectMatch(model_two); + + Cleanup(); +} + +// Test Scribe ID - 371997. +IN_PROC_BROWSER_TEST_F(TwoClientLiveBookmarksSyncTest, + SC_SinkNonEmptyBMFold5LevelsDown) { + ASSERT_TRUE(SetupSync()) << "Failed to SetupSync"; + scoped_ptr<BookmarkModelVerifier> verifier(BookmarkModelVerifier::Create()); + BookmarkModel* model_one = profile1()->GetBookmarkModel(); + BookmarkModel* model_two = profile2()->GetBookmarkModel(); + const BookmarkNode* bbn_one = model_one->GetBookmarkBarNode(); + + verifier->ExpectMatch(model_one); + verifier->ExpectMatch(model_two); + + const BookmarkNode* bm_folder = bbn_one; + const BookmarkNode* bm_folder_L5 = NULL; + for (int level = 0; level < 6; level++) { + // Let's add some bookmarks (without favicon) to bm_folder. + int child_count = base::RandInt(0, 10); + for (int index = 0; index < child_count; index++) { + string16 title(bm_folder->GetTitle()); + title.append(L"-BM"); + string16 url(L"http://www.nofaviconurl-"); + string16 index_str = IntToString16(index); + title.append(index_str); + url.append(index_str); + url.append(L".com"); + const BookmarkNode* nofavicon_bm = verifier->AddURL(model_one, + bm_folder, index, title, GURL(url)); + } + string16 title(L"Test BMFolder-"); + string16 level_str = IntToString16(level); + title.append(level_str); + + bm_folder = verifier->AddGroup(model_one, + bm_folder, bm_folder->GetChildCount(), title); + // Let's remember 5th level bm folder for later use. + if (level == 5) { + bm_folder_L5 = bm_folder; + } + } + const BookmarkNode* my_bm_folder = verifier->AddGroup(model_one, + bbn_one, bbn_one->GetChildCount(), L"MyTest BMFolder"); + // Let's add few bookmarks to my_bm_folder. + for (int index = 0; index < 10; index++) { + string16 title(bm_folder->GetTitle()); + title.append(L"-BM"); + string16 url(L"http://www.nofaviconurl-"); + string16 index_str = IntToString16(index); + title.append(index_str); + url.append(index_str); + url.append(L".com"); + const BookmarkNode* nofavicon_bm = verifier->AddURL(model_one, + my_bm_folder, index, title, GURL(url)); + } + + // Let's wait until all the changes populate to another client. + ASSERT_TRUE(client1()->AwaitMutualSyncCycleCompletion(client2())); + verifier->ExpectMatch(model_one); + verifier->ExpectMatch(model_two); + + // Let's move my_bm_folder from bookmark bar to bm_folder_L5 (at the end). + verifier->Move(model_one, my_bm_folder, bm_folder_L5, + bm_folder_L5->GetChildCount()); + + ASSERT_TRUE(client1()->AwaitMutualSyncCycleCompletion(client2())); + verifier->ExpectMatch(model_one); + verifier->ExpectMatch(model_two); + + Cleanup(); +} + +// Test Scribe ID - 372006. +IN_PROC_BROWSER_TEST_F(TwoClientLiveBookmarksSyncTest, + SC_HoistFolder5LevelsUp) { + ASSERT_TRUE(SetupSync()) << "Failed to SetupSync"; + scoped_ptr<BookmarkModelVerifier> verifier(BookmarkModelVerifier::Create()); + BookmarkModel* model_one = profile1()->GetBookmarkModel(); + BookmarkModel* model_two = profile2()->GetBookmarkModel(); + const BookmarkNode* bbn_one = model_one->GetBookmarkBarNode(); + + verifier->ExpectMatch(model_one); + verifier->ExpectMatch(model_two); + + const BookmarkNode* bm_folder = bbn_one; + const BookmarkNode* bm_folder_L5 = NULL; + for (int level = 0; level < 6; level++) { + // Let's add some bookmarks(without favicon) to bm_folder. + int child_count = base::RandInt(0, 10); + for (int index = 0; index < child_count; index++) { + string16 title(bm_folder->GetTitle()); + title.append(L"-BM"); + string16 url(L"http://www.nofaviconurl-"); + string16 index_str = IntToString16(index); + title.append(index_str); + url.append(index_str); + url.append(L".com"); + const BookmarkNode* nofavicon_bm = verifier->AddURL(model_one, + bm_folder, index, title, GURL(url)); + } + string16 title(L"Test BMFolder-"); + string16 level_str = IntToString16(level); + title.append(level_str); + + bm_folder = verifier->AddGroup(model_one, + bm_folder, bm_folder->GetChildCount(), title); + // Let's remember 5th level bm folder for later use. + if (level == 5) { + bm_folder_L5 = bm_folder; + } + } + const BookmarkNode* my_bm_folder = verifier->AddGroup(model_one, + bm_folder_L5, bm_folder_L5->GetChildCount(), L"MyTest BMFolder"); + // Let's add few bookmarks to my_bm_folder. + for (int index = 0; index < 10; index++) { + string16 title(bm_folder->GetTitle()); + title.append(L"-BM"); + string16 url(L"http://www.nofaviconurl-"); + string16 index_str = IntToString16(index); + title.append(index_str); + url.append(index_str); + url.append(L".com"); + const BookmarkNode* nofavicon_bm = verifier->AddURL(model_one, + my_bm_folder, index, title, GURL(url)); + } + + // Let's wait until all the changes populate to another client. + ASSERT_TRUE(client1()->AwaitMutualSyncCycleCompletion(client2())); + verifier->ExpectMatch(model_one); + verifier->ExpectMatch(model_two); + + // Let's move my_bm_folder from bm_folder_L5 to bookmark bar- at end. + verifier->Move(model_one, my_bm_folder, bbn_one, bbn_one->GetChildCount()); + + ASSERT_TRUE(client1()->AwaitMutualSyncCycleCompletion(client2())); + verifier->ExpectMatch(model_one); + verifier->ExpectMatch(model_two); + + Cleanup(); +} + + + +// Test Scribe ID - 372026. +IN_PROC_BROWSER_TEST_F(TwoClientLiveBookmarksSyncTest, + SC_ReverseTheOrderOfTwoBMFolders) { + + ASSERT_TRUE(SetupSync()) << "Failed to SetupSync"; + scoped_ptr<BookmarkModelVerifier> verifier(BookmarkModelVerifier::Create()); + BookmarkModel* model_one = profile1()->GetBookmarkModel(); + BookmarkModel* model_two = profile2()->GetBookmarkModel(); + const BookmarkNode* bbn_one = model_one->GetBookmarkBarNode(); + + verifier->ExpectMatch(model_one); + verifier->ExpectMatch(model_two); + + const BookmarkNode* bm_folder_a = + verifier->AddNonEmptyGroup(model_one, bbn_one, 0, L"TestBMFolderA", 10); + const BookmarkNode* bm_folder_b = + verifier->AddNonEmptyGroup(model_one, bbn_one, 1, L"TestBMFolderB", 10); + + ASSERT_TRUE(client1()->AwaitMutualSyncCycleCompletion(client2())); + verifier->ExpectMatch(model_one); + verifier->ExpectMatch(model_two); + + // Let's change positions of bookmark folders so it is more like ba. + verifier->ReverseChildOrder(model_one, bbn_one); + + ASSERT_TRUE(client1()->AwaitMutualSyncCycleCompletion(client2())); + verifier->ExpectMatch(model_one); + verifier->ExpectMatch(model_two); + Cleanup(); +} + +// Test Scribe ID - 372028. +IN_PROC_BROWSER_TEST_F(TwoClientLiveBookmarksSyncTest, + SC_ReverseTheOrderOfTenBMFolders) { + ASSERT_TRUE(SetupSync()) << "Failed to SetupSync"; + scoped_ptr<BookmarkModelVerifier> verifier(BookmarkModelVerifier::Create()); + BookmarkModel* model_one = profile1()->GetBookmarkModel(); + BookmarkModel* model_two = profile2()->GetBookmarkModel(); + const BookmarkNode* bbn_one = model_one->GetBookmarkBarNode(); + verifier->ExpectMatch(model_one); + verifier->ExpectMatch(model_two); + + // Let's add 10 non-empty bookmark folders like 0123456789 + for (int index = 0; index < 10; index++) { + string16 title(L"BM Folder"); + string16 index_str = IntToString16(index); + title.append(index_str); + const BookmarkNode* child_bm_folder = verifier->AddNonEmptyGroup( + model_one, bbn_one, index, title, 10); + } + + ASSERT_TRUE(client1()->AwaitMutualSyncCycleCompletion(client2())); + verifier->ExpectMatch(model_one); + verifier->ExpectMatch(model_two); + + // Shuffle bookmark folders to make it look like 9876543210 + verifier->ReverseChildOrder(model_one, bbn_one); + + ASSERT_TRUE(client1()->AwaitMutualSyncCycleCompletion(client2())); + verifier->ExpectMatch(model_one); + verifier->ExpectMatch(model_two); + + Cleanup(); +} + +// Test Scribe ID - 373378. +IN_PROC_BROWSER_TEST_F(LiveSyncTestBasicHierarchy50BM, + MC_PushExistingBMsToSecondClient) { + ASSERT_TRUE(SetupSync()) << "Failed to SetupSync"; + scoped_ptr<BookmarkModelVerifier> verifier(BookmarkModelVerifier::Create()); + BookmarkModel* model_one = profile1()->GetBookmarkModel(); + BookmarkModel* model_two = profile2()->GetBookmarkModel(); + + // Wait for changes to propagate. + ASSERT_TRUE(client1()->AwaitMutualSyncCycleCompletion(client2())); + // Let's compare and make sure both bookmark models are same after sync. + verifier->ExpectMatch(model_one); + verifier->ExpectMatch(model_two); + + Cleanup(); +} + +// Test Scribe ID - 373379. +IN_PROC_BROWSER_TEST_F(TwoClientLiveBookmarksSyncTest, + MC_BiDirectionalPushAddingBM) { + ASSERT_TRUE(SetupSync()) << "Failed to SetupSync"; + BookmarkModel* model_one = profile1()->GetBookmarkModel(); + BookmarkModel* model_two = profile2()->GetBookmarkModel(); + const BookmarkNode* bbn_one = model_one->GetBookmarkBarNode(); + const BookmarkNode* bbn_two = model_one->GetBookmarkBarNode(); + + BookmarkModelVerifier::ExpectModelsMatch(model_one, model_two); + + // Let's add 2 bookmarks (without favicon) on each client. + { + const BookmarkNode* bm_foo1 = model_one->AddURL( + bbn_one, 0, L"Foo1", GURL("http://www.foo1.com")); + const BookmarkNode* bm_foo3 = model_two->AddURL( + bbn_two, 0, L"Foo3", GURL("http://www.foo3.com")); + + const BookmarkNode* bm_foo2 = model_one->AddURL( + bbn_one, 1, L"Foo2", GURL("http://www.foo2.com")); + const BookmarkNode* bm_foo4 = model_two->AddURL( + bbn_two, 1, L"Foo4", GURL("http://www.foo4.com")); + } + + ASSERT_TRUE(client1()->AwaitMutualSyncCycleCompletionWithConflict(client2())); + BookmarkModelVerifier::ExpectModelsMatch(model_one, model_two); + Cleanup(); +} + +// Test Scribe ID - 373506. +IN_PROC_BROWSER_TEST_F(TwoClientLiveBookmarksSyncTest, + MC_BootStrapEmptyStateEverywhere) { + ASSERT_TRUE(SetupSync()) << "Failed to SetupSync"; + scoped_ptr<BookmarkModelVerifier> verifier(BookmarkModelVerifier::Create()); + BookmarkModel* model_one = profile1()->GetBookmarkModel(); + BookmarkModel* model_two = profile2()->GetBookmarkModel(); + + // Wait for changes to propagate. + ASSERT_TRUE(client1()->AwaitMutualSyncCycleCompletion(client2())); + // Let's compare and make sure both bookmark models are same after sync. + verifier->ExpectMatch(model_one); + verifier->ExpectMatch(model_two); + + Cleanup(); +} + +// Test Scribe ID - 373507. +IN_PROC_BROWSER_TEST_F(LiveSyncTestBasicHierarchy50BMBothClients, + MC_FirstUseExistingSameBMModelBothClients) { + ASSERT_TRUE(SetupSync()) << "Failed to SetupSync"; + scoped_ptr<BookmarkModelVerifier> verifier(BookmarkModelVerifier::Create()); + BookmarkModel* model_one = profile1()->GetBookmarkModel(); + BookmarkModel* model_two = profile2()->GetBookmarkModel(); + + // Wait for changes to propagate. + ASSERT_TRUE(client1()->AwaitMutualSyncCycleCompletion(client2())); + // Let's compare and make sure both bookmark models are same after sync. + verifier->ExpectMatch(model_one); + verifier->ExpectMatch(model_two); + + Cleanup(); +} + +// Test Scribe ID - 373508. +IN_PROC_BROWSER_TEST_F(TwoClientLiveBookmarksSyncTest, + MC_SimpleMergeOfDifferentBMModels) { + set_profile2(MakeProfile(L"client2")); + BookmarkModel* model_one = browser()->profile()->GetBookmarkModel(); + BookmarkModel* model_two = profile2()->GetBookmarkModel(); + LiveBookmarksSyncTest::BlockUntilLoaded(model_two); + + const BookmarkNode* bbn_one = model_one->GetBookmarkBarNode(); + const BookmarkNode* bbn_two = model_two->GetBookmarkBarNode(); + + // Let's add same bookmarks (without favicon) to both clients. + for (int index = 0; index < 3; index++) { + string16 title(L"TestBookmark"); + string16 url(L"http://www.nofaviconurl"); + string16 index_str = IntToString16(index); + title.append(index_str); + url.append(index_str); + url.append(L".com"); + const BookmarkNode* nofavicon_bm_client1 = + model_one->AddURL(bbn_one, index, title, GURL(url)); + const BookmarkNode* nofavicon_bm_client2 = + model_two->AddURL(bbn_two, index, title, GURL(url)); + } + + // Let's add some different bookmarks (without favicon) to client1. + for (int index = 3; index < 11 ; index++) { + string16 title(L"Client1-TestBookmark"); + string16 url(L"http://www.client1-nofaviconurl"); + string16 index_str = IntToString16(index); + title.append(index_str); + url.append(index_str); + url.append(L".com"); + const BookmarkNode* nofavicon_bm_client1 = + model_one->AddURL(bbn_one, index, title, GURL(url)); + } + + // Let's add some different bookmarks (without favicon) to client2. + for (int index = 3; index < 11 ; index++) { + string16 title(L"Client2-TestBookmark"); + string16 url(L"http://www.Client2-nofaviconurl"); + string16 index_str = IntToString16(index); + title.append(index_str); + url.append(index_str); + url.append(L".com"); + const BookmarkNode* nofavicon_bm_client2 = + model_two->AddURL(bbn_two, index, title, GURL(url)); + } + + // Set up sync on both clients. + set_client1(new ProfileSyncServiceTestHarness( + browser()->profile(), username_, password_)); + set_client2(new ProfileSyncServiceTestHarness( + profile2(), username_, password_)); + ASSERT_TRUE(client1()->SetupSync()) << "Failed to SetupSync on Client1"; + ASSERT_TRUE(client2()->SetupSync()) << "Failed to SetupSync on Client2"; + + // Wait for changes to propagate. + ASSERT_TRUE(client2()->AwaitMutualSyncCycleCompletion(client1())); + // Let's make sure there aren't any duplicates after sync. + BookmarkModelVerifier::VerifyNoDuplicates(model_one); + // Let's compare and make sure both bookmark models are same after sync. + BookmarkModelVerifier::ExpectModelsMatchIncludingFavicon( + model_one, model_two, false); + + Cleanup(); +} + +// Test Scribe ID - 386586. +IN_PROC_BROWSER_TEST_F(TwoClientLiveBookmarksSyncTest, + MC_MergeSimpleBMHierarchyUnderBMBar) { + set_profile2(MakeProfile(L"client2")); + BookmarkModel* model_one = browser()->profile()->GetBookmarkModel(); + BookmarkModel* model_two = profile2()->GetBookmarkModel(); + LiveBookmarksSyncTest::BlockUntilLoaded(model_two); + + const BookmarkNode* bbn_one = model_one->GetBookmarkBarNode(); + const BookmarkNode* bbn_two = model_two->GetBookmarkBarNode(); + + // Let's add same bookmarks (without favicon) to both clients. + for (int index = 0; index < 3 ; index++) { + string16 title(L"TestBookmark"); + string16 url(L"http://www.nofaviconurl"); + string16 index_str = IntToString16(index); + title.append(index_str); + url.append(index_str); + url.append(L".com"); + const BookmarkNode* nofavicon_bm_client1 = + model_one->AddURL(bbn_one, index, title, GURL(url)); + const BookmarkNode* nofavicon_bm_client2 = + model_two->AddURL(bbn_two, index, title, GURL(url)); + } + + // Let's add some different bookmarks (without favicon) to client2. + for (int index = 3; index < 5 ; index++) { + string16 title(L"Client2-TestBookmark"); + string16 url(L"http://www.client2-nofaviconurl"); + string16 index_str = IntToString16(index); + title.append(index_str); + url.append(index_str); + url.append(L".com"); + const BookmarkNode* nofavicon_bm_client2 = + model_two->AddURL(bbn_two, index, title, GURL(url)); + } + + // Set up sync on both clients. + set_client1(new ProfileSyncServiceTestHarness( + browser()->profile(), username_, password_)); + set_client2(new ProfileSyncServiceTestHarness( + profile2(), username_, password_)); + ASSERT_TRUE(client1()->SetupSync()) << "Failed to SetupSync on Client1"; + ASSERT_TRUE(client2()->SetupSync()) << "Failed to SetupSync on Client2"; + + // Wait for changes to propagate. + ASSERT_TRUE(client2()->AwaitMutualSyncCycleCompletion(client1())); + // Let's make sure there aren't any duplicates after sync. + BookmarkModelVerifier::VerifyNoDuplicates(model_one); + // Let's compare and make sure both bookmark models are same after sync. + BookmarkModelVerifier::ExpectModelsMatchIncludingFavicon( + model_one, model_two, false); + + Cleanup(); +} + +// Test Scribe ID - 386589. +IN_PROC_BROWSER_TEST_F(TwoClientLiveBookmarksSyncTest, + MC_MergeSimpleBMHierarchyEqualSetsUnderBMBar) { + set_profile2(MakeProfile(L"client2")); + BookmarkModel* model_one = browser()->profile()->GetBookmarkModel(); + BookmarkModel* model_two = profile2()->GetBookmarkModel(); + LiveBookmarksSyncTest::BlockUntilLoaded(model_two); + + const BookmarkNode* bbn_one = model_one->GetBookmarkBarNode(); + const BookmarkNode* bbn_two = model_two->GetBookmarkBarNode(); + + // Let's add same bookmarks (without favicon) to both clients. + for (int index = 0; index < 3 ; index++) { + string16 title(L"TestBookmark"); + string16 url(L"http://www.nofaviconurl"); + string16 index_str = IntToString16(index); + title.append(index_str); + url.append(index_str); + url.append(L".com"); + const BookmarkNode* nofavicon_bm_client1 = + model_one->AddURL(bbn_one, index, title, GURL(url)); + const BookmarkNode* nofavicon_bm_client2 = + model_two->AddURL(bbn_two, index, title, GURL(url)); + } + + // Set up sync on both clients. + set_client1(new ProfileSyncServiceTestHarness( + browser()->profile(), username_, password_)); + set_client2(new ProfileSyncServiceTestHarness( + profile2(), username_, password_)); + ASSERT_TRUE(client1()->SetupSync()) << "Failed to SetupSync on Client1"; + ASSERT_TRUE(client2()->SetupSync()) << "Failed to SetupSync on Client2"; + + // Wait for changes to propagate. + ASSERT_TRUE(client2()->AwaitMutualSyncCycleCompletion(client1())); + // Let's make sure there aren't any duplicates after sync. + BookmarkModelVerifier::VerifyNoDuplicates(model_one); + // Let's compare and make sure both bookmark models are same after sync. + BookmarkModelVerifier::ExpectModelsMatchIncludingFavicon( + model_one, model_two, false); + + Cleanup(); +} + + #endif // CHROME_PERSONALIZATION |