| Index: chrome/browser/omnibox/omnibox_field_trial_unittest.cc
|
| diff --git a/chrome/browser/omnibox/omnibox_field_trial_unittest.cc b/chrome/browser/omnibox/omnibox_field_trial_unittest.cc
|
| index 9ccb00f2fd4c6f03dbff947e78e97d4133687fa2..1d49801b5a7dd5dcdae8d04a90651ce6fa74f50d 100644
|
| --- a/chrome/browser/omnibox/omnibox_field_trial_unittest.cc
|
| +++ b/chrome/browser/omnibox/omnibox_field_trial_unittest.cc
|
| @@ -5,6 +5,7 @@
|
| #include "chrome/browser/omnibox/omnibox_field_trial.h"
|
|
|
| #include "base/basictypes.h"
|
| +#include "base/memory/scoped_ptr.h"
|
| #include "base/metrics/field_trial.h"
|
| #include "base/strings/string16.h"
|
| #include "chrome/common/metrics/entropy_provider.h"
|
| @@ -13,24 +14,17 @@
|
|
|
| class OmniboxFieldTrialTest : public testing::Test {
|
| public:
|
| - OmniboxFieldTrialTest() {}
|
| -
|
| - static void SetUpTestCase() {
|
| + OmniboxFieldTrialTest() {
|
| ResetFieldTrialList();
|
| }
|
|
|
| - static void TearDownTestCase() {
|
| - delete field_trial_list_;
|
| - field_trial_list_ = NULL;
|
| - }
|
| -
|
| - static void ResetFieldTrialList() {
|
| - // It's important to delete the old pointer first which sets
|
| - // FieldTrialList::global_ to NULL.
|
| - if (field_trial_list_)
|
| - delete field_trial_list_;
|
| - field_trial_list_ = new base::FieldTrialList(
|
| - new metrics::SHA1EntropyProvider("foo"));
|
| + void ResetFieldTrialList() {
|
| + // Destroy the existing FieldTrialList before creating a new one to avoid
|
| + // a DCHECK.
|
| + field_trial_list_.reset();
|
| + field_trial_list_.reset(new base::FieldTrialList(
|
| + new metrics::SHA1EntropyProvider("foo")));
|
| + chrome_variations::testing::ClearAllVariationParams();
|
| OmniboxFieldTrial::ActivateDynamicTrials();
|
| }
|
|
|
| @@ -43,15 +37,28 @@ class OmniboxFieldTrialTest : public testing::Test {
|
| return trial;
|
| }
|
|
|
| + // EXPECTS that demotions[match_type] exists with value expected_value.
|
| + static void VerifyDemotion(
|
| + const OmniboxFieldTrial::DemotionMultipliers& demotions,
|
| + AutocompleteMatchType::Type match_type,
|
| + float expected_value);
|
| +
|
| private:
|
| - // Needed for Activate{Static/Dynamic}Trials().
|
| - static base::FieldTrialList* field_trial_list_;
|
| + scoped_ptr<base::FieldTrialList> field_trial_list_;
|
|
|
| DISALLOW_COPY_AND_ASSIGN(OmniboxFieldTrialTest);
|
| };
|
|
|
| // static
|
| -base::FieldTrialList* OmniboxFieldTrialTest::field_trial_list_ = NULL;
|
| +void OmniboxFieldTrialTest::VerifyDemotion(
|
| + const OmniboxFieldTrial::DemotionMultipliers& demotions,
|
| + AutocompleteMatchType::Type match_type,
|
| + float expected_value) {
|
| + OmniboxFieldTrial::DemotionMultipliers::const_iterator demotion_it =
|
| + demotions.find(match_type);
|
| + ASSERT_TRUE(demotion_it != demotions.end());
|
| + EXPECT_FLOAT_EQ(expected_value, demotion_it->second);
|
| +}
|
|
|
| // Test if GetDisabledProviderTypes() properly parses various field trial
|
| // group names.
|
| @@ -131,6 +138,38 @@ TEST_F(OmniboxFieldTrialTest, ZeroSuggestFieldTrial) {
|
| }
|
| }
|
|
|
| +TEST_F(OmniboxFieldTrialTest, GetDemotionsByTypeWithFallback) {
|
| + // Must be the same as kBundledExperimentFieldTrialName
|
| + // defined in omnibox_field_trial.cc.
|
| + const std::string kTrialName = "OmniboxBundledExperimentV1";
|
| + // Must be the same as kDemoteByTypeRule defined in
|
| + // omnibox_field_trial.cc.
|
| + const std::string kRuleName = "DemoteByType";
|
| + {
|
| + std::map<std::string, std::string> params;
|
| + params[kRuleName + ":1"] = "1:50,2:0";
|
| + params[kRuleName + ":3"] = "5:100";
|
| + params[kRuleName + ":*"] = "1:25";
|
| + ASSERT_TRUE(chrome_variations::AssociateVariationParams(
|
| + kTrialName, "A", params));
|
| + }
|
| + base::FieldTrialList::CreateFieldTrial(kTrialName, "A");
|
| + OmniboxFieldTrial::DemotionMultipliers demotions_by_type;
|
| + OmniboxFieldTrial::GetDemotionsByType(
|
| + AutocompleteInput::NEW_TAB_PAGE, &demotions_by_type);
|
| + ASSERT_EQ(2u, demotions_by_type.size());
|
| + VerifyDemotion(demotions_by_type, AutocompleteMatchType::HISTORY_URL, 0.5);
|
| + VerifyDemotion(demotions_by_type, AutocompleteMatchType::HISTORY_TITLE, 0.0);
|
| + OmniboxFieldTrial::GetDemotionsByType(
|
| + AutocompleteInput::HOMEPAGE, &demotions_by_type);
|
| + ASSERT_EQ(1u, demotions_by_type.size());
|
| + VerifyDemotion(demotions_by_type, AutocompleteMatchType::NAVSUGGEST, 1.0);
|
| + OmniboxFieldTrial::GetDemotionsByType(
|
| + AutocompleteInput::BLANK, &demotions_by_type);
|
| + ASSERT_EQ(1u, demotions_by_type.size());
|
| + VerifyDemotion(demotions_by_type, AutocompleteMatchType::HISTORY_URL, 0.25);
|
| +}
|
| +
|
| TEST_F(OmniboxFieldTrialTest, GetValueForRuleInContext) {
|
| // Must be the same as kBundledExperimentFieldTrialName
|
| // defined in omnibox_field_trial.cc.
|
|
|