Index: components/bookmarks/browser/bookmark_model_unittest.cc |
diff --git a/components/bookmarks/browser/bookmark_model_unittest.cc b/components/bookmarks/browser/bookmark_model_unittest.cc |
index ac22fbf35892ef6a175ebe61cd0e9a1b23f0eb38..a6ae03bebc081776b9d394dcde081e08d84bd3e9 100644 |
--- a/components/bookmarks/browser/bookmark_model_unittest.cc |
+++ b/components/bookmarks/browser/bookmark_model_unittest.cc |
@@ -18,6 +18,7 @@ |
#include "base/strings/utf_string_conversions.h" |
#include "base/time/time.h" |
#include "components/bookmarks/browser/bookmark_model_observer.h" |
+#include "components/bookmarks/browser/bookmark_undo_delegate.h" |
#include "components/bookmarks/browser/bookmark_utils.h" |
#include "components/bookmarks/test/bookmark_test_helpers.h" |
#include "components/bookmarks/test/test_bookmark_client.h" |
@@ -211,7 +212,8 @@ void VerifyNoDuplicateIDs(BookmarkModel* model) { |
} |
class BookmarkModelTest : public testing::Test, |
- public BookmarkModelObserver { |
+ public BookmarkModelObserver, |
+ public BookmarkUndoDelegate { |
public: |
struct ObserverDetails { |
ObserverDetails() { |
@@ -245,6 +247,23 @@ class BookmarkModelTest : public testing::Test, |
int index2_; |
}; |
+ struct NodeRemovalDetail { |
+ NodeRemovalDetail(const BookmarkNode* parent, |
+ int index, |
+ const BookmarkNode* node) |
+ : parent_node_id(parent->id()), index(index), node_id(node->id()) {} |
+ |
+ bool operator==(const NodeRemovalDetail& other) const { |
+ return parent_node_id == other.parent_node_id && |
+ index == other.index && |
+ node_id == other.node_id; |
+ } |
+ |
+ int64_t parent_node_id; |
+ int index; |
+ int64_t node_id; |
+ }; |
+ |
BookmarkModelTest() : model_(client_.CreateModel()) { |
model_->AddObserver(this); |
ClearCounts(); |
@@ -278,6 +297,8 @@ class BookmarkModelTest : public testing::Test, |
++before_remove_count_; |
} |
+ void SetUndoProvider(BookmarkUndoProvider* provider) override {} |
+ |
void BookmarkNodeRemoved(BookmarkModel* model, |
const BookmarkNode* parent, |
int old_index, |
@@ -332,12 +353,29 @@ class BookmarkModelTest : public testing::Test, |
++before_remove_all_count_; |
} |
+ void GroupedBookmarkChangesBeginning(BookmarkModel* model) override { |
+ ++grouped_changes_beginning_count_; |
+ } |
+ |
+ void GroupedBookmarkChangesEnded(BookmarkModel* model) override { |
+ ++grouped_changes_ended_count_; |
+ } |
+ |
+ void OnBookmarkNodeRemoved(BookmarkModel* model, |
+ const BookmarkNode* parent, |
+ int index, |
+ scoped_ptr<BookmarkNode> node) override { |
+ node_removal_details_.push_back( |
+ NodeRemovalDetail(parent, index, node.get())); |
+ } |
+ |
void ClearCounts() { |
added_count_ = moved_count_ = removed_count_ = changed_count_ = |
reordered_count_ = extensive_changes_beginning_count_ = |
extensive_changes_ended_count_ = all_bookmarks_removed_ = |
before_remove_count_ = before_change_count_ = before_reorder_count_ = |
- before_remove_all_count_ = 0; |
+ before_remove_all_count_ = grouped_changes_beginning_count_ = |
+ grouped_changes_ended_count_ = 0; |
} |
void AssertObserverCount(int added_count, |
@@ -368,6 +406,14 @@ class BookmarkModelTest : public testing::Test, |
EXPECT_EQ(extensive_changes_ended_count, extensive_changes_ended_count_); |
} |
+ void AssertGroupedChangesObserverCount( |
+ int grouped_changes_beginning_count, |
+ int grouped_changes_ended_count) { |
+ EXPECT_EQ(grouped_changes_beginning_count, |
+ grouped_changes_beginning_count_); |
+ EXPECT_EQ(grouped_changes_ended_count, grouped_changes_ended_count_); |
+ } |
+ |
int AllNodesRemovedObserverCount() const { return all_bookmarks_removed_; } |
BookmarkPermanentNode* ReloadModelWithExtraNode() { |
@@ -391,6 +437,7 @@ class BookmarkModelTest : public testing::Test, |
TestBookmarkClient client_; |
scoped_ptr<BookmarkModel> model_; |
ObserverDetails observer_details_; |
+ std::vector<NodeRemovalDetail> node_removal_details_; |
private: |
int added_count_; |
@@ -405,6 +452,8 @@ class BookmarkModelTest : public testing::Test, |
int before_change_count_; |
int before_reorder_count_; |
int before_remove_all_count_; |
+ int grouped_changes_beginning_count_; |
+ int grouped_changes_ended_count_; |
DISALLOW_COPY_AND_ASSIGN(BookmarkModelTest); |
}; |
@@ -621,7 +670,8 @@ TEST_F(BookmarkModelTest, RemoveAllUserBookmarks) { |
// Add a url to bookmark bar. |
base::string16 title(ASCIIToUTF16("foo")); |
GURL url("http://foo.com"); |
- model_->AddURL(bookmark_bar_node, 0, title, url); |
+ const BookmarkNode* url_node = |
+ model_->AddURL(bookmark_bar_node, 0, title, url); |
// Add a folder with child URL. |
const BookmarkNode* folder = model_->AddFolder(bookmark_bar_node, 0, title); |
@@ -630,14 +680,29 @@ TEST_F(BookmarkModelTest, RemoveAllUserBookmarks) { |
AssertObserverCount(3, 0, 0, 0, 0, 0, 0, 0, 0); |
ClearCounts(); |
+ int permanent_node_count = model_->root_node()->child_count(); |
+ |
+ NodeRemovalDetail expected_node_removal_details[] = { |
+ NodeRemovalDetail(bookmark_bar_node, 1, url_node), |
+ NodeRemovalDetail(bookmark_bar_node, 0, folder), |
+ }; |
+ |
+ model_->SetUndoDelegate(this); |
model_->RemoveAllUserBookmarks(); |
EXPECT_EQ(0, bookmark_bar_node->child_count()); |
+ // No permanent node should be removed. |
+ EXPECT_EQ(permanent_node_count, model_->root_node()->child_count()); |
// No individual BookmarkNodeRemoved events are fired, so removed count |
// should be 0. |
AssertObserverCount(0, 0, 0, 0, 0, 0, 0, 0, 1); |
AssertExtensiveChangesObserverCount(1, 1); |
+ AssertGroupedChangesObserverCount(1, 1); |
+ EXPECT_EQ(1, AllNodesRemovedObserverCount()); |
EXPECT_EQ(1, AllNodesRemovedObserverCount()); |
+ ASSERT_EQ(2u, node_removal_details_.size()); |
+ EXPECT_EQ(expected_node_removal_details[0], node_removal_details_[0]); |
+ EXPECT_EQ(expected_node_removal_details[1], node_removal_details_[1]); |
} |
TEST_F(BookmarkModelTest, SetTitle) { |