OLD | NEW |
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. |
2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
4 | 4 |
5 // TODO(akalin): This file is basically just a unit test for | 5 // TODO(akalin): This file is basically just a unit test for |
6 // BookmarkChangeProcessor. Write unit tests for | 6 // BookmarkChangeProcessor. Write unit tests for |
7 // BookmarkModelAssociator separately. | 7 // BookmarkModelAssociator separately. |
8 | 8 |
9 #include <map> | 9 #include <map> |
10 #include <queue> | 10 #include <queue> |
(...skipping 707 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
718 return | 718 return |
719 model_associator_->GetSyncIdFromChromeId(model_->other_node()->id()); | 719 model_associator_->GetSyncIdFromChromeId(model_->other_node()->id()); |
720 } | 720 } |
721 | 721 |
722 int64 bookmark_bar_id() { | 722 int64 bookmark_bar_id() { |
723 return model_associator_->GetSyncIdFromChromeId( | 723 return model_associator_->GetSyncIdFromChromeId( |
724 model_->bookmark_bar_node()->id()); | 724 model_->bookmark_bar_node()->id()); |
725 } | 725 } |
726 | 726 |
727 protected: | 727 protected: |
| 728 TestingProfile profile_; |
728 BookmarkModel* model_; | 729 BookmarkModel* model_; |
729 syncer::TestUserShare test_user_share_; | 730 syncer::TestUserShare test_user_share_; |
730 scoped_ptr<BookmarkChangeProcessor> change_processor_; | 731 scoped_ptr<BookmarkChangeProcessor> change_processor_; |
731 StrictMock<DataTypeErrorHandlerMock> mock_error_handler_; | 732 StrictMock<DataTypeErrorHandlerMock> mock_error_handler_; |
732 scoped_ptr<BookmarkModelAssociator> model_associator_; | 733 scoped_ptr<BookmarkModelAssociator> model_associator_; |
733 | 734 |
734 private: | 735 private: |
735 // Used by both |ui_thread_| and |file_thread_|. | 736 // Used by both |ui_thread_| and |file_thread_|. |
736 base::MessageLoop message_loop_; | 737 base::MessageLoop message_loop_; |
737 content::TestBrowserThread ui_thread_; | 738 content::TestBrowserThread ui_thread_; |
738 // Needed by |model_|. | 739 // Needed by |model_|. |
739 content::TestBrowserThread file_thread_; | 740 content::TestBrowserThread file_thread_; |
740 | 741 |
741 syncer::SyncMergeResult local_merge_result_; | 742 syncer::SyncMergeResult local_merge_result_; |
742 syncer::SyncMergeResult syncer_merge_result_; | 743 syncer::SyncMergeResult syncer_merge_result_; |
743 | |
744 TestingProfile profile_; | |
745 }; | 744 }; |
746 | 745 |
747 TEST_F(ProfileSyncServiceBookmarkTest, InitialState) { | 746 TEST_F(ProfileSyncServiceBookmarkTest, InitialState) { |
748 LoadBookmarkModel(DELETE_EXISTING_STORAGE, DONT_SAVE_TO_STORAGE); | 747 LoadBookmarkModel(DELETE_EXISTING_STORAGE, DONT_SAVE_TO_STORAGE); |
749 StartSync(); | 748 StartSync(); |
750 | 749 |
751 EXPECT_TRUE(other_bookmarks_id()); | 750 EXPECT_TRUE(other_bookmarks_id()); |
752 EXPECT_TRUE(bookmark_bar_id()); | 751 EXPECT_TRUE(bookmark_bar_id()); |
753 EXPECT_TRUE(mobile_bookmarks_id()); | 752 EXPECT_TRUE(mobile_bookmarks_id()); |
754 | 753 |
(...skipping 1374 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2129 | 2128 |
2130 // Now shut down sync and artificially increment the native model's version. | 2129 // Now shut down sync and artificially increment the native model's version. |
2131 StopSync(); | 2130 StopSync(); |
2132 int64 root_version = initial_versions[model_->root_node()->id()]; | 2131 int64 root_version = initial_versions[model_->root_node()->id()]; |
2133 model_->SetNodeSyncTransactionVersion(model_->root_node(), root_version + 1); | 2132 model_->SetNodeSyncTransactionVersion(model_->root_node(), root_version + 1); |
2134 | 2133 |
2135 // Upon association, bookmarks should fail to associate. | 2134 // Upon association, bookmarks should fail to associate. |
2136 EXPECT_FALSE(AssociateModels()); | 2135 EXPECT_FALSE(AssociateModels()); |
2137 } | 2136 } |
2138 | 2137 |
| 2138 // It's possible for update/add calls from the bookmark model to be out of |
| 2139 // order, or asynchronous. Handle that without triggering an error. |
| 2140 TEST_F(ProfileSyncServiceBookmarkTest, UpdateThenAdd) { |
| 2141 LoadBookmarkModel(DELETE_EXISTING_STORAGE, DONT_SAVE_TO_STORAGE); |
| 2142 StartSync(); |
| 2143 |
| 2144 EXPECT_TRUE(other_bookmarks_id()); |
| 2145 EXPECT_TRUE(bookmark_bar_id()); |
| 2146 EXPECT_TRUE(mobile_bookmarks_id()); |
| 2147 |
| 2148 ExpectModelMatch(); |
| 2149 |
| 2150 // Now destroy the change processor then add a bookmark, to simulate |
| 2151 // missing the Update call. |
| 2152 change_processor_.reset(); |
| 2153 const BookmarkNode* node = model_->AddURL(model_->bookmark_bar_node(), |
| 2154 0, |
| 2155 base::ASCIIToUTF16("title"), |
| 2156 GURL("http://www.url.com")); |
| 2157 |
| 2158 // Recreate the change processor then update that bookmark. Sync should |
| 2159 // receive the update call and gracefully treat that as if it were an add. |
| 2160 change_processor_.reset(new BookmarkChangeProcessor( |
| 2161 &profile_, model_associator_.get(), &mock_error_handler_)); |
| 2162 change_processor_->Start(test_user_share_.user_share()); |
| 2163 model_->SetTitle(node, base::ASCIIToUTF16("title2")); |
| 2164 ExpectModelMatch(); |
| 2165 |
| 2166 // Then simulate the add call arriving late. |
| 2167 change_processor_->BookmarkNodeAdded(model_, model_->bookmark_bar_node(), 0); |
| 2168 ExpectModelMatch(); |
| 2169 } |
| 2170 |
2139 } // namespace | 2171 } // namespace |
2140 | 2172 |
2141 } // namespace browser_sync | 2173 } // namespace browser_sync |
OLD | NEW |