Index: chrome/browser/autocomplete/search_provider_unittest.cc |
=================================================================== |
--- chrome/browser/autocomplete/search_provider_unittest.cc (revision 92729) |
+++ chrome/browser/autocomplete/search_provider_unittest.cc (working copy) |
@@ -52,10 +52,14 @@ |
virtual void TearDown(); |
protected: |
- // Returns an AutocompleteMatch in provider_'s set of matches that matches |
- // |url|. If there is no matching URL, an empty match is returned. |
- AutocompleteMatch FindMatchWithDestination(const GURL& url); |
+ // Adds a search for |term|, using the engine |t_url| to the history, and |
+ // returns the URL for that search. |
+ GURL AddSearchToHistory(TemplateURL* t_url, string16 term, int visit_count); |
+ // Looks for a match in |provider_| with destination |url|. Sets |match| to |
+ // it if found. Returns whether |match| was set. |
+ bool FindMatchWithDestination(const GURL& url, AutocompleteMatch* match); |
+ |
// ACProviderListener method. If we're waiting for the provider to finish, |
// this exits the message loop. |
virtual void OnProviderUpdate(bool updated_matches); |
@@ -65,10 +69,13 @@ |
void RunTillProviderDone(); |
// Invokes Start on provider_, then runs all pending tasks. |
- void QueryForInput(const string16& text, |
- bool prevent_inline_autocomplete, |
- bool minimal_changes); |
+ void QueryForInput(const string16& text, bool prevent_inline_autocomplete); |
+ // Calls QueryForInput(), finishes any suggest query, then if |wyt_match| is |
+ // non-NULL, sets it to the "what you typed" entry for |text|. |
+ void QueryForInputAndSetWYTMatch(const string16& text, |
+ AutocompleteMatch* wyt_match); |
+ |
// Notifies the URLFetcher for the suggest query corresponding to the default |
// search provider that it's done. |
// Be sure and wrap calls to this in ASSERT_NO_FATAL_FAILURE. |
@@ -123,15 +130,7 @@ |
ASSERT_NE(0, default_provider_id); |
// Add url1, with search term term1_. |
- HistoryService* history = |
- profile_.GetHistoryService(Profile::EXPLICIT_ACCESS); |
- term1_url_ = GURL(default_t_url_->url()->ReplaceSearchTerms( |
- *default_t_url_, term1_, 0, string16())); |
- history->AddPageWithDetails(term1_url_, string16(), 1, 1, |
- base::Time::Now(), false, |
- history::SOURCE_BROWSED); |
- history->SetKeywordSearchTermsForURL(term1_url_, default_t_url_->id(), |
- term1_); |
+ term1_url_ = AddSearchToHistory(default_t_url_, term1_, 1); |
// Create another TemplateURL. |
keyword_t_url_ = new TemplateURL(); |
@@ -144,13 +143,7 @@ |
ASSERT_NE(0, keyword_t_url_->id()); |
// Add a page and search term for keyword_t_url_. |
- keyword_url_ = GURL(keyword_t_url_->url()->ReplaceSearchTerms( |
- *keyword_t_url_, keyword_term_, 0, string16())); |
- history->AddPageWithDetails(keyword_url_, string16(), 1, 1, |
- base::Time::Now(), false, |
- history::SOURCE_BROWSED); |
- history->SetKeywordSearchTermsForURL(keyword_url_, keyword_t_url_->id(), |
- keyword_term_); |
+ keyword_url_ = AddSearchToHistory(keyword_t_url_, keyword_term_, 1); |
// Keywords are updated by the InMemoryHistoryBackend only after the message |
// has been processed on the history thread. Block until history processes all |
@@ -182,18 +175,33 @@ |
} |
void SearchProviderTest::QueryForInput(const string16& text, |
- bool prevent_inline_autocomplete, |
- bool minimal_changes) { |
+ bool prevent_inline_autocomplete) { |
// Start a query. |
AutocompleteInput input(text, string16(), prevent_inline_autocomplete, |
false, true, AutocompleteInput::ALL_MATCHES); |
- provider_->Start(input, minimal_changes); |
+ provider_->Start(input, false); |
// RunAllPending so that the task scheduled by SearchProvider to create the |
// URLFetchers runs. |
message_loop_.RunAllPending(); |
} |
+void SearchProviderTest::QueryForInputAndSetWYTMatch( |
+ const string16& text, |
+ AutocompleteMatch* wyt_match) { |
+ QueryForInput(text, false); |
+ profile_.BlockUntilHistoryProcessesPendingRequests(); |
+ ASSERT_NO_FATAL_FAILURE(FinishDefaultSuggestQuery()); |
+ EXPECT_NE(profile_.GetPrefs()->GetBoolean(prefs::kInstantEnabled), |
+ provider_->done()); |
+ if (!wyt_match) |
+ return; |
+ ASSERT_GE(provider_->matches().size(), 1u); |
+ EXPECT_TRUE(FindMatchWithDestination(GURL( |
+ default_t_url_->url()->ReplaceSearchTerms(*default_t_url_, text, 0, |
+ string16())), wyt_match)); |
+} |
+ |
void SearchProviderTest::TearDown() { |
message_loop_.RunAllPending(); |
@@ -203,14 +211,31 @@ |
provider_ = NULL; |
} |
-AutocompleteMatch SearchProviderTest::FindMatchWithDestination( |
- const GURL& url) { |
+GURL SearchProviderTest::AddSearchToHistory(TemplateURL* t_url, |
+ string16 term, |
+ int visit_count) { |
+ HistoryService* history = |
+ profile_.GetHistoryService(Profile::EXPLICIT_ACCESS); |
+ GURL search(t_url->url()->ReplaceSearchTerms(*t_url, term, 0, string16())); |
+ static base::Time last_added_time; |
+ last_added_time = std::max(base::Time::Now(), |
+ last_added_time + base::TimeDelta::FromMicroseconds(1)); |
+ history->AddPageWithDetails(search, string16(), visit_count, visit_count, |
+ last_added_time, false, history::SOURCE_BROWSED); |
+ history->SetKeywordSearchTermsForURL(search, t_url->id(), term); |
+ return search; |
+} |
+ |
+bool SearchProviderTest::FindMatchWithDestination(const GURL& url, |
+ AutocompleteMatch* match) { |
for (ACMatches::const_iterator i = provider_->matches().begin(); |
i != provider_->matches().end(); ++i) { |
- if (i->destination_url == url) |
- return *i; |
+ if (i->destination_url == url) { |
+ *match = *i; |
+ return true; |
+ } |
} |
- return AutocompleteMatch(NULL, 1, false, AutocompleteMatch::HISTORY_URL); |
+ return false; |
} |
void SearchProviderTest::FinishDefaultSuggestQuery() { |
@@ -230,7 +255,7 @@ |
// created for the default provider suggest results. |
TEST_F(SearchProviderTest, QueryDefaultProvider) { |
string16 term = term1_.substr(0, term1_.length() - 1); |
- QueryForInput(term, false, false); |
+ QueryForInput(term, false); |
// Make sure the default providers suggest service was queried. |
TestURLFetcher* fetcher = test_factory_.GetFetcherByID( |
@@ -253,25 +278,24 @@ |
// The SearchProvider is done. Make sure it has a result for the history |
// term term1. |
- AutocompleteMatch term1_match = FindMatchWithDestination(term1_url_); |
- EXPECT_TRUE(!term1_match.destination_url.is_empty()); |
+ AutocompleteMatch term1_match; |
+ EXPECT_TRUE(FindMatchWithDestination(term1_url_, &term1_match)); |
// Term1 should not have a description, it's set later. |
EXPECT_TRUE(term1_match.description.empty()); |
- GURL what_you_typed_url = GURL(default_t_url_->url()->ReplaceSearchTerms( |
- *default_t_url_, term, 0, string16())); |
- AutocompleteMatch what_you_typed_match = |
- FindMatchWithDestination(what_you_typed_url); |
- EXPECT_TRUE(!what_you_typed_match.destination_url.is_empty()); |
- EXPECT_TRUE(what_you_typed_match.description.empty()); |
+ AutocompleteMatch wyt_match; |
+ EXPECT_TRUE(FindMatchWithDestination(GURL( |
+ default_t_url_->url()->ReplaceSearchTerms(*default_t_url_, term, 0, |
+ string16())), &wyt_match)); |
+ EXPECT_TRUE(wyt_match.description.empty()); |
// The match for term1 should be more relevant than the what you typed result. |
- EXPECT_GT(term1_match.relevance, what_you_typed_match.relevance); |
+ EXPECT_GT(term1_match.relevance, wyt_match.relevance); |
} |
TEST_F(SearchProviderTest, HonorPreventInlineAutocomplete) { |
string16 term = term1_.substr(0, term1_.length() - 1); |
- QueryForInput(term, true, false); |
+ QueryForInput(term, true); |
ASSERT_FALSE(provider_->matches().empty()); |
ASSERT_EQ(AutocompleteMatch::SEARCH_WHAT_YOU_TYPED, |
@@ -282,8 +306,7 @@ |
// is queried as well as URLFetchers getting created. |
TEST_F(SearchProviderTest, QueryKeywordProvider) { |
string16 term = keyword_term_.substr(0, keyword_term_.length() - 1); |
- QueryForInput(keyword_t_url_->keyword() + UTF8ToUTF16(" ") + term, false, |
- false); |
+ QueryForInput(keyword_t_url_->keyword() + UTF8ToUTF16(" ") + term, false); |
// Make sure the default providers suggest service was queried. |
TestURLFetcher* default_fetcher = test_factory_.GetFetcherByID( |
@@ -317,8 +340,8 @@ |
// The SearchProvider is done. Make sure it has a result for the history |
// term keyword. |
- AutocompleteMatch match = FindMatchWithDestination(keyword_url_); |
- ASSERT_TRUE(!match.destination_url.is_empty()); |
+ AutocompleteMatch match; |
+ EXPECT_TRUE(FindMatchWithDestination(keyword_url_, &match)); |
// The match should have a TemplateURL. |
EXPECT_TRUE(match.template_url); |
@@ -346,7 +369,7 @@ |
}; |
for (size_t i = 0; i < arraysize(inputs); ++i) { |
- QueryForInput(ASCIIToUTF16(inputs[i]), false, false); |
+ QueryForInput(ASCIIToUTF16(inputs[i]), false); |
// Make sure the default providers suggest service was not queried. |
ASSERT_TRUE(test_factory_.GetFetcherByID( |
SearchProvider::kDefaultProviderURLFetcherID) == NULL); |
@@ -360,16 +383,9 @@ |
PrefService* service = profile_.GetPrefs(); |
service->SetBoolean(prefs::kInstantEnabled, true); |
- QueryForInput(ASCIIToUTF16("foo"), false, false); |
+ ASSERT_NO_FATAL_FAILURE(QueryForInputAndSetWYTMatch(ASCIIToUTF16("foo"), |
+ NULL)); |
- // Wait until history and the suggest query complete. |
- profile_.BlockUntilHistoryProcessesPendingRequests(); |
- ASSERT_NO_FATAL_FAILURE(FinishDefaultSuggestQuery()); |
- |
- // When instant is enabled the provider isn't done until it hears from |
- // instant. |
- EXPECT_FALSE(provider_->done()); |
- |
// Tell the provider instant is done. |
provider_->FinalizeInstantQuery(ASCIIToUTF16("foo"), ASCIIToUTF16("bar")); |
@@ -381,22 +397,21 @@ |
EXPECT_EQ(2u, provider_->matches().size()); |
GURL instant_url = GURL(default_t_url_->url()->ReplaceSearchTerms( |
*default_t_url_, ASCIIToUTF16("foobar"), 0, string16())); |
- AutocompleteMatch instant_match = FindMatchWithDestination(instant_url); |
- EXPECT_TRUE(!instant_match.destination_url.is_empty()); |
+ AutocompleteMatch instant_match; |
+ EXPECT_TRUE(FindMatchWithDestination(instant_url, &instant_match)); |
// And the 'foobar' match should not have a description, it'll be set later. |
EXPECT_TRUE(instant_match.description.empty()); |
// Make sure the what you typed match has no description. |
- GURL what_you_typed_url = GURL(default_t_url_->url()->ReplaceSearchTerms( |
- *default_t_url_, ASCIIToUTF16("foo"), 0, string16())); |
- AutocompleteMatch what_you_typed_match = |
- FindMatchWithDestination(what_you_typed_url); |
- EXPECT_TRUE(!what_you_typed_match.destination_url.is_empty()); |
- EXPECT_TRUE(what_you_typed_match.description.empty()); |
+ AutocompleteMatch wyt_match; |
+ EXPECT_TRUE(FindMatchWithDestination(GURL( |
+ default_t_url_->url()->ReplaceSearchTerms(*default_t_url_, |
+ ASCIIToUTF16("foo"), 0, string16())), &wyt_match)); |
+ EXPECT_TRUE(wyt_match.description.empty()); |
// The instant search should be more relevant. |
- EXPECT_GT(instant_match.relevance, what_you_typed_match.relevance); |
+ EXPECT_GT(instant_match.relevance, wyt_match.relevance); |
} |
// Make sure that if FinalizeInstantQuery is invoked before suggest results |
@@ -405,7 +420,7 @@ |
PrefService* service = profile_.GetPrefs(); |
service->SetBoolean(prefs::kInstantEnabled, true); |
- QueryForInput(ASCIIToUTF16("foo"), false, false); |
+ QueryForInput(ASCIIToUTF16("foo"), false); |
// Finalize the instant query immediately. |
provider_->FinalizeInstantQuery(ASCIIToUTF16("foo"), ASCIIToUTF16("bar")); |
@@ -413,10 +428,10 @@ |
// There should be two matches, one for what you typed, the other for |
// 'foobar'. |
EXPECT_EQ(2u, provider_->matches().size()); |
- GURL instant_url = GURL(default_t_url_->url()->ReplaceSearchTerms( |
- *default_t_url_, ASCIIToUTF16("foobar"), 0, string16())); |
- AutocompleteMatch instant_match = FindMatchWithDestination(instant_url); |
- EXPECT_FALSE(instant_match.destination_url.is_empty()); |
+ GURL instant_url(default_t_url_->url()->ReplaceSearchTerms(*default_t_url_, |
+ ASCIIToUTF16("foobar"), 0, string16())); |
+ AutocompleteMatch instant_match; |
+ EXPECT_TRUE(FindMatchWithDestination(instant_url, &instant_match)); |
// Wait until history and the suggest query complete. |
profile_.BlockUntilHistoryProcessesPendingRequests(); |
@@ -428,8 +443,7 @@ |
// There should be two matches, one for what you typed, the other for |
// 'foobar'. |
EXPECT_EQ(2u, provider_->matches().size()); |
- instant_match = FindMatchWithDestination(instant_url); |
- EXPECT_FALSE(instant_match.destination_url.is_empty()); |
+ EXPECT_TRUE(FindMatchWithDestination(instant_url, &instant_match)); |
// And the 'foobar' match should not have a description, it'll be set later. |
EXPECT_TRUE(instant_match.description.empty()); |
@@ -441,118 +455,169 @@ |
PrefService* service = profile_.GetPrefs(); |
service->SetBoolean(prefs::kInstantEnabled, true); |
- QueryForInput(ASCIIToUTF16("foo"), false, false); |
+ ASSERT_NO_FATAL_FAILURE(QueryForInputAndSetWYTMatch(ASCIIToUTF16("foo"), |
+ NULL)); |
- // Wait until history and the suggest query complete. |
- profile_.BlockUntilHistoryProcessesPendingRequests(); |
- ASSERT_NO_FATAL_FAILURE(FinishDefaultSuggestQuery()); |
- |
// Finalize the instant query immediately. |
provider_->FinalizeInstantQuery(ASCIIToUTF16("foo"), ASCIIToUTF16("bar")); |
// Query with the same input text, but trailing whitespace. |
- QueryForInput(ASCIIToUTF16("foo "), false, false); |
+ AutocompleteMatch instant_match; |
+ ASSERT_NO_FATAL_FAILURE(QueryForInputAndSetWYTMatch(ASCIIToUTF16("foo "), |
+ &instant_match)); |
// There should only one match, for what you typed. |
EXPECT_EQ(1u, provider_->matches().size()); |
- GURL instant_url = GURL(default_t_url_->url()->ReplaceSearchTerms( |
- *default_t_url_, ASCIIToUTF16("foo "), 0, string16())); |
- AutocompleteMatch instant_match = FindMatchWithDestination(instant_url); |
EXPECT_FALSE(instant_match.destination_url.is_empty()); |
} |
TEST_F(SearchProviderTest, DontAutocompleteURLLikeTerms) { |
profile_.CreateAutocompleteClassifier(); |
- string16 term(ASCIIToUTF16("docs.google.com")); |
- HistoryService* history = |
- profile_.GetHistoryService(Profile::EXPLICIT_ACCESS); |
- GURL url = GURL(default_t_url_->url()->ReplaceSearchTerms( |
- *default_t_url_, term, 0, string16())); |
- history->AddPageWithDetails( |
- url, string16(), 1, 1, base::Time::Now(), false, history::SOURCE_BROWSED); |
- history->SetKeywordSearchTermsForURL(url, default_t_url_->id(), term); |
+ GURL url = AddSearchToHistory(default_t_url_, |
+ ASCIIToUTF16("docs.google.com"), 1); |
// Add the term as a url. |
- history->AddPageWithDetails( |
+ profile_.GetHistoryService(Profile::EXPLICIT_ACCESS)->AddPageWithDetails( |
GURL("http://docs.google.com"), string16(), 1, 1, base::Time::Now(), |
false, history::SOURCE_BROWSED); |
- |
profile_.BlockUntilHistoryProcessesPendingRequests(); |
- QueryForInput(ASCIIToUTF16("docs"), false, false); |
+ AutocompleteMatch wyt_match; |
+ ASSERT_NO_FATAL_FAILURE(QueryForInputAndSetWYTMatch(ASCIIToUTF16("docs"), |
+ &wyt_match)); |
- // Wait until history and the suggest query complete. |
- profile_.BlockUntilHistoryProcessesPendingRequests(); |
- ASSERT_NO_FATAL_FAILURE(FinishDefaultSuggestQuery()); |
- |
- // Provider should be done. |
- EXPECT_TRUE(provider_->done()); |
- |
// There should be two matches, one for what you typed, the other for |
// 'docs.google.com'. The search term should have a lower priority than the |
// what you typed match. |
ASSERT_EQ(2u, provider_->matches().size()); |
- AutocompleteMatch term_match = FindMatchWithDestination(url); |
- GURL what_you_typed_url = GURL(default_t_url_->url()->ReplaceSearchTerms( |
- *default_t_url_, ASCIIToUTF16("docs"), 0, string16())); |
- AutocompleteMatch what_you_typed_match = |
- FindMatchWithDestination(what_you_typed_url); |
- EXPECT_GT(what_you_typed_match.relevance, term_match.relevance); |
+ AutocompleteMatch term_match; |
+ EXPECT_TRUE(FindMatchWithDestination(url, &term_match)); |
+ EXPECT_GT(wyt_match.relevance, term_match.relevance); |
} |
-// Verifies autocomplete of previously typed words works on word boundaries. |
-TEST_F(SearchProviderTest, AutocompletePreviousSearchOnSpace) { |
- // Add an entry that corresponds to a search with two words. |
- string16 term(ASCIIToUTF16("two words")); |
- HistoryService* history = |
- profile_.GetHistoryService(Profile::EXPLICIT_ACCESS); |
- GURL term_url(default_t_url_->url()->ReplaceSearchTerms( |
- *default_t_url_, term, 0, string16())); |
- history->AddPageWithDetails(term_url, string16(), 1, 1, |
- base::Time::Now(), false, |
- history::SOURCE_BROWSED); |
- history->SetKeywordSearchTermsForURL(term_url, default_t_url_->id(), term); |
+// A multiword search with one visit should not autocomplete until multiple |
+// words are typed. |
+TEST_F(SearchProviderTest, DontAutocompleteUntilMultipleWordsTyped) { |
+ GURL term_url(AddSearchToHistory(default_t_url_, ASCIIToUTF16("one search"), |
+ 1)); |
+ profile_.BlockUntilHistoryProcessesPendingRequests(); |
+ AutocompleteMatch wyt_match; |
+ ASSERT_NO_FATAL_FAILURE(QueryForInputAndSetWYTMatch(ASCIIToUTF16("on"), |
+ &wyt_match)); |
+ ASSERT_EQ(2u, provider_->matches().size()); |
+ AutocompleteMatch term_match; |
+ EXPECT_TRUE(FindMatchWithDestination(term_url, &term_match)); |
+ EXPECT_GT(wyt_match.relevance, term_match.relevance); |
+ |
+ ASSERT_NO_FATAL_FAILURE(QueryForInputAndSetWYTMatch(ASCIIToUTF16("one se"), |
+ &wyt_match)); |
+ ASSERT_EQ(2u, provider_->matches().size()); |
+ EXPECT_TRUE(FindMatchWithDestination(term_url, &term_match)); |
+ EXPECT_GT(term_match.relevance, wyt_match.relevance); |
+} |
+ |
+// A multiword search with more than one visit should autocomplete immediately. |
+TEST_F(SearchProviderTest, AutocompleteMultipleVisitsImmediately) { |
+ GURL term_url(AddSearchToHistory(default_t_url_, ASCIIToUTF16("two searches"), |
+ 2)); |
profile_.BlockUntilHistoryProcessesPendingRequests(); |
- QueryForInput(ASCIIToUTF16("two "), false, false); |
+ AutocompleteMatch wyt_match; |
+ ASSERT_NO_FATAL_FAILURE(QueryForInputAndSetWYTMatch(ASCIIToUTF16("tw"), |
+ &wyt_match)); |
+ ASSERT_EQ(2u, provider_->matches().size()); |
+ AutocompleteMatch term_match; |
+ EXPECT_TRUE(FindMatchWithDestination(term_url, &term_match)); |
+ EXPECT_GT(term_match.relevance, wyt_match.relevance); |
+} |
- // Wait until history and the suggest query complete. |
+// Autocompletion should work at a word boundary after a space. |
+TEST_F(SearchProviderTest, AutocompleteAfterSpace) { |
+ GURL term_url(AddSearchToHistory(default_t_url_, ASCIIToUTF16("two searches"), |
+ 2)); |
profile_.BlockUntilHistoryProcessesPendingRequests(); |
- ASSERT_NO_FATAL_FAILURE(FinishDefaultSuggestQuery()); |
- // Provider should be done. |
- EXPECT_TRUE(provider_->done()); |
- |
- // There should be two matches, one for what you typed, the other for |
- // 'two words'. |
+ AutocompleteMatch wyt_match; |
+ ASSERT_NO_FATAL_FAILURE(QueryForInputAndSetWYTMatch(ASCIIToUTF16("two "), |
+ &wyt_match)); |
ASSERT_EQ(2u, provider_->matches().size()); |
- AutocompleteMatch term_match = FindMatchWithDestination(term_url); |
- EXPECT_FALSE(term_match.destination_url.is_empty()); |
- GURL what_you_typed_url = GURL(default_t_url_->url()->ReplaceSearchTerms( |
- *default_t_url_, ASCIIToUTF16("two "), 0, string16())); |
- AutocompleteMatch what_you_typed_match = |
- FindMatchWithDestination(what_you_typed_url); |
- EXPECT_FALSE(what_you_typed_match.destination_url.is_empty()); |
- // term_match should be autocompleted. |
- EXPECT_GT(term_match.relevance, what_you_typed_match.relevance); |
- // And the offset should be at 4. |
- EXPECT_EQ(4u, term_match.inline_autocomplete_offset); |
+ AutocompleteMatch term_match; |
+ EXPECT_TRUE(FindMatchWithDestination(term_url, &term_match)); |
+ EXPECT_GT(term_match.relevance, wyt_match.relevance); |
} |
+// Newer multiword searches should score more highly than older ones. |
+TEST_F(SearchProviderTest, ScoreNewerSearchesHigher) { |
+ GURL term_url_a(AddSearchToHistory(default_t_url_, |
+ ASCIIToUTF16("three searches aaa"), 1)); |
+ GURL term_url_b(AddSearchToHistory(default_t_url_, |
+ ASCIIToUTF16("three searches bbb"), 1)); |
+ profile_.BlockUntilHistoryProcessesPendingRequests(); |
+ |
+ AutocompleteMatch wyt_match; |
+ ASSERT_NO_FATAL_FAILURE(QueryForInputAndSetWYTMatch(ASCIIToUTF16("three se"), |
+ &wyt_match)); |
+ ASSERT_EQ(3u, provider_->matches().size()); |
+ AutocompleteMatch term_match_a; |
+ EXPECT_TRUE(FindMatchWithDestination(term_url_a, &term_match_a)); |
+ AutocompleteMatch term_match_b; |
+ EXPECT_TRUE(FindMatchWithDestination(term_url_b, &term_match_b)); |
+ EXPECT_GT(term_match_b.relevance, term_match_a.relevance); |
+ EXPECT_GT(term_match_a.relevance, wyt_match.relevance); |
+} |
+ |
+// An autocompleted multiword search should not be replaced by a different |
+// autocompletion while the user is still typing a valid prefix. |
+TEST_F(SearchProviderTest, DontReplacePreviousAutocompletion) { |
+ GURL term_url_a(AddSearchToHistory(default_t_url_, |
+ ASCIIToUTF16("four searches aaa"), 2)); |
+ GURL term_url_b(AddSearchToHistory(default_t_url_, |
+ ASCIIToUTF16("four searches bbb"), 1)); |
+ profile_.BlockUntilHistoryProcessesPendingRequests(); |
+ |
+ AutocompleteMatch wyt_match; |
+ ASSERT_NO_FATAL_FAILURE(QueryForInputAndSetWYTMatch(ASCIIToUTF16("fo"), |
+ &wyt_match)); |
+ ASSERT_EQ(3u, provider_->matches().size()); |
+ AutocompleteMatch term_match_a; |
+ EXPECT_TRUE(FindMatchWithDestination(term_url_a, &term_match_a)); |
+ AutocompleteMatch term_match_b; |
+ EXPECT_TRUE(FindMatchWithDestination(term_url_b, &term_match_b)); |
+ EXPECT_GT(term_match_a.relevance, wyt_match.relevance); |
+ EXPECT_GT(wyt_match.relevance, term_match_b.relevance); |
+ |
+ ASSERT_NO_FATAL_FAILURE(QueryForInputAndSetWYTMatch(ASCIIToUTF16("four se"), |
+ &wyt_match)); |
+ ASSERT_EQ(3u, provider_->matches().size()); |
+ EXPECT_TRUE(FindMatchWithDestination(term_url_a, &term_match_a)); |
+ EXPECT_TRUE(FindMatchWithDestination(term_url_b, &term_match_b)); |
+ EXPECT_GT(term_match_a.relevance, wyt_match.relevance); |
+ EXPECT_GT(wyt_match.relevance, term_match_b.relevance); |
+} |
+ |
+// Non-completable multiword searches should not crowd out single-word searches. |
+TEST_F(SearchProviderTest, DontCrowdOutSingleWords) { |
+ GURL term_url(AddSearchToHistory(default_t_url_, ASCIIToUTF16("five"), 1)); |
+ AddSearchToHistory(default_t_url_, ASCIIToUTF16("five searches bbb"), 1); |
+ AddSearchToHistory(default_t_url_, ASCIIToUTF16("five searches ccc"), 1); |
+ AddSearchToHistory(default_t_url_, ASCIIToUTF16("five searches ddd"), 1); |
+ AddSearchToHistory(default_t_url_, ASCIIToUTF16("five searches eee"), 1); |
+ profile_.BlockUntilHistoryProcessesPendingRequests(); |
+ |
+ AutocompleteMatch wyt_match; |
+ ASSERT_NO_FATAL_FAILURE(QueryForInputAndSetWYTMatch(ASCIIToUTF16("fi"), |
+ &wyt_match)); |
+ ASSERT_EQ(AutocompleteProvider::kMaxMatches + 1, provider_->matches().size()); |
+ AutocompleteMatch term_match; |
+ EXPECT_TRUE(FindMatchWithDestination(term_url, &term_match)); |
+ EXPECT_GT(term_match.relevance, wyt_match.relevance); |
+} |
+ |
// Verifies AutocompleteControllers sets descriptions for results correctly. |
TEST_F(SearchProviderTest, UpdateKeywordDescriptions) { |
// Add an entry that corresponds to a keyword search with 'term2'. |
- string16 term(ASCIIToUTF16("term2")); |
- HistoryService* history = |
- profile_.GetHistoryService(Profile::EXPLICIT_ACCESS); |
- GURL term_url(keyword_t_url_->url()->ReplaceSearchTerms( |
- *keyword_t_url_, term, 0, string16())); |
- history->AddPageWithDetails(term_url, string16(), 1, 1, |
- base::Time::Now(), false, |
- history::SOURCE_BROWSED); |
- history->SetKeywordSearchTermsForURL(term_url, keyword_t_url_->id(), term); |
- |
+ AddSearchToHistory(keyword_t_url_, ASCIIToUTF16("term2"), 1); |
profile_.BlockUntilHistoryProcessesPendingRequests(); |
ACProviders providers; |