Index: ios/chrome/browser/ui/settings/search_engine_settings_collection_view_controller_unittest.mm |
diff --git a/ios/chrome/browser/ui/settings/search_engine_settings_collection_view_controller_unittest.mm b/ios/chrome/browser/ui/settings/search_engine_settings_collection_view_controller_unittest.mm |
new file mode 100644 |
index 0000000000000000000000000000000000000000..edfcfcfe4950dcad537f1099b08c1be3b2a2edf2 |
--- /dev/null |
+++ b/ios/chrome/browser/ui/settings/search_engine_settings_collection_view_controller_unittest.mm |
@@ -0,0 +1,143 @@ |
+// 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/search_engine_settings_collection_view_controller.h" |
+ |
+#include <memory> |
+ |
+#include "base/compiler_specific.h" |
+#include "base/mac/foundation_util.h" |
+#include "base/strings/sys_string_conversions.h" |
+#include "base/strings/utf_string_conversions.h" |
+#include "components/search_engines/template_url_service.h" |
+#include "components/sync_preferences/testing_pref_service_syncable.h" |
+#include "ios/chrome/browser/browser_state/test_chrome_browser_state.h" |
+#include "ios/chrome/browser/search_engines/template_url_service_factory.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" |
+#import "ios/third_party/material_components_ios/src/components/CollectionCells/src/MaterialCollectionCells.h" |
+#include "ios/web/public/test/test_web_thread_bundle.h" |
+#include "testing/gtest/include/gtest/gtest.h" |
+#include "testing/gtest_mac.h" |
+ |
+namespace { |
+ |
+class SearchEngineSettingsCollectionViewControllerTest |
+ : public CollectionViewControllerTest { |
+ protected: |
+ void SetUp() override { |
+ CollectionViewControllerTest::SetUp(); |
+ TestChromeBrowserState::Builder test_cbs_builder; |
+ test_cbs_builder.AddTestingFactory( |
+ ios::TemplateURLServiceFactory::GetInstance(), |
+ ios::TemplateURLServiceFactory::GetDefaultFactory()); |
+ chrome_browser_state_ = test_cbs_builder.Build(); |
+ DefaultSearchManager::SetFallbackSearchEnginesDisabledForTesting(true); |
+ template_url_service_ = ios::TemplateURLServiceFactory::GetForBrowserState( |
+ chrome_browser_state_.get()); |
+ template_url_service_->Load(); |
+ } |
+ |
+ CollectionViewController* NewController() override NS_RETURNS_RETAINED { |
+ return [[SearchEngineSettingsCollectionViewController alloc] |
+ initWithBrowserState:chrome_browser_state_.get()]; |
+ } |
+ |
+ std::unique_ptr<TemplateURL> NewTemplateUrl(const std::string& shortName) { |
+ TemplateURLData data; |
+ data.SetShortName(base::ASCIIToUTF16(shortName)); |
+ return std::unique_ptr<TemplateURL>(new TemplateURL(data)); |
+ } |
+ |
+ void FillTemplateUrlService() { |
+ TemplateURL* defaultProvider = |
+ template_url_service_->Add(NewTemplateUrl("first_url")); |
+ template_url_service_->SetUserSelectedDefaultSearchProvider( |
+ defaultProvider); |
+ template_url_service_->Add(NewTemplateUrl("second_url")); |
+ template_url_service_->Add(NewTemplateUrl("third_url")); |
+ } |
+ |
+ void CheckModelMatchesTemplateURLs() { |
+ TemplateURLService::TemplateURLVector urls = |
+ template_url_service_->GetTemplateURLs(); |
+ EXPECT_EQ(1, NumberOfSections()); |
+ ASSERT_EQ(urls.size(), |
+ static_cast<unsigned int>(NumberOfItemsInSection(0))); |
+ for (unsigned int i = 0; i < urls.size(); ++i) { |
+ BOOL isDefault = |
+ template_url_service_->GetDefaultSearchProvider() == urls[i]; |
+ |
+ CheckTextCellTitle(base::SysUTF16ToNSString(urls[i]->short_name()), 0, i); |
+ CollectionViewTextItem* textItem = |
+ base::mac::ObjCCastStrict<CollectionViewTextItem>( |
+ GetCollectionViewItem(0, i)); |
+ EXPECT_EQ(isDefault ? MDCCollectionViewCellAccessoryCheckmark |
+ : MDCCollectionViewCellAccessoryNone, |
+ textItem.accessoryType); |
+ } |
+ } |
+ |
+ web::TestWebThreadBundle thread_bundle_; |
+ std::unique_ptr<TestChromeBrowserState> chrome_browser_state_; |
+ TemplateURLService* template_url_service_; // weak |
+}; |
+ |
+TEST_F(SearchEngineSettingsCollectionViewControllerTest, TestNoUrl) { |
+ CreateController(); |
+ CheckController(); |
+ EXPECT_EQ(0, NumberOfSections()); |
+} |
+ |
+TEST_F(SearchEngineSettingsCollectionViewControllerTest, TestWithUrlsLoaded) { |
+ FillTemplateUrlService(); |
+ CreateController(); |
+ CheckModelMatchesTemplateURLs(); |
+} |
+ |
+TEST_F(SearchEngineSettingsCollectionViewControllerTest, TestWithAddedUrl) { |
+ FillTemplateUrlService(); |
+ CreateController(); |
+ |
+ TemplateURL* newUrl = template_url_service_->Add(NewTemplateUrl("new_url")); |
+ CheckModelMatchesTemplateURLs(); |
+ |
+ template_url_service_->SetUserSelectedDefaultSearchProvider(newUrl); |
+ CheckModelMatchesTemplateURLs(); |
+ |
+ DCHECK(newUrl != template_url_service_->GetTemplateURLs()[0]); |
+ template_url_service_->SetUserSelectedDefaultSearchProvider( |
+ template_url_service_->GetTemplateURLs()[0]); |
+ template_url_service_->Remove(newUrl); |
+ CheckModelMatchesTemplateURLs(); |
+} |
+ |
+TEST_F(SearchEngineSettingsCollectionViewControllerTest, TestChangeProvider) { |
+ FillTemplateUrlService(); |
+ CreateController(); |
+ |
+ [controller() collectionView:[controller() collectionView] |
+ didSelectItemAtIndexPath:[NSIndexPath indexPathForRow:0 inSection:0]]; |
+ EXPECT_EQ(template_url_service_->GetTemplateURLs()[0], |
+ template_url_service_->GetDefaultSearchProvider()); |
+ CheckModelMatchesTemplateURLs(); |
+ |
+ [controller() collectionView:[controller() collectionView] |
+ didSelectItemAtIndexPath:[NSIndexPath indexPathForRow:1 inSection:0]]; |
+ TemplateURL* url = template_url_service_->GetTemplateURLs()[1]; |
+ EXPECT_EQ(url, template_url_service_->GetDefaultSearchProvider()); |
+ |
+ // Check that the selection was written back to the prefs. |
+ const base::DictionaryValue* searchProviderDict = |
+ chrome_browser_state_->GetTestingPrefService()->GetDictionary( |
+ DefaultSearchManager::kDefaultSearchProviderDataPrefName); |
+ EXPECT_TRUE(searchProviderDict); |
+ base::string16 shortName; |
+ EXPECT_TRUE(searchProviderDict->GetString(DefaultSearchManager::kShortName, |
+ &shortName)); |
+ EXPECT_EQ(url->short_name(), shortName); |
+ CheckModelMatchesTemplateURLs(); |
+} |
+ |
+} // namespace |