OLD | NEW |
1 // Copyright 2014 The Chromium Authors. All rights reserved. | 1 // Copyright 2014 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 "components/enhanced_bookmarks/enhanced_bookmark_model.h" | 5 #include "components/enhanced_bookmarks/enhanced_bookmark_model.h" |
6 | 6 |
7 #include "base/base64.h" | 7 #include "base/base64.h" |
8 #include "base/macros.h" | 8 #include "base/macros.h" |
9 #include "base/memory/scoped_ptr.h" | 9 #include "base/memory/scoped_ptr.h" |
| 10 #include "base/message_loop/message_loop.h" |
| 11 #include "base/run_loop.h" |
10 #include "base/strings/string_util.h" | 12 #include "base/strings/string_util.h" |
11 #include "base/strings/utf_string_conversions.h" | 13 #include "base/strings/utf_string_conversions.h" |
12 #include "components/bookmarks/browser/bookmark_model.h" | 14 #include "components/bookmarks/browser/bookmark_model.h" |
13 #include "components/bookmarks/browser/bookmark_node.h" | 15 #include "components/bookmarks/browser/bookmark_node.h" |
14 #include "components/bookmarks/test/test_bookmark_client.h" | 16 #include "components/bookmarks/test/test_bookmark_client.h" |
| 17 #include "components/enhanced_bookmarks/enhanced_bookmark_model_observer.h" |
15 #include "components/enhanced_bookmarks/proto/metadata.pb.h" | 18 #include "components/enhanced_bookmarks/proto/metadata.pb.h" |
16 #include "testing/gtest/include/gtest/gtest.h" | 19 #include "testing/gtest/include/gtest/gtest.h" |
17 #include "url/gurl.h" | 20 #include "url/gurl.h" |
18 | 21 |
| 22 using enhanced_bookmarks::EnhancedBookmarkModel; |
| 23 |
19 namespace { | 24 namespace { |
| 25 const std::string BOOKMARK_URL("http://example.com/index.html"); |
| 26 } // namespace |
20 | 27 |
21 const std::string BOOKMARK_URL("http://example.com/index.html"); | 28 class EnhancedBookmarkModelTest |
22 | 29 : public testing::Test, |
23 class EnhancedBookmarkModelTest : public testing::Test { | 30 public enhanced_bookmarks::EnhancedBookmarkModelObserver { |
24 public: | 31 public: |
25 EnhancedBookmarkModelTest() {} | 32 EnhancedBookmarkModelTest() |
| 33 : loaded_calls_(0), |
| 34 shutting_down_calls_(0), |
| 35 added_calls_(0), |
| 36 removed_calls_(0), |
| 37 all_user_nodes_removed_calls_(0), |
| 38 remote_id_changed_calls_(0), |
| 39 last_added_(NULL), |
| 40 last_removed_(NULL), |
| 41 last_remote_id_node_(NULL) {} |
26 virtual ~EnhancedBookmarkModelTest() {} | 42 virtual ~EnhancedBookmarkModelTest() {} |
27 | 43 |
28 virtual void SetUp() OVERRIDE { | 44 virtual void SetUp() OVERRIDE { |
29 bookmarks::TestBookmarkClient bookmark_client; | 45 message_loop_.reset(new base::MessageLoop(base::MessageLoop::TYPE_DEFAULT)); |
30 bookmark_model_.reset(bookmark_client.CreateModel().release()); | 46 bookmark_client_.reset(new bookmarks::TestBookmarkClient()); |
31 model_.reset(new enhanced_bookmarks::EnhancedBookmarkModel( | 47 bookmark_model_.reset(bookmark_client_->CreateModel().release()); |
32 bookmark_model_.get(), "v1.0")); | 48 model_.reset(new EnhancedBookmarkModel(bookmark_model_.get(), "v1.0")); |
| 49 model_->AddObserver(this); |
33 } | 50 } |
34 | 51 |
35 virtual void TearDown() OVERRIDE { | 52 virtual void TearDown() OVERRIDE { |
| 53 if (model_) |
| 54 model_->ShutDown(); |
36 model_.reset(); | 55 model_.reset(); |
37 bookmark_model_.reset(); | 56 bookmark_model_.reset(); |
| 57 bookmark_client_.reset(); |
| 58 message_loop_.reset(); |
38 } | 59 } |
39 | 60 |
40 protected: | 61 protected: |
41 const BookmarkNode* AddBookmark() { | 62 const BookmarkNode* AddBookmark() { |
42 return AddBookmark("Some title", bookmark_model_->other_node()); | 63 return AddBookmark("Some title", bookmark_model_->other_node()); |
43 } | 64 } |
44 | 65 |
45 const BookmarkNode* AddFolder() { | 66 const BookmarkNode* AddFolder() { |
46 return AddFolder("Some title", bookmark_model_->other_node()); | 67 return AddFolder("Some title", bookmark_model_->other_node()); |
47 } | 68 } |
48 | 69 |
49 const BookmarkNode* AddBookmark(const std::string& name, | 70 const BookmarkNode* AddBookmark(const std::string& name, |
50 const BookmarkNode* parent) { | 71 const BookmarkNode* parent) { |
51 return bookmark_model_->AddURL(parent, | 72 return model_->AddURL(parent, |
52 0, // index. | 73 0, // index. |
53 base::ASCIIToUTF16(name), | 74 base::ASCIIToUTF16(name), |
54 GURL(BOOKMARK_URL)); | 75 GURL(BOOKMARK_URL), |
| 76 base::Time::Now()); |
55 } | 77 } |
56 | 78 |
57 const BookmarkNode* AddFolder(const std::string& name, | 79 const BookmarkNode* AddFolder(const std::string& name, |
58 const BookmarkNode* parent) { | 80 const BookmarkNode* parent) { |
59 return bookmark_model_->AddFolder(parent, 0, base::ASCIIToUTF16(name)); | 81 return model_->AddFolder(parent, 0, base::ASCIIToUTF16(name)); |
60 } | 82 } |
61 | 83 |
62 std::string GetVersionForNode(const BookmarkNode* node) { | 84 std::string GetVersion(const BookmarkNode* node) { |
63 std::string version; | 85 return GetMetaInfoField(node, "stars.version"); |
64 if (!node->GetMetaInfo("stars.version", &version)) | |
65 return std::string(); | |
66 return version; | |
67 } | 86 } |
68 | 87 |
| 88 std::string GetId(const BookmarkNode* node) { |
| 89 return GetMetaInfoField(node, "stars.id"); |
| 90 } |
| 91 |
| 92 std::string GetOldId(const BookmarkNode* node) { |
| 93 return GetMetaInfoField(node, "stars.oldId"); |
| 94 } |
| 95 |
| 96 std::string GetMetaInfoField(const BookmarkNode* node, |
| 97 const std::string& name) { |
| 98 std::string value; |
| 99 if (!node->GetMetaInfo(name, &value)) |
| 100 return std::string(); |
| 101 return value; |
| 102 } |
| 103 |
| 104 scoped_ptr<base::MessageLoop> message_loop_; |
| 105 scoped_ptr<bookmarks::TestBookmarkClient> bookmark_client_; |
69 scoped_ptr<BookmarkModel> bookmark_model_; | 106 scoped_ptr<BookmarkModel> bookmark_model_; |
70 scoped_ptr<enhanced_bookmarks::EnhancedBookmarkModel> model_; | 107 scoped_ptr<EnhancedBookmarkModel> model_; |
| 108 |
| 109 // EnhancedBookmarkModelObserver implementation: |
| 110 virtual void EnhancedBookmarkModelLoaded() OVERRIDE { loaded_calls_++; } |
| 111 virtual void EnhancedBookmarkModelShuttingDown() OVERRIDE { |
| 112 shutting_down_calls_++; |
| 113 } |
| 114 virtual void EnhancedBookmarkAdded(const BookmarkNode* node) OVERRIDE { |
| 115 added_calls_++; |
| 116 last_added_ = node; |
| 117 } |
| 118 virtual void EnhancedBookmarkRemoved(const BookmarkNode* node) OVERRIDE { |
| 119 removed_calls_++; |
| 120 last_removed_ = node; |
| 121 } |
| 122 virtual void EnhancedBookmarkAllUserNodesRemoved() OVERRIDE { |
| 123 all_user_nodes_removed_calls_++; |
| 124 } |
| 125 virtual void EnhancedBookmarkRemoteIdChanged( |
| 126 const BookmarkNode* node, |
| 127 const std::string& old_remote_id, |
| 128 const std::string& remote_id) OVERRIDE { |
| 129 remote_id_changed_calls_++; |
| 130 last_remote_id_node_ = node; |
| 131 last_old_remote_id_ = old_remote_id; |
| 132 last_remote_id_ = remote_id; |
| 133 } |
| 134 |
| 135 // Observer call counters: |
| 136 int loaded_calls_; |
| 137 int shutting_down_calls_; |
| 138 int added_calls_; |
| 139 int removed_calls_; |
| 140 int all_user_nodes_removed_calls_; |
| 141 int remote_id_changed_calls_; |
| 142 |
| 143 // Observer parameter cache: |
| 144 const BookmarkNode* last_added_; |
| 145 const BookmarkNode* last_removed_; |
| 146 const BookmarkNode* last_remote_id_node_; |
| 147 std::string last_old_remote_id_; |
| 148 std::string last_remote_id_; |
71 | 149 |
72 private: | 150 private: |
73 DISALLOW_COPY_AND_ASSIGN(EnhancedBookmarkModelTest); | 151 DISALLOW_COPY_AND_ASSIGN(EnhancedBookmarkModelTest); |
74 }; | 152 }; |
75 | 153 |
76 TEST_F(EnhancedBookmarkModelTest, TestEmptySnippet) { | 154 TEST_F(EnhancedBookmarkModelTest, TestEmptySnippet) { |
77 const BookmarkNode* node = AddBookmark(); | 155 const BookmarkNode* node = AddBookmark(); |
78 | 156 |
79 std::string snippet(model_->GetSnippet(node)); | 157 std::string snippet(model_->GetSnippet(node)); |
80 EXPECT_EQ(snippet, ""); | 158 EXPECT_EQ(snippet, ""); |
(...skipping 165 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
246 ASSERT_TRUE(result); | 324 ASSERT_TRUE(result); |
247 | 325 |
248 GURL url; | 326 GURL url; |
249 int width; | 327 int width; |
250 int height; | 328 int height; |
251 result = model_->GetOriginalImage(node, &url, &width, &height); | 329 result = model_->GetOriginalImage(node, &url, &width, &height); |
252 ASSERT_TRUE(result); | 330 ASSERT_TRUE(result); |
253 EXPECT_EQ(url, GURL("http://example.com/i.jpg")); | 331 EXPECT_EQ(url, GURL("http://example.com/i.jpg")); |
254 EXPECT_EQ(width, 22); | 332 EXPECT_EQ(width, 22); |
255 EXPECT_EQ(height, 33); | 333 EXPECT_EQ(height, 33); |
256 EXPECT_EQ("v1.0", GetVersionForNode(node)); | 334 EXPECT_EQ("v1.0", GetVersion(node)); |
257 } | 335 } |
258 | 336 |
259 TEST_F(EnhancedBookmarkModelTest, TestDoubleEncodeDecode) { | 337 TEST_F(EnhancedBookmarkModelTest, TestDoubleEncodeDecode) { |
260 const BookmarkNode* node = AddBookmark(); | 338 const BookmarkNode* node = AddBookmark(); |
261 | 339 |
262 // Encode some information. | 340 // Encode some information. |
263 bool result = | 341 bool result = |
264 model_->SetOriginalImage(node, GURL("http://example.com/i.jpg"), 22, 33); | 342 model_->SetOriginalImage(node, GURL("http://example.com/i.jpg"), 22, 33); |
265 ASSERT_TRUE(result); | 343 ASSERT_TRUE(result); |
266 // Encode some different information. | 344 // Encode some different information. |
267 result = | 345 result = |
268 model_->SetOriginalImage(node, GURL("http://example.com/i.jpg"), 33, 44); | 346 model_->SetOriginalImage(node, GURL("http://example.com/i.jpg"), 33, 44); |
269 ASSERT_TRUE(result); | 347 ASSERT_TRUE(result); |
270 | 348 |
271 GURL url; | 349 GURL url; |
272 int width; | 350 int width; |
273 int height; | 351 int height; |
274 result = model_->GetOriginalImage(node, &url, &width, &height); | 352 result = model_->GetOriginalImage(node, &url, &width, &height); |
275 ASSERT_TRUE(result); | 353 ASSERT_TRUE(result); |
276 EXPECT_EQ(url, GURL("http://example.com/i.jpg")); | 354 EXPECT_EQ(url, GURL("http://example.com/i.jpg")); |
277 EXPECT_EQ(width, 33); | 355 EXPECT_EQ(width, 33); |
278 EXPECT_EQ(height, 44); | 356 EXPECT_EQ(height, 44); |
279 EXPECT_EQ("v1.0", GetVersionForNode(node)); | 357 EXPECT_EQ("v1.0", GetVersion(node)); |
280 } | 358 } |
281 | 359 |
282 TEST_F(EnhancedBookmarkModelTest, TestRemoteId) { | 360 TEST_F(EnhancedBookmarkModelTest, TestRemoteId) { |
283 const BookmarkNode* node = AddBookmark(); | 361 const BookmarkNode* node = AddBookmark(); |
| 362 // Verify that the remote id starts with the correct prefix. |
| 363 EXPECT_TRUE(StartsWithASCII(model_->GetRemoteId(node), "ebc_", true)); |
| 364 |
| 365 // Getting the remote id for nodes that don't have them should return the |
| 366 // empty string. |
| 367 const BookmarkNode* existing_node = |
| 368 bookmark_model_->AddURL(bookmark_model_->other_node(), |
| 369 0, |
| 370 base::ASCIIToUTF16("Title"), |
| 371 GURL(GURL(BOOKMARK_URL))); |
| 372 EXPECT_TRUE(model_->GetRemoteId(existing_node).empty()); |
| 373 |
| 374 // Folder nodes should not have a remote id set on creation. |
284 const BookmarkNode* folder_node = AddFolder(); | 375 const BookmarkNode* folder_node = AddFolder(); |
285 | 376 EXPECT_TRUE(model_->GetRemoteId(folder_node).empty()); |
286 std::string remote_id = model_->GetRemoteId(node); | |
287 // First call creates the UUID, second call should return the same. | |
288 EXPECT_EQ(remote_id, model_->GetRemoteId(node)); | |
289 | |
290 // Verify that the remote id starts with the correct prefix. | |
291 EXPECT_TRUE(StartsWithASCII(remote_id, "ebc_", true)); | |
292 std::string folder_remote_id = model_->GetRemoteId(folder_node); | |
293 EXPECT_TRUE(StartsWithASCII(folder_remote_id, "ebf_", true)); | |
294 | |
295 // Verifiy version field was set. | |
296 EXPECT_EQ("v1.0", GetVersionForNode(node)); | |
297 EXPECT_EQ("v1.0", GetVersionForNode(folder_node)); | |
298 } | 377 } |
299 | 378 |
300 TEST_F(EnhancedBookmarkModelTest, TestEmptyDescription) { | 379 TEST_F(EnhancedBookmarkModelTest, TestEmptyDescription) { |
301 const BookmarkNode* node = AddBookmark(); | 380 const BookmarkNode* node = AddBookmark(); |
302 | 381 |
303 std::string description(model_->GetDescription(node)); | 382 std::string description(model_->GetDescription(node)); |
304 EXPECT_EQ(description, ""); | 383 EXPECT_EQ(description, ""); |
305 } | 384 } |
306 | 385 |
307 TEST_F(EnhancedBookmarkModelTest, TestDescription) { | 386 TEST_F(EnhancedBookmarkModelTest, TestDescription) { |
308 const BookmarkNode* node = AddBookmark(); | 387 const BookmarkNode* node = AddBookmark(); |
309 const std::string description("This is the most useful description of all."); | 388 const std::string description("This is the most useful description of all."); |
310 | 389 |
311 // Set the description. | 390 // Set the description. |
312 model_->SetDescription(node, description); | 391 model_->SetDescription(node, description); |
313 | 392 |
314 // Check the description is the one that was set. | 393 // Check the description is the one that was set. |
315 EXPECT_EQ(model_->GetDescription(node), description); | 394 EXPECT_EQ(model_->GetDescription(node), description); |
316 EXPECT_EQ("v1.0", GetVersionForNode(node)); | 395 EXPECT_EQ("v1.0", GetVersion(node)); |
317 } | 396 } |
318 | 397 |
319 // If there is no notes field, the description should fall back on the snippet. | 398 // If there is no notes field, the description should fall back on the snippet. |
320 TEST_F(EnhancedBookmarkModelTest, TestDescriptionFallback) { | 399 TEST_F(EnhancedBookmarkModelTest, TestDescriptionFallback) { |
321 const BookmarkNode* node = AddBookmark(); | 400 const BookmarkNode* node = AddBookmark(); |
322 | 401 |
323 // Binary serialize the protobuf. | 402 // Binary serialize the protobuf. |
324 image::collections::PageData data; | 403 image::collections::PageData data; |
325 data.set_snippet("Joe Bar Team"); | 404 data.set_snippet("Joe Bar Team"); |
326 ASSERT_TRUE(data.IsInitialized()); | 405 ASSERT_TRUE(data.IsInitialized()); |
(...skipping 15 matching lines...) Expand all Loading... |
342 model_->SetDescription(node, description); | 421 model_->SetDescription(node, description); |
343 | 422 |
344 // Check the description is the one that was set. | 423 // Check the description is the one that was set. |
345 EXPECT_EQ(model_->GetDescription(node), description); | 424 EXPECT_EQ(model_->GetDescription(node), description); |
346 } | 425 } |
347 | 426 |
348 // Makes sure that the stars.version field is set every time | 427 // Makes sure that the stars.version field is set every time |
349 // EnhancedBookmarkModel makes a change to a node. | 428 // EnhancedBookmarkModel makes a change to a node. |
350 TEST_F(EnhancedBookmarkModelTest, TestVersionField) { | 429 TEST_F(EnhancedBookmarkModelTest, TestVersionField) { |
351 const BookmarkNode* node = AddBookmark(); | 430 const BookmarkNode* node = AddBookmark(); |
352 EXPECT_EQ("", GetVersionForNode(node)); | 431 EXPECT_EQ("", GetVersion(node)); |
353 | 432 |
354 model_->SetDescription(node, "foo"); | 433 model_->SetDescription(node, "foo"); |
355 EXPECT_EQ("v1.0", GetVersionForNode(node)); | 434 EXPECT_EQ("v1.0", GetVersion(node)); |
356 | 435 |
357 // Add a suffix to the version to set. | 436 // Add a suffix to the version to set. |
358 model_->SetVersionSuffix("alpha"); | 437 model_->SetVersionSuffix("alpha"); |
359 | 438 |
360 model_->SetDescription(node, "foo"); | 439 model_->SetDescription(node, "foo"); |
361 // Since the description didn't actually change, the version field should | 440 // Since the description didn't actually change, the version field should |
362 // not either. | 441 // not either. |
363 EXPECT_EQ("v1.0", GetVersionForNode(node)); | 442 EXPECT_EQ("v1.0", GetVersion(node)); |
364 | 443 |
365 model_->SetDescription(node, "bar"); | 444 model_->SetDescription(node, "bar"); |
366 EXPECT_EQ("v1.0/alpha", GetVersionForNode(node)); | 445 EXPECT_EQ("v1.0/alpha", GetVersion(node)); |
367 } | 446 } |
368 | 447 |
369 // Verifies that the stars.userEdit field is set appropriately when editing a | 448 // Verifies that duplicate nodes are reset when the model is created. |
370 // node. | 449 TEST_F(EnhancedBookmarkModelTest, ResetDuplicateNodesOnInitialization) { |
371 TEST_F(EnhancedBookmarkModelTest, TestUserEdit) { | 450 model_->ShutDown(); |
| 451 |
| 452 const BookmarkNode* parent = bookmark_model_->other_node(); |
| 453 const BookmarkNode* node1 = bookmark_model_->AddURL( |
| 454 parent, 0, base::ASCIIToUTF16("Some title"), GURL(BOOKMARK_URL)); |
| 455 const BookmarkNode* node2 = bookmark_model_->AddURL( |
| 456 parent, 0, base::ASCIIToUTF16("Some title"), GURL(BOOKMARK_URL)); |
| 457 const BookmarkNode* node3 = bookmark_model_->AddURL( |
| 458 parent, 0, base::ASCIIToUTF16("Some title"), GURL(BOOKMARK_URL)); |
| 459 const BookmarkNode* node4 = bookmark_model_->AddURL( |
| 460 parent, 0, base::ASCIIToUTF16("Some title"), GURL(BOOKMARK_URL)); |
| 461 |
| 462 bookmark_model_->SetNodeMetaInfo(node1, "stars.id", "c_1"); |
| 463 bookmark_model_->SetNodeMetaInfo(node2, "stars.id", "c_2"); |
| 464 bookmark_model_->SetNodeMetaInfo(node3, "stars.id", "c_1"); |
| 465 bookmark_model_->SetNodeMetaInfo(node4, "stars.id", "c_1"); |
| 466 EXPECT_EQ("c_1", GetId(node1)); |
| 467 EXPECT_EQ("c_2", GetId(node2)); |
| 468 EXPECT_EQ("c_1", GetId(node3)); |
| 469 EXPECT_EQ("c_1", GetId(node4)); |
| 470 |
| 471 model_.reset(new EnhancedBookmarkModel(bookmark_model_.get(), "v2.0")); |
| 472 base::RunLoop().RunUntilIdle(); |
| 473 EXPECT_EQ("c_2", GetId(node2)); |
| 474 EXPECT_EQ("", GetId(node1)); |
| 475 EXPECT_EQ("", GetId(node3)); |
| 476 EXPECT_EQ("", GetId(node4)); |
| 477 EXPECT_EQ("c_1", GetOldId(node1)); |
| 478 EXPECT_EQ("c_1", GetOldId(node3)); |
| 479 EXPECT_EQ("c_1", GetOldId(node4)); |
| 480 EXPECT_EQ("v2.0", GetVersion(node1)); |
| 481 EXPECT_EQ("v2.0", GetVersion(node3)); |
| 482 EXPECT_EQ("v2.0", GetVersion(node4)); |
| 483 } |
| 484 |
| 485 // Verifies that duplicate nodes are reset if one is created. |
| 486 TEST_F(EnhancedBookmarkModelTest, ResetDuplicateAddedNodes) { |
| 487 BookmarkNode::MetaInfoMap meta_info; |
| 488 meta_info["stars.id"] = "c_1"; |
| 489 const BookmarkNode* parent = bookmark_model_->other_node(); |
| 490 |
| 491 const BookmarkNode* node1 = |
| 492 bookmark_model_->AddURLWithCreationTimeAndMetaInfo( |
| 493 parent, |
| 494 0, |
| 495 base::ASCIIToUTF16("Some title"), |
| 496 GURL(BOOKMARK_URL), |
| 497 base::Time::Now(), |
| 498 &meta_info); |
| 499 EXPECT_EQ("c_1", GetId(node1)); |
| 500 |
| 501 const BookmarkNode* node2 = |
| 502 bookmark_model_->AddURLWithCreationTimeAndMetaInfo( |
| 503 parent, |
| 504 0, |
| 505 base::ASCIIToUTF16("Some title"), |
| 506 GURL(BOOKMARK_URL), |
| 507 base::Time::Now(), |
| 508 &meta_info); |
| 509 |
| 510 base::RunLoop().RunUntilIdle(); |
| 511 EXPECT_EQ("", GetId(node1)); |
| 512 EXPECT_EQ("", GetId(node2)); |
| 513 EXPECT_EQ("c_1", GetOldId(node1)); |
| 514 EXPECT_EQ("c_1", GetOldId(node2)); |
| 515 EXPECT_EQ("v1.0", GetVersion(node1)); |
| 516 EXPECT_EQ("v1.0", GetVersion(node2)); |
| 517 } |
| 518 |
| 519 // Verifies that duplicate nodes are reset if an id is changed to a duplicate |
| 520 // value. |
| 521 TEST_F(EnhancedBookmarkModelTest, ResetDuplicateChangedNodes) { |
| 522 const BookmarkNode* node1 = AddBookmark(); |
| 523 const BookmarkNode* node2 = AddBookmark(); |
| 524 |
| 525 bookmark_model_->SetNodeMetaInfo(node1, "stars.id", "c_1"); |
| 526 EXPECT_EQ("c_1", GetId(node1)); |
| 527 |
| 528 bookmark_model_->SetNodeMetaInfo(node2, "stars.id", "c_1"); |
| 529 base::RunLoop().RunUntilIdle(); |
| 530 EXPECT_EQ("", GetId(node1)); |
| 531 EXPECT_EQ("", GetId(node2)); |
| 532 EXPECT_EQ("c_1", GetOldId(node1)); |
| 533 EXPECT_EQ("c_1", GetOldId(node2)); |
| 534 EXPECT_EQ("v1.0", GetVersion(node1)); |
| 535 EXPECT_EQ("v1.0", GetVersion(node2)); |
| 536 } |
| 537 |
| 538 TEST_F(EnhancedBookmarkModelTest, SetMultipleMetaInfo) { |
372 const BookmarkNode* node = AddBookmark(); | 539 const BookmarkNode* node = AddBookmark(); |
373 | 540 BookmarkNode::MetaInfoMap meta_info; |
374 model_->SetDescription(node, "foo"); | 541 meta_info["a"] = "aa"; |
375 std::string user_edit; | 542 meta_info["b"] = "bb"; |
376 ASSERT_TRUE(node->GetMetaInfo("stars.userEdit", &user_edit)); | 543 |
377 EXPECT_EQ("true", user_edit); | 544 model_->SetVersionSuffix("1"); |
378 } | 545 model_->SetMultipleMetaInfo(node, meta_info); |
379 | 546 EXPECT_EQ("aa", GetMetaInfoField(node, "a")); |
380 } // namespace | 547 EXPECT_EQ("bb", GetMetaInfoField(node, "b")); |
| 548 EXPECT_EQ("v1.0/1", GetVersion(node)); |
| 549 |
| 550 // Not present fields does not erase the fields already set on the node. |
| 551 meta_info["a"] = "aaa"; |
| 552 model_->SetVersionSuffix("2"); |
| 553 model_->SetMultipleMetaInfo(node, meta_info); |
| 554 EXPECT_EQ("aaa", GetMetaInfoField(node, "a")); |
| 555 EXPECT_EQ("bb", GetMetaInfoField(node, "b")); |
| 556 EXPECT_EQ("v1.0/2", GetVersion(node)); |
| 557 |
| 558 // Not actually changing any values should not set the version field. |
| 559 model_->SetVersionSuffix("3"); |
| 560 model_->SetMultipleMetaInfo(node, meta_info); |
| 561 EXPECT_EQ("v1.0/2", GetVersion(node)); |
| 562 } |
| 563 |
| 564 TEST_F(EnhancedBookmarkModelTest, ObserverShuttingDownEvent) { |
| 565 EXPECT_EQ(0, shutting_down_calls_); |
| 566 model_->ShutDown(); |
| 567 EXPECT_EQ(1, shutting_down_calls_); |
| 568 model_.reset(); |
| 569 } |
| 570 |
| 571 TEST_F(EnhancedBookmarkModelTest, ObserverNodeAddedEvent) { |
| 572 EXPECT_EQ(0, added_calls_); |
| 573 const BookmarkNode* node = AddBookmark(); |
| 574 EXPECT_EQ(1, added_calls_); |
| 575 EXPECT_EQ(node, last_added_); |
| 576 |
| 577 const BookmarkNode* folder = AddFolder(); |
| 578 EXPECT_EQ(2, added_calls_); |
| 579 EXPECT_EQ(folder, last_added_); |
| 580 } |
| 581 |
| 582 TEST_F(EnhancedBookmarkModelTest, ObserverNodeRemovedEvent) { |
| 583 const BookmarkNode* node = AddBookmark(); |
| 584 const BookmarkNode* folder = AddFolder(); |
| 585 |
| 586 EXPECT_EQ(0, removed_calls_); |
| 587 bookmark_model_->Remove(node->parent(), node->parent()->GetIndexOf(node)); |
| 588 EXPECT_EQ(1, removed_calls_); |
| 589 EXPECT_EQ(node, last_removed_); |
| 590 |
| 591 bookmark_model_->Remove(folder->parent(), |
| 592 folder->parent()->GetIndexOf(folder)); |
| 593 EXPECT_EQ(2, removed_calls_); |
| 594 EXPECT_EQ(folder, last_removed_); |
| 595 } |
| 596 |
| 597 TEST_F(EnhancedBookmarkModelTest, ObserverAllUserNodesRemovedEvent) { |
| 598 AddBookmark(); |
| 599 AddFolder(); |
| 600 EXPECT_EQ(0, all_user_nodes_removed_calls_); |
| 601 bookmark_model_->RemoveAllUserBookmarks(); |
| 602 EXPECT_EQ(0, removed_calls_); |
| 603 EXPECT_EQ(1, all_user_nodes_removed_calls_); |
| 604 } |
| 605 |
| 606 TEST_F(EnhancedBookmarkModelTest, ObserverRemoteIdChangedEvent) { |
| 607 const BookmarkNode* node1 = AddFolder(); |
| 608 const BookmarkNode* node2 = AddFolder(); |
| 609 |
| 610 EXPECT_EQ(0, remote_id_changed_calls_); |
| 611 bookmark_model_->SetNodeMetaInfo(node1, "stars.id", "c_1"); |
| 612 base::RunLoop().RunUntilIdle(); |
| 613 EXPECT_EQ(1, remote_id_changed_calls_); |
| 614 EXPECT_EQ(node1, last_remote_id_node_); |
| 615 EXPECT_EQ("", last_old_remote_id_); |
| 616 EXPECT_EQ("c_1", last_remote_id_); |
| 617 |
| 618 bookmark_model_->SetNodeMetaInfo(node2, "stars.id", "c_2"); |
| 619 base::RunLoop().RunUntilIdle(); |
| 620 EXPECT_EQ(2, remote_id_changed_calls_); |
| 621 EXPECT_EQ(node2, last_remote_id_node_); |
| 622 EXPECT_EQ("", last_old_remote_id_); |
| 623 EXPECT_EQ("c_2", last_remote_id_); |
| 624 |
| 625 bookmark_model_->SetNodeMetaInfo(node1, "stars.id", "c_3"); |
| 626 base::RunLoop().RunUntilIdle(); |
| 627 EXPECT_EQ(3, remote_id_changed_calls_); |
| 628 EXPECT_EQ(node1, last_remote_id_node_); |
| 629 EXPECT_EQ("c_1", last_old_remote_id_); |
| 630 EXPECT_EQ("c_3", last_remote_id_); |
| 631 |
| 632 // Set to duplicate ids. |
| 633 bookmark_model_->SetNodeMetaInfo(node2, "stars.id", "c_3"); |
| 634 EXPECT_EQ(4, remote_id_changed_calls_); |
| 635 EXPECT_EQ(node2, last_remote_id_node_); |
| 636 EXPECT_EQ("c_2", last_old_remote_id_); |
| 637 EXPECT_EQ("c_3", last_remote_id_); |
| 638 base::RunLoop().RunUntilIdle(); |
| 639 EXPECT_EQ(6, remote_id_changed_calls_); |
| 640 EXPECT_EQ("", last_remote_id_); |
| 641 } |
| 642 |
| 643 TEST_F(EnhancedBookmarkModelTest, ShutDownWhileResetDuplicationScheduled) { |
| 644 const BookmarkNode* node1 = AddBookmark(); |
| 645 const BookmarkNode* node2 = AddBookmark(); |
| 646 bookmark_model_->SetNodeMetaInfo(node1, "stars.id", "c_1"); |
| 647 bookmark_model_->SetNodeMetaInfo(node2, "stars.id", "c_1"); |
| 648 model_->ShutDown(); |
| 649 model_.reset(); |
| 650 base::RunLoop().RunUntilIdle(); |
| 651 } |
OLD | NEW |