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/autocomplete_result.h" | 5 #include "chrome/browser/autocomplete/autocomplete_result.h" |
6 | 6 |
7 #include "base/memory/scoped_ptr.h" | 7 #include "base/memory/scoped_ptr.h" |
8 #include "base/metrics/field_trial.h" | 8 #include "base/metrics/field_trial.h" |
9 #include "base/strings/string_number_conversions.h" | 9 #include "base/strings/string_number_conversions.h" |
10 #include "base/strings/string_util.h" | 10 #include "base/strings/string_util.h" |
11 #include "base/strings/utf_string_conversions.h" | 11 #include "base/strings/utf_string_conversions.h" |
12 #include "chrome/browser/autocomplete/autocomplete_input.h" | 12 #include "chrome/browser/autocomplete/autocomplete_input.h" |
13 #include "chrome/browser/autocomplete/autocomplete_match.h" | 13 #include "chrome/browser/autocomplete/autocomplete_match.h" |
14 #include "chrome/browser/autocomplete/autocomplete_provider.h" | 14 #include "chrome/browser/autocomplete/autocomplete_provider.h" |
15 #include "chrome/browser/omnibox/omnibox_field_trial.h" | 15 #include "chrome/browser/omnibox/omnibox_field_trial.h" |
16 #include "chrome/browser/search_engines/template_url_prepopulate_data.h" | 16 #include "chrome/browser/search_engines/template_url_prepopulate_data.h" |
17 #include "chrome/browser/search_engines/template_url_service.h" | 17 #include "chrome/browser/search_engines/template_url_service.h" |
18 #include "chrome/browser/search_engines/template_url_service_test_util.h" | 18 #include "chrome/browser/search_engines/template_url_service_test_util.h" |
19 #include "chrome/common/autocomplete_match_type.h" | 19 #include "chrome/common/autocomplete_match_type.h" |
20 #include "chrome/common/metrics/variations/variations_util.h" | 20 #include "chrome/common/metrics/variations/variations_util.h" |
21 #include "chrome/test/base/testing_profile.h" | 21 #include "chrome/test/base/testing_profile.h" |
22 #include "components/variations/entropy_provider.h" | 22 #include "components/variations/entropy_provider.h" |
23 #include "testing/gtest/include/gtest/gtest.h" | 23 #include "testing/gtest/include/gtest/gtest.h" |
24 | 24 |
25 namespace { | |
26 | |
27 // Creates an AutocompleteMatch using |destination_url| and |type| and appends | |
28 // it to |matches|. | |
29 void AddMatch(const std::string& destination_url, AutocompleteMatch::Type type, | |
30 ACMatches* matches) { | |
Peter Kasting
2013/12/17 23:47:34
Nit: One arg per line
kmadhusu
2013/12/18 23:26:08
Done.
| |
31 ASSERT_TRUE(matches != NULL); | |
32 AutocompleteMatch* last_match = | |
33 !matches->empty() ? &((*matches)[matches->size() - 1]) : NULL; | |
Peter Kasting
2013/12/17 23:47:34
Nit: Needlessly verbose. ELiminate this line and
kmadhusu
2013/12/18 23:26:08
Done.
| |
34 AutocompleteMatch match; | |
35 match.destination_url = GURL(destination_url); | |
36 match.relevance = last_match ? last_match->relevance - 100 : 1300; | |
37 match.allowed_to_be_default_match = true; | |
38 match.type = type; | |
39 matches->push_back(match); | |
40 } | |
41 | |
42 } // namespace | |
43 | |
25 class AutocompleteResultTest : public testing::Test { | 44 class AutocompleteResultTest : public testing::Test { |
26 public: | 45 public: |
27 struct TestData { | 46 struct TestData { |
28 // Used to build a url for the AutocompleteMatch. The URL becomes | 47 // Used to build a url for the AutocompleteMatch. The URL becomes |
29 // "http://" + ('a' + |url_id|) (e.g. an ID of 2 yields "http://b"). | 48 // "http://" + ('a' + |url_id|) (e.g. an ID of 2 yields "http://b"). |
30 int url_id; | 49 int url_id; |
31 | 50 |
32 // ID of the provider. | 51 // ID of the provider. |
33 int provider_id; | 52 int provider_id; |
34 | 53 |
(...skipping 276 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
311 result.match_at(1)->destination_url.spec()); | 330 result.match_at(1)->destination_url.spec()); |
312 EXPECT_EQ(1200, result.match_at(1)->relevance); | 331 EXPECT_EQ(1200, result.match_at(1)->relevance); |
313 EXPECT_EQ("http://www.foo.com/", | 332 EXPECT_EQ("http://www.foo.com/", |
314 result.match_at(2)->destination_url.spec()); | 333 result.match_at(2)->destination_url.spec()); |
315 EXPECT_EQ(900, result.match_at(2)->relevance); | 334 EXPECT_EQ(900, result.match_at(2)->relevance); |
316 } | 335 } |
317 | 336 |
318 TEST_F(AutocompleteResultTest, SortAndCullWithDemotionsByType) { | 337 TEST_F(AutocompleteResultTest, SortAndCullWithDemotionsByType) { |
319 // Add some matches. | 338 // Add some matches. |
320 ACMatches matches; | 339 ACMatches matches; |
321 { | 340 AddMatch("http://history-url/", AutocompleteMatchType::HISTORY_URL, &matches); |
322 AutocompleteMatch match; | 341 AddMatch("http://search-what-you-typed/", |
323 match.destination_url = GURL("http://history-url/"); | 342 AutocompleteMatchType::SEARCH_WHAT_YOU_TYPED, &matches); |
324 match.relevance = 1400; | 343 AddMatch("http://history-title/", AutocompleteMatchType::HISTORY_TITLE, |
325 match.allowed_to_be_default_match = true; | 344 &matches); |
326 match.type = AutocompleteMatchType::HISTORY_URL; | 345 |
327 matches.push_back(match); | 346 // Add a search history type match and demote its relevance score. |
328 } | 347 AddMatch("http://search-history/", AutocompleteMatchType::SEARCH_HISTORY, |
329 { | 348 &matches); |
330 AutocompleteMatch match; | 349 matches[matches.size() - 1].relevance = 500; |
Peter Kasting
2013/12/17 23:47:34
Nit: Use matches.back()
kmadhusu
2013/12/18 23:26:08
Done.
| |
331 match.destination_url = GURL("http://search-what-you-typed/"); | |
332 match.relevance = 1300; | |
333 match.allowed_to_be_default_match = true; | |
334 match.type = AutocompleteMatchType::SEARCH_WHAT_YOU_TYPED; | |
335 matches.push_back(match); | |
336 } | |
337 { | |
338 AutocompleteMatch match; | |
339 match.destination_url = GURL("http://history-title/"); | |
340 match.relevance = 1200; | |
341 match.allowed_to_be_default_match = true; | |
342 match.type = AutocompleteMatchType::HISTORY_TITLE; | |
343 matches.push_back(match); | |
344 } | |
345 { | |
346 AutocompleteMatch match; | |
347 match.destination_url = GURL("http://search-history/"); | |
348 match.relevance = 500; | |
349 match.allowed_to_be_default_match = true; | |
350 match.type = AutocompleteMatchType::SEARCH_HISTORY; | |
351 matches.push_back(match); | |
352 } | |
353 | 350 |
354 // Add a rule demoting history-url and killing history-title. | 351 // Add a rule demoting history-url and killing history-title. |
355 { | 352 { |
356 std::map<std::string, std::string> params; | 353 std::map<std::string, std::string> params; |
357 params[std::string(OmniboxFieldTrial::kDemoteByTypeRule) + ":3:*"] = | 354 params[std::string(OmniboxFieldTrial::kDemoteByTypeRule) + ":3:*"] = |
358 "1:50,7:100,2:0"; // 3 == HOME_PAGE | 355 "1:50,7:100,2:0"; // 3 == HOME_PAGE |
359 ASSERT_TRUE(chrome_variations::AssociateVariationParams( | 356 ASSERT_TRUE(chrome_variations::AssociateVariationParams( |
360 OmniboxFieldTrial::kBundledExperimentFieldTrialName, "A", params)); | 357 OmniboxFieldTrial::kBundledExperimentFieldTrialName, "A", params)); |
361 } | 358 } |
362 base::FieldTrialList::CreateFieldTrial( | 359 base::FieldTrialList::CreateFieldTrial( |
(...skipping 116 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
479 AutocompleteInput::HOME_PAGE, false, false, false, | 476 AutocompleteInput::HOME_PAGE, false, false, false, |
480 AutocompleteInput::ALL_MATCHES); | 477 AutocompleteInput::ALL_MATCHES); |
481 result.SortAndCull(input, test_util_.profile()); | 478 result.SortAndCull(input, test_util_.profile()); |
482 ASSERT_EQ(4U, result.size()); | 479 ASSERT_EQ(4U, result.size()); |
483 EXPECT_EQ("http://c/", result.match_at(0)->destination_url.spec()); | 480 EXPECT_EQ("http://c/", result.match_at(0)->destination_url.spec()); |
484 EXPECT_EQ("http://a/", result.match_at(1)->destination_url.spec()); | 481 EXPECT_EQ("http://a/", result.match_at(1)->destination_url.spec()); |
485 EXPECT_EQ("http://b/", result.match_at(2)->destination_url.spec()); | 482 EXPECT_EQ("http://b/", result.match_at(2)->destination_url.spec()); |
486 EXPECT_EQ("http://d/", result.match_at(3)->destination_url.spec()); | 483 EXPECT_EQ("http://d/", result.match_at(3)->destination_url.spec()); |
487 } | 484 } |
488 } | 485 } |
486 | |
487 TEST_F(AutocompleteResultTest, ShouldHideTopMatch) { | |
Peter Kasting
2013/12/17 23:47:34
There are a ton of tests here, most of which start
kmadhusu
2013/12/18 23:26:08
Done.
| |
488 // Add some matches. | |
489 ACMatches matches; | |
490 AddMatch("http://search-what-you-typed/", | |
491 AutocompleteMatchType::SEARCH_WHAT_YOU_TYPED, &matches); | |
492 AddMatch("http://history-title/", AutocompleteMatchType::HISTORY_TITLE, | |
493 &matches); | |
494 AddMatch("http://search-history/", AutocompleteMatchType::SEARCH_HISTORY, | |
495 &matches); | |
496 | |
497 base::FieldTrialList::CreateFieldTrial("InstantExtended", | |
498 "Group1 hide_verbatim:1"); | |
499 AutocompleteResult result; | |
500 result.AppendMatches(matches); | |
501 EXPECT_TRUE(result.ShouldHideTopMatch()); | |
502 } | |
503 | |
504 TEST_F(AutocompleteResultTest, DoNotHideTopMatch) { | |
505 ACMatches matches; | |
506 AddMatch("http://search-what-you-typed/", | |
507 AutocompleteMatchType::SEARCH_WHAT_YOU_TYPED, &matches); | |
508 AddMatch("http://url-what-you-typed/", | |
509 AutocompleteMatchType::URL_WHAT_YOU_TYPED, &matches); | |
510 AddMatch("http://history-title/", AutocompleteMatchType::HISTORY_TITLE, | |
511 &matches); | |
512 AddMatch("http://search-history/", AutocompleteMatchType::SEARCH_HISTORY, | |
513 &matches); | |
514 | |
515 base::FieldTrialList::CreateFieldTrial("InstantExtended", | |
516 "Group1 hide_verbatim:1"); | |
517 AutocompleteResult result; | |
518 result.AppendMatches(matches); | |
519 // If the verbatim first match is followed by another verbatim match, don't | |
520 // hide the top verbatim match. | |
521 EXPECT_FALSE(result.ShouldHideTopMatch()); | |
522 } | |
523 | |
524 TEST_F(AutocompleteResultTest, DoNotHideTopMatch_TopMatchIsNotVerbatim) { | |
525 ACMatches matches; | |
526 AddMatch("http://search-history/", AutocompleteMatchType::SEARCH_HISTORY, | |
527 &matches); | |
528 AddMatch("http://search-what-you-typed/", | |
529 AutocompleteMatchType::SEARCH_WHAT_YOU_TYPED, &matches); | |
530 AddMatch("http://history-title/", AutocompleteMatchType::HISTORY_TITLE, | |
531 &matches); | |
532 | |
533 base::FieldTrialList::CreateFieldTrial("InstantExtended", | |
534 "Group1 hide_verbatim:1"); | |
535 AutocompleteResult result; | |
536 result.AppendMatches(matches); | |
537 // Top match is not a verbatim type match. Do not hide the top match. | |
538 EXPECT_FALSE(result.ShouldHideTopMatch()); | |
539 } | |
540 | |
541 TEST_F(AutocompleteResultTest, DoNotHideTopMatch_FieldTrialFlagDisabled) { | |
542 // Add some matches. This test config is identical to ShouldHideTopMatch test | |
543 // except that the "hide_verbatim" flag is disabled in the field trials. | |
544 ACMatches matches; | |
545 AddMatch("http://search-what-you-typed/", | |
546 AutocompleteMatchType::SEARCH_WHAT_YOU_TYPED, &matches); | |
547 AddMatch("http://history-title/", AutocompleteMatchType::HISTORY_TITLE, | |
548 &matches); | |
549 AddMatch("http://search-history/", AutocompleteMatchType::SEARCH_HISTORY, | |
550 &matches); | |
551 | |
552 base::FieldTrialList::CreateFieldTrial("InstantExtended", | |
553 "Group1 hide_verbatim:0"); | |
554 AutocompleteResult result; | |
555 result.AppendMatches(matches); | |
556 // Field trial flag "hide_verbatim" is disabled. Do not hide top match. | |
557 EXPECT_FALSE(result.ShouldHideTopMatch()); | |
558 } | |
559 | |
560 TEST_F(AutocompleteResultTest, | |
561 TopMatchIsVerbatimAndHasNoConsecutiveVerbatimMatches) { | |
562 ACMatches matches; | |
563 AddMatch("http://url-what-you-typed/", | |
564 AutocompleteMatchType::URL_WHAT_YOU_TYPED, &matches); | |
565 AddMatch("http://history-title/", AutocompleteMatchType::HISTORY_TITLE, | |
566 &matches); | |
567 | |
568 AutocompleteResult result; | |
569 result.AppendMatches(matches); | |
570 EXPECT_TRUE(result.TopMatchIsVerbatimAndHasNoConsecutiveVerbatimMatches()); | |
571 } | |
572 | |
573 TEST_F(AutocompleteResultTest, | |
574 TopMatchIsVerbatimAndHasConsecutiveVerbatimMatches) { | |
575 ACMatches matches; | |
576 AddMatch("http://search-what-you-typed/", | |
577 AutocompleteMatchType::SEARCH_WHAT_YOU_TYPED, &matches); | |
578 AddMatch("http://url-what-you-typed/", | |
579 AutocompleteMatchType::URL_WHAT_YOU_TYPED, &matches); | |
580 AddMatch("http://history-title/", AutocompleteMatchType::HISTORY_TITLE, | |
581 &matches); | |
582 | |
583 AutocompleteResult result; | |
584 result.AppendMatches(matches); | |
585 EXPECT_FALSE(result.TopMatchIsVerbatimAndHasNoConsecutiveVerbatimMatches()); | |
586 } | |
587 | |
588 TEST_F(AutocompleteResultTest, TopMatchIsNotVerbatim) { | |
589 ACMatches matches; | |
590 AutocompleteResult result; | |
591 result.AppendMatches(matches); | |
592 | |
593 // Result set is empty. | |
594 EXPECT_FALSE(result.TopMatchIsVerbatimAndHasNoConsecutiveVerbatimMatches()); | |
595 | |
596 // Add a non-verbatim match to the result. | |
597 AddMatch("http://history-title/", AutocompleteMatchType::HISTORY_TITLE, | |
598 &matches); | |
599 | |
600 result.AppendMatches(matches); | |
601 EXPECT_FALSE(result.TopMatchIsVerbatimAndHasNoConsecutiveVerbatimMatches()); | |
602 } | |
603 | |
604 TEST_F(AutocompleteResultTest, | |
605 TopMatchIsVerbatimAndHasNoConsecutiveVerbatimMatches_SingleMatchFound) { | |
606 ACMatches matches; | |
607 AddMatch("http://url-what-you-typed/", | |
608 AutocompleteMatchType::URL_WHAT_YOU_TYPED, &matches); | |
609 | |
610 AutocompleteResult result; | |
611 result.AppendMatches(matches); | |
612 EXPECT_TRUE(result.TopMatchIsVerbatimAndHasNoConsecutiveVerbatimMatches()); | |
613 } | |
OLD | NEW |