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

Side by Side Diff: chrome/browser/bookmarks/bookmark_codec_unittest.cc

Issue 242693003: Introduce BookmarkClient interface to abstract embedder (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Work around STL android bug Created 6 years, 8 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
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 #include "chrome/browser/bookmarks/bookmark_codec.h" 5 #include "chrome/browser/bookmarks/bookmark_codec.h"
6 6
7 #include "base/file_util.h" 7 #include "base/file_util.h"
8 #include "base/files/file_path.h" 8 #include "base/files/file_path.h"
9 #include "base/json/json_file_value_serializer.h" 9 #include "base/json/json_file_value_serializer.h"
10 #include "base/json/json_string_value_serializer.h" 10 #include "base/json/json_string_value_serializer.h"
11 #include "base/memory/scoped_ptr.h" 11 #include "base/memory/scoped_ptr.h"
12 #include "base/path_service.h" 12 #include "base/path_service.h"
13 #include "base/strings/string_util.h" 13 #include "base/strings/string_util.h"
14 #include "base/strings/utf_string_conversions.h" 14 #include "base/strings/utf_string_conversions.h"
15 #include "base/values.h" 15 #include "base/values.h"
16 #include "chrome/browser/bookmarks/bookmark_model.h" 16 #include "chrome/browser/bookmarks/bookmark_model.h"
17 #include "chrome/browser/bookmarks/test_bookmark_client.h"
17 #include "chrome/common/chrome_paths.h" 18 #include "chrome/common/chrome_paths.h"
18 #include "testing/gtest/include/gtest/gtest.h" 19 #include "testing/gtest/include/gtest/gtest.h"
19 20
20 using base::ASCIIToUTF16; 21 using base::ASCIIToUTF16;
21 22
22 namespace { 23 namespace {
23 24
24 const char kUrl1Title[] = "url1"; 25 const char kUrl1Title[] = "url1";
25 const char kUrl1Url[] = "http://www.url1.com"; 26 const char kUrl1Url[] = "http://www.url1.com";
26 const char kUrl2Title[] = "url2"; 27 const char kUrl2Title[] = "url2";
(...skipping 39 matching lines...) Expand 10 before | Expand all | Expand 10 after
66 ASSERT_NO_FATAL_FAILURE( 67 ASSERT_NO_FATAL_FAILURE(
67 AssertNodesEqual(expected->mobile_node(), actual->mobile_node())); 68 AssertNodesEqual(expected->mobile_node(), actual->mobile_node()));
68 } 69 }
69 70
70 } // namespace 71 } // namespace
71 72
72 class BookmarkCodecTest : public testing::Test { 73 class BookmarkCodecTest : public testing::Test {
73 protected: 74 protected:
74 // Helpers to create bookmark models with different data. 75 // Helpers to create bookmark models with different data.
75 BookmarkModel* CreateTestModel1() { 76 BookmarkModel* CreateTestModel1() {
76 scoped_ptr<BookmarkModel> model(new BookmarkModel(NULL, false)); 77 scoped_ptr<BookmarkModel> model(client_.CreateModel(false));
77 const BookmarkNode* bookmark_bar = model->bookmark_bar_node(); 78 const BookmarkNode* bookmark_bar = model->bookmark_bar_node();
78 model->AddURL(bookmark_bar, 0, ASCIIToUTF16(kUrl1Title), GURL(kUrl1Url)); 79 model->AddURL(bookmark_bar, 0, ASCIIToUTF16(kUrl1Title), GURL(kUrl1Url));
79 return model.release(); 80 return model.release();
80 } 81 }
81 BookmarkModel* CreateTestModel2() { 82 BookmarkModel* CreateTestModel2() {
82 scoped_ptr<BookmarkModel> model(new BookmarkModel(NULL, false)); 83 scoped_ptr<BookmarkModel> model(client_.CreateModel(false));
83 const BookmarkNode* bookmark_bar = model->bookmark_bar_node(); 84 const BookmarkNode* bookmark_bar = model->bookmark_bar_node();
84 model->AddURL(bookmark_bar, 0, ASCIIToUTF16(kUrl1Title), GURL(kUrl1Url)); 85 model->AddURL(bookmark_bar, 0, ASCIIToUTF16(kUrl1Title), GURL(kUrl1Url));
85 model->AddURL(bookmark_bar, 1, ASCIIToUTF16(kUrl2Title), GURL(kUrl2Url)); 86 model->AddURL(bookmark_bar, 1, ASCIIToUTF16(kUrl2Title), GURL(kUrl2Url));
86 return model.release(); 87 return model.release();
87 } 88 }
88 BookmarkModel* CreateTestModel3() { 89 BookmarkModel* CreateTestModel3() {
89 scoped_ptr<BookmarkModel> model(new BookmarkModel(NULL, false)); 90 scoped_ptr<BookmarkModel> model(client_.CreateModel(false));
90 const BookmarkNode* bookmark_bar = model->bookmark_bar_node(); 91 const BookmarkNode* bookmark_bar = model->bookmark_bar_node();
91 model->AddURL(bookmark_bar, 0, ASCIIToUTF16(kUrl1Title), GURL(kUrl1Url)); 92 model->AddURL(bookmark_bar, 0, ASCIIToUTF16(kUrl1Title), GURL(kUrl1Url));
92 const BookmarkNode* folder1 = model->AddFolder(bookmark_bar, 1, 93 const BookmarkNode* folder1 = model->AddFolder(bookmark_bar, 1,
93 ASCIIToUTF16(kFolder1Title)); 94 ASCIIToUTF16(kFolder1Title));
94 model->AddURL(folder1, 0, ASCIIToUTF16(kUrl2Title), GURL(kUrl2Url)); 95 model->AddURL(folder1, 0, ASCIIToUTF16(kUrl2Title), GURL(kUrl2Url));
95 return model.release(); 96 return model.release();
96 } 97 }
97 98
98 void GetBookmarksBarChildValue(base::Value* value, 99 void GetBookmarksBarChildValue(base::Value* value,
99 size_t index, 100 size_t index,
(...skipping 66 matching lines...) Expand 10 before | Expand all | Expand 10 after
166 167
167 BookmarkModel* DecodeHelper(const base::Value& value, 168 BookmarkModel* DecodeHelper(const base::Value& value,
168 const std::string& expected_stored_checksum, 169 const std::string& expected_stored_checksum,
169 std::string* computed_checksum, 170 std::string* computed_checksum,
170 bool expected_changes) { 171 bool expected_changes) {
171 BookmarkCodec decoder; 172 BookmarkCodec decoder;
172 // Computed and stored checksums should be empty. 173 // Computed and stored checksums should be empty.
173 EXPECT_EQ("", decoder.computed_checksum()); 174 EXPECT_EQ("", decoder.computed_checksum());
174 EXPECT_EQ("", decoder.stored_checksum()); 175 EXPECT_EQ("", decoder.stored_checksum());
175 176
176 scoped_ptr<BookmarkModel> model(new BookmarkModel(NULL, false)); 177 scoped_ptr<BookmarkModel> model(client_.CreateModel(false));
177 EXPECT_TRUE(Decode(&decoder, model.get(), value)); 178 EXPECT_TRUE(Decode(&decoder, model.get(), value));
178 179
179 *computed_checksum = decoder.computed_checksum(); 180 *computed_checksum = decoder.computed_checksum();
180 const std::string& stored_checksum = decoder.stored_checksum(); 181 const std::string& stored_checksum = decoder.stored_checksum();
181 182
182 // Computed and stored checksums should not be empty. 183 // Computed and stored checksums should not be empty.
183 EXPECT_FALSE(computed_checksum->empty()); 184 EXPECT_FALSE(computed_checksum->empty());
184 EXPECT_FALSE(stored_checksum.empty()); 185 EXPECT_FALSE(stored_checksum.empty());
185 186
186 // Stored checksum should be as expected. 187 // Stored checksum should be as expected.
(...skipping 17 matching lines...) Expand all
204 for (int i = 0; i < node->child_count(); ++i) 205 for (int i = 0; i < node->child_count(); ++i)
205 CheckIDs(node->GetChild(i), assigned_ids); 206 CheckIDs(node->GetChild(i), assigned_ids);
206 } 207 }
207 208
208 void ExpectIDsUnique(BookmarkModel* model) { 209 void ExpectIDsUnique(BookmarkModel* model) {
209 std::set<int64> assigned_ids; 210 std::set<int64> assigned_ids;
210 CheckIDs(model->bookmark_bar_node(), &assigned_ids); 211 CheckIDs(model->bookmark_bar_node(), &assigned_ids);
211 CheckIDs(model->other_node(), &assigned_ids); 212 CheckIDs(model->other_node(), &assigned_ids);
212 CheckIDs(model->mobile_node(), &assigned_ids); 213 CheckIDs(model->mobile_node(), &assigned_ids);
213 } 214 }
215
216 test::TestBookmarkClient client_;
214 }; 217 };
215 218
216 TEST_F(BookmarkCodecTest, ChecksumEncodeDecodeTest) { 219 TEST_F(BookmarkCodecTest, ChecksumEncodeDecodeTest) {
217 scoped_ptr<BookmarkModel> model_to_encode(CreateTestModel1()); 220 scoped_ptr<BookmarkModel> model_to_encode(CreateTestModel1());
218 std::string enc_checksum; 221 std::string enc_checksum;
219 scoped_ptr<base::Value> value( 222 scoped_ptr<base::Value> value(
220 EncodeHelper(model_to_encode.get(), &enc_checksum)); 223 EncodeHelper(model_to_encode.get(), &enc_checksum));
221 224
222 EXPECT_TRUE(value.get() != NULL); 225 EXPECT_TRUE(value.get() != NULL);
223 226
(...skipping 80 matching lines...) Expand 10 before | Expand all | Expand 10 after
304 GURL("http://newurl2.com")); 307 GURL("http://newurl2.com"));
305 308
306 ExpectIDsUnique(decoded_model.get()); 309 ExpectIDsUnique(decoded_model.get());
307 } 310 }
308 311
309 TEST_F(BookmarkCodecTest, PersistIDsTest) { 312 TEST_F(BookmarkCodecTest, PersistIDsTest) {
310 scoped_ptr<BookmarkModel> model_to_encode(CreateTestModel3()); 313 scoped_ptr<BookmarkModel> model_to_encode(CreateTestModel3());
311 BookmarkCodec encoder; 314 BookmarkCodec encoder;
312 scoped_ptr<base::Value> model_value(encoder.Encode(model_to_encode.get())); 315 scoped_ptr<base::Value> model_value(encoder.Encode(model_to_encode.get()));
313 316
314 BookmarkModel decoded_model(NULL, false); 317 scoped_ptr<BookmarkModel> decoded_model(client_.CreateModel(false));
315 BookmarkCodec decoder; 318 BookmarkCodec decoder;
316 ASSERT_TRUE(Decode(&decoder, &decoded_model, *model_value.get())); 319 ASSERT_TRUE(Decode(&decoder, decoded_model.get(), *model_value.get()));
317 ASSERT_NO_FATAL_FAILURE( 320 ASSERT_NO_FATAL_FAILURE(
318 AssertModelsEqual(model_to_encode.get(), &decoded_model)); 321 AssertModelsEqual(model_to_encode.get(), decoded_model.get()));
319 322
320 // Add a couple of more items to the decoded bookmark model and make sure 323 // Add a couple of more items to the decoded bookmark model and make sure
321 // ID persistence is working properly. 324 // ID persistence is working properly.
322 const BookmarkNode* bookmark_bar = decoded_model.bookmark_bar_node(); 325 const BookmarkNode* bookmark_bar = decoded_model->bookmark_bar_node();
323 decoded_model.AddURL( 326 decoded_model->AddURL(bookmark_bar,
324 bookmark_bar, bookmark_bar->child_count(), ASCIIToUTF16(kUrl3Title), 327 bookmark_bar->child_count(),
325 GURL(kUrl3Url)); 328 ASCIIToUTF16(kUrl3Title),
326 const BookmarkNode* folder2_node = decoded_model.AddFolder( 329 GURL(kUrl3Url));
330 const BookmarkNode* folder2_node = decoded_model->AddFolder(
327 bookmark_bar, bookmark_bar->child_count(), ASCIIToUTF16(kFolder2Title)); 331 bookmark_bar, bookmark_bar->child_count(), ASCIIToUTF16(kFolder2Title));
328 decoded_model.AddURL(folder2_node, 0, ASCIIToUTF16(kUrl4Title), 332 decoded_model->AddURL(
329 GURL(kUrl4Url)); 333 folder2_node, 0, ASCIIToUTF16(kUrl4Title), GURL(kUrl4Url));
330 334
331 BookmarkCodec encoder2; 335 BookmarkCodec encoder2;
332 scoped_ptr<base::Value> model_value2(encoder2.Encode(&decoded_model)); 336 scoped_ptr<base::Value> model_value2(encoder2.Encode(decoded_model.get()));
333 337
334 BookmarkModel decoded_model2(NULL, false); 338 scoped_ptr<BookmarkModel> decoded_model2(client_.CreateModel(false));
335 BookmarkCodec decoder2; 339 BookmarkCodec decoder2;
336 ASSERT_TRUE(Decode(&decoder2, &decoded_model2, *model_value2.get())); 340 ASSERT_TRUE(Decode(&decoder2, decoded_model2.get(), *model_value2.get()));
337 ASSERT_NO_FATAL_FAILURE(AssertModelsEqual(&decoded_model, &decoded_model2)); 341 ASSERT_NO_FATAL_FAILURE(
342 AssertModelsEqual(decoded_model.get(), decoded_model2.get()));
338 } 343 }
339 344
340 TEST_F(BookmarkCodecTest, CanDecodeModelWithoutMobileBookmarks) { 345 TEST_F(BookmarkCodecTest, CanDecodeModelWithoutMobileBookmarks) {
341 base::FilePath test_data_directory; 346 base::FilePath test_data_directory;
342 ASSERT_TRUE(PathService::Get(chrome::DIR_TEST_DATA, &test_data_directory)); 347 ASSERT_TRUE(PathService::Get(chrome::DIR_TEST_DATA, &test_data_directory));
343 base::FilePath test_file = test_data_directory.AppendASCII( 348 base::FilePath test_file = test_data_directory.AppendASCII(
344 "bookmarks/model_without_sync.json"); 349 "bookmarks/model_without_sync.json");
345 ASSERT_TRUE(base::PathExists(test_file)); 350 ASSERT_TRUE(base::PathExists(test_file));
346 351
347 JSONFileValueSerializer serializer(test_file); 352 JSONFileValueSerializer serializer(test_file);
348 scoped_ptr<base::Value> root(serializer.Deserialize(NULL, NULL)); 353 scoped_ptr<base::Value> root(serializer.Deserialize(NULL, NULL));
349 354
350 BookmarkModel decoded_model(NULL, false); 355 scoped_ptr<BookmarkModel> decoded_model(client_.CreateModel(false));
351 BookmarkCodec decoder; 356 BookmarkCodec decoder;
352 ASSERT_TRUE(Decode(&decoder, &decoded_model, *root.get())); 357 ASSERT_TRUE(Decode(&decoder, decoded_model.get(), *root.get()));
353 ExpectIDsUnique(&decoded_model); 358 ExpectIDsUnique(decoded_model.get());
354 359
355 const BookmarkNode* bbn = decoded_model.bookmark_bar_node(); 360 const BookmarkNode* bbn = decoded_model->bookmark_bar_node();
356 ASSERT_EQ(1, bbn->child_count()); 361 ASSERT_EQ(1, bbn->child_count());
357 362
358 const BookmarkNode* child = bbn->GetChild(0); 363 const BookmarkNode* child = bbn->GetChild(0);
359 EXPECT_EQ(BookmarkNode::FOLDER, child->type()); 364 EXPECT_EQ(BookmarkNode::FOLDER, child->type());
360 EXPECT_EQ(ASCIIToUTF16("Folder A"), child->GetTitle()); 365 EXPECT_EQ(ASCIIToUTF16("Folder A"), child->GetTitle());
361 ASSERT_EQ(1, child->child_count()); 366 ASSERT_EQ(1, child->child_count());
362 367
363 child = child->GetChild(0); 368 child = child->GetChild(0);
364 EXPECT_EQ(BookmarkNode::URL, child->type()); 369 EXPECT_EQ(BookmarkNode::URL, child->type());
365 EXPECT_EQ(ASCIIToUTF16("Bookmark Manager"), child->GetTitle()); 370 EXPECT_EQ(ASCIIToUTF16("Bookmark Manager"), child->GetTitle());
366 371
367 const BookmarkNode* other = decoded_model.other_node(); 372 const BookmarkNode* other = decoded_model->other_node();
368 ASSERT_EQ(1, other->child_count()); 373 ASSERT_EQ(1, other->child_count());
369 374
370 child = other->GetChild(0); 375 child = other->GetChild(0);
371 EXPECT_EQ(BookmarkNode::FOLDER, child->type()); 376 EXPECT_EQ(BookmarkNode::FOLDER, child->type());
372 EXPECT_EQ(ASCIIToUTF16("Folder B"), child->GetTitle()); 377 EXPECT_EQ(ASCIIToUTF16("Folder B"), child->GetTitle());
373 ASSERT_EQ(1, child->child_count()); 378 ASSERT_EQ(1, child->child_count());
374 379
375 child = child->GetChild(0); 380 child = child->GetChild(0);
376 EXPECT_EQ(BookmarkNode::URL, child->type()); 381 EXPECT_EQ(BookmarkNode::URL, child->type());
377 EXPECT_EQ(ASCIIToUTF16("Get started with Google Chrome"), child->GetTitle()); 382 EXPECT_EQ(ASCIIToUTF16("Get started with Google Chrome"), child->GetTitle());
378 383
379 ASSERT_TRUE(decoded_model.mobile_node() != NULL); 384 ASSERT_TRUE(decoded_model->mobile_node() != NULL);
380 } 385 }
381 386
382 TEST_F(BookmarkCodecTest, EncodeAndDecodeMetaInfo) { 387 TEST_F(BookmarkCodecTest, EncodeAndDecodeMetaInfo) {
383 // Add meta info and encode. 388 // Add meta info and encode.
384 scoped_ptr<BookmarkModel> model(CreateTestModel1()); 389 scoped_ptr<BookmarkModel> model(CreateTestModel1());
385 model->SetNodeMetaInfo(model->root_node(), "model_info", "value1"); 390 model->SetNodeMetaInfo(model->root_node(), "model_info", "value1");
386 model->SetNodeMetaInfo(model->bookmark_bar_node()->GetChild(0), 391 model->SetNodeMetaInfo(model->bookmark_bar_node()->GetChild(0),
387 "node_info", "value2"); 392 "node_info", "value2");
388 std::string checksum; 393 std::string checksum;
389 scoped_ptr<base::Value> value(EncodeHelper(model.get(), &checksum)); 394 scoped_ptr<base::Value> value(EncodeHelper(model.get(), &checksum));
(...skipping 38 matching lines...) Expand 10 before | Expand all | Expand 10 after
428 TEST_F(BookmarkCodecTest, CanDecodeMetaInfoAsString) { 433 TEST_F(BookmarkCodecTest, CanDecodeMetaInfoAsString) {
429 base::FilePath test_data_directory; 434 base::FilePath test_data_directory;
430 ASSERT_TRUE(PathService::Get(chrome::DIR_TEST_DATA, &test_data_directory)); 435 ASSERT_TRUE(PathService::Get(chrome::DIR_TEST_DATA, &test_data_directory));
431 base::FilePath test_file = test_data_directory.AppendASCII( 436 base::FilePath test_file = test_data_directory.AppendASCII(
432 "bookmarks/meta_info_as_string.json"); 437 "bookmarks/meta_info_as_string.json");
433 ASSERT_TRUE(base::PathExists(test_file)); 438 ASSERT_TRUE(base::PathExists(test_file));
434 439
435 JSONFileValueSerializer serializer(test_file); 440 JSONFileValueSerializer serializer(test_file);
436 scoped_ptr<base::Value> root(serializer.Deserialize(NULL, NULL)); 441 scoped_ptr<base::Value> root(serializer.Deserialize(NULL, NULL));
437 442
438 BookmarkModel model(NULL, false); 443 scoped_ptr<BookmarkModel> model(client_.CreateModel(false));
439 BookmarkCodec decoder; 444 BookmarkCodec decoder;
440 ASSERT_TRUE(Decode(&decoder, &model, *root.get())); 445 ASSERT_TRUE(Decode(&decoder, model.get(), *root.get()));
441 446
442 EXPECT_EQ(1, model.root_node()->sync_transaction_version()); 447 EXPECT_EQ(1, model->root_node()->sync_transaction_version());
443 const BookmarkNode* bbn = model.bookmark_bar_node(); 448 const BookmarkNode* bbn = model->bookmark_bar_node();
444 EXPECT_EQ(BookmarkNode::kInvalidSyncTransactionVersion, 449 EXPECT_EQ(BookmarkNode::kInvalidSyncTransactionVersion,
445 bbn->GetChild(0)->sync_transaction_version()); 450 bbn->GetChild(0)->sync_transaction_version());
446 EXPECT_EQ(42, bbn->GetChild(1)->sync_transaction_version()); 451 EXPECT_EQ(42, bbn->GetChild(1)->sync_transaction_version());
447 452
448 const char kSyncTransactionVersionKey[] = "sync.transaction_version"; 453 const char kSyncTransactionVersionKey[] = "sync.transaction_version";
449 const char kNormalKey[] = "key"; 454 const char kNormalKey[] = "key";
450 const char kNestedKey[] = "nested.key"; 455 const char kNestedKey[] = "nested.key";
451 std::string meta_value; 456 std::string meta_value;
452 EXPECT_FALSE(model.root_node()->GetMetaInfo(kSyncTransactionVersionKey, 457 EXPECT_FALSE(
453 &meta_value)); 458 model->root_node()->GetMetaInfo(kSyncTransactionVersionKey, &meta_value));
454 EXPECT_FALSE(bbn->GetChild(1)->GetMetaInfo(kSyncTransactionVersionKey, 459 EXPECT_FALSE(bbn->GetChild(1)->GetMetaInfo(kSyncTransactionVersionKey,
455 &meta_value)); 460 &meta_value));
456 EXPECT_TRUE(bbn->GetChild(0)->GetMetaInfo(kNormalKey, &meta_value)); 461 EXPECT_TRUE(bbn->GetChild(0)->GetMetaInfo(kNormalKey, &meta_value));
457 EXPECT_EQ("value", meta_value); 462 EXPECT_EQ("value", meta_value);
458 EXPECT_TRUE(bbn->GetChild(1)->GetMetaInfo(kNormalKey, &meta_value)); 463 EXPECT_TRUE(bbn->GetChild(1)->GetMetaInfo(kNormalKey, &meta_value));
459 EXPECT_EQ("value2", meta_value); 464 EXPECT_EQ("value2", meta_value);
460 EXPECT_TRUE(bbn->GetChild(0)->GetMetaInfo(kNestedKey, &meta_value)); 465 EXPECT_TRUE(bbn->GetChild(0)->GetMetaInfo(kNestedKey, &meta_value));
461 EXPECT_EQ("value3", meta_value); 466 EXPECT_EQ("value3", meta_value);
462 } 467 }
OLDNEW
« no previous file with comments | « chrome/browser/autocomplete/bookmark_provider_unittest.cc ('k') | chrome/browser/bookmarks/bookmark_index.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698