Chromium Code Reviews| Index: chrome/browser/sync/profile_sync_service_bookmark_unittest.cc |
| diff --git a/chrome/browser/sync/profile_sync_service_bookmark_unittest.cc b/chrome/browser/sync/profile_sync_service_bookmark_unittest.cc |
| index cf7e3813c50e30d008033ec4ffd3c9c41cc6328d..ead5032a852cb6f2c8f5bb252d8adda91ec03b38 100644 |
| --- a/chrome/browser/sync/profile_sync_service_bookmark_unittest.cc |
| +++ b/chrome/browser/sync/profile_sync_service_bookmark_unittest.cc |
| @@ -6,6 +6,7 @@ |
| // BookmarkChangeProcessor. Write unit tests for |
| // BookmarkModelAssociator separately. |
| +#include <queue> |
| #include <stack> |
| #include <vector> |
| @@ -559,12 +560,12 @@ class ProfileSyncServiceBookmarkTest : public testing::Test { |
| content::TestBrowserThread file_thread_; |
| TestingProfile profile_; |
| - scoped_ptr<TestBookmarkModelAssociator> model_associator_; |
| protected: |
| BookmarkModel* model_; |
| syncer::TestUserShare test_user_share_; |
| scoped_ptr<BookmarkChangeProcessor> change_processor_; |
| + scoped_ptr<TestBookmarkModelAssociator> model_associator_; |
| StrictMock<DataTypeErrorHandlerMock> mock_error_handler_; |
| }; |
| @@ -1002,6 +1003,10 @@ class ProfileSyncServiceBookmarkTestWithData |
| void ExpectBookmarkModelMatchesTestData(); |
| void WriteTestDataToBookmarkModel(); |
| + // Verify transaction versions of bookmark nodes and sync nodes are equal |
| + // recursively. |
| + void ExpectTransactionVersionMatch(const BookmarkNode* node); |
| + |
| private: |
| const base::Time start_time_; |
| @@ -1134,10 +1139,10 @@ void ProfileSyncServiceBookmarkTestWithData::PopulateFromTestData( |
| start_time_ + base::TimeDelta::FromMinutes(*running_count); |
| model_->AddURLWithCreationTime(node, i, WideToUTF16Hack(item.title), |
| GURL(item.url), add_time); |
| - (*running_count)++; |
| } else { |
| model_->AddFolder(node, i, WideToUTF16Hack(item.title)); |
| } |
| + (*running_count)++; |
| } |
| } |
| @@ -1165,11 +1170,11 @@ void ProfileSyncServiceBookmarkTestWithData::CompareWithTestData( |
| start_time_ + base::TimeDelta::FromMinutes(*running_count); |
| EXPECT_EQ(expected_time.ToInternalValue(), |
| child_node->date_added().ToInternalValue()); |
| - (*running_count)++; |
| } else { |
| EXPECT_TRUE(child_node->is_folder()); |
| EXPECT_FALSE(child_node->is_url()); |
| } |
| + (*running_count)++; |
| } |
| } |
| @@ -1595,6 +1600,70 @@ TEST_F(ProfileSyncServiceBookmarkTestWithData, UpdateDateAdded) { |
| EXPECT_EQ(node->date_added(), base::Time::FromInternalValue(30)); |
| } |
| +int64 GetTransactionVersion(const BookmarkNode* node) { |
| + std::string version_str; |
| + int64 version; |
| + EXPECT_TRUE(node->GetMetaInfo(kBookmarkTransactionVersionKey, &version_str)); |
| + EXPECT_TRUE(base::StringToInt64(version_str, &version)); |
| + return version; |
| +} |
| + |
| +void ProfileSyncServiceBookmarkTestWithData::ExpectTransactionVersionMatch( |
| + const BookmarkNode* node) { |
| + std::queue<const BookmarkNode*> nodes; |
| + nodes.push(node); |
| + while (!nodes.empty()) { |
| + const BookmarkNode* n = nodes.front(); |
| + nodes.pop(); |
| + |
| + syncer::ReadTransaction trans(FROM_HERE, test_user_share_.user_share()); |
| + syncer::ReadNode sync_node(&trans); |
| + ASSERT_TRUE(model_associator_->InitSyncNodeFromChromeId(n->id(), |
| + &sync_node)); |
| + EXPECT_EQ(sync_node.GetEntry()->Get(syncer::syncable::TRANSACTION_VERSION), |
| + GetTransactionVersion(n)); |
| + for (int i = 0; i < n->child_count(); ++i) |
| + nodes.push(n->GetChild(i)); |
| + } |
| +} |
| + |
| +// Test transaction versions of model and nodes are incremented after changes |
| +// are applied. |
| +TEST_F(ProfileSyncServiceBookmarkTestWithData, UpdateTransactionVersion) { |
| + LoadBookmarkModel(DELETE_EXISTING_STORAGE, DONT_SAVE_TO_STORAGE); |
| + StartSync(); |
| + WriteTestDataToBookmarkModel(); |
| + MessageLoop::current()->RunUntilIdle(); |
| + |
| + // Verify model versions are equal. |
| + { |
| + syncer::ReadTransaction trans(FROM_HERE, test_user_share_.user_share()); |
| + EXPECT_EQ(trans.GetModelVersion(syncer::BOOKMARKS), |
| + GetTransactionVersion(model_->root_node())); |
| + } |
| + |
| + // Verify node versions are equal. |
| + ExpectTransactionVersionMatch(model_->bookmark_bar_node()); |
| + ExpectTransactionVersionMatch(model_->other_node()); |
| + ExpectTransactionVersionMatch(model_->mobile_node()); |
| + |
| + // verify version is incremented when bookmark is removed. |
| + int64 old_model_version = GetTransactionVersion(model_->root_node()); |
| + model_->Remove(model_->bookmark_bar_node(), 0); |
| + MessageLoop::current()->RunUntilIdle(); |
| + EXPECT_EQ(old_model_version + 1, GetTransactionVersion(model_->root_node())); |
| + |
| + // Verify version is updated when bookmark is changed. |
| + old_model_version = GetTransactionVersion(model_->root_node()); |
| + model_->SetTitle(model_->bookmark_bar_node()->GetChild(0), |
| + WideToUTF16Hack(L"test")); |
| + MessageLoop::current()->RunUntilIdle(); |
| + EXPECT_EQ(old_model_version + 1, GetTransactionVersion(model_->root_node())); |
| + EXPECT_EQ(old_model_version + 1, |
| + GetTransactionVersion(model_->bookmark_bar_node()->GetChild(0))); |
| + ExpectTransactionVersionMatch(model_->bookmark_bar_node()->GetChild(0)); |
| +} |
| + |
|
Nicolas Zea
2012/11/07 00:20:31
do children get updated when a parent is modified?
haitaol1
2012/11/07 22:20:25
Parent is not updated but siblings do because of N
|
| } // namespace |
| } // namespace browser_sync |