Index: ios/chrome/browser/ui/bookmarks/bookmark_home_view_controller_unittest.mm |
diff --git a/ios/chrome/browser/ui/bookmarks/bookmark_home_view_controller_unittest.mm b/ios/chrome/browser/ui/bookmarks/bookmark_home_view_controller_unittest.mm |
new file mode 100644 |
index 0000000000000000000000000000000000000000..652d18d3ac0752337d614fe99fd100002ee6868a |
--- /dev/null |
+++ b/ios/chrome/browser/ui/bookmarks/bookmark_home_view_controller_unittest.mm |
@@ -0,0 +1,89 @@ |
+// Copyright 2013 The Chromium Authors. All rights reserved. |
+// Use of this source code is governed by a BSD-style license that can be |
+// found in the LICENSE file. |
+ |
+#include "base/mac/scoped_nsobject.h" |
+#include "components/bookmarks/browser/bookmark_model.h" |
+#include "components/sync_preferences/testing_pref_service_syncable.h" |
+#import "ios/chrome/browser/browser_state/test_chrome_browser_state.h" |
+#import "ios/chrome/browser/ui/bookmarks/bookmark_home_handset_view_controller.h" |
+#include "ios/chrome/browser/ui/bookmarks/bookmark_ios_unittest.h" |
+#import "ios/chrome/browser/ui/bookmarks/bookmark_promo_controller.h" |
+#import "ios/chrome/browser/ui/bookmarks/bookmark_utils_ios.h" |
+ |
+using bookmarks::BookmarkNode; |
+ |
+// A partial mock subclass that doesn't load any heavy weight subclasses. |
+@interface MockBookmarkHomeHandsetViewController |
+ : BookmarkHomeHandsetViewController |
+@end |
+ |
+@implementation MockBookmarkHomeHandsetViewController |
+ |
+- (void)hideEditingBarAnimated:(BOOL)animated { |
+ // Do nothing. |
+ // The animation would delay the release of the |
+ // BookmarkHomeHandsetViewController and make the test fail by keeping |
+ // the view controller alive after the test is shutdown leading |
+ // to DCHECK failure on the sign in manager. |
+} |
+ |
+- (void)ensureAllViewExists { |
+ // Do nothing. |
+} |
+- (void)loadImageService { |
+ // Do nothing. |
+} |
+@end |
+ |
+namespace { |
+ |
+class BookmarkHomeViewControllerTest : public BookmarkIOSUnitTest { |
+ public: |
+ void SetUp() override { |
+ BookmarkIOSUnitTest::SetUp(); |
+ sync_preferences::TestingPrefServiceSyncable* pref = |
+ chrome_browser_state_->GetTestingPrefService(); |
+ [BookmarkPromoController registerBrowserStatePrefs:pref->registry()]; |
+ } |
+}; |
+ |
+TEST_F(BookmarkHomeViewControllerTest, DeleteNodesUpdatesEditNodes) { |
+ const BookmarkNode* mobileNode = _bookmarkModel->mobile_node(); |
+ const BookmarkNode* f1 = AddFolder(mobileNode, @"f1"); |
+ const BookmarkNode* a = AddBookmark(mobileNode, @"a"); |
+ const BookmarkNode* b = AddBookmark(mobileNode, @"b"); |
+ const BookmarkNode* f2 = AddFolder(mobileNode, @"f2"); |
+ |
+ const BookmarkNode* f1a = AddBookmark(f1, @"f1a"); |
+ AddBookmark(f1, @"f1b"); |
+ AddBookmark(f1, @"f1c"); |
+ const BookmarkNode* f2a = AddBookmark(f2, @"f2a"); |
+ AddBookmark(f2, @"f2b"); |
+ |
+ std::set<const BookmarkNode*> toDelete; |
+ toDelete.insert(b); |
+ toDelete.insert(f1a); |
+ toDelete.insert(f1); |
+ toDelete.insert(f2a); |
+ |
+ base::scoped_nsobject<MockBookmarkHomeHandsetViewController> controller( |
+ [[MockBookmarkHomeHandsetViewController alloc] |
+ initWithLoader:nil |
+ browserState:chrome_browser_state_.get()]); |
+ |
+ [controller resetEditNodes]; |
+ [controller insertEditNode:f1 atIndexPath:nil]; |
+ [controller insertEditNode:a atIndexPath:nil]; |
+ [controller insertEditNode:f2 atIndexPath:nil]; |
+ |
+ bookmark_utils_ios::DeleteBookmarks(toDelete, _bookmarkModel); |
+ |
+ // After the deletion, only 'a' and 'f2' should be left. |
+ std::set<const BookmarkNode*> editingNodes = [controller editNodes]; |
+ EXPECT_EQ(editingNodes.size(), 2u); |
+ EXPECT_TRUE(editingNodes.find(a) != editingNodes.end()); |
+ EXPECT_TRUE(editingNodes.find(f2) != editingNodes.end()); |
+} |
+ |
+} // anonymous namespace |