Index: ios/chrome/browser/ui/settings/clear_browsing_data_collection_view_controller_unittest.mm |
diff --git a/ios/chrome/browser/ui/settings/clear_browsing_data_collection_view_controller_unittest.mm b/ios/chrome/browser/ui/settings/clear_browsing_data_collection_view_controller_unittest.mm |
new file mode 100644 |
index 0000000000000000000000000000000000000000..f32dd9f8ebb0260c38e5281c5d6d67b31d6f628b |
--- /dev/null |
+++ b/ios/chrome/browser/ui/settings/clear_browsing_data_collection_view_controller_unittest.mm |
@@ -0,0 +1,306 @@ |
+// 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. |
+ |
+#import "ios/chrome/browser/ui/settings/clear_browsing_data_collection_view_controller.h" |
+ |
+#include <memory> |
+ |
+#include "base/ios/ios_util.h" |
+#include "base/mac/foundation_util.h" |
+#include "base/memory/ptr_util.h" |
+#include "base/strings/sys_string_conversions.h" |
+#include "components/browser_sync/profile_sync_service_mock.h" |
+#include "components/browsing_data/core/browsing_data_utils.h" |
+#include "components/browsing_data/core/pref_names.h" |
+#include "components/pref_registry/pref_registry_syncable.h" |
+#include "components/signin/core/browser/fake_signin_manager.h" |
+#include "components/sync_preferences/pref_service_mock_factory.h" |
+#include "components/sync_preferences/pref_service_syncable.h" |
+#include "ios/chrome/browser/application_context.h" |
+#include "ios/chrome/browser/browser_state/test_chrome_browser_state.h" |
+#include "ios/chrome/browser/browsing_data/cache_counter.h" |
+#include "ios/chrome/browser/experimental_flags.h" |
+#include "ios/chrome/browser/pref_names.h" |
+#include "ios/chrome/browser/prefs/browser_prefs.h" |
+#include "ios/chrome/browser/signin/fake_oauth2_token_service_builder.h" |
+#include "ios/chrome/browser/signin/fake_signin_manager_builder.h" |
+#include "ios/chrome/browser/signin/oauth2_token_service_factory.h" |
+#include "ios/chrome/browser/signin/signin_manager_factory.h" |
+#include "ios/chrome/browser/sync/ios_chrome_profile_sync_service_factory.h" |
+#include "ios/chrome/browser/sync/ios_chrome_profile_sync_test_util.h" |
+#import "ios/chrome/browser/ui/collection_view/cells/collection_view_text_item.h" |
+#import "ios/chrome/browser/ui/collection_view/collection_view_controller_test.h" |
+#include "ios/chrome/common/string_util.h" |
+#include "ios/chrome/grit/ios_strings.h" |
+#include "ios/web/public/test/test_web_thread_bundle.h" |
+#include "testing/gtest/include/gtest/gtest.h" |
+#include "testing/gtest_mac.h" |
+#include "ui/base/l10n/l10n_util.h" |
+ |
+using testing::Return; |
+ |
+@interface ClearBrowsingDataCollectionViewController (ExposedForTesting) |
+- (NSString*)getCounterTextFromResult: |
+ (const browsing_data::BrowsingDataCounter::Result&)result; |
+@end |
+ |
+namespace { |
+ |
+enum ItemEnum { |
+ kDeleteBrowsingHistoryItem, |
+ kDeleteCookiesItem, |
+ kDeleteCacheItem, |
+ kDeletePasswordsItem, |
+ kDeleteFormDataItem |
+}; |
+ |
+class ClearBrowsingDataCollectionViewControllerTest |
+ : public CollectionViewControllerTest { |
+ protected: |
+ void SetUp() override { |
+ CollectionViewControllerTest::SetUp(); |
+ |
+ // Setup identity services. |
+ TestChromeBrowserState::Builder builder; |
+ builder.SetPrefService(CreatePrefService()); |
+ builder.AddTestingFactory(OAuth2TokenServiceFactory::GetInstance(), |
+ &BuildFakeOAuth2TokenService); |
+ builder.AddTestingFactory(ios::SigninManagerFactory::GetInstance(), |
+ &ios::BuildFakeSigninManager); |
+ builder.AddTestingFactory(IOSChromeProfileSyncServiceFactory::GetInstance(), |
+ &BuildMockProfileSyncService); |
+ browser_state_ = builder.Build(); |
+ |
+ signin_manager_ = |
+ ios::SigninManagerFactory::GetForBrowserState(browser_state_.get()); |
+ mock_sync_service_ = static_cast<browser_sync::ProfileSyncServiceMock*>( |
+ IOSChromeProfileSyncServiceFactory::GetForBrowserState( |
+ browser_state_.get())); |
+ } |
+ |
+ std::unique_ptr<sync_preferences::PrefServiceSyncable> CreatePrefService() { |
+ sync_preferences::PrefServiceMockFactory factory; |
+ scoped_refptr<user_prefs::PrefRegistrySyncable> registry( |
+ new user_prefs::PrefRegistrySyncable); |
+ std::unique_ptr<sync_preferences::PrefServiceSyncable> prefs = |
+ factory.CreateSyncable(registry.get()); |
+ RegisterBrowserStatePrefs(registry.get()); |
+ return prefs; |
+ } |
+ |
+ CollectionViewController* NewController() override { |
+ return [[ClearBrowsingDataCollectionViewController alloc] |
+ initWithBrowserState:browser_state_.get()]; |
+ } |
+ |
+ void SelectItem(int item, int section) { |
+ NSIndexPath* indexPath = |
+ [NSIndexPath indexPathForItem:item inSection:section]; |
+ [controller() collectionView:[controller() collectionView] |
+ didSelectItemAtIndexPath:indexPath]; |
+ } |
+ |
+ web::TestWebThreadBundle thread_bundle_; |
+ std::unique_ptr<TestChromeBrowserState> browser_state_; |
+ SigninManagerBase* signin_manager_; |
+ browser_sync::ProfileSyncServiceMock* mock_sync_service_; |
+}; |
+ |
+// Tests ClearBrowsingDataCollectionViewControllerTest is set up with all |
+// appropriate items and sections. |
+TEST_F(ClearBrowsingDataCollectionViewControllerTest, TestModel) { |
+ EXPECT_CALL(*mock_sync_service_, IsSyncActive()) |
+ .WillRepeatedly(Return(false)); |
+ CreateController(); |
+ CheckController(); |
+ |
+ int section_offset = 0; |
+ if (experimental_flags::IsNewClearBrowsingDataUIEnabled()) { |
+ EXPECT_EQ(4, NumberOfSections()); |
+ EXPECT_EQ(1, NumberOfItemsInSection(0)); |
+ section_offset = 1; |
+ } else { |
+ EXPECT_EQ(3, NumberOfSections()); |
+ } |
+ |
+ EXPECT_EQ(5, NumberOfItemsInSection(section_offset)); |
+ CheckTextCellTitleWithId(IDS_IOS_CLEAR_BROWSING_HISTORY, section_offset, 0); |
+ CheckAccessoryType(MDCCollectionViewCellAccessoryCheckmark, section_offset, |
+ 0); |
+ CheckTextCellTitleWithId(IDS_IOS_CLEAR_COOKIES, section_offset, 1); |
+ CheckAccessoryType(MDCCollectionViewCellAccessoryCheckmark, section_offset, |
+ 1); |
+ CheckTextCellTitleWithId(IDS_IOS_CLEAR_CACHE, section_offset, 2); |
+ CheckAccessoryType(MDCCollectionViewCellAccessoryCheckmark, section_offset, |
+ 2); |
+ CheckTextCellTitleWithId(IDS_IOS_CLEAR_SAVED_PASSWORDS, section_offset, 3); |
+ CheckAccessoryType(MDCCollectionViewCellAccessoryNone, section_offset, 3); |
+ CheckTextCellTitleWithId(IDS_IOS_CLEAR_AUTOFILL, section_offset, 4); |
+ CheckAccessoryType(MDCCollectionViewCellAccessoryNone, section_offset, 4); |
+ |
+ EXPECT_EQ(1, NumberOfItemsInSection(1 + section_offset)); |
+ CheckTextCellTitleWithId(IDS_IOS_CLEAR_BUTTON, 1 + section_offset, 0); |
+ |
+ EXPECT_EQ(1, NumberOfItemsInSection(2 + section_offset)); |
+ CheckSectionFooterWithId(IDS_IOS_CLEAR_BROWSING_DATA_FOOTER_SAVED_SITE_DATA, |
+ 2 + section_offset); |
+} |
+ |
+TEST_F(ClearBrowsingDataCollectionViewControllerTest, |
+ TestModelSignedInSyncOff) { |
+ EXPECT_CALL(*mock_sync_service_, IsSyncActive()) |
+ .WillRepeatedly(Return(false)); |
+ signin_manager_->SetAuthenticatedAccountInfo("12345", "syncuser@example.com"); |
+ CreateController(); |
+ CheckController(); |
+ |
+ int section_offset = 0; |
+ if (experimental_flags::IsNewClearBrowsingDataUIEnabled()) { |
+ EXPECT_EQ(5, NumberOfSections()); |
+ EXPECT_EQ(1, NumberOfItemsInSection(0)); |
+ section_offset = 1; |
+ } else { |
+ EXPECT_EQ(4, NumberOfSections()); |
+ } |
+ |
+ EXPECT_EQ(5, NumberOfItemsInSection(section_offset)); |
+ EXPECT_EQ(1, NumberOfItemsInSection(1 + section_offset)); |
+ |
+ EXPECT_EQ(1, NumberOfItemsInSection(2 + section_offset)); |
+ CheckSectionFooterWithId(IDS_IOS_CLEAR_BROWSING_DATA_FOOTER_ACCOUNT, |
+ 2 + section_offset); |
+ |
+ EXPECT_EQ(1, NumberOfItemsInSection(3 + section_offset)); |
+ CheckSectionFooterWithId(IDS_IOS_CLEAR_BROWSING_DATA_FOOTER_SAVED_SITE_DATA, |
+ 3 + section_offset); |
+} |
+ |
+TEST_F(ClearBrowsingDataCollectionViewControllerTest, |
+ TestModelSignedInSyncActiveHistoryOff) { |
+ EXPECT_CALL(*mock_sync_service_, IsSyncActive()).WillRepeatedly(Return(true)); |
+ EXPECT_CALL(*mock_sync_service_, GetActiveDataTypes()) |
+ .WillRepeatedly(Return(syncer::ModelTypeSet())); |
+ EXPECT_CALL(*mock_sync_service_, IsUsingSecondaryPassphrase()) |
+ .WillRepeatedly(Return(true)); |
+ |
+ signin_manager_->SetAuthenticatedAccountInfo("12345", "syncuser@example.com"); |
+ CreateController(); |
+ CheckController(); |
+ |
+ int section_offset = 0; |
+ if (experimental_flags::IsNewClearBrowsingDataUIEnabled()) { |
+ EXPECT_EQ(5, NumberOfSections()); |
+ EXPECT_EQ(1, NumberOfItemsInSection(0)); |
+ section_offset = 1; |
+ } else { |
+ EXPECT_EQ(4, NumberOfSections()); |
+ } |
+ |
+ EXPECT_EQ(5, NumberOfItemsInSection(section_offset)); |
+ EXPECT_EQ(1, NumberOfItemsInSection(1 + section_offset)); |
+ |
+ EXPECT_EQ(1, NumberOfItemsInSection(2 + section_offset)); |
+ CheckSectionFooterWithId(IDS_IOS_CLEAR_BROWSING_DATA_FOOTER_ACCOUNT, |
+ 2 + section_offset); |
+ |
+ EXPECT_EQ(1, NumberOfItemsInSection(3 + section_offset)); |
+ CheckSectionFooterWithId( |
+ IDS_IOS_CLEAR_BROWSING_DATA_FOOTER_CLEAR_SYNC_AND_SAVED_SITE_DATA, |
+ 3 + section_offset); |
+} |
+ |
+TEST_F(ClearBrowsingDataCollectionViewControllerTest, TestUpdatePrefWithValue) { |
+ CreateController(); |
+ CheckController(); |
+ PrefService* prefs = browser_state_->GetPrefs(); |
+ |
+ int section = experimental_flags::IsNewClearBrowsingDataUIEnabled() ? 1 : 0; |
+ |
+ SelectItem(kDeleteBrowsingHistoryItem, section); |
+ EXPECT_FALSE(prefs->GetBoolean(browsing_data::prefs::kDeleteBrowsingHistory)); |
+ SelectItem(kDeleteCookiesItem, section); |
+ EXPECT_FALSE(prefs->GetBoolean(browsing_data::prefs::kDeleteCookies)); |
+ SelectItem(kDeleteCacheItem, section); |
+ EXPECT_FALSE(prefs->GetBoolean(browsing_data::prefs::kDeleteCache)); |
+ SelectItem(kDeletePasswordsItem, section); |
+ EXPECT_TRUE(prefs->GetBoolean(browsing_data::prefs::kDeletePasswords)); |
+ SelectItem(kDeleteFormDataItem, section); |
+ EXPECT_TRUE(prefs->GetBoolean(browsing_data::prefs::kDeleteFormData)); |
+} |
+ |
+TEST_F(ClearBrowsingDataCollectionViewControllerTest, |
+ TestCacheCounterFormattingForAllTime) { |
+ ASSERT_EQ("en", GetApplicationContext()->GetApplicationLocale()); |
+ PrefService* prefs = browser_state_->GetPrefs(); |
+ prefs->SetInteger(browsing_data::prefs::kDeleteTimePeriod, |
+ browsing_data::ALL_TIME); |
+ CacheCounter counter(browser_state_.get()); |
+ |
+ // Test multiple possible types of formatting. |
+ // clang-format off |
+ const struct TestCase { |
+ int cache_size; |
+ NSString* expected_output; |
+ } kTestCases[] = { |
+ {0, @"less than 1 MB"}, |
+ {(1 << 20) - 1, @"less than 1 MB"}, |
+ {(1 << 20), @"1 MB"}, |
+ {(1 << 20) + (1 << 19), @"1.5 MB"}, |
+ {(1 << 21), @"2 MB"}, |
+ {(1 << 30), @"1 GB"} |
+ }; |
+ // clang-format on |
+ |
+ ClearBrowsingDataCollectionViewController* viewController = |
+ base::mac::ObjCCastStrict<ClearBrowsingDataCollectionViewController>( |
+ controller()); |
+ for (const TestCase& test_case : kTestCases) { |
+ browsing_data::BrowsingDataCounter::FinishedResult result( |
+ &counter, test_case.cache_size); |
+ NSString* output = [viewController getCounterTextFromResult:result]; |
+ EXPECT_NSEQ(test_case.expected_output, output); |
+ } |
+} |
+ |
+TEST_F(ClearBrowsingDataCollectionViewControllerTest, |
+ TestCacheCounterFormattingForLessThanAllTime) { |
+ ASSERT_EQ("en", GetApplicationContext()->GetApplicationLocale()); |
+ |
+ // If the new UI is not enabled then the pref value for the time period |
+ // is ignored and the time period defaults to ALL_TIME. |
+ if (!experimental_flags::IsNewClearBrowsingDataUIEnabled()) { |
+ return; |
+ } |
+ PrefService* prefs = browser_state_->GetPrefs(); |
+ prefs->SetInteger(browsing_data::prefs::kDeleteTimePeriod, |
+ browsing_data::LAST_HOUR); |
+ CacheCounter counter(browser_state_.get()); |
+ |
+ // Test multiple possible types of formatting. |
+ // clang-format off |
+ const struct TestCase { |
+ int cache_size; |
+ NSString* expected_output; |
+ } kTestCases[] = { |
+ {0, @"less than 1 MB"}, |
+ {(1 << 20) - 1, @"less than 1 MB"}, |
+ {(1 << 20), @"less than 1 MB"}, |
+ {(1 << 20) + (1 << 19), @"less than 1.5 MB"}, |
+ {(1 << 21), @"less than 2 MB"}, |
+ {(1 << 30), @"less than 1 GB"} |
+ }; |
+ // clang-format on |
+ |
+ ClearBrowsingDataCollectionViewController* viewController = |
+ base::mac::ObjCCastStrict<ClearBrowsingDataCollectionViewController>( |
+ controller()); |
+ for (const TestCase& test_case : kTestCases) { |
+ browsing_data::BrowsingDataCounter::FinishedResult result( |
+ &counter, test_case.cache_size); |
+ NSString* output = [viewController getCounterTextFromResult:result]; |
+ EXPECT_NSEQ(test_case.expected_output, output); |
+ } |
+} |
+ |
+} // namespace |