Chromium Code Reviews| Index: chrome/browser/autocomplete/autocomplete_result_unittest.cc |
| diff --git a/chrome/browser/autocomplete/autocomplete_result_unittest.cc b/chrome/browser/autocomplete/autocomplete_result_unittest.cc |
| index 3038c27a017dd8d6ca05996518140d6486edf7cd..b1374e82789f4d861811282a9bb623d9886c55c9 100644 |
| --- a/chrome/browser/autocomplete/autocomplete_result_unittest.cc |
| +++ b/chrome/browser/autocomplete/autocomplete_result_unittest.cc |
| @@ -4,15 +4,20 @@ |
| #include "chrome/browser/autocomplete/autocomplete_result.h" |
| +#include "base/memory/scoped_ptr.h" |
| +#include "base/metrics/field_trial.h" |
| #include "base/strings/string_number_conversions.h" |
| #include "base/strings/string_util.h" |
| #include "base/strings/utf_string_conversions.h" |
| #include "chrome/browser/autocomplete/autocomplete_input.h" |
| #include "chrome/browser/autocomplete/autocomplete_match.h" |
| #include "chrome/browser/autocomplete/autocomplete_provider.h" |
| +#include "chrome/browser/omnibox/omnibox_field_trial.h" |
| #include "chrome/browser/search_engines/template_url_prepopulate_data.h" |
| #include "chrome/browser/search_engines/template_url_service.h" |
| #include "chrome/browser/search_engines/template_url_service_test_util.h" |
| +#include "chrome/common/metrics/entropy_provider.h" |
| +#include "chrome/common/metrics/variations/variations_util.h" |
| #include "chrome/test/base/testing_profile.h" |
| #include "testing/gtest/include/gtest/gtest.h" |
| @@ -30,7 +35,13 @@ class AutocompleteResultTest : public testing::Test { |
| int relevance; |
| }; |
| - AutocompleteResultTest() {} |
| + AutocompleteResultTest() { |
| + // Destroy the existing FieldTrialList before creating a new one to avoid |
| + // a DCHECK. |
| + field_trial_list_.reset(); |
|
H Fung
2013/08/08 20:10:36
not needed?
Mark P
2013/08/08 22:06:10
Yes, needed. See comment directly above the line.
|
| + field_trial_list_.reset(new base::FieldTrialList( |
| + new metrics::SHA1EntropyProvider("foo"))); |
| + } |
| virtual void SetUp() OVERRIDE { |
| #if defined(OS_ANDROID) |
| @@ -69,6 +80,8 @@ class AutocompleteResultTest : public testing::Test { |
| TemplateURLServiceTestUtil test_util_; |
| private: |
| + scoped_ptr<base::FieldTrialList> field_trial_list_; |
| + |
| DISALLOW_COPY_AND_ASSIGN(AutocompleteResultTest); |
| }; |
| @@ -81,6 +94,7 @@ void AutocompleteResultTest::PopulateAutocompleteMatch( |
| std::string url_id(1, data.url_id + 'a'); |
| match->destination_url = GURL("http://" + url_id); |
| match->relevance = data.relevance; |
| + match->allowed_to_be_default_match = true; |
| } |
| // static |
| @@ -148,6 +162,7 @@ TEST_F(AutocompleteResultTest, Swap) { |
| // Swap with a single match. |
| ACMatches matches; |
| AutocompleteMatch match; |
| + match.allowed_to_be_default_match = true; |
| AutocompleteInput input(ASCIIToUTF16("a"), string16::npos, string16(), GURL(), |
| AutocompleteInput::INVALID_SPEC, false, false, false, |
| AutocompleteInput::ALL_MATCHES); |
| @@ -292,3 +307,55 @@ TEST_F(AutocompleteResultTest, SortAndCullDuplicateSearchURLs) { |
| result.match_at(2)->destination_url.spec()); |
| EXPECT_EQ(900, result.match_at(2)->relevance); |
| } |
| + |
| +TEST_F(AutocompleteResultTest, SortAndCullReorderForDefaultMatch) { |
| + TestData data[] = { |
| + { 0, 0, 1300 }, |
| + { 1, 0, 1200 }, |
| + { 2, 0, 1100 }, |
| + { 3, 0, 1000 } |
| + }; |
| + |
| + std::map<std::string, std::string> params; |
| + // Enable reorder for omnibox inputs on the user's homepage. |
| + params[std::string(OmniboxFieldTrial::kReorderForLegalDefaultMatchRule) + |
| + ":3"] = OmniboxFieldTrial::kReorderForLegalDefaultMatchRuleEnabled; |
| + ASSERT_TRUE(chrome_variations::AssociateVariationParams( |
| + OmniboxFieldTrial::kBundledExperimentFieldTrialName, "A", params)); |
| + base::FieldTrialList::CreateFieldTrial( |
| + OmniboxFieldTrial::kBundledExperimentFieldTrialName, "A"); |
| + |
| + { |
| + // Check that reorder doesn't do anything if the top result |
| + // is already a legal default match (which is the default from |
| + // PopulateAutocompleteMatches()). |
| + ACMatches matches; |
| + PopulateAutocompleteMatches(data, arraysize(data), &matches); |
| + AutocompleteResult result; |
| + result.AppendMatches(matches); |
| + AutocompleteInput input(string16(), string16::npos, string16(), GURL(), |
| + AutocompleteInput::HOMEPAGE, false, false, false, |
| + AutocompleteInput::ALL_MATCHES); |
| + result.SortAndCull(input, test_util_.profile()); |
| + AssertResultMatches(result, data, 4); |
| + } |
| + |
| + { |
| + // Check that reorder swaps up a result appropriately. |
| + ACMatches matches; |
| + PopulateAutocompleteMatches(data, arraysize(data), &matches); |
| + matches[0].allowed_to_be_default_match = false; |
| + matches[1].allowed_to_be_default_match = false; |
| + AutocompleteResult result; |
| + result.AppendMatches(matches); |
| + AutocompleteInput input(string16(), string16::npos, string16(), GURL(), |
| + AutocompleteInput::HOMEPAGE, false, false, false, |
| + AutocompleteInput::ALL_MATCHES); |
| + result.SortAndCull(input, test_util_.profile()); |
| + ASSERT_EQ(4U, result.size()); |
| + EXPECT_EQ("http://c/", result.match_at(0)->destination_url.spec()); |
| + EXPECT_EQ("http://a/", result.match_at(1)->destination_url.spec()); |
| + EXPECT_EQ("http://b/", result.match_at(2)->destination_url.spec()); |
| + EXPECT_EQ("http://d/", result.match_at(3)->destination_url.spec()); |
| + } |
| +} |