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

Unified Diff: ios/chrome/browser/ui/settings/search_engine_settings_collection_view_controller_unittest.mm

Issue 2587023002: Upstream Chrome on iOS source code [8/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/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

Powered by Google App Engine
This is Rietveld 408576698