| Index: chrome/browser/autocomplete/autocomplete_provider_unittest.cc
|
| diff --git a/chrome/browser/autocomplete/autocomplete_provider_unittest.cc b/chrome/browser/autocomplete/autocomplete_provider_unittest.cc
|
| deleted file mode 100644
|
| index 3c876a2adcc19879021a5786e22cb09d44bf4cbb..0000000000000000000000000000000000000000
|
| --- a/chrome/browser/autocomplete/autocomplete_provider_unittest.cc
|
| +++ /dev/null
|
| @@ -1,756 +0,0 @@
|
| -// Copyright (c) 2012 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/omnibox/browser/autocomplete_provider.h"
|
| -
|
| -#include "base/bind.h"
|
| -#include "base/command_line.h"
|
| -#include "base/location.h"
|
| -#include "base/memory/scoped_ptr.h"
|
| -#include "base/single_thread_task_runner.h"
|
| -#include "base/strings/string16.h"
|
| -#include "base/strings/string_number_conversions.h"
|
| -#include "base/strings/string_util.h"
|
| -#include "base/strings/utf_string_conversions.h"
|
| -#include "base/thread_task_runner_handle.h"
|
| -#include "chrome/browser/autocomplete/chrome_autocomplete_provider_client.h"
|
| -#include "chrome/browser/autocomplete/chrome_autocomplete_scheme_classifier.h"
|
| -#include "chrome/browser/chrome_notification_types.h"
|
| -#include "chrome/browser/search_engines/template_url_service_factory.h"
|
| -#include "chrome/test/base/testing_browser_process.h"
|
| -#include "chrome/test/base/testing_profile.h"
|
| -#include "components/metrics/proto/omnibox_event.pb.h"
|
| -#include "components/omnibox/browser/autocomplete_controller.h"
|
| -#include "components/omnibox/browser/autocomplete_input.h"
|
| -#include "components/omnibox/browser/autocomplete_match.h"
|
| -#include "components/omnibox/browser/autocomplete_provider_listener.h"
|
| -#include "components/omnibox/browser/keyword_provider.h"
|
| -#include "components/omnibox/browser/search_provider.h"
|
| -#include "components/search_engines/search_engines_switches.h"
|
| -#include "components/search_engines/template_url.h"
|
| -#include "components/search_engines/template_url_service.h"
|
| -#include "content/public/browser/notification_observer.h"
|
| -#include "content/public/browser/notification_registrar.h"
|
| -#include "content/public/browser/notification_source.h"
|
| -#include "content/public/test/test_browser_thread_bundle.h"
|
| -#include "testing/gtest/include/gtest/gtest.h"
|
| -
|
| -static std::ostream& operator<<(std::ostream& os,
|
| - const AutocompleteResult::const_iterator& it) {
|
| - return os << static_cast<const AutocompleteMatch*>(&(*it));
|
| -}
|
| -
|
| -namespace {
|
| -const size_t kResultsPerProvider = 3;
|
| -const char kTestTemplateURLKeyword[] = "t";
|
| -}
|
| -
|
| -// Autocomplete provider that provides known results. Note that this is
|
| -// refcounted so that it can also be a task on the message loop.
|
| -class TestProvider : public AutocompleteProvider {
|
| - public:
|
| - TestProvider(int relevance, const base::string16& prefix,
|
| - Profile* profile,
|
| - const base::string16 match_keyword)
|
| - : AutocompleteProvider(AutocompleteProvider::TYPE_SEARCH),
|
| - listener_(NULL),
|
| - profile_(profile),
|
| - relevance_(relevance),
|
| - prefix_(prefix),
|
| - match_keyword_(match_keyword) {
|
| - }
|
| -
|
| - void Start(const AutocompleteInput& input, bool minimal_changes) override;
|
| -
|
| - void set_listener(AutocompleteProviderListener* listener) {
|
| - listener_ = listener;
|
| - }
|
| -
|
| - private:
|
| - ~TestProvider() override {}
|
| -
|
| - void Run();
|
| -
|
| - void AddResults(int start_at, int num);
|
| - void AddResultsWithSearchTermsArgs(
|
| - int start_at,
|
| - int num,
|
| - AutocompleteMatch::Type type,
|
| - const TemplateURLRef::SearchTermsArgs& search_terms_args);
|
| -
|
| - AutocompleteProviderListener* listener_;
|
| - Profile* profile_;
|
| - int relevance_;
|
| - const base::string16 prefix_;
|
| - const base::string16 match_keyword_;
|
| -};
|
| -
|
| -void TestProvider::Start(const AutocompleteInput& input, bool minimal_changes) {
|
| - if (minimal_changes)
|
| - return;
|
| -
|
| - matches_.clear();
|
| -
|
| - if (input.from_omnibox_focus())
|
| - return;
|
| -
|
| - // Generate 4 results synchronously, the rest later.
|
| - AddResults(0, 1);
|
| - AddResultsWithSearchTermsArgs(
|
| - 1, 1, AutocompleteMatchType::SEARCH_WHAT_YOU_TYPED,
|
| - TemplateURLRef::SearchTermsArgs(base::ASCIIToUTF16("echo")));
|
| - AddResultsWithSearchTermsArgs(
|
| - 2, 1, AutocompleteMatchType::NAVSUGGEST,
|
| - TemplateURLRef::SearchTermsArgs(base::ASCIIToUTF16("nav")));
|
| - AddResultsWithSearchTermsArgs(
|
| - 3, 1, AutocompleteMatchType::SEARCH_SUGGEST,
|
| - TemplateURLRef::SearchTermsArgs(base::ASCIIToUTF16("query")));
|
| -
|
| - if (input.want_asynchronous_matches()) {
|
| - done_ = false;
|
| - base::ThreadTaskRunnerHandle::Get()->PostTask(
|
| - FROM_HERE, base::Bind(&TestProvider::Run, this));
|
| - }
|
| -}
|
| -
|
| -void TestProvider::Run() {
|
| - DCHECK_GT(kResultsPerProvider, 0U);
|
| - AddResults(1, kResultsPerProvider);
|
| - done_ = true;
|
| - DCHECK(listener_);
|
| - listener_->OnProviderUpdate(true);
|
| -}
|
| -
|
| -void TestProvider::AddResults(int start_at, int num) {
|
| - AddResultsWithSearchTermsArgs(start_at,
|
| - num,
|
| - AutocompleteMatchType::URL_WHAT_YOU_TYPED,
|
| - TemplateURLRef::SearchTermsArgs(
|
| - base::string16()));
|
| -}
|
| -
|
| -void TestProvider::AddResultsWithSearchTermsArgs(
|
| - int start_at,
|
| - int num,
|
| - AutocompleteMatch::Type type,
|
| - const TemplateURLRef::SearchTermsArgs& search_terms_args) {
|
| - for (int i = start_at; i < num; i++) {
|
| - AutocompleteMatch match(this, relevance_ - i, false, type);
|
| -
|
| - match.fill_into_edit = prefix_ + base::UTF8ToUTF16(base::IntToString(i));
|
| - match.destination_url = GURL(base::UTF16ToUTF8(match.fill_into_edit));
|
| - match.allowed_to_be_default_match = true;
|
| -
|
| - match.contents = match.fill_into_edit;
|
| - match.contents_class.push_back(
|
| - ACMatchClassification(0, ACMatchClassification::NONE));
|
| - match.description = match.fill_into_edit;
|
| - match.description_class.push_back(
|
| - ACMatchClassification(0, ACMatchClassification::NONE));
|
| - match.search_terms_args.reset(
|
| - new TemplateURLRef::SearchTermsArgs(search_terms_args));
|
| - if (!match_keyword_.empty()) {
|
| - match.keyword = match_keyword_;
|
| - TemplateURLService* service =
|
| - TemplateURLServiceFactory::GetForProfile(profile_);
|
| - ASSERT_TRUE(match.GetTemplateURL(service, false) != NULL);
|
| - }
|
| -
|
| - matches_.push_back(match);
|
| - }
|
| -}
|
| -
|
| -class AutocompleteProviderTest : public testing::Test,
|
| - public content::NotificationObserver {
|
| - protected:
|
| - struct KeywordTestData {
|
| - const base::string16 fill_into_edit;
|
| - const base::string16 keyword;
|
| - const base::string16 expected_associated_keyword;
|
| - };
|
| -
|
| - struct AssistedQueryStatsTestData {
|
| - const AutocompleteMatch::Type match_type;
|
| - const std::string expected_aqs;
|
| - };
|
| -
|
| - protected:
|
| - // Registers a test TemplateURL under the given keyword.
|
| - void RegisterTemplateURL(const base::string16 keyword,
|
| - const std::string& template_url);
|
| -
|
| - // Resets |controller_| with two TestProviders. |provider1_ptr| and
|
| - // |provider2_ptr| are updated to point to the new providers if non-NULL.
|
| - void ResetControllerWithTestProviders(bool same_destinations,
|
| - TestProvider** provider1_ptr,
|
| - TestProvider** provider2_ptr);
|
| -
|
| - // Runs a query on the input "a", and makes sure both providers' input is
|
| - // properly collected.
|
| - void RunTest();
|
| -
|
| - // Constructs an AutocompleteResult from |match_data|, sets the |controller_|
|
| - // to pretend it was running against input |input|, calls the |controller_|'s
|
| - // UpdateAssociatedKeywords, and checks that the matches have associated
|
| - // keywords as expected.
|
| - void RunKeywordTest(const base::string16& input,
|
| - const KeywordTestData* match_data,
|
| - size_t size);
|
| -
|
| - void RunAssistedQueryStatsTest(
|
| - const AssistedQueryStatsTestData* aqs_test_data,
|
| - size_t size);
|
| -
|
| - void RunQuery(const base::string16 query);
|
| -
|
| - void ResetControllerWithKeywordAndSearchProviders();
|
| - void ResetControllerWithKeywordProvider();
|
| - void RunExactKeymatchTest(bool allow_exact_keyword_match);
|
| -
|
| - void CopyResults();
|
| -
|
| - // Returns match.destination_url as it would be set by
|
| - // AutocompleteController::UpdateMatchDestinationURL().
|
| - GURL GetDestinationURL(AutocompleteMatch match,
|
| - base::TimeDelta query_formulation_time) const;
|
| -
|
| - void set_search_provider_field_trial_triggered_in_session(bool val) {
|
| - controller_->search_provider_->set_field_trial_triggered_in_session(val);
|
| - }
|
| - bool search_provider_field_trial_triggered_in_session() {
|
| - return controller_->search_provider_->field_trial_triggered_in_session();
|
| - }
|
| - void set_current_page_classification(
|
| - metrics::OmniboxEventProto::PageClassification classification) {
|
| - controller_->input_.current_page_classification_ = classification;
|
| - }
|
| -
|
| - AutocompleteResult result_;
|
| -
|
| - private:
|
| - // content::NotificationObserver:
|
| - void Observe(int type,
|
| - const content::NotificationSource& source,
|
| - const content::NotificationDetails& details) override;
|
| -
|
| - content::TestBrowserThreadBundle thread_bundle_;
|
| - content::NotificationRegistrar registrar_;
|
| - TestingProfile profile_;
|
| - scoped_ptr<AutocompleteController> controller_;
|
| -};
|
| -
|
| -void AutocompleteProviderTest::RegisterTemplateURL(
|
| - const base::string16 keyword,
|
| - const std::string& template_url) {
|
| - if (TemplateURLServiceFactory::GetForProfile(&profile_) == NULL) {
|
| - TemplateURLServiceFactory::GetInstance()->SetTestingFactoryAndUse(
|
| - &profile_, &TemplateURLServiceFactory::BuildInstanceFor);
|
| - }
|
| - TemplateURLData data;
|
| - data.SetURL(template_url);
|
| - data.SetShortName(keyword);
|
| - data.SetKeyword(keyword);
|
| - TemplateURL* default_t_url = new TemplateURL(data);
|
| - TemplateURLService* turl_model =
|
| - TemplateURLServiceFactory::GetForProfile(&profile_);
|
| - turl_model->Add(default_t_url);
|
| - turl_model->SetUserSelectedDefaultSearchProvider(default_t_url);
|
| - turl_model->Load();
|
| - TemplateURLID default_provider_id = default_t_url->id();
|
| - ASSERT_NE(0, default_provider_id);
|
| -}
|
| -
|
| -void AutocompleteProviderTest::ResetControllerWithTestProviders(
|
| - bool same_destinations,
|
| - TestProvider** provider1_ptr,
|
| - TestProvider** provider2_ptr) {
|
| - // TODO: Move it outside this method, after refactoring the existing
|
| - // unit tests. Specifically:
|
| - // (1) Make sure that AutocompleteMatch.keyword is set iff there is
|
| - // a corresponding call to RegisterTemplateURL; otherwise the
|
| - // controller flow will crash; this practically means that
|
| - // RunTests/ResetControllerXXX/RegisterTemplateURL should
|
| - // be coordinated with each other.
|
| - // (2) Inject test arguments rather than rely on the hardcoded values, e.g.
|
| - // don't rely on kResultsPerProvided and default relevance ordering
|
| - // (B > A).
|
| - RegisterTemplateURL(base::ASCIIToUTF16(kTestTemplateURLKeyword),
|
| - "http://aqs/{searchTerms}/{google:assistedQueryStats}");
|
| -
|
| - AutocompleteController::Providers providers;
|
| -
|
| - // Construct two new providers, with either the same or different prefixes.
|
| - TestProvider* provider1 = new TestProvider(
|
| - kResultsPerProvider,
|
| - base::ASCIIToUTF16("http://a"),
|
| - &profile_,
|
| - base::ASCIIToUTF16(kTestTemplateURLKeyword));
|
| - providers.push_back(provider1);
|
| -
|
| - TestProvider* provider2 = new TestProvider(
|
| - kResultsPerProvider * 2,
|
| - same_destinations ? base::ASCIIToUTF16("http://a")
|
| - : base::ASCIIToUTF16("http://b"),
|
| - &profile_,
|
| - base::string16());
|
| - providers.push_back(provider2);
|
| -
|
| - // Reset the controller to contain our new providers.
|
| - controller_.reset(new AutocompleteController(
|
| -
|
| - make_scoped_ptr(new ChromeAutocompleteProviderClient(&profile_)), NULL,
|
| - 0));
|
| - // We're going to swap the providers vector, but the old vector should be
|
| - // empty so no elements need to be freed at this point.
|
| - EXPECT_TRUE(controller_->providers_.empty());
|
| - controller_->providers_.swap(providers);
|
| - provider1->set_listener(controller_.get());
|
| - provider2->set_listener(controller_.get());
|
| -
|
| - // The providers don't complete synchronously, so listen for "result updated"
|
| - // notifications.
|
| - registrar_.Add(this,
|
| - chrome::NOTIFICATION_AUTOCOMPLETE_CONTROLLER_RESULT_READY,
|
| - content::Source<AutocompleteController>(controller_.get()));
|
| -
|
| - if (provider1_ptr)
|
| - *provider1_ptr = provider1;
|
| - if (provider2_ptr)
|
| - *provider2_ptr = provider2;
|
| -}
|
| -
|
| -void AutocompleteProviderTest::
|
| - ResetControllerWithKeywordAndSearchProviders() {
|
| - TemplateURLServiceFactory::GetInstance()->SetTestingFactoryAndUse(
|
| - &profile_, &TemplateURLServiceFactory::BuildInstanceFor);
|
| -
|
| - // Reset the default TemplateURL.
|
| - TemplateURLData data;
|
| - data.SetShortName(base::ASCIIToUTF16("default"));
|
| - data.SetKeyword(base::ASCIIToUTF16("default"));
|
| - data.SetURL("http://defaultturl/{searchTerms}");
|
| - TemplateURL* default_t_url = new TemplateURL(data);
|
| - TemplateURLService* turl_model =
|
| - TemplateURLServiceFactory::GetForProfile(&profile_);
|
| - turl_model->Add(default_t_url);
|
| - turl_model->SetUserSelectedDefaultSearchProvider(default_t_url);
|
| - TemplateURLID default_provider_id = default_t_url->id();
|
| - ASSERT_NE(0, default_provider_id);
|
| -
|
| - // Create another TemplateURL for KeywordProvider.
|
| - TemplateURLData data2;
|
| - data2.SetShortName(base::ASCIIToUTF16("k"));
|
| - data2.SetKeyword(base::ASCIIToUTF16("k"));
|
| - data2.SetURL("http://keyword/{searchTerms}");
|
| - TemplateURL* keyword_t_url = new TemplateURL(data2);
|
| - turl_model->Add(keyword_t_url);
|
| - ASSERT_NE(0, keyword_t_url->id());
|
| -
|
| - controller_.reset(new AutocompleteController(
|
| -
|
| - make_scoped_ptr(new ChromeAutocompleteProviderClient(&profile_)), NULL,
|
| - AutocompleteProvider::TYPE_KEYWORD | AutocompleteProvider::TYPE_SEARCH));
|
| -}
|
| -
|
| -void AutocompleteProviderTest::ResetControllerWithKeywordProvider() {
|
| - TemplateURLServiceFactory::GetInstance()->SetTestingFactoryAndUse(
|
| - &profile_, &TemplateURLServiceFactory::BuildInstanceFor);
|
| -
|
| - TemplateURLService* turl_model =
|
| - TemplateURLServiceFactory::GetForProfile(&profile_);
|
| -
|
| - // Create a TemplateURL for KeywordProvider.
|
| - TemplateURLData data;
|
| - data.SetShortName(base::ASCIIToUTF16("foo.com"));
|
| - data.SetKeyword(base::ASCIIToUTF16("foo.com"));
|
| - data.SetURL("http://foo.com/{searchTerms}");
|
| - TemplateURL* keyword_t_url = new TemplateURL(data);
|
| - turl_model->Add(keyword_t_url);
|
| - ASSERT_NE(0, keyword_t_url->id());
|
| -
|
| - // Make a TemplateURL for KeywordProvider that a shorter version of the
|
| - // first.
|
| - data.SetShortName(base::ASCIIToUTF16("f"));
|
| - data.SetKeyword(base::ASCIIToUTF16("f"));
|
| - data.SetURL("http://f.com/{searchTerms}");
|
| - keyword_t_url = new TemplateURL(data);
|
| - turl_model->Add(keyword_t_url);
|
| - ASSERT_NE(0, keyword_t_url->id());
|
| -
|
| - // Create another TemplateURL for KeywordProvider.
|
| - data.SetShortName(base::ASCIIToUTF16("bar.com"));
|
| - data.SetKeyword(base::ASCIIToUTF16("bar.com"));
|
| - data.SetURL("http://bar.com/{searchTerms}");
|
| - keyword_t_url = new TemplateURL(data);
|
| - turl_model->Add(keyword_t_url);
|
| - ASSERT_NE(0, keyword_t_url->id());
|
| -
|
| - controller_.reset(new AutocompleteController(
|
| - make_scoped_ptr(new ChromeAutocompleteProviderClient(&profile_)), NULL,
|
| - AutocompleteProvider::TYPE_KEYWORD));
|
| -}
|
| -
|
| -void AutocompleteProviderTest::RunTest() {
|
| - RunQuery(base::ASCIIToUTF16("a"));
|
| -}
|
| -
|
| -void AutocompleteProviderTest::RunKeywordTest(const base::string16& input,
|
| - const KeywordTestData* match_data,
|
| - size_t size) {
|
| - ACMatches matches;
|
| - for (size_t i = 0; i < size; ++i) {
|
| - AutocompleteMatch match;
|
| - match.relevance = 1000; // Arbitrary non-zero value.
|
| - match.allowed_to_be_default_match = true;
|
| - match.fill_into_edit = match_data[i].fill_into_edit;
|
| - match.transition = ui::PAGE_TRANSITION_KEYWORD;
|
| - match.keyword = match_data[i].keyword;
|
| - matches.push_back(match);
|
| - }
|
| -
|
| - controller_->input_ = AutocompleteInput(
|
| - input, base::string16::npos, std::string(), GURL(),
|
| - metrics::OmniboxEventProto::INSTANT_NTP_WITH_OMNIBOX_AS_STARTING_FOCUS,
|
| - false, true, true, true, false,
|
| - ChromeAutocompleteSchemeClassifier(&profile_));
|
| - AutocompleteResult result;
|
| - result.AppendMatches(controller_->input_, matches);
|
| - controller_->UpdateAssociatedKeywords(&result);
|
| -
|
| - for (size_t j = 0; j < result.size(); ++j) {
|
| - EXPECT_EQ(match_data[j].expected_associated_keyword,
|
| - result.match_at(j)->associated_keyword.get() ?
|
| - result.match_at(j)->associated_keyword->keyword :
|
| - base::string16());
|
| - }
|
| -}
|
| -
|
| -void AutocompleteProviderTest::RunAssistedQueryStatsTest(
|
| - const AssistedQueryStatsTestData* aqs_test_data,
|
| - size_t size) {
|
| - // Prepare input.
|
| - const size_t kMaxRelevance = 1000;
|
| - ACMatches matches;
|
| - for (size_t i = 0; i < size; ++i) {
|
| - AutocompleteMatch match(NULL, kMaxRelevance - i, false,
|
| - aqs_test_data[i].match_type);
|
| - match.allowed_to_be_default_match = true;
|
| - match.keyword = base::ASCIIToUTF16(kTestTemplateURLKeyword);
|
| - match.search_terms_args.reset(
|
| - new TemplateURLRef::SearchTermsArgs(base::string16()));
|
| - matches.push_back(match);
|
| - }
|
| - result_.Reset();
|
| - result_.AppendMatches(AutocompleteInput(), matches);
|
| -
|
| - // Update AQS.
|
| - controller_->UpdateAssistedQueryStats(&result_);
|
| -
|
| - // Verify data.
|
| - for (size_t i = 0; i < size; ++i) {
|
| - EXPECT_EQ(aqs_test_data[i].expected_aqs,
|
| - result_.match_at(i)->search_terms_args->assisted_query_stats);
|
| - }
|
| -}
|
| -
|
| -void AutocompleteProviderTest::RunQuery(const base::string16 query) {
|
| - result_.Reset();
|
| - controller_->Start(AutocompleteInput(
|
| - query, base::string16::npos, std::string(), GURL(),
|
| - metrics::OmniboxEventProto::INVALID_SPEC, true, false, true, true, false,
|
| - ChromeAutocompleteSchemeClassifier(&profile_)));
|
| -
|
| - if (!controller_->done())
|
| - // The message loop will terminate when all autocomplete input has been
|
| - // collected.
|
| - base::MessageLoop::current()->Run();
|
| -}
|
| -
|
| -void AutocompleteProviderTest::RunExactKeymatchTest(
|
| - bool allow_exact_keyword_match) {
|
| - // Send the controller input which exactly matches the keyword provider we
|
| - // created in ResetControllerWithKeywordAndSearchProviders(). The default
|
| - // match should thus be a search-other-engine match iff
|
| - // |allow_exact_keyword_match| is true. Regardless, the match should
|
| - // be from SearchProvider. (It provides all verbatim search matches,
|
| - // keyword or not.)
|
| - controller_->Start(AutocompleteInput(
|
| - base::ASCIIToUTF16("k test"), base::string16::npos, std::string(), GURL(),
|
| - metrics::OmniboxEventProto::INVALID_SPEC, true, false,
|
| - allow_exact_keyword_match, false, false,
|
| - ChromeAutocompleteSchemeClassifier(&profile_)));
|
| - EXPECT_TRUE(controller_->done());
|
| - EXPECT_EQ(AutocompleteProvider::TYPE_SEARCH,
|
| - controller_->result().default_match()->provider->type());
|
| - EXPECT_EQ(allow_exact_keyword_match ?
|
| - AutocompleteMatchType::SEARCH_OTHER_ENGINE :
|
| - AutocompleteMatchType::SEARCH_WHAT_YOU_TYPED,
|
| - controller_->result().default_match()->type);
|
| -}
|
| -
|
| -void AutocompleteProviderTest::CopyResults() {
|
| - result_.CopyFrom(controller_->result());
|
| -}
|
| -
|
| -GURL AutocompleteProviderTest::GetDestinationURL(
|
| - AutocompleteMatch match,
|
| - base::TimeDelta query_formulation_time) const {
|
| - controller_->UpdateMatchDestinationURLWithQueryFormulationTime(
|
| - query_formulation_time, &match);
|
| - return match.destination_url;
|
| -}
|
| -
|
| -void AutocompleteProviderTest::Observe(
|
| - int type,
|
| - const content::NotificationSource& source,
|
| - const content::NotificationDetails& details) {
|
| - if (controller_->done()) {
|
| - CopyResults();
|
| - base::MessageLoop::current()->QuitWhenIdle();
|
| - }
|
| -}
|
| -
|
| -// Tests that the default selection is set properly when updating results.
|
| -TEST_F(AutocompleteProviderTest, Query) {
|
| - TestProvider* provider1 = NULL;
|
| - TestProvider* provider2 = NULL;
|
| - ResetControllerWithTestProviders(false, &provider1, &provider2);
|
| - RunTest();
|
| -
|
| - // Make sure the default match gets set to the highest relevance match. The
|
| - // highest relevance matches should come from the second provider.
|
| - EXPECT_EQ(kResultsPerProvider * 2, result_.size());
|
| - ASSERT_NE(result_.end(), result_.default_match());
|
| - EXPECT_EQ(provider2, result_.default_match()->provider);
|
| -}
|
| -
|
| -// Tests assisted query stats.
|
| -TEST_F(AutocompleteProviderTest, AssistedQueryStats) {
|
| - ResetControllerWithTestProviders(false, NULL, NULL);
|
| - RunTest();
|
| -
|
| - ASSERT_EQ(kResultsPerProvider * 2, result_.size());
|
| -
|
| - // Now, check the results from the second provider, as they should not have
|
| - // assisted query stats set.
|
| - for (size_t i = 0; i < kResultsPerProvider; ++i) {
|
| - EXPECT_TRUE(
|
| - result_.match_at(i)->search_terms_args->assisted_query_stats.empty());
|
| - }
|
| - // The first provider has a test keyword, so AQS should be non-empty.
|
| - for (size_t i = kResultsPerProvider; i < kResultsPerProvider * 2; ++i) {
|
| - EXPECT_FALSE(
|
| - result_.match_at(i)->search_terms_args->assisted_query_stats.empty());
|
| - }
|
| -}
|
| -
|
| -TEST_F(AutocompleteProviderTest, RemoveDuplicates) {
|
| - TestProvider* provider1 = NULL;
|
| - TestProvider* provider2 = NULL;
|
| - ResetControllerWithTestProviders(true, &provider1, &provider2);
|
| - RunTest();
|
| -
|
| - // Make sure all the first provider's results were eliminated by the second
|
| - // provider's.
|
| - EXPECT_EQ(kResultsPerProvider, result_.size());
|
| - for (AutocompleteResult::const_iterator i(result_.begin());
|
| - i != result_.end(); ++i)
|
| - EXPECT_EQ(provider2, i->provider);
|
| -}
|
| -
|
| -TEST_F(AutocompleteProviderTest, AllowExactKeywordMatch) {
|
| - ResetControllerWithKeywordAndSearchProviders();
|
| - RunExactKeymatchTest(true);
|
| - RunExactKeymatchTest(false);
|
| -}
|
| -
|
| -// Ensures matches from (only) the default search provider respect any extra
|
| -// query params set on the command line.
|
| -TEST_F(AutocompleteProviderTest, ExtraQueryParams) {
|
| - ResetControllerWithKeywordAndSearchProviders();
|
| - base::CommandLine::ForCurrentProcess()->AppendSwitchASCII(
|
| - switches::kExtraSearchQueryParams, "a=b");
|
| - RunExactKeymatchTest(true);
|
| - CopyResults();
|
| - ASSERT_EQ(2U, result_.size());
|
| - EXPECT_EQ("http://keyword/test",
|
| - result_.match_at(0)->destination_url.possibly_invalid_spec());
|
| - EXPECT_EQ("http://defaultturl/k%20test?a=b",
|
| - result_.match_at(1)->destination_url.possibly_invalid_spec());
|
| -}
|
| -
|
| -// Test that redundant associated keywords are removed.
|
| -TEST_F(AutocompleteProviderTest, RedundantKeywordsIgnoredInResult) {
|
| - ResetControllerWithKeywordProvider();
|
| -
|
| - {
|
| - KeywordTestData duplicate_url[] = {
|
| - { base::ASCIIToUTF16("fo"), base::string16(), base::string16() },
|
| - { base::ASCIIToUTF16("foo.com"), base::string16(),
|
| - base::ASCIIToUTF16("foo.com") },
|
| - { base::ASCIIToUTF16("foo.com"), base::string16(), base::string16() }
|
| - };
|
| -
|
| - SCOPED_TRACE("Duplicate url");
|
| - RunKeywordTest(base::ASCIIToUTF16("fo"), duplicate_url,
|
| - arraysize(duplicate_url));
|
| - }
|
| -
|
| - {
|
| - KeywordTestData keyword_match[] = {
|
| - { base::ASCIIToUTF16("foo.com"), base::ASCIIToUTF16("foo.com"),
|
| - base::string16() },
|
| - { base::ASCIIToUTF16("foo.com"), base::string16(), base::string16() }
|
| - };
|
| -
|
| - SCOPED_TRACE("Duplicate url with keyword match");
|
| - RunKeywordTest(base::ASCIIToUTF16("fo"), keyword_match,
|
| - arraysize(keyword_match));
|
| - }
|
| -
|
| - {
|
| - KeywordTestData multiple_keyword[] = {
|
| - { base::ASCIIToUTF16("fo"), base::string16(), base::string16() },
|
| - { base::ASCIIToUTF16("foo.com"), base::string16(),
|
| - base::ASCIIToUTF16("foo.com") },
|
| - { base::ASCIIToUTF16("foo.com"), base::string16(), base::string16() },
|
| - { base::ASCIIToUTF16("bar.com"), base::string16(),
|
| - base::ASCIIToUTF16("bar.com") },
|
| - };
|
| -
|
| - SCOPED_TRACE("Duplicate url with multiple keywords");
|
| - RunKeywordTest(base::ASCIIToUTF16("fo"), multiple_keyword,
|
| - arraysize(multiple_keyword));
|
| - }
|
| -}
|
| -
|
| -// Test that exact match keywords trump keywords associated with
|
| -// the match.
|
| -TEST_F(AutocompleteProviderTest, ExactMatchKeywords) {
|
| - ResetControllerWithKeywordProvider();
|
| -
|
| - {
|
| - KeywordTestData keyword_match[] = {
|
| - { base::ASCIIToUTF16("foo.com"), base::string16(),
|
| - base::ASCIIToUTF16("foo.com") }
|
| - };
|
| -
|
| - SCOPED_TRACE("keyword match as usual");
|
| - RunKeywordTest(base::ASCIIToUTF16("fo"), keyword_match,
|
| - arraysize(keyword_match));
|
| - }
|
| -
|
| - // The same result set with an input of "f" (versus "fo") should get
|
| - // a different associated keyword because "f" is an exact match for
|
| - // a keyword and that should trump the keyword normally associated with
|
| - // this match.
|
| - {
|
| - KeywordTestData keyword_match[] = {
|
| - { base::ASCIIToUTF16("foo.com"), base::string16(),
|
| - base::ASCIIToUTF16("f") }
|
| - };
|
| -
|
| - SCOPED_TRACE("keyword exact match");
|
| - RunKeywordTest(base::ASCIIToUTF16("f"), keyword_match,
|
| - arraysize(keyword_match));
|
| - }
|
| -}
|
| -
|
| -TEST_F(AutocompleteProviderTest, UpdateAssistedQueryStats) {
|
| - ResetControllerWithTestProviders(false, NULL, NULL);
|
| -
|
| - {
|
| - AssistedQueryStatsTestData test_data[] = {
|
| - // MSVC doesn't support zero-length arrays, so supply some dummy data.
|
| - { AutocompleteMatchType::SEARCH_WHAT_YOU_TYPED, "" }
|
| - };
|
| - SCOPED_TRACE("No matches");
|
| - // Note: We pass 0 here to ignore the dummy data above.
|
| - RunAssistedQueryStatsTest(test_data, 0);
|
| - }
|
| -
|
| - {
|
| - AssistedQueryStatsTestData test_data[] = {
|
| - { AutocompleteMatchType::SEARCH_WHAT_YOU_TYPED, "chrome..69i57" }
|
| - };
|
| - SCOPED_TRACE("One match");
|
| - RunAssistedQueryStatsTest(test_data, arraysize(test_data));
|
| - }
|
| -
|
| - {
|
| - AssistedQueryStatsTestData test_data[] = {
|
| - { AutocompleteMatchType::SEARCH_WHAT_YOU_TYPED,
|
| - "chrome..69i57j69i58j5l2j0l3j69i59" },
|
| - { AutocompleteMatchType::URL_WHAT_YOU_TYPED,
|
| - "chrome..69i57j69i58j5l2j0l3j69i59" },
|
| - { AutocompleteMatchType::NAVSUGGEST,
|
| - "chrome.2.69i57j69i58j5l2j0l3j69i59" },
|
| - { AutocompleteMatchType::NAVSUGGEST,
|
| - "chrome.3.69i57j69i58j5l2j0l3j69i59" },
|
| - { AutocompleteMatchType::SEARCH_SUGGEST,
|
| - "chrome.4.69i57j69i58j5l2j0l3j69i59" },
|
| - { AutocompleteMatchType::SEARCH_SUGGEST,
|
| - "chrome.5.69i57j69i58j5l2j0l3j69i59" },
|
| - { AutocompleteMatchType::SEARCH_SUGGEST,
|
| - "chrome.6.69i57j69i58j5l2j0l3j69i59" },
|
| - { AutocompleteMatchType::SEARCH_HISTORY,
|
| - "chrome.7.69i57j69i58j5l2j0l3j69i59" },
|
| - };
|
| - SCOPED_TRACE("Multiple matches");
|
| - RunAssistedQueryStatsTest(test_data, arraysize(test_data));
|
| - }
|
| -}
|
| -
|
| -TEST_F(AutocompleteProviderTest, GetDestinationURL) {
|
| - ResetControllerWithKeywordAndSearchProviders();
|
| -
|
| - // For the destination URL to have aqs parameters for query formulation time
|
| - // and the field trial triggered bit, many conditions need to be satisfied.
|
| - AutocompleteMatch match(NULL, 1100, false,
|
| - AutocompleteMatchType::SEARCH_SUGGEST);
|
| - GURL url(GetDestinationURL(match, base::TimeDelta::FromMilliseconds(2456)));
|
| - EXPECT_TRUE(url.path().empty());
|
| -
|
| - // The protocol needs to be https.
|
| - RegisterTemplateURL(base::ASCIIToUTF16(kTestTemplateURLKeyword),
|
| - "https://aqs/{searchTerms}/{google:assistedQueryStats}");
|
| - url = GetDestinationURL(match, base::TimeDelta::FromMilliseconds(2456));
|
| - EXPECT_TRUE(url.path().empty());
|
| -
|
| - // There needs to be a keyword provider.
|
| - match.keyword = base::ASCIIToUTF16(kTestTemplateURLKeyword);
|
| - url = GetDestinationURL(match, base::TimeDelta::FromMilliseconds(2456));
|
| - EXPECT_TRUE(url.path().empty());
|
| -
|
| - // search_terms_args needs to be set.
|
| - match.search_terms_args.reset(
|
| - new TemplateURLRef::SearchTermsArgs(base::string16()));
|
| - url = GetDestinationURL(match, base::TimeDelta::FromMilliseconds(2456));
|
| - EXPECT_TRUE(url.path().empty());
|
| -
|
| - // assisted_query_stats needs to have been previously set.
|
| - match.search_terms_args->assisted_query_stats =
|
| - "chrome.0.69i57j69i58j5l2j0l3j69i59";
|
| - url = GetDestinationURL(match, base::TimeDelta::FromMilliseconds(2456));
|
| - EXPECT_EQ("//aqs=chrome.0.69i57j69i58j5l2j0l3j69i59.2456j0j0&", url.path());
|
| -
|
| - // Test field trial triggered bit set.
|
| - set_search_provider_field_trial_triggered_in_session(true);
|
| - EXPECT_TRUE(search_provider_field_trial_triggered_in_session());
|
| - url = GetDestinationURL(match, base::TimeDelta::FromMilliseconds(2456));
|
| - EXPECT_EQ("//aqs=chrome.0.69i57j69i58j5l2j0l3j69i59.2456j1j0&", url.path());
|
| -
|
| - // Test page classification set.
|
| - set_current_page_classification(metrics::OmniboxEventProto::OTHER);
|
| - set_search_provider_field_trial_triggered_in_session(false);
|
| - EXPECT_FALSE(search_provider_field_trial_triggered_in_session());
|
| - url = GetDestinationURL(match, base::TimeDelta::FromMilliseconds(2456));
|
| - EXPECT_EQ("//aqs=chrome.0.69i57j69i58j5l2j0l3j69i59.2456j0j4&", url.path());
|
| -
|
| - // Test page classification and field trial triggered set.
|
| - set_search_provider_field_trial_triggered_in_session(true);
|
| - EXPECT_TRUE(search_provider_field_trial_triggered_in_session());
|
| - url = GetDestinationURL(match, base::TimeDelta::FromMilliseconds(2456));
|
| - EXPECT_EQ("//aqs=chrome.0.69i57j69i58j5l2j0l3j69i59.2456j1j4&", url.path());
|
| -}
|
|
|