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

Unified Diff: ios/chrome/browser/ui/history/history_collection_view_controller_unittest.mm

Issue 2590473002: Upstream Chrome on iOS source code [5/11]. (Closed)
Patch Set: Created 4 years 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
Index: ios/chrome/browser/ui/history/history_collection_view_controller_unittest.mm
diff --git a/ios/chrome/browser/ui/history/history_collection_view_controller_unittest.mm b/ios/chrome/browser/ui/history/history_collection_view_controller_unittest.mm
new file mode 100644
index 0000000000000000000000000000000000000000..322b1cc8fb09915ded45859f3c4e0febb01a7f44
--- /dev/null
+++ b/ios/chrome/browser/ui/history/history_collection_view_controller_unittest.mm
@@ -0,0 +1,191 @@
+// Copyright 2016 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.
+
+#import "ios/chrome/browser/ui/history/history_collection_view_controller.h"
+
+#include <memory>
+
+#import "base/mac/scoped_nsobject.h"
+#include "base/strings/string16.h"
+#import "base/test/ios/wait_util.h"
+#include "base/time/time.h"
+#include "ios/chrome/browser/browser_state/test_chrome_browser_state.h"
+#include "ios/chrome/browser/signin/authentication_service_factory.h"
+#include "ios/chrome/browser/signin/authentication_service_fake.h"
+#import "ios/chrome/browser/ui/history/history_entry.h"
+#import "ios/chrome/browser/ui/history/history_service_facade.h"
+#import "ios/chrome/browser/ui/history/history_service_facade_delegate.h"
+#import "ios/chrome/browser/ui/url_loader.h"
+#include "ios/chrome/test/block_cleanup_test.h"
+#include "ios/web/public/test/test_web_thread.h"
+#include "ios/web/public/test/test_web_thread_bundle.h"
+#include "testing/gtest/include/gtest/gtest.h"
+#import "third_party/ocmock/OCMock/OCMock.h"
+#import "third_party/ocmock/gtest_support.h"
+
+namespace {
+
+HistoryServiceFacade::QueryResult QueryResultWithVisits(
+ std::vector<std::pair<const GURL&, base::Time>> visits) {
+ std::vector<history::HistoryEntry> entries{};
+ for (std::pair<const GURL&, base::Time> visit : visits) {
+ history::HistoryEntry entry = history::HistoryEntry();
+ entry.url = visit.first;
+ entry.time = visit.second;
+ entries.push_back(entry);
+ }
+ HistoryServiceFacade::QueryResult result{};
+ result.entries = entries;
+ result.finished = true;
+ return result;
+}
+
+} // namespace
+
+@interface HistoryCollectionViewController (
+ Testing)<HistoryServiceFacadeDelegate>
+- (void)didPressClearBrowsingBar;
+@end
+
+class HistoryCollectionViewControllerTest : public BlockCleanupTest {
+ public:
+ HistoryCollectionViewControllerTest() {}
+ ~HistoryCollectionViewControllerTest() override {}
+
+ void SetUp() override {
+ BlockCleanupTest::SetUp();
+ DCHECK_CURRENTLY_ON(web::WebThread::UI);
+ TestChromeBrowserState::Builder builder;
+ builder.AddTestingFactory(
+ AuthenticationServiceFactory::GetInstance(),
+ AuthenticationServiceFake::CreateAuthenticationService);
+ mock_browser_state_ = builder.Build();
+ mock_delegate_.reset([[OCMockObject
+ niceMockForProtocol:@protocol(HistoryCollectionViewControllerDelegate)]
+ retain]);
+ mock_url_loader_.reset(
+ [[OCMockObject niceMockForProtocol:@protocol(UrlLoader)] retain]);
+ history_collection_view_controller_.reset(
+ [[HistoryCollectionViewController alloc]
+ initWithLoader:mock_url_loader_
+ browserState:mock_browser_state_.get()
+ delegate:mock_delegate_]);
+ }
+
+ void TearDown() override {
+ history_collection_view_controller_.reset();
+ BlockCleanupTest::TearDown();
+ }
+
+ protected:
+ web::TestWebThreadBundle thread_bundle_;
+ base::scoped_nsprotocol<id<UrlLoader>> mock_url_loader_;
+ std::unique_ptr<TestChromeBrowserState> mock_browser_state_;
+ base::scoped_nsprotocol<id<HistoryCollectionViewControllerDelegate>>
+ mock_delegate_;
+ base::scoped_nsobject<HistoryCollectionViewController>
+ history_collection_view_controller_;
+ bool privacy_settings_opened_;
+ DISALLOW_COPY_AND_ASSIGN(HistoryCollectionViewControllerTest);
+};
+
+// Tests that hasHistoryEntries property returns YES after entries have been
+// received.
+TEST_F(HistoryCollectionViewControllerTest, HasHistoryEntries) {
+ GURL url_1("http://test1");
+ HistoryServiceFacade::QueryResult query_result =
+ QueryResultWithVisits({{url_1, base::Time::Now()}});
+ [history_collection_view_controller_ historyServiceFacade:nil
+ didReceiveQueryResult:query_result];
+ EXPECT_TRUE([history_collection_view_controller_ hasHistoryEntries]);
+}
+
+// Tests adding two entries to history from the same day, then deleting the
+// first of them results in one history entry in the collection.
+TEST_F(HistoryCollectionViewControllerTest, DeleteSingleEntry) {
+ // Add history entries
+ GURL url_1("http://test1");
+ GURL url_2("http://test2");
+ HistoryServiceFacade::QueryResult query_result = QueryResultWithVisits(
+ {{url_1, base::Time::Now()}, {url_2, base::Time::Now()}});
+ [history_collection_view_controller_ historyServiceFacade:nil
+ didReceiveQueryResult:query_result];
+
+ UICollectionView* collection_view =
+ [history_collection_view_controller_ collectionView];
+ [collection_view
+ selectItemAtIndexPath:[NSIndexPath indexPathForItem:0 inSection:1]
+ animated:NO
+ scrollPosition:UICollectionViewScrollPositionNone];
+ [history_collection_view_controller_ deleteSelectedItemsFromHistory];
+
+ // Expect header section with one item and one entries section with one item.
+ EXPECT_EQ(2, [collection_view numberOfSections]);
+ EXPECT_EQ(1, [collection_view numberOfItemsInSection:0]);
+ EXPECT_EQ(1, [collection_view numberOfItemsInSection:1]);
+}
+
+// Tests that adding two entries to history from the same day then deleting
+// both of them results in only the header section in the collection.
+TEST_F(HistoryCollectionViewControllerTest, DeleteMultipleEntries) {
+ // Add history entries.
+ GURL url_1("http://test1");
+ GURL url_2("http://test2");
+ HistoryServiceFacade::QueryResult query_result = QueryResultWithVisits(
+ {{url_1, base::Time::Now()}, {url_2, base::Time::Now()}});
+ [history_collection_view_controller_ historyServiceFacade:nil
+ didReceiveQueryResult:query_result];
+
+ // Select history entries and tap delete.
+ UICollectionView* collection_view =
+ [history_collection_view_controller_ collectionView];
+ collection_view.allowsMultipleSelection = YES;
+ [collection_view
+ selectItemAtIndexPath:[NSIndexPath indexPathForItem:0 inSection:1]
+ animated:NO
+ scrollPosition:UICollectionViewScrollPositionNone];
+ [collection_view
+ selectItemAtIndexPath:[NSIndexPath indexPathForItem:1 inSection:1]
+ animated:NO
+ scrollPosition:UICollectionViewScrollPositionNone];
+ EXPECT_EQ(2, (int)[[collection_view indexPathsForSelectedItems] count]);
+ [history_collection_view_controller_ deleteSelectedItemsFromHistory];
+
+ // Expect only the header section to remain.
+ EXPECT_EQ(1, [collection_view numberOfSections]);
+ EXPECT_EQ(1, [collection_view numberOfItemsInSection:0]);
+}
+
+// Tests that adding two entries to history from different days then deleting
+// both of them results in only the header section in the collection.
+TEST_F(HistoryCollectionViewControllerTest, DeleteMultipleSections) {
+ GURL url_1("http://test1");
+ GURL url_2("http://test2");
+
+ HistoryServiceFacade::QueryResult query_result = QueryResultWithVisits(
+ {{url_1, base::Time::Now() - base::TimeDelta::FromDays(1)},
+ {url_2, base::Time::Now()}});
+ [history_collection_view_controller_ historyServiceFacade:nil
+ didReceiveQueryResult:query_result];
+ UICollectionView* collection_view =
+ [history_collection_view_controller_ collectionView];
+ // Expect two history sections in addition to the header section.
+ EXPECT_EQ(3, [collection_view numberOfSections]);
+
+ // Select all history items, and delete.
+ collection_view.allowsMultipleSelection = YES;
+ [collection_view
+ selectItemAtIndexPath:[NSIndexPath indexPathForItem:0 inSection:1]
+ animated:NO
+ scrollPosition:UICollectionViewScrollPositionNone];
+ [collection_view
+ selectItemAtIndexPath:[NSIndexPath indexPathForItem:0 inSection:2]
+ animated:NO
+ scrollPosition:UICollectionViewScrollPositionNone];
+ [history_collection_view_controller_ deleteSelectedItemsFromHistory];
+
+ // Expect only the header section to remain.
+ EXPECT_EQ(1, [collection_view numberOfSections]);
+ EXPECT_EQ(1, [collection_view numberOfItemsInSection:0]);
+}

Powered by Google App Engine
This is Rietveld 408576698