Index: components/search_engines/desktop_search_utils_unittest.cc |
diff --git a/components/search_engines/desktop_search_utils_unittest.cc b/components/search_engines/desktop_search_utils_unittest.cc |
new file mode 100644 |
index 0000000000000000000000000000000000000000..b59f930c22a300478844f0f3d475ea2742866173 |
--- /dev/null |
+++ b/components/search_engines/desktop_search_utils_unittest.cc |
@@ -0,0 +1,151 @@ |
+// 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. |
+ |
+#include "components/search_engines/desktop_search_utils.h" |
+ |
+#include <string> |
+ |
+#include "base/feature_list.h" |
+#include "base/macros.h" |
+#include "base/memory/scoped_ptr.h" |
+#include "base/strings/string16.h" |
+#include "base/strings/utf_string_conversions.h" |
+#include "components/prefs/pref_service.h" |
+#include "components/search_engines/prepopulated_engines.h" |
+#include "components/search_engines/template_url.h" |
+#include "components/search_engines/template_url_prepopulate_data.h" |
+#include "components/search_engines/template_url_service.h" |
+#include "components/search_engines/util.h" |
+#include "components/syncable_prefs/testing_pref_service_syncable.h" |
+#include "testing/gtest/include/gtest/gtest.h" |
+#include "url/gurl.h" |
+ |
+namespace { |
+ |
+struct ReplaceDesktopSearchURLTestData { |
+ // Value of the |url| argument of |
+ // ReplaceDesktopSearchURLWithDefaultSearchURLIfNeeded on input. |
+ const char* input_arg; |
+ |
+ // Expected value of the |url| argument of |
+ // ReplaceDesktopSearchURLWithDefaultSearchURLIfNeeded on output. |
+ const char* expected_output_arg; |
+}; |
+ |
+struct ShouldReplaceDesktopSearchURLTestData { |
+ bool feature_enabled; |
+ bool default_search_engine_is_bing; |
+ const GURL* expected_output_arg; |
+}; |
+ |
+} // namespace |
+ |
+class DesktopSearchUtilsTest : public testing::Test { |
+ public: |
+ DesktopSearchUtilsTest() : template_url_service_(nullptr, 0) { |
+ RegisterDesktopSearchRedirectionPref(prefs_.registry()); |
+ } |
+ |
+ protected: |
+ void SetFeatureEnabled(bool enabled) { |
+ base::FeatureList::ClearInstanceForTesting(); |
+ scoped_ptr<base::FeatureList> feature_list(new base::FeatureList); |
+ if (enabled) { |
+ feature_list->InitializeFromCommandLine( |
+ kDesktopSearchRedirectionFeature.name, std::string()); |
+ } |
+ base::FeatureList::SetInstance(std::move(feature_list)); |
+ } |
+ |
+ void SetDefaultSearchEngine( |
+ const TemplateURLPrepopulateData::PrepopulatedEngine |
+ default_search_engine) { |
+ scoped_ptr<TemplateURLData> template_url_data = |
+ TemplateURLPrepopulateData::MakeTemplateURLDataFromPrepopulatedEngine( |
+ default_search_engine); |
+ TemplateURL template_url(*template_url_data); |
+ template_url_service_.SetUserSelectedDefaultSearchProvider(&template_url); |
+ } |
+ |
+ TemplateURLService template_url_service_; |
+ syncable_prefs::TestingPrefServiceSyncable prefs_; |
+ |
+ private: |
+ DISALLOW_COPY_AND_ASSIGN(DesktopSearchUtilsTest); |
+}; |
+ |
+// Checks that ReplaceDesktopSearchURLWithDefaultSearchURLIfNeeded correctly |
+// replaces the URL it receives when the desktop search redirection feature is |
+// enabled and the default search engine is not Bing. |
+TEST_F(DesktopSearchUtilsTest, ReplaceDesktopSearchURL) { |
+ const std::string default_search_url_keyword( |
+ GetDefaultSearchURLForSearchTerms(&template_url_service_, |
+ base::WideToUTF16(L"keyword")) |
+ .spec()); |
+ const std::string default_search_url_special_chars( |
+ GetDefaultSearchURLForSearchTerms(&template_url_service_, |
+ base::WideToUTF16(L"\xE8 \xE9")) |
+ .spec()); |
+ |
+ const ReplaceDesktopSearchURLTestData test_data[] = { |
+ {"https://www.google.com/", "https://www.google.com/"}, |
+ {"https://www.bing.com/search/", "https://www.bing.com/search/"}, |
+ {"https://www.bing.com/search?q=keyword&form=QBLH", |
+ "https://www.bing.com/search?q=keyword&form=QBLH"}, |
+ {"https://www.bing.com/search?q=keyword&form=WNSGPH", |
+ default_search_url_keyword.c_str()}, |
+ {"https://www.bing.com/search?q=keyword&form=WNSBOX", |
+ default_search_url_keyword.c_str()}, |
+ {"https://www.bing.com/search?q=keyword&FORM=WNSGPH", |
+ default_search_url_keyword.c_str()}, |
+ {"https://www.bing.com/search?q=keyword&FORM=WNSBOX", |
+ default_search_url_keyword.c_str()}, |
+ {"https://www.bing.com/search?form=WNSGPH&q=keyword", |
+ default_search_url_keyword.c_str()}, |
+ {"https://www.bing.com/search?q=keyword&form=WNSGPH&other=stuff", |
+ default_search_url_keyword.c_str()}, |
+ {"https://www.bing.com/search?q=%C3%A8+%C3%A9&form=WNSGPH", |
+ default_search_url_special_chars.c_str()}, |
+ }; |
+ |
+ SetFeatureEnabled(true); |
+ |
+ for (const auto& test : test_data) { |
+ GURL url(test.input_arg); |
+ ReplaceDesktopSearchURLWithDefaultSearchURLIfNeeded( |
+ &prefs_, &template_url_service_, &url); |
+ EXPECT_EQ(test.expected_output_arg, url.spec()); |
+ } |
+} |
+ |
+// Checks that ReplaceDesktopSearchURLWithDefaultSearchURLIfNeeded doesn't |
+// change the URL it receives when the desktop search redirection feature is |
+// disabled or when the default search engine is Bing. |
+TEST_F(DesktopSearchUtilsTest, ShouldReplaceDesktopSearchURL) { |
+ SetDefaultSearchEngine(TemplateURLPrepopulateData::google); |
+ const GURL desktop_search_url( |
+ "https://www.bing.com/search?q=keyword&form=WNSGPH"); |
+ const GURL default_search_url(GetDefaultSearchURLForSearchTerms( |
+ &template_url_service_, base::WideToUTF16(L"keyword"))); |
+ |
+ const ShouldReplaceDesktopSearchURLTestData test_data[] = { |
+ {false, false, &desktop_search_url}, |
+ {true, false, &default_search_url}, |
+ {false, true, &desktop_search_url}, |
+ {true, true, &desktop_search_url}, |
+ }; |
+ |
+ for (const auto& test : test_data) { |
+ SetFeatureEnabled(test.feature_enabled); |
+ SetDefaultSearchEngine(test.default_search_engine_is_bing |
+ ? TemplateURLPrepopulateData::bing |
+ : TemplateURLPrepopulateData::google); |
+ |
+ // Check whether the desktop search URL is replaced. |
+ GURL url(desktop_search_url); |
+ ReplaceDesktopSearchURLWithDefaultSearchURLIfNeeded( |
+ &prefs_, &template_url_service_, &url); |
+ EXPECT_EQ(*test.expected_output_arg, url); |
+ } |
+} |