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

Unified Diff: components/enhanced_bookmarks/enhanced_bookmark_model_unittest.cc

Issue 563363002: Only set remote id during url node creation. (Closed) Base URL: https://chromium.googlesource.com/chromium/src@master
Patch Set: Created 6 years, 3 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 side-by-side diff with in-line comments
Download patch
« no previous file with comments | « components/enhanced_bookmarks/enhanced_bookmark_model_observer.h ('k') | no next file » | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: components/enhanced_bookmarks/enhanced_bookmark_model_unittest.cc
diff --git a/components/enhanced_bookmarks/enhanced_bookmark_model_unittest.cc b/components/enhanced_bookmarks/enhanced_bookmark_model_unittest.cc
index 5263297bb6f32af4d292dabfd45308e759a91e5e..e5b72109433307e31519dcf0854e70b40f8053d3 100644
--- a/components/enhanced_bookmarks/enhanced_bookmark_model_unittest.cc
+++ b/components/enhanced_bookmarks/enhanced_bookmark_model_unittest.cc
@@ -7,34 +7,55 @@
#include "base/base64.h"
#include "base/macros.h"
#include "base/memory/scoped_ptr.h"
+#include "base/message_loop/message_loop.h"
+#include "base/run_loop.h"
#include "base/strings/string_util.h"
#include "base/strings/utf_string_conversions.h"
#include "components/bookmarks/browser/bookmark_model.h"
#include "components/bookmarks/browser/bookmark_node.h"
#include "components/bookmarks/test/test_bookmark_client.h"
+#include "components/enhanced_bookmarks/enhanced_bookmark_model_observer.h"
#include "components/enhanced_bookmarks/proto/metadata.pb.h"
#include "testing/gtest/include/gtest/gtest.h"
#include "url/gurl.h"
-namespace {
+using enhanced_bookmarks::EnhancedBookmarkModel;
+namespace {
const std::string BOOKMARK_URL("http://example.com/index.html");
+} // namespace
-class EnhancedBookmarkModelTest : public testing::Test {
+class EnhancedBookmarkModelTest
+ : public testing::Test,
+ public enhanced_bookmarks::EnhancedBookmarkModelObserver {
public:
- EnhancedBookmarkModelTest() {}
+ EnhancedBookmarkModelTest()
+ : loaded_calls_(0),
+ shutting_down_calls_(0),
+ added_calls_(0),
+ removed_calls_(0),
+ all_user_nodes_removed_calls_(0),
+ remote_id_changed_calls_(0),
+ last_added_(NULL),
+ last_removed_(NULL),
+ last_remote_id_node_(NULL) {}
virtual ~EnhancedBookmarkModelTest() {}
virtual void SetUp() OVERRIDE {
- bookmarks::TestBookmarkClient bookmark_client;
- bookmark_model_.reset(bookmark_client.CreateModel().release());
- model_.reset(new enhanced_bookmarks::EnhancedBookmarkModel(
- bookmark_model_.get(), "v1.0"));
+ message_loop_.reset(new base::MessageLoop(base::MessageLoop::TYPE_DEFAULT));
+ bookmark_client_.reset(new bookmarks::TestBookmarkClient());
+ bookmark_model_.reset(bookmark_client_->CreateModel().release());
+ model_.reset(new EnhancedBookmarkModel(bookmark_model_.get(), "v1.0"));
+ model_->AddObserver(this);
}
virtual void TearDown() OVERRIDE {
+ if (model_)
+ model_->ShutDown();
model_.reset();
bookmark_model_.reset();
+ bookmark_client_.reset();
+ message_loop_.reset();
}
protected:
@@ -48,26 +69,83 @@ class EnhancedBookmarkModelTest : public testing::Test {
const BookmarkNode* AddBookmark(const std::string& name,
const BookmarkNode* parent) {
- return bookmark_model_->AddURL(parent,
- 0, // index.
- base::ASCIIToUTF16(name),
- GURL(BOOKMARK_URL));
+ return model_->AddURL(parent,
+ 0, // index.
+ base::ASCIIToUTF16(name),
+ GURL(BOOKMARK_URL),
+ base::Time::Now());
}
const BookmarkNode* AddFolder(const std::string& name,
const BookmarkNode* parent) {
- return bookmark_model_->AddFolder(parent, 0, base::ASCIIToUTF16(name));
+ return model_->AddFolder(parent, 0, base::ASCIIToUTF16(name));
}
- std::string GetVersionForNode(const BookmarkNode* node) {
- std::string version;
- if (!node->GetMetaInfo("stars.version", &version))
+ std::string GetVersion(const BookmarkNode* node) {
+ return GetMetaInfoField(node, "stars.version");
+ }
+
+ std::string GetId(const BookmarkNode* node) {
+ return GetMetaInfoField(node, "stars.id");
+ }
+
+ std::string GetOldId(const BookmarkNode* node) {
+ return GetMetaInfoField(node, "stars.oldId");
+ }
+
+ std::string GetMetaInfoField(const BookmarkNode* node,
+ const std::string& name) {
+ std::string value;
+ if (!node->GetMetaInfo(name, &value))
return std::string();
- return version;
+ return value;
}
+ scoped_ptr<base::MessageLoop> message_loop_;
+ scoped_ptr<bookmarks::TestBookmarkClient> bookmark_client_;
scoped_ptr<BookmarkModel> bookmark_model_;
- scoped_ptr<enhanced_bookmarks::EnhancedBookmarkModel> model_;
+ scoped_ptr<EnhancedBookmarkModel> model_;
+
+ // EnhancedBookmarkModelObserver implementation:
+ virtual void EnhancedBookmarkModelLoaded() OVERRIDE { loaded_calls_++; }
+ virtual void EnhancedBookmarkModelShuttingDown() OVERRIDE {
+ shutting_down_calls_++;
+ }
+ virtual void EnhancedBookmarkAdded(const BookmarkNode* node) OVERRIDE {
+ added_calls_++;
+ last_added_ = node;
+ }
+ virtual void EnhancedBookmarkRemoved(const BookmarkNode* node) OVERRIDE {
+ removed_calls_++;
+ last_removed_ = node;
+ }
+ virtual void EnhancedBookmarkAllUserNodesRemoved() OVERRIDE {
+ all_user_nodes_removed_calls_++;
+ }
+ virtual void EnhancedBookmarkRemoteIdChanged(
+ const BookmarkNode* node,
+ const std::string& old_remote_id,
+ const std::string& remote_id) OVERRIDE {
+ remote_id_changed_calls_++;
+ last_remote_id_node_ = node;
+ last_old_remote_id_ = old_remote_id;
+ last_remote_id_ = remote_id;
+ }
+
+ // Observer call counters:
+ int loaded_calls_;
+ int shutting_down_calls_;
+ int added_calls_;
+ int removed_calls_;
+ int all_user_nodes_removed_calls_;
+ int remote_id_changed_calls_;
+
+ // Observer parameter cache:
+ const BookmarkNode* last_added_;
+ const BookmarkNode* last_removed_;
+ const BookmarkNode* last_remote_id_node_;
+ std::string last_old_remote_id_;
+ std::string last_remote_id_;
private:
DISALLOW_COPY_AND_ASSIGN(EnhancedBookmarkModelTest);
@@ -253,7 +331,7 @@ TEST_F(EnhancedBookmarkModelTest, TestEncodeDecode) {
EXPECT_EQ(url, GURL("http://example.com/i.jpg"));
EXPECT_EQ(width, 22);
EXPECT_EQ(height, 33);
- EXPECT_EQ("v1.0", GetVersionForNode(node));
+ EXPECT_EQ("v1.0", GetVersion(node));
}
TEST_F(EnhancedBookmarkModelTest, TestDoubleEncodeDecode) {
@@ -276,25 +354,26 @@ TEST_F(EnhancedBookmarkModelTest, TestDoubleEncodeDecode) {
EXPECT_EQ(url, GURL("http://example.com/i.jpg"));
EXPECT_EQ(width, 33);
EXPECT_EQ(height, 44);
- EXPECT_EQ("v1.0", GetVersionForNode(node));
+ EXPECT_EQ("v1.0", GetVersion(node));
}
TEST_F(EnhancedBookmarkModelTest, TestRemoteId) {
const BookmarkNode* node = AddBookmark();
- const BookmarkNode* folder_node = AddFolder();
-
- std::string remote_id = model_->GetRemoteId(node);
- // First call creates the UUID, second call should return the same.
- EXPECT_EQ(remote_id, model_->GetRemoteId(node));
-
// Verify that the remote id starts with the correct prefix.
- EXPECT_TRUE(StartsWithASCII(remote_id, "ebc_", true));
- std::string folder_remote_id = model_->GetRemoteId(folder_node);
- EXPECT_TRUE(StartsWithASCII(folder_remote_id, "ebf_", true));
-
- // Verifiy version field was set.
- EXPECT_EQ("v1.0", GetVersionForNode(node));
- EXPECT_EQ("v1.0", GetVersionForNode(folder_node));
+ EXPECT_TRUE(StartsWithASCII(model_->GetRemoteId(node), "ebc_", true));
+
+ // Getting the remote id for nodes that don't have them should return the
+ // empty string.
+ const BookmarkNode* existing_node =
+ bookmark_model_->AddURL(bookmark_model_->other_node(),
+ 0,
+ base::ASCIIToUTF16("Title"),
+ GURL(GURL(BOOKMARK_URL)));
+ EXPECT_TRUE(model_->GetRemoteId(existing_node).empty());
+
+ // Folder nodes should not have a remote id set on creation.
+ const BookmarkNode* folder_node = AddFolder();
+ EXPECT_TRUE(model_->GetRemoteId(folder_node).empty());
}
TEST_F(EnhancedBookmarkModelTest, TestEmptyDescription) {
@@ -313,7 +392,7 @@ TEST_F(EnhancedBookmarkModelTest, TestDescription) {
// Check the description is the one that was set.
EXPECT_EQ(model_->GetDescription(node), description);
- EXPECT_EQ("v1.0", GetVersionForNode(node));
+ EXPECT_EQ("v1.0", GetVersion(node));
}
// If there is no notes field, the description should fall back on the snippet.
@@ -349,10 +428,10 @@ TEST_F(EnhancedBookmarkModelTest, TestDescriptionFallback) {
// EnhancedBookmarkModel makes a change to a node.
TEST_F(EnhancedBookmarkModelTest, TestVersionField) {
const BookmarkNode* node = AddBookmark();
- EXPECT_EQ("", GetVersionForNode(node));
+ EXPECT_EQ("", GetVersion(node));
model_->SetDescription(node, "foo");
- EXPECT_EQ("v1.0", GetVersionForNode(node));
+ EXPECT_EQ("v1.0", GetVersion(node));
// Add a suffix to the version to set.
model_->SetVersionSuffix("alpha");
@@ -360,21 +439,213 @@ TEST_F(EnhancedBookmarkModelTest, TestVersionField) {
model_->SetDescription(node, "foo");
// Since the description didn't actually change, the version field should
// not either.
- EXPECT_EQ("v1.0", GetVersionForNode(node));
+ EXPECT_EQ("v1.0", GetVersion(node));
model_->SetDescription(node, "bar");
- EXPECT_EQ("v1.0/alpha", GetVersionForNode(node));
+ EXPECT_EQ("v1.0/alpha", GetVersion(node));
+}
+
+// Verifies that duplicate nodes are reset when the model is created.
+TEST_F(EnhancedBookmarkModelTest, ResetDuplicateNodesOnInitialization) {
+ model_->ShutDown();
+
+ const BookmarkNode* parent = bookmark_model_->other_node();
+ const BookmarkNode* node1 = bookmark_model_->AddURL(
+ parent, 0, base::ASCIIToUTF16("Some title"), GURL(BOOKMARK_URL));
+ const BookmarkNode* node2 = bookmark_model_->AddURL(
+ parent, 0, base::ASCIIToUTF16("Some title"), GURL(BOOKMARK_URL));
+ const BookmarkNode* node3 = bookmark_model_->AddURL(
+ parent, 0, base::ASCIIToUTF16("Some title"), GURL(BOOKMARK_URL));
+ const BookmarkNode* node4 = bookmark_model_->AddURL(
+ parent, 0, base::ASCIIToUTF16("Some title"), GURL(BOOKMARK_URL));
+
+ bookmark_model_->SetNodeMetaInfo(node1, "stars.id", "c_1");
+ bookmark_model_->SetNodeMetaInfo(node2, "stars.id", "c_2");
+ bookmark_model_->SetNodeMetaInfo(node3, "stars.id", "c_1");
+ bookmark_model_->SetNodeMetaInfo(node4, "stars.id", "c_1");
+ EXPECT_EQ("c_1", GetId(node1));
+ EXPECT_EQ("c_2", GetId(node2));
+ EXPECT_EQ("c_1", GetId(node3));
+ EXPECT_EQ("c_1", GetId(node4));
+
+ model_.reset(new EnhancedBookmarkModel(bookmark_model_.get(), "v2.0"));
+ base::RunLoop().RunUntilIdle();
+ EXPECT_EQ("c_2", GetId(node2));
+ EXPECT_EQ("", GetId(node1));
+ EXPECT_EQ("", GetId(node3));
+ EXPECT_EQ("", GetId(node4));
+ EXPECT_EQ("c_1", GetOldId(node1));
+ EXPECT_EQ("c_1", GetOldId(node3));
+ EXPECT_EQ("c_1", GetOldId(node4));
+ EXPECT_EQ("v2.0", GetVersion(node1));
+ EXPECT_EQ("v2.0", GetVersion(node3));
+ EXPECT_EQ("v2.0", GetVersion(node4));
+}
+
+// Verifies that duplicate nodes are reset if one is created.
+TEST_F(EnhancedBookmarkModelTest, ResetDuplicateAddedNodes) {
+ BookmarkNode::MetaInfoMap meta_info;
+ meta_info["stars.id"] = "c_1";
+ const BookmarkNode* parent = bookmark_model_->other_node();
+
+ const BookmarkNode* node1 =
+ bookmark_model_->AddURLWithCreationTimeAndMetaInfo(
+ parent,
+ 0,
+ base::ASCIIToUTF16("Some title"),
+ GURL(BOOKMARK_URL),
+ base::Time::Now(),
+ &meta_info);
+ EXPECT_EQ("c_1", GetId(node1));
+
+ const BookmarkNode* node2 =
+ bookmark_model_->AddURLWithCreationTimeAndMetaInfo(
+ parent,
+ 0,
+ base::ASCIIToUTF16("Some title"),
+ GURL(BOOKMARK_URL),
+ base::Time::Now(),
+ &meta_info);
+
+ base::RunLoop().RunUntilIdle();
+ EXPECT_EQ("", GetId(node1));
+ EXPECT_EQ("", GetId(node2));
+ EXPECT_EQ("c_1", GetOldId(node1));
+ EXPECT_EQ("c_1", GetOldId(node2));
+ EXPECT_EQ("v1.0", GetVersion(node1));
+ EXPECT_EQ("v1.0", GetVersion(node2));
}
-// Verifies that the stars.userEdit field is set appropriately when editing a
-// node.
-TEST_F(EnhancedBookmarkModelTest, TestUserEdit) {
+// Verifies that duplicate nodes are reset if an id is changed to a duplicate
+// value.
+TEST_F(EnhancedBookmarkModelTest, ResetDuplicateChangedNodes) {
+ const BookmarkNode* node1 = AddBookmark();
+ const BookmarkNode* node2 = AddBookmark();
+
+ bookmark_model_->SetNodeMetaInfo(node1, "stars.id", "c_1");
+ EXPECT_EQ("c_1", GetId(node1));
+
+ bookmark_model_->SetNodeMetaInfo(node2, "stars.id", "c_1");
+ base::RunLoop().RunUntilIdle();
+ EXPECT_EQ("", GetId(node1));
+ EXPECT_EQ("", GetId(node2));
+ EXPECT_EQ("c_1", GetOldId(node1));
+ EXPECT_EQ("c_1", GetOldId(node2));
+ EXPECT_EQ("v1.0", GetVersion(node1));
+ EXPECT_EQ("v1.0", GetVersion(node2));
+}
+
+TEST_F(EnhancedBookmarkModelTest, SetMultipleMetaInfo) {
const BookmarkNode* node = AddBookmark();
+ BookmarkNode::MetaInfoMap meta_info;
+ meta_info["a"] = "aa";
+ meta_info["b"] = "bb";
+
+ model_->SetVersionSuffix("1");
+ model_->SetMultipleMetaInfo(node, meta_info);
+ EXPECT_EQ("aa", GetMetaInfoField(node, "a"));
+ EXPECT_EQ("bb", GetMetaInfoField(node, "b"));
+ EXPECT_EQ("v1.0/1", GetVersion(node));
+
+ // Not present fields does not erase the fields already set on the node.
+ meta_info["a"] = "aaa";
+ model_->SetVersionSuffix("2");
+ model_->SetMultipleMetaInfo(node, meta_info);
+ EXPECT_EQ("aaa", GetMetaInfoField(node, "a"));
+ EXPECT_EQ("bb", GetMetaInfoField(node, "b"));
+ EXPECT_EQ("v1.0/2", GetVersion(node));
+
+ // Not actually changing any values should not set the version field.
+ model_->SetVersionSuffix("3");
+ model_->SetMultipleMetaInfo(node, meta_info);
+ EXPECT_EQ("v1.0/2", GetVersion(node));
+}
- model_->SetDescription(node, "foo");
- std::string user_edit;
- ASSERT_TRUE(node->GetMetaInfo("stars.userEdit", &user_edit));
- EXPECT_EQ("true", user_edit);
+TEST_F(EnhancedBookmarkModelTest, ObserverShuttingDownEvent) {
+ EXPECT_EQ(0, shutting_down_calls_);
+ model_->ShutDown();
+ EXPECT_EQ(1, shutting_down_calls_);
+ model_.reset();
}
-} // namespace
+TEST_F(EnhancedBookmarkModelTest, ObserverNodeAddedEvent) {
+ EXPECT_EQ(0, added_calls_);
+ const BookmarkNode* node = AddBookmark();
+ EXPECT_EQ(1, added_calls_);
+ EXPECT_EQ(node, last_added_);
+
+ const BookmarkNode* folder = AddFolder();
+ EXPECT_EQ(2, added_calls_);
+ EXPECT_EQ(folder, last_added_);
+}
+
+TEST_F(EnhancedBookmarkModelTest, ObserverNodeRemovedEvent) {
+ const BookmarkNode* node = AddBookmark();
+ const BookmarkNode* folder = AddFolder();
+
+ EXPECT_EQ(0, removed_calls_);
+ bookmark_model_->Remove(node->parent(), node->parent()->GetIndexOf(node));
+ EXPECT_EQ(1, removed_calls_);
+ EXPECT_EQ(node, last_removed_);
+
+ bookmark_model_->Remove(folder->parent(),
+ folder->parent()->GetIndexOf(folder));
+ EXPECT_EQ(2, removed_calls_);
+ EXPECT_EQ(folder, last_removed_);
+}
+
+TEST_F(EnhancedBookmarkModelTest, ObserverAllUserNodesRemovedEvent) {
+ AddBookmark();
+ AddFolder();
+ EXPECT_EQ(0, all_user_nodes_removed_calls_);
+ bookmark_model_->RemoveAllUserBookmarks();
+ EXPECT_EQ(0, removed_calls_);
+ EXPECT_EQ(1, all_user_nodes_removed_calls_);
+}
+
+TEST_F(EnhancedBookmarkModelTest, ObserverRemoteIdChangedEvent) {
+ const BookmarkNode* node1 = AddFolder();
+ const BookmarkNode* node2 = AddFolder();
+
+ EXPECT_EQ(0, remote_id_changed_calls_);
+ bookmark_model_->SetNodeMetaInfo(node1, "stars.id", "c_1");
+ base::RunLoop().RunUntilIdle();
+ EXPECT_EQ(1, remote_id_changed_calls_);
+ EXPECT_EQ(node1, last_remote_id_node_);
+ EXPECT_EQ("", last_old_remote_id_);
+ EXPECT_EQ("c_1", last_remote_id_);
+
+ bookmark_model_->SetNodeMetaInfo(node2, "stars.id", "c_2");
+ base::RunLoop().RunUntilIdle();
+ EXPECT_EQ(2, remote_id_changed_calls_);
+ EXPECT_EQ(node2, last_remote_id_node_);
+ EXPECT_EQ("", last_old_remote_id_);
+ EXPECT_EQ("c_2", last_remote_id_);
+
+ bookmark_model_->SetNodeMetaInfo(node1, "stars.id", "c_3");
+ base::RunLoop().RunUntilIdle();
+ EXPECT_EQ(3, remote_id_changed_calls_);
+ EXPECT_EQ(node1, last_remote_id_node_);
+ EXPECT_EQ("c_1", last_old_remote_id_);
+ EXPECT_EQ("c_3", last_remote_id_);
+
+ // Set to duplicate ids.
+ bookmark_model_->SetNodeMetaInfo(node2, "stars.id", "c_3");
+ EXPECT_EQ(4, remote_id_changed_calls_);
+ EXPECT_EQ(node2, last_remote_id_node_);
+ EXPECT_EQ("c_2", last_old_remote_id_);
+ EXPECT_EQ("c_3", last_remote_id_);
+ base::RunLoop().RunUntilIdle();
+ EXPECT_EQ(6, remote_id_changed_calls_);
+ EXPECT_EQ("", last_remote_id_);
+}
+
+TEST_F(EnhancedBookmarkModelTest, ShutDownWhileResetDuplicationScheduled) {
+ const BookmarkNode* node1 = AddBookmark();
+ const BookmarkNode* node2 = AddBookmark();
+ bookmark_model_->SetNodeMetaInfo(node1, "stars.id", "c_1");
+ bookmark_model_->SetNodeMetaInfo(node2, "stars.id", "c_1");
+ model_->ShutDown();
+ model_.reset();
+ base::RunLoop().RunUntilIdle();
+}
« no previous file with comments | « components/enhanced_bookmarks/enhanced_bookmark_model_observer.h ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698