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> |
11 #include <stack> | 11 #include <stack> |
12 #include <vector> | 12 #include <vector> |
13 | 13 |
14 #include "base/command_line.h" | 14 #include "base/command_line.h" |
15 #include "base/files/file_path.h" | 15 #include "base/files/file_path.h" |
16 #include "base/location.h" | 16 #include "base/location.h" |
17 #include "base/memory/scoped_ptr.h" | 17 #include "base/memory/scoped_ptr.h" |
18 #include "base/message_loop/message_loop.h" | 18 #include "base/message_loop/message_loop.h" |
19 #include "base/strings/string16.h" | 19 #include "base/strings/string16.h" |
20 #include "base/strings/string_number_conversions.h" | 20 #include "base/strings/string_number_conversions.h" |
21 #include "base/strings/string_util.h" | 21 #include "base/strings/string_util.h" |
22 #include "base/strings/stringprintf.h" | 22 #include "base/strings/stringprintf.h" |
23 #include "base/strings/utf_string_conversions.h" | 23 #include "base/strings/utf_string_conversions.h" |
24 #include "base/time/time.h" | 24 #include "base/time/time.h" |
25 #include "chrome/browser/bookmarks/bookmark_model_factory.h" | 25 #include "chrome/browser/bookmarks/bookmark_model_factory.h" |
| 26 #include "chrome/browser/bookmarks/chrome_bookmark_client.h" |
26 #include "chrome/browser/sync/glue/bookmark_change_processor.h" | 27 #include "chrome/browser/sync/glue/bookmark_change_processor.h" |
27 #include "chrome/browser/sync/glue/bookmark_model_associator.h" | 28 #include "chrome/browser/sync/glue/bookmark_model_associator.h" |
28 #include "chrome/common/chrome_switches.h" | 29 #include "chrome/common/chrome_switches.h" |
29 #include "chrome/test/base/testing_profile.h" | 30 #include "chrome/test/base/testing_profile.h" |
30 #include "components/bookmarks/browser/base_bookmark_model_observer.h" | 31 #include "components/bookmarks/browser/base_bookmark_model_observer.h" |
31 #include "components/bookmarks/browser/bookmark_model.h" | 32 #include "components/bookmarks/browser/bookmark_model.h" |
32 #include "components/bookmarks/test/bookmark_test_helpers.h" | 33 #include "components/bookmarks/test/bookmark_test_helpers.h" |
33 #include "components/sync_driver/data_type_error_handler.h" | 34 #include "components/sync_driver/data_type_error_handler.h" |
34 #include "components/sync_driver/data_type_error_handler_mock.h" | 35 #include "components/sync_driver/data_type_error_handler_mock.h" |
35 #include "content/public/test/test_browser_thread.h" | 36 #include "content/public/test/test_browser_thread.h" |
(...skipping 564 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
600 if (browser_index == 0) { | 601 if (browser_index == 0) { |
601 EXPECT_EQ(gnode.GetPredecessorId(), 0); | 602 EXPECT_EQ(gnode.GetPredecessorId(), 0); |
602 } else { | 603 } else { |
603 const BookmarkNode* bprev = | 604 const BookmarkNode* bprev = |
604 bnode->parent()->GetChild(browser_index - 1); | 605 bnode->parent()->GetChild(browser_index - 1); |
605 syncer::ReadNode gprev(trans); | 606 syncer::ReadNode gprev(trans); |
606 ASSERT_TRUE(InitSyncNodeFromChromeNode(bprev, &gprev)); | 607 ASSERT_TRUE(InitSyncNodeFromChromeNode(bprev, &gprev)); |
607 EXPECT_EQ(gnode.GetPredecessorId(), gprev.GetId()); | 608 EXPECT_EQ(gnode.GetPredecessorId(), gprev.GetId()); |
608 EXPECT_EQ(gnode.GetParentId(), gprev.GetParentId()); | 609 EXPECT_EQ(gnode.GetParentId(), gprev.GetParentId()); |
609 } | 610 } |
610 if (browser_index == bnode->parent()->child_count() - 1) { | 611 // Note: the managed node comes next to the mobile node but isn't synced. |
| 612 if (browser_index == bnode->parent()->child_count() - 1 || |
| 613 bnode == model_->mobile_node()) { |
611 EXPECT_EQ(gnode.GetSuccessorId(), 0); | 614 EXPECT_EQ(gnode.GetSuccessorId(), 0); |
612 } else { | 615 } else { |
613 const BookmarkNode* bnext = | 616 const BookmarkNode* bnext = |
614 bnode->parent()->GetChild(browser_index + 1); | 617 bnode->parent()->GetChild(browser_index + 1); |
615 syncer::ReadNode gnext(trans); | 618 syncer::ReadNode gnext(trans); |
616 ASSERT_TRUE(InitSyncNodeFromChromeNode(bnext, &gnext)); | 619 ASSERT_TRUE(InitSyncNodeFromChromeNode(bnext, &gnext)); |
617 EXPECT_EQ(gnode.GetSuccessorId(), gnext.GetId()); | 620 EXPECT_EQ(gnode.GetSuccessorId(), gnext.GetId()); |
618 EXPECT_EQ(gnode.GetParentId(), gnext.GetParentId()); | 621 EXPECT_EQ(gnode.GetParentId(), gnext.GetParentId()); |
619 } | 622 } |
620 if (!bnode->empty()) | 623 if (!bnode->empty()) |
621 EXPECT_TRUE(gnode.GetFirstChildId()); | 624 EXPECT_TRUE(gnode.GetFirstChildId()); |
622 } | 625 } |
623 | 626 |
624 void ExpectSyncerNodeMatching(const BookmarkNode* bnode) { | 627 void ExpectSyncerNodeMatching(const BookmarkNode* bnode) { |
625 syncer::ReadTransaction trans(FROM_HERE, test_user_share_.user_share()); | 628 syncer::ReadTransaction trans(FROM_HERE, test_user_share_.user_share()); |
626 ExpectSyncerNodeMatching(&trans, bnode); | 629 ExpectSyncerNodeMatching(&trans, bnode); |
627 } | 630 } |
628 | 631 |
629 void ExpectBrowserNodeMatching(syncer::BaseTransaction* trans, | 632 void ExpectBrowserNodeMatching(syncer::BaseTransaction* trans, |
630 int64 sync_id) { | 633 int64 sync_id) { |
631 EXPECT_TRUE(sync_id); | 634 EXPECT_TRUE(sync_id); |
632 const BookmarkNode* bnode = | 635 const BookmarkNode* bnode = |
633 model_associator_->GetChromeNodeFromSyncId(sync_id); | 636 model_associator_->GetChromeNodeFromSyncId(sync_id); |
634 ASSERT_TRUE(bnode); | 637 ASSERT_TRUE(bnode); |
| 638 |
| 639 ChromeBookmarkClient* client = |
| 640 BookmarkModelFactory::GetChromeBookmarkClientForProfile(&profile_); |
| 641 ASSERT_TRUE(client); |
| 642 ASSERT_FALSE(client->IsDescendantOfManagedNode(bnode)); |
| 643 |
635 int64 id = model_associator_->GetSyncIdFromChromeId(bnode->id()); | 644 int64 id = model_associator_->GetSyncIdFromChromeId(bnode->id()); |
636 EXPECT_EQ(id, sync_id); | 645 EXPECT_EQ(id, sync_id); |
637 ExpectSyncerNodeMatching(trans, bnode); | 646 ExpectSyncerNodeMatching(trans, bnode); |
638 } | 647 } |
639 | 648 |
640 void ExpectBrowserNodeUnknown(int64 sync_id) { | 649 void ExpectBrowserNodeUnknown(int64 sync_id) { |
641 EXPECT_FALSE(model_associator_->GetChromeNodeFromSyncId(sync_id)); | 650 EXPECT_FALSE(model_associator_->GetChromeNodeFromSyncId(sync_id)); |
642 } | 651 } |
643 | 652 |
644 void ExpectBrowserNodeKnown(int64 sync_id) { | 653 void ExpectBrowserNodeKnown(int64 sync_id) { |
(...skipping 660 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1305 int size, | 1314 int size, |
1306 int* running_count); | 1315 int* running_count); |
1307 void CompareWithTestData(const BookmarkNode* node, | 1316 void CompareWithTestData(const BookmarkNode* node, |
1308 const TestData* data, | 1317 const TestData* data, |
1309 int size, | 1318 int size, |
1310 int* running_count); | 1319 int* running_count); |
1311 | 1320 |
1312 void ExpectBookmarkModelMatchesTestData(); | 1321 void ExpectBookmarkModelMatchesTestData(); |
1313 void WriteTestDataToBookmarkModel(); | 1322 void WriteTestDataToBookmarkModel(); |
1314 | 1323 |
| 1324 // Output transaction versions of |node| and nodes under it to |
| 1325 // |node_versions|. |
| 1326 void GetTransactionVersions(const BookmarkNode* root, |
| 1327 BookmarkNodeVersionMap* node_versions); |
| 1328 |
1315 // Verify transaction versions of bookmark nodes and sync nodes are equal | 1329 // Verify transaction versions of bookmark nodes and sync nodes are equal |
1316 // recursively. If node is in |version_expected|, versions should match | 1330 // recursively. If node is in |version_expected|, versions should match |
1317 // there, too. | 1331 // there, too. |
1318 void ExpectTransactionVersionMatch( | 1332 void ExpectTransactionVersionMatch( |
1319 const BookmarkNode* node, | 1333 const BookmarkNode* node, |
1320 const BookmarkNodeVersionMap& version_expected); | 1334 const BookmarkNodeVersionMap& version_expected); |
1321 | 1335 |
1322 private: | 1336 private: |
1323 const base::Time start_time_; | 1337 const base::Time start_time_; |
1324 | 1338 |
(...skipping 668 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1993 ExpectModelMatch(); | 2007 ExpectModelMatch(); |
1994 | 2008 |
1995 // Change/delete existing meta info and verify. | 2009 // Change/delete existing meta info and verify. |
1996 model_->DeleteNodeMetaInfo(folder_node, "folder"); | 2010 model_->DeleteNodeMetaInfo(folder_node, "folder"); |
1997 model_->SetNodeMetaInfo(node, "node", "changednodevalue"); | 2011 model_->SetNodeMetaInfo(node, "node", "changednodevalue"); |
1998 model_->DeleteNodeMetaInfo(node, "other"); | 2012 model_->DeleteNodeMetaInfo(node, "other"); |
1999 model_->SetNodeMetaInfo(node, "newkey", "newkeyvalue"); | 2013 model_->SetNodeMetaInfo(node, "newkey", "newkeyvalue"); |
2000 ExpectModelMatch(); | 2014 ExpectModelMatch(); |
2001 } | 2015 } |
2002 | 2016 |
2003 // Output transaction versions of |node| and nodes under it to |node_versions|. | 2017 void ProfileSyncServiceBookmarkTestWithData::GetTransactionVersions( |
2004 void GetTransactionVersions( | |
2005 const BookmarkNode* root, | 2018 const BookmarkNode* root, |
2006 BookmarkNodeVersionMap* node_versions) { | 2019 BookmarkNodeVersionMap* node_versions) { |
| 2020 ChromeBookmarkClient* client = |
| 2021 BookmarkModelFactory::GetChromeBookmarkClientForProfile(&profile_); |
| 2022 ASSERT_TRUE(client); |
| 2023 |
2007 node_versions->clear(); | 2024 node_versions->clear(); |
2008 std::queue<const BookmarkNode*> nodes; | 2025 std::queue<const BookmarkNode*> nodes; |
2009 nodes.push(root); | 2026 nodes.push(root); |
2010 while (!nodes.empty()) { | 2027 while (!nodes.empty()) { |
2011 const BookmarkNode* n = nodes.front(); | 2028 const BookmarkNode* n = nodes.front(); |
2012 nodes.pop(); | 2029 nodes.pop(); |
2013 | 2030 |
2014 int64 version = n->sync_transaction_version(); | 2031 int64 version = n->sync_transaction_version(); |
2015 EXPECT_NE(BookmarkNode::kInvalidSyncTransactionVersion, version); | 2032 EXPECT_NE(BookmarkNode::kInvalidSyncTransactionVersion, version); |
2016 | 2033 |
2017 (*node_versions)[n->id()] = version; | 2034 (*node_versions)[n->id()] = version; |
2018 for (int i = 0; i < n->child_count(); ++i) | 2035 for (int i = 0; i < n->child_count(); ++i) { |
| 2036 if (client->IsDescendantOfManagedNode(n->GetChild(i))) |
| 2037 continue; |
2019 nodes.push(n->GetChild(i)); | 2038 nodes.push(n->GetChild(i)); |
| 2039 } |
2020 } | 2040 } |
2021 } | 2041 } |
2022 | 2042 |
2023 void ProfileSyncServiceBookmarkTestWithData::ExpectTransactionVersionMatch( | 2043 void ProfileSyncServiceBookmarkTestWithData::ExpectTransactionVersionMatch( |
2024 const BookmarkNode* node, | 2044 const BookmarkNode* node, |
2025 const BookmarkNodeVersionMap& version_expected) { | 2045 const BookmarkNodeVersionMap& version_expected) { |
2026 syncer::ReadTransaction trans(FROM_HERE, test_user_share_.user_share()); | 2046 syncer::ReadTransaction trans(FROM_HERE, test_user_share_.user_share()); |
2027 | 2047 |
2028 BookmarkNodeVersionMap bnodes_versions; | 2048 BookmarkNodeVersionMap bnodes_versions; |
2029 GetTransactionVersions(node, &bnodes_versions); | 2049 GetTransactionVersions(node, &bnodes_versions); |
(...skipping 132 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2162 ExpectModelMatch(); | 2182 ExpectModelMatch(); |
2163 | 2183 |
2164 // Then simulate the add call arriving late. | 2184 // Then simulate the add call arriving late. |
2165 change_processor_->BookmarkNodeAdded(model_, model_->bookmark_bar_node(), 0); | 2185 change_processor_->BookmarkNodeAdded(model_, model_->bookmark_bar_node(), 0); |
2166 ExpectModelMatch(); | 2186 ExpectModelMatch(); |
2167 } | 2187 } |
2168 | 2188 |
2169 } // namespace | 2189 } // namespace |
2170 | 2190 |
2171 } // namespace browser_sync | 2191 } // namespace browser_sync |
OLD | NEW |