Chromium Code Reviews| OLD | NEW |
|---|---|
| 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 #include "chrome/browser/autocomplete/history_url_provider.h" | 5 #include "chrome/browser/autocomplete/history_url_provider.h" |
| 6 | 6 |
| 7 #include <algorithm> | 7 #include <algorithm> |
| 8 | 8 |
| 9 #include "base/message_loop/message_loop.h" | 9 #include "base/message_loop/message_loop.h" |
| 10 #include "base/path_service.h" | 10 #include "base/path_service.h" |
| (...skipping 114 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 125 {"http://typedhost/untypedpath", "Intranet untyped", 1, 0}, | 125 {"http://typedhost/untypedpath", "Intranet untyped", 1, 0}, |
| 126 | 126 |
| 127 {"http://x.com/one", "Internet", 2, 2}, | 127 {"http://x.com/one", "Internet", 2, 2}, |
| 128 {"http://x.com/two", "Internet two", 1, 1}, | 128 {"http://x.com/two", "Internet two", 1, 1}, |
| 129 {"http://x.com/three", "Internet three", 2, 2}, | 129 {"http://x.com/three", "Internet three", 2, 2}, |
| 130 }; | 130 }; |
| 131 | 131 |
| 132 class HistoryURLProviderTest : public testing::Test, | 132 class HistoryURLProviderTest : public testing::Test, |
| 133 public AutocompleteProviderListener { | 133 public AutocompleteProviderListener { |
| 134 public: | 134 public: |
| 135 // A pair of a URL and whether that URL is allowed to be the default match. | |
| 136 typedef std::pair<std::string, bool> ExpectedUrlAndLegalDefaultMatch; | |
| 137 | |
| 135 HistoryURLProviderTest() | 138 HistoryURLProviderTest() |
| 136 : sort_matches_(false) { | 139 : sort_matches_(false) { |
| 137 HistoryQuickProvider::set_disabled(true); | 140 HistoryQuickProvider::set_disabled(true); |
| 138 } | 141 } |
| 139 | 142 |
| 140 virtual ~HistoryURLProviderTest() { | 143 virtual ~HistoryURLProviderTest() { |
| 141 HistoryQuickProvider::set_disabled(false); | 144 HistoryQuickProvider::set_disabled(false); |
| 142 } | 145 } |
| 143 | 146 |
| 144 // AutocompleteProviderListener: | 147 // AutocompleteProviderListener: |
| (...skipping 16 matching lines...) Expand all Loading... | |
| 161 | 164 |
| 162 // Fills test data into the history system. | 165 // Fills test data into the history system. |
| 163 void FillData(); | 166 void FillData(); |
| 164 | 167 |
| 165 // Runs an autocomplete query on |text| and checks to see that the returned | 168 // Runs an autocomplete query on |text| and checks to see that the returned |
| 166 // results' destination URLs match those provided. Also allows checking | 169 // results' destination URLs match those provided. Also allows checking |
| 167 // that the input type was identified correctly. | 170 // that the input type was identified correctly. |
| 168 void RunTest(const string16 text, | 171 void RunTest(const string16 text, |
| 169 const string16& desired_tld, | 172 const string16& desired_tld, |
| 170 bool prevent_inline_autocomplete, | 173 bool prevent_inline_autocomplete, |
| 171 const std::string* expected_urls, | 174 const ExpectedUrlAndLegalDefaultMatch* expected_urls, |
| 172 size_t num_results, | 175 size_t num_results, |
| 173 AutocompleteInput::Type* identified_input_type); | 176 AutocompleteInput::Type* identified_input_type); |
| 174 | 177 |
| 175 // A version of the above without the final |type| output parameter. | 178 // A version of the above without the final |type| output parameter. |
| 176 void RunTest(const string16 text, | 179 void RunTest(const string16 text, |
| 177 const string16& desired_tld, | 180 const string16& desired_tld, |
| 178 bool prevent_inline_autocomplete, | 181 bool prevent_inline_autocomplete, |
| 179 const std::string* expected_urls, | 182 const ExpectedUrlAndLegalDefaultMatch* expected_urls, |
| 180 size_t num_results) { | 183 size_t num_results) { |
| 181 AutocompleteInput::Type type; | 184 AutocompleteInput::Type type; |
| 182 return RunTest(text, desired_tld, prevent_inline_autocomplete, | 185 return RunTest(text, desired_tld, prevent_inline_autocomplete, |
| 183 expected_urls, num_results, &type); | 186 expected_urls, num_results, &type); |
| 184 } | 187 } |
| 185 | 188 |
| 186 content::TestBrowserThreadBundle thread_bundle_; | 189 content::TestBrowserThreadBundle thread_bundle_; |
| 187 ACMatches matches_; | 190 ACMatches matches_; |
| 188 scoped_ptr<TestingProfile> profile_; | 191 scoped_ptr<TestingProfile> profile_; |
| 189 HistoryService* history_service_; | 192 HistoryService* history_service_; |
| (...skipping 60 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 250 GURL("http://p/"), UTF8ToUTF16("p"), 0, 0, | 253 GURL("http://p/"), UTF8ToUTF16("p"), 0, 0, |
| 251 Time::Now() - | 254 Time::Now() - |
| 252 TimeDelta::FromDays(history::kLowQualityMatchAgeLimitInDays - 1), | 255 TimeDelta::FromDays(history::kLowQualityMatchAgeLimitInDays - 1), |
| 253 false, history::SOURCE_BROWSED); | 256 false, history::SOURCE_BROWSED); |
| 254 } | 257 } |
| 255 | 258 |
| 256 void HistoryURLProviderTest::RunTest( | 259 void HistoryURLProviderTest::RunTest( |
| 257 const string16 text, | 260 const string16 text, |
| 258 const string16& desired_tld, | 261 const string16& desired_tld, |
| 259 bool prevent_inline_autocomplete, | 262 bool prevent_inline_autocomplete, |
| 260 const std::string* expected_urls, | 263 const ExpectedUrlAndLegalDefaultMatch* expected_urls, |
| 261 size_t num_results, | 264 size_t num_results, |
| 262 AutocompleteInput::Type* identified_input_type) { | 265 AutocompleteInput::Type* identified_input_type) { |
| 263 AutocompleteInput input(text, string16::npos, desired_tld, GURL(), | 266 AutocompleteInput input(text, string16::npos, desired_tld, GURL(), |
| 264 AutocompleteInput::INVALID_SPEC, | 267 AutocompleteInput::INVALID_SPEC, |
| 265 prevent_inline_autocomplete, false, true, | 268 prevent_inline_autocomplete, false, true, |
| 266 AutocompleteInput::ALL_MATCHES); | 269 AutocompleteInput::ALL_MATCHES); |
| 267 *identified_input_type = input.type(); | 270 *identified_input_type = input.type(); |
| 268 autocomplete_->Start(input, false); | 271 autocomplete_->Start(input, false); |
| 269 if (!autocomplete_->done()) | 272 if (!autocomplete_->done()) |
| 270 base::MessageLoop::current()->Run(); | 273 base::MessageLoop::current()->Run(); |
| 271 | 274 |
| 272 matches_ = autocomplete_->matches(); | 275 matches_ = autocomplete_->matches(); |
| 273 if (sort_matches_) { | 276 if (sort_matches_) { |
| 274 for (ACMatches::iterator i = matches_.begin(); i != matches_.end(); ++i) | 277 for (ACMatches::iterator i = matches_.begin(); i != matches_.end(); ++i) |
| 275 i->ComputeStrippedDestinationURL(profile_.get()); | 278 i->ComputeStrippedDestinationURL(profile_.get()); |
| 276 std::sort(matches_.begin(), matches_.end(), | 279 std::sort(matches_.begin(), matches_.end(), |
| 277 &AutocompleteMatch::DestinationSortFunc); | 280 &AutocompleteMatch::DestinationSortFunc); |
| 278 matches_.erase(std::unique(matches_.begin(), matches_.end(), | 281 matches_.erase(std::unique(matches_.begin(), matches_.end(), |
| 279 &AutocompleteMatch::DestinationsEqual), | 282 &AutocompleteMatch::DestinationsEqual), |
| 280 matches_.end()); | 283 matches_.end()); |
| 281 std::sort(matches_.begin(), matches_.end(), | 284 std::sort(matches_.begin(), matches_.end(), |
| 282 &AutocompleteMatch::MoreRelevant); | 285 &AutocompleteMatch::MoreRelevant); |
| 283 } | 286 } |
| 284 ASSERT_EQ(num_results, matches_.size()) << "Input text: " << text | 287 ASSERT_EQ(num_results, matches_.size()) << "Input text: " << text |
| 285 << "\nTLD: \"" << desired_tld << "\""; | 288 << "\nTLD: \"" << desired_tld << "\""; |
| 286 for (size_t i = 0; i < num_results; ++i) | 289 for (size_t i = 0; i < num_results; ++i) { |
| 287 EXPECT_EQ(expected_urls[i], matches_[i].destination_url.spec()); | 290 EXPECT_EQ(expected_urls[i].first, matches_[i].destination_url.spec()); |
| 291 EXPECT_EQ(expected_urls[i].second, matches_[i].allowed_to_be_default_match); | |
| 292 } | |
| 288 } | 293 } |
| 289 | 294 |
| 290 TEST_F(HistoryURLProviderTest, PromoteShorterURLs) { | 295 TEST_F(HistoryURLProviderTest, PromoteShorterURLs) { |
| 291 // Test that hosts get synthesized below popular pages. | 296 // Test that hosts get synthesized below popular pages. |
| 292 const std::string expected_nonsynth[] = { | 297 const ExpectedUrlAndLegalDefaultMatch expected_nonsynth[] = { |
| 293 "http://slashdot.org/favorite_page.html", | 298 ExpectedUrlAndLegalDefaultMatch( |
| 294 "http://slashdot.org/", | 299 "http://slashdot.org/favorite_page.html", false), |
|
msw
2013/08/07 20:09:21
I have no clue why these aren't legal defaults.
Su
Mark P
2013/08/07 22:13:05
This whole function uses RunTest() calls that have
| |
| 300 ExpectedUrlAndLegalDefaultMatch("http://slashdot.org/", false) | |
| 295 }; | 301 }; |
| 296 RunTest(ASCIIToUTF16("slash"), string16(), true, expected_nonsynth, | 302 RunTest(ASCIIToUTF16("slash"), string16(), true, expected_nonsynth, |
| 297 arraysize(expected_nonsynth)); | 303 arraysize(expected_nonsynth)); |
| 298 | 304 |
| 299 // Test that hosts get synthesized above less popular pages. | 305 // Test that hosts get synthesized above less popular pages. |
| 300 const std::string expected_synth[] = { | 306 const ExpectedUrlAndLegalDefaultMatch expected_synth[] = { |
| 301 "http://kerneltrap.org/", | 307 ExpectedUrlAndLegalDefaultMatch("http://kerneltrap.org/", false), |
| 302 "http://kerneltrap.org/not_very_popular.html", | 308 ExpectedUrlAndLegalDefaultMatch( |
| 309 "http://kerneltrap.org/not_very_popular.html", false) | |
| 303 }; | 310 }; |
| 304 RunTest(ASCIIToUTF16("kernel"), string16(), true, expected_synth, | 311 RunTest(ASCIIToUTF16("kernel"), string16(), true, expected_synth, |
| 305 arraysize(expected_synth)); | 312 arraysize(expected_synth)); |
| 306 | 313 |
| 307 // Test that unpopular pages are ignored completely. | 314 // Test that unpopular pages are ignored completely. |
| 308 RunTest(ASCIIToUTF16("fresh"), string16(), true, NULL, 0); | 315 RunTest(ASCIIToUTF16("fresh"), string16(), true, NULL, 0); |
| 309 | 316 |
| 310 // Test that if we create or promote shorter suggestions that would not | 317 // Test that if we create or promote shorter suggestions that would not |
| 311 // normally be inline autocompletable, we make them inline autocompletable if | 318 // normally be inline autocompletable, we make them inline autocompletable if |
| 312 // the original suggestion (that we replaced as "top") was inline | 319 // the original suggestion (that we replaced as "top") was inline |
| 313 // autocompletable. | 320 // autocompletable. |
| 314 const std::string expected_synthesisa[] = { | 321 const ExpectedUrlAndLegalDefaultMatch expected_synthesisa[] = { |
| 315 "http://synthesisatest.com/", | 322 ExpectedUrlAndLegalDefaultMatch("http://synthesisatest.com/", true), |
| 316 "http://synthesisatest.com/foo/", | 323 ExpectedUrlAndLegalDefaultMatch("http://synthesisatest.com/foo/", true) |
| 317 }; | 324 }; |
| 318 RunTest(ASCIIToUTF16("synthesisa"), string16(), false, expected_synthesisa, | 325 RunTest(ASCIIToUTF16("synthesisa"), string16(), false, expected_synthesisa, |
| 319 arraysize(expected_synthesisa)); | 326 arraysize(expected_synthesisa)); |
| 320 EXPECT_LT(matches_.front().relevance, 1200); | 327 EXPECT_LT(matches_.front().relevance, 1200); |
| 321 const std::string expected_synthesisb[] = { | 328 const ExpectedUrlAndLegalDefaultMatch expected_synthesisb[] = { |
| 322 "http://synthesisbtest.com/foo/", | 329 ExpectedUrlAndLegalDefaultMatch("http://synthesisbtest.com/foo/", true), |
| 323 "http://synthesisbtest.com/foo/bar.html", | 330 ExpectedUrlAndLegalDefaultMatch( |
| 331 "http://synthesisbtest.com/foo/bar.html", true) | |
| 324 }; | 332 }; |
| 325 RunTest(ASCIIToUTF16("synthesisb"), string16(), false, expected_synthesisb, | 333 RunTest(ASCIIToUTF16("synthesisb"), string16(), false, expected_synthesisb, |
| 326 arraysize(expected_synthesisb)); | 334 arraysize(expected_synthesisb)); |
| 327 EXPECT_GE(matches_.front().relevance, 1410); | 335 EXPECT_GE(matches_.front().relevance, 1410); |
| 328 | 336 |
| 329 // Test that if we have a synthesized host that matches a suggestion, they | 337 // Test that if we have a synthesized host that matches a suggestion, they |
| 330 // get combined into one. | 338 // get combined into one. |
| 331 const std::string expected_combine[] = { | 339 const ExpectedUrlAndLegalDefaultMatch expected_combine[] = { |
| 332 "http://news.google.com/", | 340 ExpectedUrlAndLegalDefaultMatch("http://news.google.com/", false), |
| 333 "http://news.google.com/?ned=us&topic=n", | 341 ExpectedUrlAndLegalDefaultMatch( |
| 342 "http://news.google.com/?ned=us&topic=n", false), | |
| 334 }; | 343 }; |
| 335 ASSERT_NO_FATAL_FAILURE(RunTest(ASCIIToUTF16("news"), string16(), true, | 344 ASSERT_NO_FATAL_FAILURE(RunTest(ASCIIToUTF16("news"), string16(), true, |
| 336 expected_combine, arraysize(expected_combine))); | 345 expected_combine, arraysize(expected_combine))); |
| 337 // The title should also have gotten set properly on the host for the | 346 // The title should also have gotten set properly on the host for the |
| 338 // synthesized one, since it was also in the results. | 347 // synthesized one, since it was also in the results. |
| 339 EXPECT_EQ(ASCIIToUTF16("Google News"), matches_.front().description); | 348 EXPECT_EQ(ASCIIToUTF16("Google News"), matches_.front().description); |
| 340 | 349 |
| 341 // Test that short URL matching works correctly as the user types more | 350 // Test that short URL matching works correctly as the user types more |
| 342 // (several tests): | 351 // (several tests): |
| 343 // The entry for foo.com is the best of all five foo.com* entries. | 352 // The entry for foo.com is the best of all five foo.com* entries. |
| 344 const std::string short_1[] = { | 353 const ExpectedUrlAndLegalDefaultMatch short_1[] = { |
| 345 "http://foo.com/", | 354 ExpectedUrlAndLegalDefaultMatch("http://foo.com/", false), |
| 346 "http://foo.com/dir/another/again/myfile.html", | 355 ExpectedUrlAndLegalDefaultMatch( |
| 347 "http://foo.com/dir/", | 356 "http://foo.com/dir/another/again/myfile.html", false), |
| 357 ExpectedUrlAndLegalDefaultMatch("http://foo.com/dir/", false) | |
| 348 }; | 358 }; |
| 349 RunTest(ASCIIToUTF16("foo"), string16(), true, short_1, arraysize(short_1)); | 359 RunTest(ASCIIToUTF16("foo"), string16(), true, short_1, arraysize(short_1)); |
| 350 | 360 |
| 351 // When the user types the whole host, make sure we don't get two results for | 361 // When the user types the whole host, make sure we don't get two results for |
| 352 // it. | 362 // it. |
| 353 const std::string short_2[] = { | 363 const ExpectedUrlAndLegalDefaultMatch short_2[] = { |
| 354 "http://foo.com/", | 364 ExpectedUrlAndLegalDefaultMatch("http://foo.com/", true), |
| 355 "http://foo.com/dir/another/again/myfile.html", | 365 ExpectedUrlAndLegalDefaultMatch( |
| 356 "http://foo.com/dir/", | 366 "http://foo.com/dir/another/again/myfile.html", false), |
| 357 "http://foo.com/dir/another/", | 367 ExpectedUrlAndLegalDefaultMatch("http://foo.com/dir/", false), |
| 368 ExpectedUrlAndLegalDefaultMatch("http://foo.com/dir/another/", false) | |
| 358 }; | 369 }; |
| 359 RunTest(ASCIIToUTF16("foo.com"), string16(), true, short_2, | 370 RunTest(ASCIIToUTF16("foo.com"), string16(), true, short_2, |
| 360 arraysize(short_2)); | 371 arraysize(short_2)); |
| 361 RunTest(ASCIIToUTF16("foo.com/"), string16(), true, short_2, | 372 RunTest(ASCIIToUTF16("foo.com/"), string16(), true, short_2, |
| 362 arraysize(short_2)); | 373 arraysize(short_2)); |
| 363 | 374 |
| 364 // The filename is the second best of the foo.com* entries, but there is a | 375 // The filename is the second best of the foo.com* entries, but there is a |
| 365 // shorter URL that's "good enough". The host doesn't match the user input | 376 // shorter URL that's "good enough". The host doesn't match the user input |
| 366 // and so should not appear. | 377 // and so should not appear. |
| 367 const std::string short_3[] = { | 378 const ExpectedUrlAndLegalDefaultMatch short_3[] = { |
| 368 "http://foo.com/d", | 379 ExpectedUrlAndLegalDefaultMatch("http://foo.com/d", true), |
| 369 "http://foo.com/dir/another/", | 380 ExpectedUrlAndLegalDefaultMatch("http://foo.com/dir/another/", false), |
| 370 "http://foo.com/dir/another/again/myfile.html", | 381 ExpectedUrlAndLegalDefaultMatch( |
| 371 "http://foo.com/dir/", | 382 "http://foo.com/dir/another/again/myfile.html", false), |
| 383 ExpectedUrlAndLegalDefaultMatch("http://foo.com/dir/", false) | |
| 372 }; | 384 }; |
| 373 RunTest(ASCIIToUTF16("foo.com/d"), string16(), true, short_3, | 385 RunTest(ASCIIToUTF16("foo.com/d"), string16(), true, short_3, |
| 374 arraysize(short_3)); | 386 arraysize(short_3)); |
| 375 | 387 |
| 376 // We shouldn't promote shorter URLs than the best if they're not good | 388 // We shouldn't promote shorter URLs than the best if they're not good |
| 377 // enough. | 389 // enough. |
| 378 const std::string short_4[] = { | 390 const ExpectedUrlAndLegalDefaultMatch short_4[] = { |
| 379 "http://foo.com/dir/another/a", | 391 ExpectedUrlAndLegalDefaultMatch("http://foo.com/dir/another/a", true), |
| 380 "http://foo.com/dir/another/again/myfile.html", | 392 ExpectedUrlAndLegalDefaultMatch( |
| 381 "http://foo.com/dir/another/again/", | 393 "http://foo.com/dir/another/again/myfile.html", false), |
| 394 ExpectedUrlAndLegalDefaultMatch("http://foo.com/dir/another/again/", false) | |
| 382 }; | 395 }; |
| 383 RunTest(ASCIIToUTF16("foo.com/dir/another/a"), string16(), true, short_4, | 396 RunTest(ASCIIToUTF16("foo.com/dir/another/a"), string16(), true, short_4, |
| 384 arraysize(short_4)); | 397 arraysize(short_4)); |
| 385 | 398 |
| 386 // Exact matches should always be best no matter how much more another match | 399 // Exact matches should always be best no matter how much more another match |
| 387 // has been typed. | 400 // has been typed. |
| 388 const std::string short_5a[] = { | 401 const ExpectedUrlAndLegalDefaultMatch short_5a[] = { |
| 389 "http://gooey/", | 402 ExpectedUrlAndLegalDefaultMatch("http://gooey/", true), |
| 390 "http://www.google.com/", | 403 ExpectedUrlAndLegalDefaultMatch("http://www.google.com/", true), |
| 391 "http://go/", | 404 ExpectedUrlAndLegalDefaultMatch("http://go/", true) |
| 392 }; | 405 }; |
| 393 const std::string short_5b[] = { | 406 const ExpectedUrlAndLegalDefaultMatch short_5b[] = { |
| 394 "http://go/", | 407 ExpectedUrlAndLegalDefaultMatch("http://go/", true), |
| 395 "http://gooey/", | 408 ExpectedUrlAndLegalDefaultMatch("http://gooey/", true), |
| 396 "http://www.google.com/", | 409 ExpectedUrlAndLegalDefaultMatch("http://www.google.com/", true) |
| 397 }; | 410 }; |
| 398 RunTest(ASCIIToUTF16("g"), string16(), false, short_5a, arraysize(short_5a)); | 411 RunTest(ASCIIToUTF16("g"), string16(), false, short_5a, arraysize(short_5a)); |
| 399 RunTest(ASCIIToUTF16("go"), string16(), false, short_5b, arraysize(short_5b)); | 412 RunTest(ASCIIToUTF16("go"), string16(), false, short_5b, arraysize(short_5b)); |
| 400 } | 413 } |
| 401 | 414 |
| 402 TEST_F(HistoryURLProviderTest, CullRedirects) { | 415 TEST_F(HistoryURLProviderTest, CullRedirects) { |
| 403 // URLs we will be using, plus the visit counts they will initially get | 416 // URLs we will be using, plus the visit counts they will initially get |
| 404 // (the redirect set below will also increment the visit counts). We want | 417 // (the redirect set below will also increment the visit counts). We want |
| 405 // the results to be in A,B,C order. Note also that our visit counts are | 418 // the results to be in A,B,C order. Note also that our visit counts are |
| 406 // all high enough so that domain synthesizing won't get triggered. | 419 // all high enough so that domain synthesizing won't get triggered. |
| (...skipping 20 matching lines...) Expand all Loading... | |
| 427 redirects_to_a.push_back(GURL(test_cases[2].url)); | 440 redirects_to_a.push_back(GURL(test_cases[2].url)); |
| 428 redirects_to_a.push_back(GURL(test_cases[0].url)); | 441 redirects_to_a.push_back(GURL(test_cases[0].url)); |
| 429 history_service_->AddPage(GURL(test_cases[0].url), base::Time::Now(), | 442 history_service_->AddPage(GURL(test_cases[0].url), base::Time::Now(), |
| 430 NULL, 0, GURL(), redirects_to_a, content::PAGE_TRANSITION_TYPED, | 443 NULL, 0, GURL(), redirects_to_a, content::PAGE_TRANSITION_TYPED, |
| 431 history::SOURCE_BROWSED, true); | 444 history::SOURCE_BROWSED, true); |
| 432 | 445 |
| 433 // Because all the results are part of a redirect chain with other results, | 446 // Because all the results are part of a redirect chain with other results, |
| 434 // all but the first one (A) should be culled. We should get the default | 447 // all but the first one (A) should be culled. We should get the default |
| 435 // "what you typed" result, plus this one. | 448 // "what you typed" result, plus this one. |
| 436 const string16 typing(ASCIIToUTF16("http://redirects/")); | 449 const string16 typing(ASCIIToUTF16("http://redirects/")); |
| 437 const std::string expected_results[] = { | 450 const ExpectedUrlAndLegalDefaultMatch expected_results[] = { |
| 438 UTF16ToUTF8(typing), | 451 ExpectedUrlAndLegalDefaultMatch(UTF16ToUTF8(typing), true), |
| 439 test_cases[0].url, | 452 ExpectedUrlAndLegalDefaultMatch(test_cases[0].url, false) |
| 440 }; | 453 }; |
| 441 RunTest(typing, string16(), true, expected_results, | 454 RunTest(typing, string16(), true, expected_results, |
| 442 arraysize(expected_results)); | 455 arraysize(expected_results)); |
| 443 } | 456 } |
| 444 | 457 |
| 445 TEST_F(HistoryURLProviderTest, WhatYouTyped) { | 458 TEST_F(HistoryURLProviderTest, WhatYouTyped) { |
| 446 // Make sure we suggest a What You Typed match at the right times. | 459 // Make sure we suggest a What You Typed match at the right times. |
| 447 RunTest(ASCIIToUTF16("wytmatch"), string16(), false, NULL, 0); | 460 RunTest(ASCIIToUTF16("wytmatch"), string16(), false, NULL, 0); |
| 448 RunTest(ASCIIToUTF16("wytmatch foo bar"), string16(), false, NULL, 0); | 461 RunTest(ASCIIToUTF16("wytmatch foo bar"), string16(), false, NULL, 0); |
| 449 RunTest(ASCIIToUTF16("wytmatch+foo+bar"), string16(), false, NULL, 0); | 462 RunTest(ASCIIToUTF16("wytmatch+foo+bar"), string16(), false, NULL, 0); |
| 450 RunTest(ASCIIToUTF16("wytmatch+foo+bar.com"), string16(), false, NULL, 0); | 463 RunTest(ASCIIToUTF16("wytmatch+foo+bar.com"), string16(), false, NULL, 0); |
| 451 | 464 |
| 452 const std::string results_1[] = {"http://www.wytmatch.com/"}; | 465 const ExpectedUrlAndLegalDefaultMatch results_1[] = { |
| 466 ExpectedUrlAndLegalDefaultMatch("http://www.wytmatch.com/", true) | |
| 467 }; | |
| 453 RunTest(ASCIIToUTF16("wytmatch"), ASCIIToUTF16("com"), false, results_1, | 468 RunTest(ASCIIToUTF16("wytmatch"), ASCIIToUTF16("com"), false, results_1, |
| 454 arraysize(results_1)); | 469 arraysize(results_1)); |
| 455 | 470 |
| 456 const std::string results_2[] = {"http://wytmatch%20foo%20bar/"}; | 471 const ExpectedUrlAndLegalDefaultMatch results_2[] = { |
| 472 ExpectedUrlAndLegalDefaultMatch("http://wytmatch%20foo%20bar/", true) | |
| 473 }; | |
| 457 RunTest(ASCIIToUTF16("http://wytmatch foo bar"), string16(), false, results_2, | 474 RunTest(ASCIIToUTF16("http://wytmatch foo bar"), string16(), false, results_2, |
| 458 arraysize(results_2)); | 475 arraysize(results_2)); |
| 459 | 476 |
| 460 const std::string results_3[] = {"https://wytmatch%20foo%20bar/"}; | 477 const ExpectedUrlAndLegalDefaultMatch results_3[] = { |
| 478 ExpectedUrlAndLegalDefaultMatch("https://wytmatch%20foo%20bar/", true) | |
| 479 }; | |
| 461 RunTest(ASCIIToUTF16("https://wytmatch foo bar"), string16(), false, | 480 RunTest(ASCIIToUTF16("https://wytmatch foo bar"), string16(), false, |
| 462 results_3, arraysize(results_3)); | 481 results_3, arraysize(results_3)); |
| 463 } | 482 } |
| 464 | 483 |
| 465 TEST_F(HistoryURLProviderTest, Fixup) { | 484 TEST_F(HistoryURLProviderTest, Fixup) { |
| 466 // Test for various past crashes we've had. | 485 // Test for various past crashes we've had. |
| 467 RunTest(ASCIIToUTF16("\\"), string16(), false, NULL, 0); | 486 RunTest(ASCIIToUTF16("\\"), string16(), false, NULL, 0); |
| 468 RunTest(ASCIIToUTF16("#"), string16(), false, NULL, 0); | 487 RunTest(ASCIIToUTF16("#"), string16(), false, NULL, 0); |
| 469 RunTest(ASCIIToUTF16("%20"), string16(), false, NULL, 0); | 488 RunTest(ASCIIToUTF16("%20"), string16(), false, NULL, 0); |
| 470 const std::string fixup_crash[] = {"http://%EF%BD%A5@s/"}; | 489 const ExpectedUrlAndLegalDefaultMatch fixup_crash[] = { |
| 490 ExpectedUrlAndLegalDefaultMatch("http://%EF%BD%A5@s/", true) | |
| 491 }; | |
| 471 RunTest(WideToUTF16(L"\uff65@s"), string16(), false, fixup_crash, | 492 RunTest(WideToUTF16(L"\uff65@s"), string16(), false, fixup_crash, |
| 472 arraysize(fixup_crash)); | 493 arraysize(fixup_crash)); |
| 473 RunTest(WideToUTF16(L"\u2015\u2015@ \uff7c"), string16(), false, NULL, 0); | 494 RunTest(WideToUTF16(L"\u2015\u2015@ \uff7c"), string16(), false, NULL, 0); |
| 474 | 495 |
| 475 // Fixing up "file:" should result in an inline autocomplete offset of just | 496 // Fixing up "file:" should result in an inline autocomplete offset of just |
| 476 // after "file:", not just after "file://". | 497 // after "file:", not just after "file://". |
| 477 const string16 input_1(ASCIIToUTF16("file:")); | 498 const string16 input_1(ASCIIToUTF16("file:")); |
| 478 const std::string fixup_1[] = {"file:///C:/foo.txt"}; | 499 const ExpectedUrlAndLegalDefaultMatch fixup_1[] = { |
| 500 ExpectedUrlAndLegalDefaultMatch("file:///C:/foo.txt", true) | |
| 501 }; | |
| 479 ASSERT_NO_FATAL_FAILURE(RunTest(input_1, string16(), false, fixup_1, | 502 ASSERT_NO_FATAL_FAILURE(RunTest(input_1, string16(), false, fixup_1, |
| 480 arraysize(fixup_1))); | 503 arraysize(fixup_1))); |
| 481 EXPECT_EQ(ASCIIToUTF16("///C:/foo.txt"), | 504 EXPECT_EQ(ASCIIToUTF16("///C:/foo.txt"), |
| 482 matches_.front().inline_autocompletion); | 505 matches_.front().inline_autocompletion); |
| 483 | 506 |
| 484 // Fixing up "http:/" should result in an inline autocomplete offset of just | 507 // Fixing up "http:/" should result in an inline autocomplete offset of just |
| 485 // after "http:/", not just after "http:". | 508 // after "http:/", not just after "http:". |
| 486 const string16 input_2(ASCIIToUTF16("http:/")); | 509 const string16 input_2(ASCIIToUTF16("http:/")); |
| 487 const std::string fixup_2[] = { | 510 const ExpectedUrlAndLegalDefaultMatch fixup_2[] = { |
| 488 "http://bogussite.com/a", | 511 ExpectedUrlAndLegalDefaultMatch("http://bogussite.com/a", true), |
| 489 "http://bogussite.com/b", | 512 ExpectedUrlAndLegalDefaultMatch("http://bogussite.com/b", true), |
| 490 "http://bogussite.com/c", | 513 ExpectedUrlAndLegalDefaultMatch("http://bogussite.com/c", true) |
| 491 }; | 514 }; |
| 492 ASSERT_NO_FATAL_FAILURE(RunTest(input_2, string16(), false, fixup_2, | 515 ASSERT_NO_FATAL_FAILURE(RunTest(input_2, string16(), false, fixup_2, |
| 493 arraysize(fixup_2))); | 516 arraysize(fixup_2))); |
| 494 EXPECT_EQ(ASCIIToUTF16("/bogussite.com/a"), | 517 EXPECT_EQ(ASCIIToUTF16("/bogussite.com/a"), |
| 495 matches_.front().inline_autocompletion); | 518 matches_.front().inline_autocompletion); |
| 496 | 519 |
| 497 // Adding a TLD to a small number like "56" should result in "www.56.com" | 520 // Adding a TLD to a small number like "56" should result in "www.56.com" |
| 498 // rather than "0.0.0.56.com". | 521 // rather than "0.0.0.56.com". |
| 499 const std::string fixup_3[] = {"http://www.56.com/"}; | 522 const ExpectedUrlAndLegalDefaultMatch fixup_3[] = { |
| 523 ExpectedUrlAndLegalDefaultMatch("http://www.56.com/", true) | |
| 524 }; | |
| 500 RunTest(ASCIIToUTF16("56"), ASCIIToUTF16("com"), true, fixup_3, | 525 RunTest(ASCIIToUTF16("56"), ASCIIToUTF16("com"), true, fixup_3, |
| 501 arraysize(fixup_3)); | 526 arraysize(fixup_3)); |
| 502 | 527 |
| 503 // An input looks like a IP address like "127.0.0.1" should result in | 528 // An input looks like a IP address like "127.0.0.1" should result in |
| 504 // "http://127.0.0.1/". | 529 // "http://127.0.0.1/". |
| 505 const std::string fixup_4[] = {"http://127.0.0.1/"}; | 530 const ExpectedUrlAndLegalDefaultMatch fixup_4[] = { |
| 531 ExpectedUrlAndLegalDefaultMatch("http://127.0.0.1/", true) | |
| 532 }; | |
| 506 RunTest(ASCIIToUTF16("127.0.0.1"), string16(), false, fixup_4, | 533 RunTest(ASCIIToUTF16("127.0.0.1"), string16(), false, fixup_4, |
| 507 arraysize(fixup_4)); | 534 arraysize(fixup_4)); |
| 508 | 535 |
| 509 // An number "17173" should result in "http://www.17173.com/" in db. | 536 // An number "17173" should result in "http://www.17173.com/" in db. |
| 510 const std::string fixup_5[] = {"http://www.17173.com/"}; | 537 const ExpectedUrlAndLegalDefaultMatch fixup_5[] = { |
| 538 ExpectedUrlAndLegalDefaultMatch("http://www.17173.com/", true) | |
| 539 }; | |
| 511 RunTest(ASCIIToUTF16("17173"), string16(), false, fixup_5, | 540 RunTest(ASCIIToUTF16("17173"), string16(), false, fixup_5, |
| 512 arraysize(fixup_5)); | 541 arraysize(fixup_5)); |
| 513 } | 542 } |
| 514 | 543 |
| 515 // Make sure the results for the input 'p' don't change between the first and | 544 // Make sure the results for the input 'p' don't change between the first and |
| 516 // second passes. | 545 // second passes. |
| 517 TEST_F(HistoryURLProviderTest, EmptyVisits) { | 546 TEST_F(HistoryURLProviderTest, EmptyVisits) { |
| 518 // Wait for history to create the in memory DB. | 547 // Wait for history to create the in memory DB. |
| 519 profile_->BlockUntilHistoryProcessesPendingRequests(); | 548 profile_->BlockUntilHistoryProcessesPendingRequests(); |
| 520 | 549 |
| (...skipping 15 matching lines...) Expand all Loading... | |
| 536 EXPECT_TRUE(autocomplete_->done()); | 565 EXPECT_TRUE(autocomplete_->done()); |
| 537 matches_ = autocomplete_->matches(); | 566 matches_ = autocomplete_->matches(); |
| 538 ASSERT_GT(matches_.size(), 0u); | 567 ASSERT_GT(matches_.size(), 0u); |
| 539 EXPECT_EQ(GURL("http://pandora.com/"), matches_[0].destination_url); | 568 EXPECT_EQ(GURL("http://pandora.com/"), matches_[0].destination_url); |
| 540 EXPECT_EQ(pandora_relevance, matches_[0].relevance); | 569 EXPECT_EQ(pandora_relevance, matches_[0].relevance); |
| 541 } | 570 } |
| 542 | 571 |
| 543 TEST_F(HistoryURLProviderTestNoDB, NavigateWithoutDB) { | 572 TEST_F(HistoryURLProviderTestNoDB, NavigateWithoutDB) { |
| 544 // Ensure that we will still produce matches for navigation when there is no | 573 // Ensure that we will still produce matches for navigation when there is no |
| 545 // database. | 574 // database. |
| 546 std::string navigation_1[] = {"http://test.com/"}; | 575 ExpectedUrlAndLegalDefaultMatch navigation_1[] = { |
| 576 ExpectedUrlAndLegalDefaultMatch("http://test.com/", true) | |
| 577 }; | |
| 547 RunTest(ASCIIToUTF16("test.com"), string16(), false, navigation_1, | 578 RunTest(ASCIIToUTF16("test.com"), string16(), false, navigation_1, |
| 548 arraysize(navigation_1)); | 579 arraysize(navigation_1)); |
| 549 | 580 |
| 550 std::string navigation_2[] = {"http://slash/"}; | 581 ExpectedUrlAndLegalDefaultMatch navigation_2[] = { |
| 582 ExpectedUrlAndLegalDefaultMatch("http://slash/", true) | |
| 583 }; | |
| 551 RunTest(ASCIIToUTF16("slash"), string16(), false, navigation_2, | 584 RunTest(ASCIIToUTF16("slash"), string16(), false, navigation_2, |
| 552 arraysize(navigation_2)); | 585 arraysize(navigation_2)); |
| 553 | 586 |
| 554 RunTest(ASCIIToUTF16("this is a query"), string16(), false, NULL, 0); | 587 RunTest(ASCIIToUTF16("this is a query"), string16(), false, NULL, 0); |
| 555 } | 588 } |
| 556 | 589 |
| 557 TEST_F(HistoryURLProviderTest, DontAutocompleteOnTrailingWhitespace) { | 590 TEST_F(HistoryURLProviderTest, DontAutocompleteOnTrailingWhitespace) { |
| 558 AutocompleteInput input(ASCIIToUTF16("slash "), string16::npos, string16(), | 591 AutocompleteInput input(ASCIIToUTF16("slash "), string16::npos, string16(), |
| 559 GURL(), AutocompleteInput::INVALID_SPEC, false, false, | 592 GURL(), AutocompleteInput::INVALID_SPEC, false, false, |
| 560 true, AutocompleteInput::ALL_MATCHES); | 593 true, AutocompleteInput::ALL_MATCHES); |
| 561 autocomplete_->Start(input, false); | 594 autocomplete_->Start(input, false); |
| 562 if (!autocomplete_->done()) | 595 if (!autocomplete_->done()) |
| 563 base::MessageLoop::current()->Run(); | 596 base::MessageLoop::current()->Run(); |
| 564 | 597 |
| 565 // None of the matches should attempt to autocomplete. | 598 // None of the matches should attempt to autocomplete. |
| 566 matches_ = autocomplete_->matches(); | 599 matches_ = autocomplete_->matches(); |
| 567 for (size_t i = 0; i < matches_.size(); ++i) | 600 for (size_t i = 0; i < matches_.size(); ++i) { |
| 568 EXPECT_TRUE(matches_[i].inline_autocompletion.empty()); | 601 EXPECT_TRUE(matches_[i].inline_autocompletion.empty()); |
| 602 EXPECT_FALSE(matches_[i].allowed_to_be_default_match); | |
| 603 } | |
| 569 } | 604 } |
| 570 | 605 |
| 571 TEST_F(HistoryURLProviderTest, TreatEmailsAsSearches) { | 606 TEST_F(HistoryURLProviderTest, TreatEmailsAsSearches) { |
| 572 // Visiting foo.com should not make this string be treated as a navigation. | 607 // Visiting foo.com should not make this string be treated as a navigation. |
| 573 // That means the result should be scored around 1200 ("what you typed") | 608 // That means the result should be scored around 1200 ("what you typed") |
| 574 // and not 1400+. | 609 // and not 1400+. |
| 575 const std::string expected[] = {"http://user@foo.com/"}; | 610 const ExpectedUrlAndLegalDefaultMatch expected[] = { |
| 611 ExpectedUrlAndLegalDefaultMatch("http://user@foo.com/", true) | |
| 612 }; | |
| 576 ASSERT_NO_FATAL_FAILURE(RunTest(ASCIIToUTF16("user@foo.com"), string16(), | 613 ASSERT_NO_FATAL_FAILURE(RunTest(ASCIIToUTF16("user@foo.com"), string16(), |
| 577 false, expected, arraysize(expected))); | 614 false, expected, arraysize(expected))); |
| 578 EXPECT_LE(1200, matches_[0].relevance); | 615 EXPECT_LE(1200, matches_[0].relevance); |
| 579 EXPECT_LT(matches_[0].relevance, 1210); | 616 EXPECT_LT(matches_[0].relevance, 1210); |
| 580 } | 617 } |
| 581 | 618 |
| 582 TEST_F(HistoryURLProviderTest, IntranetURLsWithPaths) { | 619 TEST_F(HistoryURLProviderTest, IntranetURLsWithPaths) { |
| 583 struct TestCase { | 620 struct TestCase { |
| 584 const char* input; | 621 const char* input; |
| 585 int relevance; | 622 int relevance; |
| 586 } test_cases[] = { | 623 } test_cases[] = { |
| 587 { "fooey", 0 }, | 624 { "fooey", 0 }, |
| 588 { "fooey/", 1200 }, // 1200 for URL would still navigate by default. | 625 { "fooey/", 1200 }, // 1200 for URL would still navigate by default. |
| 589 { "fooey/a", 1200 }, // 1200 for UNKNOWN would not. | 626 { "fooey/a", 1200 }, // 1200 for UNKNOWN would not. |
| 590 { "fooey/a b", 1200 }, // Also UNKNOWN. | 627 { "fooey/a b", 1200 }, // Also UNKNOWN. |
| 591 { "gooey", 1410 }, | 628 { "gooey", 1410 }, |
| 592 { "gooey/", 1410 }, | 629 { "gooey/", 1410 }, |
| 593 { "gooey/a", 1400 }, | 630 { "gooey/a", 1400 }, |
| 594 { "gooey/a b", 1400 }, | 631 { "gooey/a b", 1400 }, |
| 595 }; | 632 }; |
| 596 for (size_t i = 0; i < ARRAYSIZE_UNSAFE(test_cases); ++i) { | 633 for (size_t i = 0; i < ARRAYSIZE_UNSAFE(test_cases); ++i) { |
| 597 SCOPED_TRACE(test_cases[i].input); | 634 SCOPED_TRACE(test_cases[i].input); |
| 598 if (test_cases[i].relevance == 0) { | 635 if (test_cases[i].relevance == 0) { |
| 599 RunTest(ASCIIToUTF16(test_cases[i].input), string16(), false, NULL, 0); | 636 RunTest(ASCIIToUTF16(test_cases[i].input), string16(), false, NULL, 0); |
| 600 } else { | 637 } else { |
| 601 const std::string output[] = { | 638 const ExpectedUrlAndLegalDefaultMatch output[] = { |
| 602 URLFixerUpper::FixupURL(test_cases[i].input, std::string()).spec() | 639 ExpectedUrlAndLegalDefaultMatch( |
| 640 URLFixerUpper::FixupURL(test_cases[i].input, std::string()).spec(), | |
| 641 true) | |
| 603 }; | 642 }; |
| 604 ASSERT_NO_FATAL_FAILURE(RunTest(ASCIIToUTF16(test_cases[i].input), | 643 ASSERT_NO_FATAL_FAILURE(RunTest(ASCIIToUTF16(test_cases[i].input), |
| 605 string16(), false, output, arraysize(output))); | 644 string16(), false, output, arraysize(output))); |
| 606 // Actual relevance should be at least what test_cases expects and | 645 // Actual relevance should be at least what test_cases expects and |
| 607 // and no more than 10 more. | 646 // and no more than 10 more. |
| 608 EXPECT_LE(test_cases[i].relevance, matches_[0].relevance); | 647 EXPECT_LE(test_cases[i].relevance, matches_[0].relevance); |
| 609 EXPECT_LT(matches_[0].relevance, test_cases[i].relevance + 10); | 648 EXPECT_LT(matches_[0].relevance, test_cases[i].relevance + 10); |
| 610 } | 649 } |
| 611 } | 650 } |
| 612 } | 651 } |
| 613 | 652 |
| 614 TEST_F(HistoryURLProviderTest, IntranetURLsWithRefs) { | 653 TEST_F(HistoryURLProviderTest, IntranetURLsWithRefs) { |
| 615 struct TestCase { | 654 struct TestCase { |
| 616 const char* input; | 655 const char* input; |
| 617 int relevance; | 656 int relevance; |
| 618 AutocompleteInput::Type type; | 657 AutocompleteInput::Type type; |
| 619 } test_cases[] = { | 658 } test_cases[] = { |
| 620 { "gooey", 1410, AutocompleteInput::UNKNOWN }, | 659 { "gooey", 1410, AutocompleteInput::UNKNOWN }, |
| 621 { "gooey/", 1410, AutocompleteInput::URL }, | 660 { "gooey/", 1410, AutocompleteInput::URL }, |
| 622 { "gooey#", 1200, AutocompleteInput::UNKNOWN }, | 661 { "gooey#", 1200, AutocompleteInput::UNKNOWN }, |
| 623 { "gooey/#", 1200, AutocompleteInput::URL }, | 662 { "gooey/#", 1200, AutocompleteInput::URL }, |
| 624 { "gooey#foo", 1200, AutocompleteInput::UNKNOWN }, | 663 { "gooey#foo", 1200, AutocompleteInput::UNKNOWN }, |
| 625 { "gooey/#foo", 1200, AutocompleteInput::URL }, | 664 { "gooey/#foo", 1200, AutocompleteInput::URL }, |
| 626 { "gooey# foo", 1200, AutocompleteInput::UNKNOWN }, | 665 { "gooey# foo", 1200, AutocompleteInput::UNKNOWN }, |
| 627 { "gooey/# foo", 1200, AutocompleteInput::URL }, | 666 { "gooey/# foo", 1200, AutocompleteInput::URL }, |
| 628 }; | 667 }; |
| 629 for (size_t i = 0; i < ARRAYSIZE_UNSAFE(test_cases); ++i) { | 668 for (size_t i = 0; i < ARRAYSIZE_UNSAFE(test_cases); ++i) { |
| 630 SCOPED_TRACE(test_cases[i].input); | 669 SCOPED_TRACE(test_cases[i].input); |
| 631 const std::string output[] = { | 670 const ExpectedUrlAndLegalDefaultMatch output[] = { |
| 632 URLFixerUpper::FixupURL(test_cases[i].input, std::string()).spec() | 671 ExpectedUrlAndLegalDefaultMatch( |
| 672 URLFixerUpper::FixupURL(test_cases[i].input, std::string()).spec(), | |
| 673 true) | |
| 633 }; | 674 }; |
| 634 AutocompleteInput::Type type; | 675 AutocompleteInput::Type type; |
| 635 ASSERT_NO_FATAL_FAILURE( | 676 ASSERT_NO_FATAL_FAILURE( |
| 636 RunTest(ASCIIToUTF16(test_cases[i].input), | 677 RunTest(ASCIIToUTF16(test_cases[i].input), |
| 637 string16(), false, output, arraysize(output), &type)); | 678 string16(), false, output, arraysize(output), &type)); |
| 638 // Actual relevance should be at least what test_cases expects and | 679 // Actual relevance should be at least what test_cases expects and |
| 639 // and no more than 10 more. | 680 // and no more than 10 more. |
| 640 EXPECT_LE(test_cases[i].relevance, matches_[0].relevance); | 681 EXPECT_LE(test_cases[i].relevance, matches_[0].relevance); |
| 641 EXPECT_LT(matches_[0].relevance, test_cases[i].relevance + 10); | 682 EXPECT_LT(matches_[0].relevance, test_cases[i].relevance + 10); |
| 642 // Input type should be what we expect. This is important because | 683 // Input type should be what we expect. This is important because |
| 643 // this provider counts on SearchProvider to give queries a relevance | 684 // this provider counts on SearchProvider to give queries a relevance |
| 644 // score >1200 for UNKNOWN inputs and <1200 for URL inputs. (That's | 685 // score >1200 for UNKNOWN inputs and <1200 for URL inputs. (That's |
| 645 // already tested in search_provider_unittest.cc.) For this test | 686 // already tested in search_provider_unittest.cc.) For this test |
| 646 // here to test that the user sees the correct behavior, it needs | 687 // here to test that the user sees the correct behavior, it needs |
| 647 // to check that the input type was identified correctly. | 688 // to check that the input type was identified correctly. |
| 648 EXPECT_EQ(test_cases[i].type, type); | 689 EXPECT_EQ(test_cases[i].type, type); |
| 649 } | 690 } |
| 650 } | 691 } |
| 651 | 692 |
| 652 // Makes sure autocompletion happens for intranet sites that have been | 693 // Makes sure autocompletion happens for intranet sites that have been |
| 653 // previoulsy visited. | 694 // previoulsy visited. |
| 654 TEST_F(HistoryURLProviderTest, IntranetURLCompletion) { | 695 TEST_F(HistoryURLProviderTest, IntranetURLCompletion) { |
| 655 sort_matches_ = true; | 696 sort_matches_ = true; |
| 656 | 697 |
| 657 const std::string expected1[] = { | 698 const ExpectedUrlAndLegalDefaultMatch expected1[] = { |
| 658 "http://intra/three", | 699 ExpectedUrlAndLegalDefaultMatch("http://intra/three", true), |
| 659 "http://intra/two", | 700 ExpectedUrlAndLegalDefaultMatch("http://intra/two", true) |
| 660 }; | 701 }; |
| 661 ASSERT_NO_FATAL_FAILURE(RunTest(ASCIIToUTF16("intra/t"), string16(), false, | 702 ASSERT_NO_FATAL_FAILURE(RunTest(ASCIIToUTF16("intra/t"), string16(), false, |
| 662 expected1, arraysize(expected1))); | 703 expected1, arraysize(expected1))); |
| 663 EXPECT_LE(1410, matches_[0].relevance); | 704 EXPECT_LE(1410, matches_[0].relevance); |
| 664 EXPECT_LT(matches_[0].relevance, 1420); | 705 EXPECT_LT(matches_[0].relevance, 1420); |
| 665 EXPECT_EQ(matches_[0].relevance - 1, matches_[1].relevance); | 706 EXPECT_EQ(matches_[0].relevance - 1, matches_[1].relevance); |
| 666 | 707 |
| 667 const std::string expected2[] = { | 708 const ExpectedUrlAndLegalDefaultMatch expected2[] = { |
| 668 "http://moo/b", | 709 ExpectedUrlAndLegalDefaultMatch("http://moo/b", true), |
| 669 "http://moo/bar", | 710 ExpectedUrlAndLegalDefaultMatch("http://moo/bar", true) |
| 670 }; | 711 }; |
| 671 ASSERT_NO_FATAL_FAILURE(RunTest(ASCIIToUTF16("moo/b"), string16(), false, | 712 ASSERT_NO_FATAL_FAILURE(RunTest(ASCIIToUTF16("moo/b"), string16(), false, |
| 672 expected2, arraysize(expected2))); | 713 expected2, arraysize(expected2))); |
| 673 // The url what you typed match should be around 1400, otherwise the | 714 // The url what you typed match should be around 1400, otherwise the |
| 674 // search what you typed match is going to be first. | 715 // search what you typed match is going to be first. |
| 675 EXPECT_LE(1400, matches_[0].relevance); | 716 EXPECT_LE(1400, matches_[0].relevance); |
| 676 EXPECT_LT(matches_[0].relevance, 1410); | 717 EXPECT_LT(matches_[0].relevance, 1410); |
| 677 | 718 |
| 678 const std::string expected3[] = { | 719 const ExpectedUrlAndLegalDefaultMatch expected3[] = { |
| 679 "http://intra/one", | 720 ExpectedUrlAndLegalDefaultMatch("http://intra/one", true), |
| 680 "http://intra/three", | 721 ExpectedUrlAndLegalDefaultMatch("http://intra/three", true), |
| 681 "http://intra/two", | 722 ExpectedUrlAndLegalDefaultMatch("http://intra/two", true) |
| 682 }; | 723 }; |
| 683 RunTest(ASCIIToUTF16("intra"), string16(), false, expected3, | 724 RunTest(ASCIIToUTF16("intra"), string16(), false, expected3, |
| 684 arraysize(expected3)); | 725 arraysize(expected3)); |
| 685 | 726 |
| 686 const std::string expected4[] = { | 727 const ExpectedUrlAndLegalDefaultMatch expected4[] = { |
| 687 "http://intra/one", | 728 ExpectedUrlAndLegalDefaultMatch("http://intra/one", true), |
| 688 "http://intra/three", | 729 ExpectedUrlAndLegalDefaultMatch("http://intra/three", true), |
| 689 "http://intra/two", | 730 ExpectedUrlAndLegalDefaultMatch("http://intra/two", true) |
| 690 }; | 731 }; |
| 691 RunTest(ASCIIToUTF16("intra/"), string16(), false, expected4, | 732 RunTest(ASCIIToUTF16("intra/"), string16(), false, expected4, |
| 692 arraysize(expected4)); | 733 arraysize(expected4)); |
| 693 | 734 |
| 694 const std::string expected5[] = { | 735 const ExpectedUrlAndLegalDefaultMatch expected5[] = { |
| 695 "http://intra/one", | 736 ExpectedUrlAndLegalDefaultMatch("http://intra/one", true) |
| 696 }; | 737 }; |
| 697 ASSERT_NO_FATAL_FAILURE(RunTest(ASCIIToUTF16("intra/o"), string16(), false, | 738 ASSERT_NO_FATAL_FAILURE(RunTest(ASCIIToUTF16("intra/o"), string16(), false, |
| 698 expected5, arraysize(expected5))); | 739 expected5, arraysize(expected5))); |
| 699 EXPECT_LE(1410, matches_[0].relevance); | 740 EXPECT_LE(1410, matches_[0].relevance); |
| 700 EXPECT_LT(matches_[0].relevance, 1420); | 741 EXPECT_LT(matches_[0].relevance, 1420); |
| 701 | 742 |
| 702 const std::string expected6[] = { | 743 const ExpectedUrlAndLegalDefaultMatch expected6[] = { |
| 703 "http://intra/x", | 744 ExpectedUrlAndLegalDefaultMatch("http://intra/x", true) |
| 704 }; | 745 }; |
| 705 ASSERT_NO_FATAL_FAILURE(RunTest(ASCIIToUTF16("intra/x"), string16(), false, | 746 ASSERT_NO_FATAL_FAILURE(RunTest(ASCIIToUTF16("intra/x"), string16(), false, |
| 706 expected6, arraysize(expected6))); | 747 expected6, arraysize(expected6))); |
| 707 EXPECT_LE(1400, matches_[0].relevance); | 748 EXPECT_LE(1400, matches_[0].relevance); |
| 708 EXPECT_LT(matches_[0].relevance, 1410); | 749 EXPECT_LT(matches_[0].relevance, 1410); |
| 709 | 750 |
| 710 const std::string expected7[] = { | 751 const ExpectedUrlAndLegalDefaultMatch expected7[] = { |
| 711 "http://typedhost/untypedpath", | 752 ExpectedUrlAndLegalDefaultMatch("http://typedhost/untypedpath", true) |
| 712 }; | 753 }; |
| 713 ASSERT_NO_FATAL_FAILURE(RunTest(ASCIIToUTF16("typedhost/untypedpath"), | 754 ASSERT_NO_FATAL_FAILURE(RunTest(ASCIIToUTF16("typedhost/untypedpath"), |
| 714 string16(), false, expected7, arraysize(expected7))); | 755 string16(), false, expected7, arraysize(expected7))); |
| 715 EXPECT_LE(1400, matches_[0].relevance); | 756 EXPECT_LE(1400, matches_[0].relevance); |
| 716 EXPECT_LT(matches_[0].relevance, 1410); | 757 EXPECT_LT(matches_[0].relevance, 1410); |
| 717 } | 758 } |
| 718 | 759 |
| 719 TEST_F(HistoryURLProviderTest, CrashDueToFixup) { | 760 TEST_F(HistoryURLProviderTest, CrashDueToFixup) { |
| 720 // This test passes if we don't crash. The results don't matter. | 761 // This test passes if we don't crash. The results don't matter. |
| 721 const char* const test_cases[] = { | 762 const char* const test_cases[] = { |
| (...skipping 34 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 756 {"https://testsearch.com/?q=foobar", 20}, | 797 {"https://testsearch.com/?q=foobar", 20}, |
| 757 {"http://foobar.com/", 10} | 798 {"http://foobar.com/", 10} |
| 758 }; | 799 }; |
| 759 for (size_t i = 0; i < ARRAYSIZE_UNSAFE(test_cases); ++i) { | 800 for (size_t i = 0; i < ARRAYSIZE_UNSAFE(test_cases); ++i) { |
| 760 history_service_->AddPageWithDetails(GURL(test_cases[i].url), | 801 history_service_->AddPageWithDetails(GURL(test_cases[i].url), |
| 761 UTF8ToUTF16("Title"), test_cases[i].count, test_cases[i].count, | 802 UTF8ToUTF16("Title"), test_cases[i].count, test_cases[i].count, |
| 762 Time::Now(), false, history::SOURCE_BROWSED); | 803 Time::Now(), false, history::SOURCE_BROWSED); |
| 763 } | 804 } |
| 764 | 805 |
| 765 // We should not see search URLs when typing a previously used query. | 806 // We should not see search URLs when typing a previously used query. |
| 766 const std::string expected_when_searching_query[] = { | 807 const ExpectedUrlAndLegalDefaultMatch expected_when_searching_query[] = { |
| 767 test_cases[2].url | 808 ExpectedUrlAndLegalDefaultMatch(test_cases[2].url, false) |
| 768 }; | 809 }; |
| 769 RunTest(ASCIIToUTF16("foobar"), string16(), true, | 810 RunTest(ASCIIToUTF16("foobar"), string16(), true, |
| 770 expected_when_searching_query, arraysize(expected_when_searching_query)); | 811 expected_when_searching_query, arraysize(expected_when_searching_query)); |
| 771 | 812 |
| 772 // We should not see search URLs when typing the search engine name. | 813 // We should not see search URLs when typing the search engine name. |
| 773 const std::string expected_when_searching_site[] = { | 814 const ExpectedUrlAndLegalDefaultMatch expected_when_searching_site[] = { |
| 774 test_cases[0].url | 815 ExpectedUrlAndLegalDefaultMatch(test_cases[0].url, false) |
| 775 }; | 816 }; |
| 776 RunTest(ASCIIToUTF16("testsearch"), string16(), true, | 817 RunTest(ASCIIToUTF16("testsearch"), string16(), true, |
| 777 expected_when_searching_site, arraysize(expected_when_searching_site)); | 818 expected_when_searching_site, arraysize(expected_when_searching_site)); |
| 778 } | 819 } |
| 779 | 820 |
| 780 TEST_F(HistoryURLProviderTest, SuggestExactInput) { | 821 TEST_F(HistoryURLProviderTest, SuggestExactInput) { |
| 781 const size_t npos = std::string::npos; | 822 const size_t npos = std::string::npos; |
| 782 struct TestCase { | 823 struct TestCase { |
| 783 // Inputs: | 824 // Inputs: |
| 784 const char* input; | 825 const char* input; |
| (...skipping 64 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 849 EXPECT_EQ(test_cases[i].offsets[match_index], | 890 EXPECT_EQ(test_cases[i].offsets[match_index], |
| 850 match.contents_class[match_index].offset); | 891 match.contents_class[match_index].offset); |
| 851 EXPECT_EQ(ACMatchClassification::URL | | 892 EXPECT_EQ(ACMatchClassification::URL | |
| 852 (match_index == test_cases[i].match_classification_index ? | 893 (match_index == test_cases[i].match_classification_index ? |
| 853 ACMatchClassification::MATCH : 0), | 894 ACMatchClassification::MATCH : 0), |
| 854 match.contents_class[match_index].style); | 895 match.contents_class[match_index].style); |
| 855 } | 896 } |
| 856 EXPECT_EQ(npos, test_cases[i].offsets[match.contents_class.size()]); | 897 EXPECT_EQ(npos, test_cases[i].offsets[match.contents_class.size()]); |
| 857 } | 898 } |
| 858 } | 899 } |
| OLD | NEW |