Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(137)

Side by Side Diff: chrome/browser/sync/profile_sync_service_bookmark_unittest.cc

Issue 11090083: Makes sync code persist the date the node was added. I'm hoping this covers (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Fix test Created 8 years, 2 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
OLDNEW
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 <stack> 9 #include <stack>
10 #include <vector> 10 #include <vector>
11 11
12 #include "base/command_line.h" 12 #include "base/command_line.h"
13 #include "base/file_path.h" 13 #include "base/file_path.h"
14 #include "base/file_util.h" 14 #include "base/file_util.h"
15 #include "base/location.h" 15 #include "base/location.h"
16 #include "base/memory/scoped_ptr.h" 16 #include "base/memory/scoped_ptr.h"
17 #include "base/message_loop.h" 17 #include "base/message_loop.h"
18 #include "base/string16.h" 18 #include "base/string16.h"
19 #include "base/string_number_conversions.h" 19 #include "base/string_number_conversions.h"
20 #include "base/string_util.h" 20 #include "base/string_util.h"
21 #include "base/time.h"
21 #include "base/utf_string_conversions.h" 22 #include "base/utf_string_conversions.h"
22 #include "chrome/browser/bookmarks/base_bookmark_model_observer.h" 23 #include "chrome/browser/bookmarks/base_bookmark_model_observer.h"
23 #include "chrome/browser/bookmarks/bookmark_model.h" 24 #include "chrome/browser/bookmarks/bookmark_model.h"
24 #include "chrome/browser/bookmarks/bookmark_model_factory.h" 25 #include "chrome/browser/bookmarks/bookmark_model_factory.h"
25 #include "chrome/browser/sync/glue/bookmark_change_processor.h" 26 #include "chrome/browser/sync/glue/bookmark_change_processor.h"
26 #include "chrome/browser/sync/glue/bookmark_model_associator.h" 27 #include "chrome/browser/sync/glue/bookmark_model_associator.h"
27 #include "chrome/browser/sync/glue/data_type_error_handler.h" 28 #include "chrome/browser/sync/glue/data_type_error_handler.h"
28 #include "chrome/browser/sync/glue/data_type_error_handler_mock.h" 29 #include "chrome/browser/sync/glue/data_type_error_handler_mock.h"
29 #include "chrome/common/chrome_switches.h" 30 #include "chrome/common/chrome_switches.h"
30 #include "chrome/test/base/testing_profile.h" 31 #include "chrome/test/base/testing_profile.h"
(...skipping 934 matching lines...) Expand 10 before | Expand all | Expand 10 after
965 const wchar_t* title; 966 const wchar_t* title;
966 const char* url; 967 const char* url;
967 }; 968 };
968 969
969 // TODO(ncarter): Integrate the existing TestNode/PopulateNodeFromString code 970 // TODO(ncarter): Integrate the existing TestNode/PopulateNodeFromString code
970 // in the bookmark model unittest, to make it simpler to set up test data 971 // in the bookmark model unittest, to make it simpler to set up test data
971 // here (and reduce the amount of duplication among tests), and to reduce the 972 // here (and reduce the amount of duplication among tests), and to reduce the
972 // duplication. 973 // duplication.
973 class ProfileSyncServiceBookmarkTestWithData 974 class ProfileSyncServiceBookmarkTestWithData
974 : public ProfileSyncServiceBookmarkTest { 975 : public ProfileSyncServiceBookmarkTest {
976 public:
977 ProfileSyncServiceBookmarkTestWithData();
978
975 protected: 979 protected:
976 // Populates or compares children of the given bookmark node from/with the 980 // Populates or compares children of the given bookmark node from/with the
977 // given test data array with the given size. 981 // given test data array with the given size. |running_count| is updated as
982 // urls are added. It is used to set the creation date (or test the creation
983 // date for CompareWithTestData()).
978 void PopulateFromTestData(const BookmarkNode* node, 984 void PopulateFromTestData(const BookmarkNode* node,
979 const TestData* data, 985 const TestData* data,
980 int size); 986 int size,
987 int* running_count);
981 void CompareWithTestData(const BookmarkNode* node, 988 void CompareWithTestData(const BookmarkNode* node,
982 const TestData* data, 989 const TestData* data,
983 int size); 990 int size,
991 int* running_count);
984 992
985 void ExpectBookmarkModelMatchesTestData(); 993 void ExpectBookmarkModelMatchesTestData();
986 void WriteTestDataToBookmarkModel(); 994 void WriteTestDataToBookmarkModel();
995
996 private:
997 const base::Time start_time_;
998
999 DISALLOW_COPY_AND_ASSIGN(ProfileSyncServiceBookmarkTestWithData);
987 }; 1000 };
988 1001
989 namespace { 1002 namespace {
990 1003
991 // Constants for bookmark model that looks like: 1004 // Constants for bookmark model that looks like:
992 // |-- Bookmark bar 1005 // |-- Bookmark bar
993 // | |-- u2, http://www.u2.com/ 1006 // | |-- u2, http://www.u2.com/
994 // | |-- f1 1007 // | |-- f1
995 // | | |-- f1u4, http://www.f1u4.com/ 1008 // | | |-- f1u4, http://www.f1u4.com/
996 // | | |-- f1u2, http://www.f1u2.com/ 1009 // | | |-- f1u2, http://www.f1u2.com/
(...skipping 88 matching lines...) Expand 10 before | Expand all | Expand 10 after
1085 { L"f5u1", "http://www.f5u1.com/" }, 1098 { L"f5u1", "http://www.f5u1.com/" },
1086 { L"f5u2", "http://www.f5u2.com/" }, 1099 { L"f5u2", "http://www.f5u2.com/" },
1087 }; 1100 };
1088 static TestData kF6Children[] = { 1101 static TestData kF6Children[] = {
1089 { L"f6u1", "http://www.f6u1.com/" }, 1102 { L"f6u1", "http://www.f6u1.com/" },
1090 { L"f6u2", "http://www.f6u2.com/" }, 1103 { L"f6u2", "http://www.f6u2.com/" },
1091 }; 1104 };
1092 1105
1093 } // anonymous namespace. 1106 } // anonymous namespace.
1094 1107
1108 ProfileSyncServiceBookmarkTestWithData::
1109 ProfileSyncServiceBookmarkTestWithData()
1110 : start_time_(base::Time::Now()) {
1111 }
1112
1095 void ProfileSyncServiceBookmarkTestWithData::PopulateFromTestData( 1113 void ProfileSyncServiceBookmarkTestWithData::PopulateFromTestData(
1096 const BookmarkNode* node, const TestData* data, int size) { 1114 const BookmarkNode* node,
1115 const TestData* data,
1116 int size,
1117 int* running_count) {
1097 DCHECK(node); 1118 DCHECK(node);
1098 DCHECK(data); 1119 DCHECK(data);
1099 DCHECK(node->is_folder()); 1120 DCHECK(node->is_folder());
1100 for (int i = 0; i < size; ++i) { 1121 for (int i = 0; i < size; ++i) {
1101 const TestData& item = data[i]; 1122 const TestData& item = data[i];
1102 if (item.url) { 1123 if (item.url) {
1103 model_->AddURL(node, i, WideToUTF16Hack(item.title), GURL(item.url)); 1124 const base::Time add_time =
1125 start_time_ + base::TimeDelta::FromMinutes(*running_count);
1126 model_->AddURLWithCreationTime(node, i, WideToUTF16Hack(item.title),
1127 GURL(item.url), add_time);
1128 (*running_count)++;
1104 } else { 1129 } else {
1105 model_->AddFolder(node, i, WideToUTF16Hack(item.title)); 1130 model_->AddFolder(node, i, WideToUTF16Hack(item.title));
1106 } 1131 }
1107 } 1132 }
1108 } 1133 }
1109 1134
1110 void ProfileSyncServiceBookmarkTestWithData::CompareWithTestData( 1135 void ProfileSyncServiceBookmarkTestWithData::CompareWithTestData(
1111 const BookmarkNode* node, const TestData* data, int size) { 1136 const BookmarkNode* node,
1137 const TestData* data,
1138 int size,
1139 int* running_count) {
1112 DCHECK(node); 1140 DCHECK(node);
1113 DCHECK(data); 1141 DCHECK(data);
1114 DCHECK(node->is_folder()); 1142 DCHECK(node->is_folder());
1115 ASSERT_EQ(size, node->child_count()); 1143 ASSERT_EQ(size, node->child_count());
1116 for (int i = 0; i < size; ++i) { 1144 for (int i = 0; i < size; ++i) {
1117 const BookmarkNode* child_node = node->GetChild(i); 1145 const BookmarkNode* child_node = node->GetChild(i);
1118 const TestData& item = data[i]; 1146 const TestData& item = data[i];
1119 GURL url = GURL(item.url == NULL ? "" : item.url); 1147 GURL url = GURL(item.url == NULL ? "" : item.url);
1120 BookmarkNode test_node(url); 1148 BookmarkNode test_node(url);
1121 test_node.SetTitle(WideToUTF16Hack(item.title)); 1149 test_node.SetTitle(WideToUTF16Hack(item.title));
1122 EXPECT_EQ(child_node->GetTitle(), test_node.GetTitle()); 1150 EXPECT_EQ(child_node->GetTitle(), test_node.GetTitle());
1123 if (item.url) { 1151 if (item.url) {
1124 EXPECT_FALSE(child_node->is_folder()); 1152 EXPECT_FALSE(child_node->is_folder());
1125 EXPECT_TRUE(child_node->is_url()); 1153 EXPECT_TRUE(child_node->is_url());
1126 EXPECT_EQ(child_node->url(), test_node.url()); 1154 EXPECT_EQ(child_node->url(), test_node.url());
1155 const base::Time expected_time =
1156 start_time_ + base::TimeDelta::FromMinutes(*running_count);
1157 EXPECT_EQ(expected_time.ToInternalValue(),
1158 child_node->date_added().ToInternalValue());
1159 (*running_count)++;
1127 } else { 1160 } else {
1128 EXPECT_TRUE(child_node->is_folder()); 1161 EXPECT_TRUE(child_node->is_folder());
1129 EXPECT_FALSE(child_node->is_url()); 1162 EXPECT_FALSE(child_node->is_url());
1130 } 1163 }
1131 } 1164 }
1132 } 1165 }
1133 1166
1134 // TODO(munjal): We should implement some way of generating random data and can 1167 // TODO(munjal): We should implement some way of generating random data and can
1135 // use the same seed to generate the same sequence. 1168 // use the same seed to generate the same sequence.
1136 void ProfileSyncServiceBookmarkTestWithData::WriteTestDataToBookmarkModel() { 1169 void ProfileSyncServiceBookmarkTestWithData::WriteTestDataToBookmarkModel() {
1137 const BookmarkNode* bookmarks_bar_node = model_->bookmark_bar_node(); 1170 const BookmarkNode* bookmarks_bar_node = model_->bookmark_bar_node();
1171 int count = 0;
1138 PopulateFromTestData(bookmarks_bar_node, 1172 PopulateFromTestData(bookmarks_bar_node,
1139 kBookmarkBarChildren, 1173 kBookmarkBarChildren,
1140 arraysize(kBookmarkBarChildren)); 1174 arraysize(kBookmarkBarChildren),
1175 &count);
1141 1176
1142 ASSERT_GE(bookmarks_bar_node->child_count(), 4); 1177 ASSERT_GE(bookmarks_bar_node->child_count(), 4);
1143 const BookmarkNode* f1_node = bookmarks_bar_node->GetChild(1); 1178 const BookmarkNode* f1_node = bookmarks_bar_node->GetChild(1);
1144 PopulateFromTestData(f1_node, kF1Children, arraysize(kF1Children)); 1179 PopulateFromTestData(f1_node, kF1Children, arraysize(kF1Children), &count);
1145 const BookmarkNode* f2_node = bookmarks_bar_node->GetChild(3); 1180 const BookmarkNode* f2_node = bookmarks_bar_node->GetChild(3);
1146 PopulateFromTestData(f2_node, kF2Children, arraysize(kF2Children)); 1181 PopulateFromTestData(f2_node, kF2Children, arraysize(kF2Children), &count);
1147 1182
1148 const BookmarkNode* other_bookmarks_node = model_->other_node(); 1183 const BookmarkNode* other_bookmarks_node = model_->other_node();
1149 PopulateFromTestData(other_bookmarks_node, 1184 PopulateFromTestData(other_bookmarks_node,
1150 kOtherBookmarkChildren, 1185 kOtherBookmarkChildren,
1151 arraysize(kOtherBookmarkChildren)); 1186 arraysize(kOtherBookmarkChildren),
1187 &count);
1152 1188
1153 ASSERT_GE(other_bookmarks_node->child_count(), 6); 1189 ASSERT_GE(other_bookmarks_node->child_count(), 6);
1154 const BookmarkNode* f3_node = other_bookmarks_node->GetChild(0); 1190 const BookmarkNode* f3_node = other_bookmarks_node->GetChild(0);
1155 PopulateFromTestData(f3_node, kF3Children, arraysize(kF3Children)); 1191 PopulateFromTestData(f3_node, kF3Children, arraysize(kF3Children), &count);
1156 const BookmarkNode* f4_node = other_bookmarks_node->GetChild(3); 1192 const BookmarkNode* f4_node = other_bookmarks_node->GetChild(3);
1157 PopulateFromTestData(f4_node, kF4Children, arraysize(kF4Children)); 1193 PopulateFromTestData(f4_node, kF4Children, arraysize(kF4Children), &count);
1158 const BookmarkNode* dup_node = other_bookmarks_node->GetChild(4); 1194 const BookmarkNode* dup_node = other_bookmarks_node->GetChild(4);
1159 PopulateFromTestData(dup_node, kDup1Children, arraysize(kDup1Children)); 1195 PopulateFromTestData(dup_node, kDup1Children, arraysize(kDup1Children),
1196 &count);
1160 dup_node = other_bookmarks_node->GetChild(5); 1197 dup_node = other_bookmarks_node->GetChild(5);
1161 PopulateFromTestData(dup_node, kDup2Children, arraysize(kDup2Children)); 1198 PopulateFromTestData(dup_node, kDup2Children, arraysize(kDup2Children),
1199 &count);
1162 1200
1163 const BookmarkNode* mobile_bookmarks_node = model_->mobile_node(); 1201 const BookmarkNode* mobile_bookmarks_node = model_->mobile_node();
1164 PopulateFromTestData(mobile_bookmarks_node, 1202 PopulateFromTestData(mobile_bookmarks_node,
1165 kMobileBookmarkChildren, 1203 kMobileBookmarkChildren,
1166 arraysize(kMobileBookmarkChildren)); 1204 arraysize(kMobileBookmarkChildren),
1205 &count);
1167 1206
1168 ASSERT_GE(mobile_bookmarks_node->child_count(), 3); 1207 ASSERT_GE(mobile_bookmarks_node->child_count(), 3);
1169 const BookmarkNode* f5_node = mobile_bookmarks_node->GetChild(0); 1208 const BookmarkNode* f5_node = mobile_bookmarks_node->GetChild(0);
1170 PopulateFromTestData(f5_node, kF5Children, arraysize(kF5Children)); 1209 PopulateFromTestData(f5_node, kF5Children, arraysize(kF5Children), &count);
1171 const BookmarkNode* f6_node = mobile_bookmarks_node->GetChild(1); 1210 const BookmarkNode* f6_node = mobile_bookmarks_node->GetChild(1);
1172 PopulateFromTestData(f6_node, kF6Children, arraysize(kF6Children)); 1211 PopulateFromTestData(f6_node, kF6Children, arraysize(kF6Children), &count);
1173 1212
1174 ExpectBookmarkModelMatchesTestData(); 1213 ExpectBookmarkModelMatchesTestData();
1175 } 1214 }
1176 1215
1177 void ProfileSyncServiceBookmarkTestWithData:: 1216 void ProfileSyncServiceBookmarkTestWithData::
1178 ExpectBookmarkModelMatchesTestData() { 1217 ExpectBookmarkModelMatchesTestData() {
1179 const BookmarkNode* bookmark_bar_node = model_->bookmark_bar_node(); 1218 const BookmarkNode* bookmark_bar_node = model_->bookmark_bar_node();
1219 int count = 0;
1180 CompareWithTestData(bookmark_bar_node, 1220 CompareWithTestData(bookmark_bar_node,
1181 kBookmarkBarChildren, 1221 kBookmarkBarChildren,
1182 arraysize(kBookmarkBarChildren)); 1222 arraysize(kBookmarkBarChildren),
1223 &count);
1183 1224
1184 ASSERT_GE(bookmark_bar_node->child_count(), 4); 1225 ASSERT_GE(bookmark_bar_node->child_count(), 4);
1185 const BookmarkNode* f1_node = bookmark_bar_node->GetChild(1); 1226 const BookmarkNode* f1_node = bookmark_bar_node->GetChild(1);
1186 CompareWithTestData(f1_node, kF1Children, arraysize(kF1Children)); 1227 CompareWithTestData(f1_node, kF1Children, arraysize(kF1Children), &count);
1187 const BookmarkNode* f2_node = bookmark_bar_node->GetChild(3); 1228 const BookmarkNode* f2_node = bookmark_bar_node->GetChild(3);
1188 CompareWithTestData(f2_node, kF2Children, arraysize(kF2Children)); 1229 CompareWithTestData(f2_node, kF2Children, arraysize(kF2Children), &count);
1189 1230
1190 const BookmarkNode* other_bookmarks_node = model_->other_node(); 1231 const BookmarkNode* other_bookmarks_node = model_->other_node();
1191 CompareWithTestData(other_bookmarks_node, 1232 CompareWithTestData(other_bookmarks_node,
1192 kOtherBookmarkChildren, 1233 kOtherBookmarkChildren,
1193 arraysize(kOtherBookmarkChildren)); 1234 arraysize(kOtherBookmarkChildren),
1235 &count);
1194 1236
1195 ASSERT_GE(other_bookmarks_node->child_count(), 6); 1237 ASSERT_GE(other_bookmarks_node->child_count(), 6);
1196 const BookmarkNode* f3_node = other_bookmarks_node->GetChild(0); 1238 const BookmarkNode* f3_node = other_bookmarks_node->GetChild(0);
1197 CompareWithTestData(f3_node, kF3Children, arraysize(kF3Children)); 1239 CompareWithTestData(f3_node, kF3Children, arraysize(kF3Children), &count);
1198 const BookmarkNode* f4_node = other_bookmarks_node->GetChild(3); 1240 const BookmarkNode* f4_node = other_bookmarks_node->GetChild(3);
1199 CompareWithTestData(f4_node, kF4Children, arraysize(kF4Children)); 1241 CompareWithTestData(f4_node, kF4Children, arraysize(kF4Children), &count);
1200 const BookmarkNode* dup_node = other_bookmarks_node->GetChild(4); 1242 const BookmarkNode* dup_node = other_bookmarks_node->GetChild(4);
1201 CompareWithTestData(dup_node, kDup1Children, arraysize(kDup1Children)); 1243 CompareWithTestData(dup_node, kDup1Children, arraysize(kDup1Children),
1244 &count);
1202 dup_node = other_bookmarks_node->GetChild(5); 1245 dup_node = other_bookmarks_node->GetChild(5);
1203 CompareWithTestData(dup_node, kDup2Children, arraysize(kDup2Children)); 1246 CompareWithTestData(dup_node, kDup2Children, arraysize(kDup2Children),
1247 &count);
1204 1248
1205 const BookmarkNode* mobile_bookmarks_node = model_->mobile_node(); 1249 const BookmarkNode* mobile_bookmarks_node = model_->mobile_node();
1206 CompareWithTestData(mobile_bookmarks_node, 1250 CompareWithTestData(mobile_bookmarks_node,
1207 kMobileBookmarkChildren, 1251 kMobileBookmarkChildren,
1208 arraysize(kMobileBookmarkChildren)); 1252 arraysize(kMobileBookmarkChildren),
1253 &count);
1209 1254
1210 ASSERT_GE(mobile_bookmarks_node->child_count(), 3); 1255 ASSERT_GE(mobile_bookmarks_node->child_count(), 3);
1211 const BookmarkNode* f5_node = mobile_bookmarks_node->GetChild(0); 1256 const BookmarkNode* f5_node = mobile_bookmarks_node->GetChild(0);
1212 CompareWithTestData(f5_node, kF5Children, arraysize(kF5Children)); 1257 CompareWithTestData(f5_node, kF5Children, arraysize(kF5Children), &count);
1213 const BookmarkNode* f6_node = mobile_bookmarks_node->GetChild(1); 1258 const BookmarkNode* f6_node = mobile_bookmarks_node->GetChild(1);
1214 CompareWithTestData(f6_node, kF6Children, arraysize(kF6Children)); 1259 CompareWithTestData(f6_node, kF6Children, arraysize(kF6Children), &count);
1215 1260
1216 } 1261 }
1217 1262
1218 // Tests persistence of the profile sync service by unloading the 1263 // Tests persistence of the profile sync service by unloading the
1219 // database and then reloading it from disk. 1264 // database and then reloading it from disk.
1220 TEST_F(ProfileSyncServiceBookmarkTestWithData, Persistence) { 1265 TEST_F(ProfileSyncServiceBookmarkTestWithData, Persistence) {
1221 LoadBookmarkModel(DELETE_EXISTING_STORAGE, SAVE_TO_STORAGE); 1266 LoadBookmarkModel(DELETE_EXISTING_STORAGE, SAVE_TO_STORAGE);
1222 StartSync(); 1267 StartSync();
1223 1268
1224 WriteTestDataToBookmarkModel(); 1269 WriteTestDataToBookmarkModel();
(...skipping 264 matching lines...) Expand 10 before | Expand all | Expand 10 after
1489 EXPECT_EQ(1, observer.get_started()); 1534 EXPECT_EQ(1, observer.get_started());
1490 EXPECT_EQ(0, observer.get_completed_count_at_started()); 1535 EXPECT_EQ(0, observer.get_completed_count_at_started());
1491 EXPECT_EQ(1, observer.get_completed()); 1536 EXPECT_EQ(1, observer.get_completed());
1492 1537
1493 model_->RemoveObserver(&observer); 1538 model_->RemoveObserver(&observer);
1494 } 1539 }
1495 1540
1496 } // namespace 1541 } // namespace
1497 1542
1498 } // namespace browser_sync 1543 } // namespace browser_sync
OLDNEW
« no previous file with comments | « chrome/browser/sync/glue/bookmark_change_processor.cc ('k') | sync/protocol/bookmark_specifics.proto » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698