Chromium Code Reviews| 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/strings/string_util.h" | 10 #include "base/strings/string_util.h" |
| 11 #include "base/strings/utf_string_conversions.h" | 11 #include "base/strings/utf_string_conversions.h" |
| 12 #include "components/bookmarks/browser/bookmark_model.h" | 12 #include "components/bookmarks/browser/bookmark_model.h" |
| 13 #include "components/bookmarks/browser/bookmark_node.h" | 13 #include "components/bookmarks/browser/bookmark_node.h" |
| 14 #include "components/bookmarks/test/test_bookmark_client.h" | 14 #include "components/bookmarks/test/test_bookmark_client.h" |
| 15 #include "components/enhanced_bookmarks/proto/metadata.pb.h" | 15 #include "components/enhanced_bookmarks/proto/metadata.pb.h" |
| 16 #include "testing/gtest/include/gtest/gtest.h" | 16 #include "testing/gtest/include/gtest/gtest.h" |
| 17 #include "url/gurl.h" | 17 #include "url/gurl.h" |
| 18 | 18 |
| 19 namespace { | 19 namespace { |
| 20 | 20 |
| 21 using enhanced_bookmarks::EnhancedBookmarkModel; | |
| 22 | |
| 21 const std::string BOOKMARK_URL("http://example.com/index.html"); | 23 const std::string BOOKMARK_URL("http://example.com/index.html"); |
| 22 | 24 |
| 23 class EnhancedBookmarkModelTest : public testing::Test { | 25 class EnhancedBookmarkModelTest : public testing::Test { |
| 24 public: | 26 public: |
| 25 EnhancedBookmarkModelTest() {} | 27 EnhancedBookmarkModelTest() {} |
| 26 virtual ~EnhancedBookmarkModelTest() {} | 28 virtual ~EnhancedBookmarkModelTest() {} |
| 27 | 29 |
| 28 virtual void SetUp() OVERRIDE { | 30 virtual void SetUp() OVERRIDE { |
| 29 bookmarks::TestBookmarkClient bookmark_client; | 31 bookmarks::TestBookmarkClient bookmark_client; |
| 30 bookmark_model_.reset(bookmark_client.CreateModel().release()); | 32 bookmark_model_.reset(bookmark_client.CreateModel().release()); |
| 31 model_.reset(new enhanced_bookmarks::EnhancedBookmarkModel( | 33 model_.reset(new EnhancedBookmarkModel(bookmark_model_.get(), "v1.0")); |
| 32 bookmark_model_.get(), "v1.0")); | |
| 33 } | 34 } |
| 34 | 35 |
| 35 virtual void TearDown() OVERRIDE { | 36 virtual void TearDown() OVERRIDE { |
| 37 model_->ShutDown(); | |
| 36 model_.reset(); | 38 model_.reset(); |
| 37 bookmark_model_.reset(); | 39 bookmark_model_.reset(); |
| 38 } | 40 } |
| 39 | 41 |
| 40 protected: | 42 protected: |
| 41 const BookmarkNode* AddBookmark() { | 43 const BookmarkNode* AddBookmark() { |
| 42 return AddBookmark("Some title", bookmark_model_->other_node()); | 44 return AddBookmark("Some title", bookmark_model_->other_node()); |
| 43 } | 45 } |
| 44 | 46 |
| 45 const BookmarkNode* AddFolder() { | 47 const BookmarkNode* AddFolder() { |
| 46 return AddFolder("Some title", bookmark_model_->other_node()); | 48 return AddFolder("Some title", bookmark_model_->other_node()); |
| 47 } | 49 } |
| 48 | 50 |
| 49 const BookmarkNode* AddBookmark(const std::string& name, | 51 const BookmarkNode* AddBookmark(const std::string& name, |
| 50 const BookmarkNode* parent) { | 52 const BookmarkNode* parent) { |
| 51 return bookmark_model_->AddURL(parent, | 53 return model_->AddURL(parent, |
| 52 0, // index. | 54 0, // index. |
| 53 base::ASCIIToUTF16(name), | 55 base::ASCIIToUTF16(name), |
| 54 GURL(BOOKMARK_URL)); | 56 GURL(BOOKMARK_URL), |
| 57 base::Time::Now()); | |
| 55 } | 58 } |
| 56 | 59 |
| 57 const BookmarkNode* AddFolder(const std::string& name, | 60 const BookmarkNode* AddFolder(const std::string& name, |
| 58 const BookmarkNode* parent) { | 61 const BookmarkNode* parent) { |
| 59 return bookmark_model_->AddFolder(parent, 0, base::ASCIIToUTF16(name)); | 62 return model_->AddFolder(parent, 0, base::ASCIIToUTF16(name)); |
| 60 } | 63 } |
| 61 | 64 |
| 62 std::string GetVersionForNode(const BookmarkNode* node) { | 65 std::string GetVersion(const BookmarkNode* node) { |
| 63 std::string version; | 66 return GetMetaInfoField(node, "stars.version"); |
| 64 if (!node->GetMetaInfo("stars.version", &version)) | 67 } |
| 68 | |
| 69 std::string GetId(const BookmarkNode* node) { | |
| 70 return GetMetaInfoField(node, "stars.id"); | |
| 71 } | |
| 72 | |
| 73 std::string GetOldId(const BookmarkNode* node) { | |
| 74 return GetMetaInfoField(node, "stars.oldId"); | |
| 75 } | |
| 76 | |
| 77 std::string GetMetaInfoField(const BookmarkNode* node, | |
| 78 const std::string& name) { | |
| 79 std::string value; | |
| 80 if (!node->GetMetaInfo(name, &value)) | |
| 65 return std::string(); | 81 return std::string(); |
| 66 return version; | 82 return value; |
| 67 } | 83 } |
| 68 | 84 |
| 69 scoped_ptr<BookmarkModel> bookmark_model_; | 85 scoped_ptr<BookmarkModel> bookmark_model_; |
| 70 scoped_ptr<enhanced_bookmarks::EnhancedBookmarkModel> model_; | 86 scoped_ptr<EnhancedBookmarkModel> model_; |
| 71 | 87 |
| 72 private: | 88 private: |
| 73 DISALLOW_COPY_AND_ASSIGN(EnhancedBookmarkModelTest); | 89 DISALLOW_COPY_AND_ASSIGN(EnhancedBookmarkModelTest); |
| 74 }; | 90 }; |
| 75 | 91 |
| 76 TEST_F(EnhancedBookmarkModelTest, TestEmptySnippet) { | 92 TEST_F(EnhancedBookmarkModelTest, TestEmptySnippet) { |
| 77 const BookmarkNode* node = AddBookmark(); | 93 const BookmarkNode* node = AddBookmark(); |
| 78 | 94 |
| 79 std::string snippet(model_->GetSnippet(node)); | 95 std::string snippet(model_->GetSnippet(node)); |
| 80 EXPECT_EQ(snippet, ""); | 96 EXPECT_EQ(snippet, ""); |
| (...skipping 165 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 246 ASSERT_TRUE(result); | 262 ASSERT_TRUE(result); |
| 247 | 263 |
| 248 GURL url; | 264 GURL url; |
| 249 int width; | 265 int width; |
| 250 int height; | 266 int height; |
| 251 result = model_->GetOriginalImage(node, &url, &width, &height); | 267 result = model_->GetOriginalImage(node, &url, &width, &height); |
| 252 ASSERT_TRUE(result); | 268 ASSERT_TRUE(result); |
| 253 EXPECT_EQ(url, GURL("http://example.com/i.jpg")); | 269 EXPECT_EQ(url, GURL("http://example.com/i.jpg")); |
| 254 EXPECT_EQ(width, 22); | 270 EXPECT_EQ(width, 22); |
| 255 EXPECT_EQ(height, 33); | 271 EXPECT_EQ(height, 33); |
| 256 EXPECT_EQ("v1.0", GetVersionForNode(node)); | 272 EXPECT_EQ("v1.0", GetVersion(node)); |
| 257 } | 273 } |
| 258 | 274 |
| 259 TEST_F(EnhancedBookmarkModelTest, TestDoubleEncodeDecode) { | 275 TEST_F(EnhancedBookmarkModelTest, TestDoubleEncodeDecode) { |
| 260 const BookmarkNode* node = AddBookmark(); | 276 const BookmarkNode* node = AddBookmark(); |
| 261 | 277 |
| 262 // Encode some information. | 278 // Encode some information. |
| 263 bool result = | 279 bool result = |
| 264 model_->SetOriginalImage(node, GURL("http://example.com/i.jpg"), 22, 33); | 280 model_->SetOriginalImage(node, GURL("http://example.com/i.jpg"), 22, 33); |
| 265 ASSERT_TRUE(result); | 281 ASSERT_TRUE(result); |
| 266 // Encode some different information. | 282 // Encode some different information. |
| 267 result = | 283 result = |
| 268 model_->SetOriginalImage(node, GURL("http://example.com/i.jpg"), 33, 44); | 284 model_->SetOriginalImage(node, GURL("http://example.com/i.jpg"), 33, 44); |
| 269 ASSERT_TRUE(result); | 285 ASSERT_TRUE(result); |
| 270 | 286 |
| 271 GURL url; | 287 GURL url; |
| 272 int width; | 288 int width; |
| 273 int height; | 289 int height; |
| 274 result = model_->GetOriginalImage(node, &url, &width, &height); | 290 result = model_->GetOriginalImage(node, &url, &width, &height); |
| 275 ASSERT_TRUE(result); | 291 ASSERT_TRUE(result); |
| 276 EXPECT_EQ(url, GURL("http://example.com/i.jpg")); | 292 EXPECT_EQ(url, GURL("http://example.com/i.jpg")); |
| 277 EXPECT_EQ(width, 33); | 293 EXPECT_EQ(width, 33); |
| 278 EXPECT_EQ(height, 44); | 294 EXPECT_EQ(height, 44); |
| 279 EXPECT_EQ("v1.0", GetVersionForNode(node)); | 295 EXPECT_EQ("v1.0", GetVersion(node)); |
| 280 } | 296 } |
| 281 | 297 |
| 282 TEST_F(EnhancedBookmarkModelTest, TestRemoteId) { | 298 TEST_F(EnhancedBookmarkModelTest, TestRemoteId) { |
| 283 const BookmarkNode* node = AddBookmark(); | 299 const BookmarkNode* node = AddBookmark(); |
| 300 // Verify that the remote id starts with the correct prefix. | |
| 301 EXPECT_TRUE(StartsWithASCII(model_->GetRemoteId(node), "ebc_", true)); | |
| 302 | |
| 303 // Getting the remote id for nodes that don't have them should return the | |
| 304 // empty string. | |
| 305 const BookmarkNode* existing_node = | |
| 306 bookmark_model_->AddURL(bookmark_model_->other_node(), | |
| 307 0, | |
| 308 base::ASCIIToUTF16("Title"), | |
| 309 GURL(GURL(BOOKMARK_URL))); | |
| 310 EXPECT_TRUE(model_->GetRemoteId(existing_node).empty()); | |
| 311 | |
| 312 // Folder nodes should not have a remote id set on creation. | |
| 284 const BookmarkNode* folder_node = AddFolder(); | 313 const BookmarkNode* folder_node = AddFolder(); |
| 285 | 314 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 } | 315 } |
| 299 | 316 |
| 300 TEST_F(EnhancedBookmarkModelTest, TestEmptyDescription) { | 317 TEST_F(EnhancedBookmarkModelTest, TestEmptyDescription) { |
| 301 const BookmarkNode* node = AddBookmark(); | 318 const BookmarkNode* node = AddBookmark(); |
| 302 | 319 |
| 303 std::string description(model_->GetDescription(node)); | 320 std::string description(model_->GetDescription(node)); |
| 304 EXPECT_EQ(description, ""); | 321 EXPECT_EQ(description, ""); |
| 305 } | 322 } |
| 306 | 323 |
| 307 TEST_F(EnhancedBookmarkModelTest, TestDescription) { | 324 TEST_F(EnhancedBookmarkModelTest, TestDescription) { |
| 308 const BookmarkNode* node = AddBookmark(); | 325 const BookmarkNode* node = AddBookmark(); |
| 309 const std::string description("This is the most useful description of all."); | 326 const std::string description("This is the most useful description of all."); |
| 310 | 327 |
| 311 // Set the description. | 328 // Set the description. |
| 312 model_->SetDescription(node, description); | 329 model_->SetDescription(node, description); |
| 313 | 330 |
| 314 // Check the description is the one that was set. | 331 // Check the description is the one that was set. |
| 315 EXPECT_EQ(model_->GetDescription(node), description); | 332 EXPECT_EQ(model_->GetDescription(node), description); |
| 316 EXPECT_EQ("v1.0", GetVersionForNode(node)); | 333 EXPECT_EQ("v1.0", GetVersion(node)); |
| 317 } | 334 } |
| 318 | 335 |
| 319 // If there is no notes field, the description should fall back on the snippet. | 336 // If there is no notes field, the description should fall back on the snippet. |
| 320 TEST_F(EnhancedBookmarkModelTest, TestDescriptionFallback) { | 337 TEST_F(EnhancedBookmarkModelTest, TestDescriptionFallback) { |
| 321 const BookmarkNode* node = AddBookmark(); | 338 const BookmarkNode* node = AddBookmark(); |
| 322 | 339 |
| 323 // Binary serialize the protobuf. | 340 // Binary serialize the protobuf. |
| 324 image::collections::PageData data; | 341 image::collections::PageData data; |
| 325 data.set_snippet("Joe Bar Team"); | 342 data.set_snippet("Joe Bar Team"); |
| 326 ASSERT_TRUE(data.IsInitialized()); | 343 ASSERT_TRUE(data.IsInitialized()); |
| (...skipping 15 matching lines...) Expand all Loading... | |
| 342 model_->SetDescription(node, description); | 359 model_->SetDescription(node, description); |
| 343 | 360 |
| 344 // Check the description is the one that was set. | 361 // Check the description is the one that was set. |
| 345 EXPECT_EQ(model_->GetDescription(node), description); | 362 EXPECT_EQ(model_->GetDescription(node), description); |
| 346 } | 363 } |
| 347 | 364 |
| 348 // Makes sure that the stars.version field is set every time | 365 // Makes sure that the stars.version field is set every time |
| 349 // EnhancedBookmarkModel makes a change to a node. | 366 // EnhancedBookmarkModel makes a change to a node. |
| 350 TEST_F(EnhancedBookmarkModelTest, TestVersionField) { | 367 TEST_F(EnhancedBookmarkModelTest, TestVersionField) { |
| 351 const BookmarkNode* node = AddBookmark(); | 368 const BookmarkNode* node = AddBookmark(); |
| 352 EXPECT_EQ("", GetVersionForNode(node)); | 369 EXPECT_EQ("", GetVersion(node)); |
| 353 | 370 |
| 354 model_->SetDescription(node, "foo"); | 371 model_->SetDescription(node, "foo"); |
| 355 EXPECT_EQ("v1.0", GetVersionForNode(node)); | 372 EXPECT_EQ("v1.0", GetVersion(node)); |
| 356 | 373 |
| 357 // Add a suffix to the version to set. | 374 // Add a suffix to the version to set. |
| 358 model_->SetVersionSuffix("alpha"); | 375 model_->SetVersionSuffix("alpha"); |
| 359 | 376 |
| 360 model_->SetDescription(node, "foo"); | 377 model_->SetDescription(node, "foo"); |
| 361 // Since the description didn't actually change, the version field should | 378 // Since the description didn't actually change, the version field should |
| 362 // not either. | 379 // not either. |
| 363 EXPECT_EQ("v1.0", GetVersionForNode(node)); | 380 EXPECT_EQ("v1.0", GetVersion(node)); |
| 364 | 381 |
| 365 model_->SetDescription(node, "bar"); | 382 model_->SetDescription(node, "bar"); |
| 366 EXPECT_EQ("v1.0/alpha", GetVersionForNode(node)); | 383 EXPECT_EQ("v1.0/alpha", GetVersion(node)); |
| 367 } | 384 } |
| 368 | 385 |
| 369 // Verifies that the stars.userEdit field is set appropriately when editing a | 386 // Verifies that duplicate nodes are reset when the model is created. |
| 370 // node. | 387 TEST_F(EnhancedBookmarkModelTest, ResetDuplicateNodesOnInitialization) { |
| 371 TEST_F(EnhancedBookmarkModelTest, TestUserEdit) { | 388 model_->ShutDown(); |
| 372 const BookmarkNode* node = AddBookmark(); | |
| 373 | 389 |
| 374 model_->SetDescription(node, "foo"); | 390 const BookmarkNode* parent = bookmark_model_->other_node(); |
| 375 std::string user_edit; | 391 const BookmarkNode* node1 = bookmark_model_->AddURL( |
| 376 ASSERT_TRUE(node->GetMetaInfo("stars.userEdit", &user_edit)); | 392 parent, 0, base::ASCIIToUTF16("Some title"), GURL(BOOKMARK_URL)); |
| 377 EXPECT_EQ("true", user_edit); | 393 const BookmarkNode* node2 = bookmark_model_->AddURL( |
| 394 parent, 0, base::ASCIIToUTF16("Some title"), GURL(BOOKMARK_URL)); | |
| 395 const BookmarkNode* node3 = bookmark_model_->AddURL( | |
| 396 parent, 0, base::ASCIIToUTF16("Some title"), GURL(BOOKMARK_URL)); | |
| 397 const BookmarkNode* node4 = bookmark_model_->AddURL( | |
| 398 parent, 0, base::ASCIIToUTF16("Some title"), GURL(BOOKMARK_URL)); | |
| 399 | |
| 400 bookmark_model_->SetNodeMetaInfo(node1, "stars.id", "c_1"); | |
| 401 bookmark_model_->SetNodeMetaInfo(node2, "stars.id", "c_2"); | |
| 402 bookmark_model_->SetNodeMetaInfo(node3, "stars.id", "c_1"); | |
| 403 bookmark_model_->SetNodeMetaInfo(node4, "stars.id", "c_1"); | |
| 404 EXPECT_EQ("c_1", GetId(node1)); | |
| 405 EXPECT_EQ("c_2", GetId(node2)); | |
| 406 EXPECT_EQ("c_1", GetId(node3)); | |
| 407 EXPECT_EQ("c_1", GetId(node4)); | |
| 408 | |
| 409 model_.reset(new EnhancedBookmarkModel(bookmark_model_.get(), "v2.0")); | |
| 410 | |
| 411 EXPECT_EQ("c_2", GetId(node2)); | |
| 412 EXPECT_EQ("", GetId(node1)); | |
| 413 EXPECT_EQ("", GetId(node3)); | |
| 414 EXPECT_EQ("", GetId(node4)); | |
| 415 EXPECT_EQ("c_1", GetOldId(node1)); | |
| 416 EXPECT_EQ("c_1", GetOldId(node3)); | |
| 417 EXPECT_EQ("c_1", GetOldId(node4)); | |
| 418 EXPECT_EQ("v2.0", GetVersion(node1)); | |
| 419 EXPECT_EQ("v2.0", GetVersion(node3)); | |
| 420 EXPECT_EQ("v2.0", GetVersion(node4)); | |
| 421 } | |
| 422 | |
| 423 // Verifies that duplicate nodes are reset if one is created. | |
| 424 TEST_F(EnhancedBookmarkModelTest, ResetDuplicateAddedNodes) { | |
| 425 BookmarkNode::MetaInfoMap meta_info; | |
| 426 meta_info["stars.id"] = "c_1"; | |
| 427 const BookmarkNode* parent = bookmark_model_->other_node(); | |
| 428 | |
| 429 const BookmarkNode* node1 = | |
| 430 bookmark_model_->AddURLWithCreationTimeAndMetaInfo( | |
| 431 parent, | |
| 432 0, | |
| 433 base::ASCIIToUTF16("Some title"), | |
| 434 GURL(BOOKMARK_URL), | |
| 435 base::Time::Now(), | |
| 436 &meta_info); | |
| 437 EXPECT_EQ("c_1", GetId(node1)); | |
| 438 | |
| 439 const BookmarkNode* node2 = | |
| 440 bookmark_model_->AddURLWithCreationTimeAndMetaInfo( | |
| 441 parent, | |
| 442 0, | |
| 443 base::ASCIIToUTF16("Some title"), | |
| 444 GURL(BOOKMARK_URL), | |
| 445 base::Time::Now(), | |
| 446 &meta_info); | |
| 447 EXPECT_EQ("", GetId(node1)); | |
| 448 EXPECT_EQ("", GetId(node2)); | |
| 449 EXPECT_EQ("c_1", GetOldId(node1)); | |
| 450 EXPECT_EQ("c_1", GetOldId(node2)); | |
| 451 EXPECT_EQ("v1.0", GetVersion(node1)); | |
| 452 EXPECT_EQ("v1.0", GetVersion(node2)); | |
| 453 } | |
| 454 | |
| 455 // Verifies that duplicate nodes are reset if an id is changed to a duplicate | |
| 456 // value. | |
| 457 TEST_F(EnhancedBookmarkModelTest, ResetDuplicateChangedNodes) { | |
| 458 const BookmarkNode* node1 = AddBookmark(); | |
| 459 const BookmarkNode* node2 = AddBookmark(); | |
| 460 | |
| 461 bookmark_model_->SetNodeMetaInfo(node1, "stars.id", "c_1"); | |
| 462 EXPECT_EQ("c_1", GetId(node1)); | |
| 463 | |
| 464 bookmark_model_->SetNodeMetaInfo(node2, "stars.id", "c_1"); | |
| 465 EXPECT_EQ("", GetId(node1)); | |
| 466 EXPECT_EQ("", GetId(node2)); | |
| 467 EXPECT_EQ("c_1", GetOldId(node1)); | |
| 468 EXPECT_EQ("c_1", GetOldId(node2)); | |
| 469 EXPECT_EQ("v1.0", GetVersion(node1)); | |
| 470 EXPECT_EQ("v1.0", GetVersion(node2)); | |
| 378 } | 471 } |
| 379 | 472 |
|
noyau (Ping after 24h)
2014/09/18 08:43:22
Can you add tests to make sure the observer method
Rune Fevang
2014/09/19 01:18:07
Done.
| |
| 380 } // namespace | 473 } // namespace |
| OLD | NEW |