Index: chrome/browser/autocomplete/history_quick_provider_unittest.cc |
diff --git a/chrome/browser/autocomplete/history_quick_provider_unittest.cc b/chrome/browser/autocomplete/history_quick_provider_unittest.cc |
index e7ba3491055a71c2d0e5875692f22e7bed6dbcdc..a81a92a7ccfc54854546723555bf8a0ca3e66148 100644 |
--- a/chrome/browser/autocomplete/history_quick_provider_unittest.cc |
+++ b/chrome/browser/autocomplete/history_quick_provider_unittest.cc |
@@ -134,9 +134,11 @@ class HistoryQuickProviderTest : public testing::Test, |
// results' destination URLs match those provided. |expected_urls| does not |
// need to be in sorted order. |
void RunTest(const base::string16 text, |
+ bool prevent_inline_autocomplete, |
std::vector<std::string> expected_urls, |
bool can_inline_top_result, |
- base::string16 expected_fill_into_edit); |
+ base::string16 expected_fill_into_edit, |
+ base::string16 autocompletion); |
base::MessageLoopForUI message_loop_; |
content::TestBrowserThread ui_thread_; |
@@ -239,14 +241,17 @@ void HistoryQuickProviderTest::SetShouldContain::operator()( |
void HistoryQuickProviderTest::RunTest(const base::string16 text, |
+ bool prevent_inline_autocomplete, |
std::vector<std::string> expected_urls, |
bool can_inline_top_result, |
- base::string16 expected_fill_into_edit) { |
+ base::string16 expected_fill_into_edit, |
+ base::string16 expected_autocompletion) { |
SCOPED_TRACE(text); // Minimal hint to query being run. |
base::MessageLoop::current()->RunUntilIdle(); |
AutocompleteInput input(text, base::string16::npos, base::string16(), |
- GURL(), AutocompleteInput::INVALID_SPEC, false, |
- false, true, AutocompleteInput::ALL_MATCHES); |
+ GURL(), AutocompleteInput::INVALID_SPEC, |
+ prevent_inline_autocomplete, false, true, |
+ AutocompleteInput::ALL_MATCHES); |
provider_->Start(input, false); |
EXPECT_TRUE(provider_->done()); |
@@ -288,43 +293,35 @@ void HistoryQuickProviderTest::RunTest(const base::string16 text, |
} |
EXPECT_EQ(can_inline_top_result, ac_matches_[0].allowed_to_be_default_match); |
- if (can_inline_top_result) { |
- // When the top scorer is inline-able make sure we get the expected |
- // fill_into_edit and autocomplete offset. |
- EXPECT_EQ(expected_fill_into_edit, ac_matches_[0].fill_into_edit) |
- << "fill_into_edit was: '" << ac_matches_[0].fill_into_edit |
- << "' but we expected '" << expected_fill_into_edit << "'."; |
- size_t text_pos = expected_fill_into_edit.find(text); |
- ASSERT_NE(base::string16::npos, text_pos); |
- EXPECT_EQ(ac_matches_[0].fill_into_edit.substr(text_pos + text.size()), |
- ac_matches_[0].inline_autocompletion); |
- } else { |
- // When the top scorer is not inline-able autocomplete offset must be npos. |
- EXPECT_TRUE(ac_matches_[0].inline_autocompletion.empty()); |
- } |
+ if (can_inline_top_result) |
Mark P
2014/02/22 00:01:05
I revised all the tests here so fill_into_edit is
|
+ EXPECT_EQ(expected_autocompletion, ac_matches_[0].inline_autocompletion); |
+ EXPECT_EQ(expected_fill_into_edit, ac_matches_[0].fill_into_edit); |
} |
TEST_F(HistoryQuickProviderTest, SimpleSingleMatch) { |
std::vector<std::string> expected_urls; |
expected_urls.push_back("http://slashdot.org/favorite_page.html"); |
- RunTest(ASCIIToUTF16("slashdot"), expected_urls, true, |
- ASCIIToUTF16("slashdot.org/favorite_page.html")); |
+ RunTest(ASCIIToUTF16("slashdot"), false, expected_urls, true, |
+ ASCIIToUTF16("slashdot.org/favorite_page.html"), |
+ ASCIIToUTF16(".org/favorite_page.html")); |
} |
TEST_F(HistoryQuickProviderTest, MultiTermTitleMatch) { |
std::vector<std::string> expected_urls; |
expected_urls.push_back( |
"http://cda.com/Dogs%20Cats%20Gorillas%20Sea%20Slugs%20and%20Mice"); |
- RunTest(ASCIIToUTF16("mice other animals"), expected_urls, false, |
- ASCIIToUTF16("cda.com/Dogs Cats Gorillas Sea Slugs and Mice")); |
+ RunTest(ASCIIToUTF16("mice other animals"), false, expected_urls, false, |
+ ASCIIToUTF16("cda.com/Dogs Cats Gorillas Sea Slugs and Mice"), |
+ base::string16()); |
} |
TEST_F(HistoryQuickProviderTest, NonWordLastCharacterMatch) { |
std::string expected_url("http://slashdot.org/favorite_page.html"); |
std::vector<std::string> expected_urls; |
expected_urls.push_back(expected_url); |
- RunTest(ASCIIToUTF16("slashdot.org/"), expected_urls, true, |
- ASCIIToUTF16("slashdot.org/favorite_page.html")); |
+ RunTest(ASCIIToUTF16("slashdot.org/"), false, expected_urls, true, |
+ ASCIIToUTF16("slashdot.org/favorite_page.html"), |
+ ASCIIToUTF16("favorite_page.html")); |
} |
TEST_F(HistoryQuickProviderTest, MultiMatch) { |
@@ -335,21 +332,24 @@ TEST_F(HistoryQuickProviderTest, MultiMatch) { |
expected_urls.push_back("http://foo.com/dir/another/"); |
// Scores high because of high visit count. |
expected_urls.push_back("http://foo.com/dir/another/again/"); |
- RunTest(ASCIIToUTF16("foo"), expected_urls, true, ASCIIToUTF16("foo.com")); |
+ RunTest(ASCIIToUTF16("foo"), false, expected_urls, true, |
+ ASCIIToUTF16("foo.com"), ASCIIToUTF16(".com")); |
} |
TEST_F(HistoryQuickProviderTest, StartRelativeMatch) { |
std::vector<std::string> expected_urls; |
expected_urls.push_back("http://xyzabcdefghijklmnopqrstuvw.com/a"); |
- RunTest(ASCIIToUTF16("xyza"), expected_urls, true, |
- ASCIIToUTF16("xyzabcdefghijklmnopqrstuvw.com/a")); |
+ RunTest(ASCIIToUTF16("xyza"), false, expected_urls, true, |
+ ASCIIToUTF16("xyzabcdefghijklmnopqrstuvw.com/a"), |
+ ASCIIToUTF16("bcdefghijklmnopqrstuvw.com/a")); |
} |
TEST_F(HistoryQuickProviderTest, EncodingMatch) { |
std::vector<std::string> expected_urls; |
expected_urls.push_back("http://spaces.com/path%20with%20spaces/foo.html"); |
- RunTest(ASCIIToUTF16("path with spaces"), expected_urls, false, |
- ASCIIToUTF16("CANNOT AUTOCOMPLETE")); |
+ RunTest(ASCIIToUTF16("path with spaces"), false, expected_urls, false, |
+ ASCIIToUTF16("spaces.com/path with spaces/foo.html"), |
+ base::string16()); |
} |
TEST_F(HistoryQuickProviderTest, VisitCountMatches) { |
@@ -357,8 +357,9 @@ TEST_F(HistoryQuickProviderTest, VisitCountMatches) { |
expected_urls.push_back("http://visitedest.com/y/a"); |
expected_urls.push_back("http://visitedest.com/y/b"); |
expected_urls.push_back("http://visitedest.com/x/c"); |
- RunTest(ASCIIToUTF16("visitedest"), expected_urls, true, |
- ASCIIToUTF16("visitedest.com/y/a")); |
+ RunTest(ASCIIToUTF16("visitedest"), false, expected_urls, true, |
+ ASCIIToUTF16("visitedest.com/y/a"), |
+ ASCIIToUTF16(".com/y/a")); |
} |
TEST_F(HistoryQuickProviderTest, TypedCountMatches) { |
@@ -366,8 +367,9 @@ TEST_F(HistoryQuickProviderTest, TypedCountMatches) { |
expected_urls.push_back("http://typeredest.com/y/a"); |
expected_urls.push_back("http://typeredest.com/y/b"); |
expected_urls.push_back("http://typeredest.com/x/c"); |
- RunTest(ASCIIToUTF16("typeredest"), expected_urls, true, |
- ASCIIToUTF16("typeredest.com/y/a")); |
+ RunTest(ASCIIToUTF16("typeredest"), false, expected_urls, true, |
+ ASCIIToUTF16("typeredest.com/y/a"), |
+ ASCIIToUTF16(".com/y/a")); |
} |
TEST_F(HistoryQuickProviderTest, DaysAgoMatches) { |
@@ -375,8 +377,9 @@ TEST_F(HistoryQuickProviderTest, DaysAgoMatches) { |
expected_urls.push_back("http://daysagoest.com/y/a"); |
expected_urls.push_back("http://daysagoest.com/y/b"); |
expected_urls.push_back("http://daysagoest.com/x/c"); |
- RunTest(ASCIIToUTF16("daysagoest"), expected_urls, true, |
- ASCIIToUTF16("daysagoest.com/y/a")); |
+ RunTest(ASCIIToUTF16("daysagoest"), false, expected_urls, true, |
+ ASCIIToUTF16("daysagoest.com/y/a"), |
+ ASCIIToUTF16(".com/y/a")); |
} |
TEST_F(HistoryQuickProviderTest, EncodingLimitMatch) { |
@@ -384,13 +387,15 @@ TEST_F(HistoryQuickProviderTest, EncodingLimitMatch) { |
std::string url( |
"http://cda.com/Dogs%20Cats%20Gorillas%20Sea%20Slugs%20and%20Mice"); |
// First check that a mid-word match yield no results. |
- RunTest(ASCIIToUTF16("ice"), expected_urls, false, |
- ASCIIToUTF16("cda.com/Dogs Cats Gorillas Sea Slugs and Mice")); |
+ RunTest(ASCIIToUTF16("ice"), false, expected_urls, false, |
+ ASCIIToUTF16("cda.com/Dogs Cats Gorillas Sea Slugs and Mice"), |
+ base::string16()); |
// Then check that we get results when the match is at a word start |
// that is present because of an encoded separate (%20 = space). |
expected_urls.push_back(url); |
- RunTest(ASCIIToUTF16("Mice"), expected_urls, false, |
- ASCIIToUTF16("cda.com/Dogs Cats Gorillas Sea Slugs and Mice")); |
+ RunTest(ASCIIToUTF16("Mice"), false, expected_urls, false, |
+ ASCIIToUTF16("cda.com/Dogs Cats Gorillas Sea Slugs and Mice"), |
+ base::string16()); |
// Verify that the matches' ACMatchClassifications offsets are in range. |
ACMatchClassifications content(ac_matches_[0].contents_class); |
// The max offset accounts for 6 occurrences of '%20' plus the 'http://'. |
@@ -460,14 +465,15 @@ TEST_F(HistoryQuickProviderTest, DeleteMatch) { |
std::vector<std::string> expected_urls; |
expected_urls.push_back("http://slashdot.org/favorite_page.html"); |
// Fill up ac_matches_; we don't really care about the test yet. |
- RunTest(ASCIIToUTF16("slashdot"), expected_urls, true, |
- ASCIIToUTF16("slashdot.org/favorite_page.html")); |
+ RunTest(ASCIIToUTF16("slashdot"), false, expected_urls, true, |
+ ASCIIToUTF16("slashdot.org/favorite_page.html"), |
+ ASCIIToUTF16(".org/favorite_page.html")); |
EXPECT_EQ(1U, ac_matches_.size()); |
provider_->DeleteMatch(ac_matches_[0]); |
// Verify it's no longer an indexed visit. |
expected_urls.clear(); |
- RunTest(ASCIIToUTF16("slashdot"), expected_urls, true, |
- ASCIIToUTF16("NONE EXPECTED")); |
+ RunTest(ASCIIToUTF16("slashdot"), false, expected_urls, true, |
+ ASCIIToUTF16("NONE EXPECTED"), base::string16()); |
} |
TEST_F(HistoryQuickProviderTest, PreventBeatingURLWhatYouTypedMatch) { |
@@ -479,15 +485,16 @@ TEST_F(HistoryQuickProviderTest, PreventBeatingURLWhatYouTypedMatch) { |
// before, we should make sure that all HistoryQuickProvider results |
// have scores less than what HistoryURLProvider will assign the |
// URL-what-you-typed match. |
- RunTest(ASCIIToUTF16("popularsitewithroot.com"), expected_urls, true, |
- ASCIIToUTF16("popularsitewithroot.com")); |
+ RunTest(ASCIIToUTF16("popularsitewithroot.com"), false, expected_urls, true, |
+ ASCIIToUTF16("popularsitewithroot.com"), base::string16()); |
EXPECT_LT(ac_matches_[0].relevance, |
HistoryURLProvider::kScoreForBestInlineableResult); |
// Check that if the user didn't quite enter the full hostname, this |
// hostname would've normally scored above the URL-what-you-typed match. |
- RunTest(ASCIIToUTF16("popularsitewithroot.c"), expected_urls, true, |
- ASCIIToUTF16("popularsitewithroot.com")); |
+ RunTest(ASCIIToUTF16("popularsitewithroot.c"), false, expected_urls, true, |
+ ASCIIToUTF16("popularsitewithroot.com"), |
+ ASCIIToUTF16("om")); |
EXPECT_GE(ac_matches_[0].relevance, |
HistoryURLProvider::kScoreForWhatYouTypedResult); |
@@ -497,30 +504,36 @@ TEST_F(HistoryQuickProviderTest, PreventBeatingURLWhatYouTypedMatch) { |
// but never visited the root page of, we should make sure that all |
// HistoryQuickProvider results have scores less than what the |
// HistoryURLProvider will assign the URL-what-you-typed match. |
- RunTest(ASCIIToUTF16("popularsitewithpathonly.com"), expected_urls, true, |
- ASCIIToUTF16("popularsitewithpathonly.com/moo")); |
+ RunTest(ASCIIToUTF16("popularsitewithpathonly.com"), false, expected_urls, |
+ true, |
+ ASCIIToUTF16("popularsitewithpathonly.com/moo"), |
+ ASCIIToUTF16("/moo")); |
EXPECT_LT(ac_matches_[0].relevance, |
HistoryURLProvider::kScoreForUnvisitedIntranetResult); |
// Verify the same thing happens if the user adds a / to end of the |
// hostname. |
- RunTest(ASCIIToUTF16("popularsitewithpathonly.com/"), expected_urls, true, |
- ASCIIToUTF16("popularsitewithpathonly.com/moo")); |
+ RunTest(ASCIIToUTF16("popularsitewithpathonly.com/"), false, expected_urls, |
+ true, ASCIIToUTF16("popularsitewithpathonly.com/moo"), |
+ ASCIIToUTF16("moo")); |
EXPECT_LT(ac_matches_[0].relevance, |
HistoryURLProvider::kScoreForUnvisitedIntranetResult); |
// Check that if the user didn't quite enter the full hostname, this |
// page would've normally scored above the URL-what-you-typed match. |
- RunTest(ASCIIToUTF16("popularsitewithpathonly.co"), expected_urls, true, |
- ASCIIToUTF16("popularsitewithpathonly.com/moo")); |
+ RunTest(ASCIIToUTF16("popularsitewithpathonly.co"), false, expected_urls, |
+ true, ASCIIToUTF16("popularsitewithpathonly.com/moo"), |
+ ASCIIToUTF16("m/moo")); |
EXPECT_GE(ac_matches_[0].relevance, |
HistoryURLProvider::kScoreForWhatYouTypedResult); |
// If the user enters a hostname + path that he/she has not visited |
// before (but visited other things on the host), we can allow |
// inline autocompletions. |
- RunTest(ASCIIToUTF16("popularsitewithpathonly.com/mo"), expected_urls, true, |
- ASCIIToUTF16("popularsitewithpathonly.com/moo")); |
+ RunTest(ASCIIToUTF16("popularsitewithpathonly.com/mo"), false, expected_urls, |
+ true, |
+ ASCIIToUTF16("popularsitewithpathonly.com/moo"), |
+ ASCIIToUTF16("o")); |
EXPECT_GE(ac_matches_[0].relevance, |
HistoryURLProvider::kScoreForWhatYouTypedResult); |
@@ -528,13 +541,40 @@ TEST_F(HistoryQuickProviderTest, PreventBeatingURLWhatYouTypedMatch) { |
// before, we should make sure that all HistoryQuickProvider results |
// have scores less than what the HistoryURLProvider will assign |
// the URL-what-you-typed match. |
- RunTest(ASCIIToUTF16("popularsitewithpathonly.com/moo"), |
+ RunTest(ASCIIToUTF16("popularsitewithpathonly.com/moo"), false, |
expected_urls, true, |
- ASCIIToUTF16("popularsitewithpathonly.com/moo")); |
+ ASCIIToUTF16("popularsitewithpathonly.com/moo"), base::string16()); |
EXPECT_LT(ac_matches_[0].relevance, |
HistoryURLProvider::kScoreForBestInlineableResult); |
} |
+TEST_F(HistoryQuickProviderTest, PreventInlineAutocomplete) { |
+ std::vector<std::string> expected_urls; |
+ expected_urls.push_back("http://popularsitewithroot.com/"); |
+ |
+ // Check that the desired URL is normally allowed to be the default match |
+ // against input that is a prefex of the URL. |
+ RunTest(ASCIIToUTF16("popularsitewithr"), false, expected_urls, true, |
+ ASCIIToUTF16("popularsitewithroot.com"), |
+ ASCIIToUTF16("oot.com")); |
+ |
+ // Check that it's not allowed to be the default match if |
+ // prevent_inline_autocomplete is true. |
+ RunTest(ASCIIToUTF16("popularsitewithr"), true, expected_urls, false, |
+ ASCIIToUTF16("popularsitewithroot.com"), |
+ ASCIIToUTF16("oot.com")); |
+ |
+ // But the exact hostname can still match even if prevent inline autocomplete |
+ // is true. i.e., there's no autocompletion necessary; this is effectively |
+ // URL-what-you-typed. |
+ RunTest(ASCIIToUTF16("popularsitewithroot.com"), true, expected_urls, true, |
+ ASCIIToUTF16("popularsitewithroot.com"), base::string16()); |
+ |
+ // The above still holds even with an extra trailing slash. |
+ RunTest(ASCIIToUTF16("popularsitewithroot.com/"), true, expected_urls, true, |
+ ASCIIToUTF16("popularsitewithroot.com"), base::string16()); |
+} |
+ |
TEST_F(HistoryQuickProviderTest, CullSearchResults) { |
// Set up a default search engine. |
TemplateURLData data; |
@@ -550,13 +590,15 @@ TEST_F(HistoryQuickProviderTest, CullSearchResults) { |
// A search results page should not be returned when typing a query. |
std::vector<std::string> expected_urls; |
expected_urls.push_back("http://anotherengine.com/?q=thequery"); |
- RunTest(ASCIIToUTF16("thequery"), expected_urls, false, base::string16()); |
+ RunTest(ASCIIToUTF16("thequery"), false, expected_urls, false, |
+ ASCIIToUTF16("anotherengine.com/?q=thequery"), base::string16()); |
// A search results page should not be returned when typing the engine URL. |
expected_urls.clear(); |
expected_urls.push_back("http://testsearch.com/"); |
- RunTest(ASCIIToUTF16("testsearch"), expected_urls, true, |
- ASCIIToUTF16("testsearch.com")); |
+ RunTest(ASCIIToUTF16("testsearch"), false, expected_urls, true, |
+ ASCIIToUTF16("testsearch.com"), |
+ ASCIIToUTF16(".com")); |
} |
// HQPOrderingTest ------------------------------------------------------------- |
@@ -614,8 +656,9 @@ TEST_F(HQPOrderingTest, TEMatch) { |
expected_urls.push_back("http://techmeme.com/"); |
expected_urls.push_back("http://www.teamliquid.net/"); |
expected_urls.push_back("http://www.teamliquid.net/tlpd"); |
- RunTest(ASCIIToUTF16("te"), expected_urls, true, |
- ASCIIToUTF16("techmeme.com")); |
+ RunTest(ASCIIToUTF16("te"), false, expected_urls, true, |
+ ASCIIToUTF16("techmeme.com"), |
+ ASCIIToUTF16("chmeme.com")); |
} |
TEST_F(HQPOrderingTest, TEAMatch) { |
@@ -623,6 +666,7 @@ TEST_F(HQPOrderingTest, TEAMatch) { |
expected_urls.push_back("http://www.teamliquid.net/"); |
expected_urls.push_back("http://www.teamliquid.net/tlpd"); |
expected_urls.push_back("http://www.teamliquid.net/tlpd/korean/players"); |
- RunTest(ASCIIToUTF16("tea"), expected_urls, true, |
- ASCIIToUTF16("www.teamliquid.net")); |
+ RunTest(ASCIIToUTF16("tea"), false, expected_urls, true, |
+ ASCIIToUTF16("www.teamliquid.net"), |
+ ASCIIToUTF16("mliquid.net")); |
} |