| Index: base/metrics/field_trial_unittest.cc
|
| diff --git a/base/metrics/field_trial_unittest.cc b/base/metrics/field_trial_unittest.cc
|
| index a77633e8f097a927f5dd254e4674a0b970142053..24e576022ab3ced9f741f9460a02360c11b76576 100644
|
| --- a/base/metrics/field_trial_unittest.cc
|
| +++ b/base/metrics/field_trial_unittest.cc
|
| @@ -4,10 +4,12 @@
|
|
|
| #include "base/metrics/field_trial.h"
|
|
|
| +#include "base/bind.h"
|
| #include "base/message_loop/message_loop.h"
|
| #include "base/rand_util.h"
|
| #include "base/run_loop.h"
|
| #include "base/strings/string_number_conversions.h"
|
| +#include "base/strings/string_util.h"
|
| #include "base/strings/stringprintf.h"
|
| #include "testing/gtest/include/gtest/gtest.h"
|
|
|
| @@ -384,8 +386,9 @@ TEST_F(FieldTrialTest, Restore) {
|
| ASSERT_FALSE(FieldTrialList::TrialExists("Some_name"));
|
| ASSERT_FALSE(FieldTrialList::TrialExists("xxx"));
|
|
|
| - FieldTrialList::CreateTrialsFromString("Some_name/Winner/xxx/yyyy/",
|
| - FieldTrialList::DONT_ACTIVATE_TRIALS);
|
| + FieldTrialList::CreateTrialsFromString(
|
| + "Some_name/Winner/xxx/yyyy/", FieldTrialList::DONT_ACTIVATE_TRIALS,
|
| + FieldTrialList::IsAcceptedFieldTrialCallback());
|
|
|
| FieldTrial* trial = FieldTrialList::Find("Some_name");
|
| ASSERT_NE(static_cast<FieldTrial*>(NULL), trial);
|
| @@ -400,13 +403,17 @@ TEST_F(FieldTrialTest, Restore) {
|
|
|
| TEST_F(FieldTrialTest, BogusRestore) {
|
| EXPECT_FALSE(FieldTrialList::CreateTrialsFromString(
|
| - "MissingSlash", FieldTrialList::DONT_ACTIVATE_TRIALS));
|
| + "MissingSlash", FieldTrialList::DONT_ACTIVATE_TRIALS,
|
| + FieldTrialList::IsAcceptedFieldTrialCallback()));
|
| EXPECT_FALSE(FieldTrialList::CreateTrialsFromString(
|
| - "MissingGroupName/", FieldTrialList::DONT_ACTIVATE_TRIALS));
|
| + "MissingGroupName/", FieldTrialList::DONT_ACTIVATE_TRIALS,
|
| + FieldTrialList::IsAcceptedFieldTrialCallback()));
|
| EXPECT_FALSE(FieldTrialList::CreateTrialsFromString(
|
| - "MissingFinalSlash/gname", FieldTrialList::DONT_ACTIVATE_TRIALS));
|
| + "MissingFinalSlash/gname", FieldTrialList::DONT_ACTIVATE_TRIALS,
|
| + FieldTrialList::IsAcceptedFieldTrialCallback()));
|
| EXPECT_FALSE(FieldTrialList::CreateTrialsFromString(
|
| - "noname, only group/", FieldTrialList::DONT_ACTIVATE_TRIALS));
|
| + "noname, only group/", FieldTrialList::DONT_ACTIVATE_TRIALS,
|
| + FieldTrialList::IsAcceptedFieldTrialCallback()));
|
| }
|
|
|
| TEST_F(FieldTrialTest, DuplicateRestore) {
|
| @@ -420,18 +427,28 @@ TEST_F(FieldTrialTest, DuplicateRestore) {
|
|
|
| // It is OK if we redundantly specify a winner.
|
| EXPECT_TRUE(FieldTrialList::CreateTrialsFromString(
|
| - save_string, FieldTrialList::DONT_ACTIVATE_TRIALS));
|
| + save_string, FieldTrialList::DONT_ACTIVATE_TRIALS,
|
| + FieldTrialList::IsAcceptedFieldTrialCallback()));
|
|
|
| // But it is an error to try to change to a different winner.
|
| EXPECT_FALSE(FieldTrialList::CreateTrialsFromString(
|
| - "Some name/Loser/", FieldTrialList::DONT_ACTIVATE_TRIALS));
|
| + "Some name/Loser/", FieldTrialList::DONT_ACTIVATE_TRIALS,
|
| + FieldTrialList::IsAcceptedFieldTrialCallback()));
|
| +}
|
| +
|
| +// Accepts any field trial whose |name| doesn't start with "Unaccepted".
|
| +// Used in the FieldTrialTest.CreateTrialsFromString* tests below to test the
|
| +// IsAcceptedFieldTrialCallback functionality.
|
| +bool IsAcceptedTestFieldTrial(const std::string& name) {
|
| + return !StartsWithASCII(name, "Unaccepted", true);
|
| }
|
|
|
| TEST_F(FieldTrialTest, CreateTrialsFromStringActive) {
|
| ASSERT_FALSE(FieldTrialList::TrialExists("Abc"));
|
| ASSERT_FALSE(FieldTrialList::TrialExists("Xyz"));
|
| ASSERT_TRUE(FieldTrialList::CreateTrialsFromString(
|
| - "Abc/def/Xyz/zyx/", FieldTrialList::ACTIVATE_TRIALS));
|
| + "Abc/def/Xyz/zyx/", FieldTrialList::ACTIVATE_TRIALS,
|
| + base::Bind(&IsAcceptedTestFieldTrial)));
|
|
|
| FieldTrial::ActiveGroups active_groups;
|
| FieldTrialList::GetActiveFieldTrialGroups(&active_groups);
|
| @@ -446,7 +463,8 @@ TEST_F(FieldTrialTest, CreateTrialsFromStringNotActive) {
|
| ASSERT_FALSE(FieldTrialList::TrialExists("Abc"));
|
| ASSERT_FALSE(FieldTrialList::TrialExists("Xyz"));
|
| ASSERT_TRUE(FieldTrialList::CreateTrialsFromString(
|
| - "Abc/def/Xyz/zyx/", FieldTrialList::DONT_ACTIVATE_TRIALS));
|
| + "Abc/def/Xyz/zyx/", FieldTrialList::DONT_ACTIVATE_TRIALS,
|
| + base::Bind(&IsAcceptedTestFieldTrial)));
|
|
|
| FieldTrial::ActiveGroups active_groups;
|
| FieldTrialList::GetActiveFieldTrialGroups(&active_groups);
|
| @@ -469,7 +487,8 @@ TEST_F(FieldTrialTest, CreateTrialsFromStringActiveObserver) {
|
|
|
| TestFieldTrialObserver observer;
|
| ASSERT_TRUE(FieldTrialList::CreateTrialsFromString(
|
| - "Abc/def/", FieldTrialList::ACTIVATE_TRIALS));
|
| + "Abc/def/", FieldTrialList::ACTIVATE_TRIALS,
|
| + base::Bind(&IsAcceptedTestFieldTrial)));
|
|
|
| RunLoop().RunUntilIdle();
|
| EXPECT_EQ("Abc", observer.trial_name());
|
| @@ -481,7 +500,8 @@ TEST_F(FieldTrialTest, CreateTrialsFromStringNotActiveObserver) {
|
|
|
| TestFieldTrialObserver observer;
|
| ASSERT_TRUE(FieldTrialList::CreateTrialsFromString(
|
| - "Abc/def/", FieldTrialList::DONT_ACTIVATE_TRIALS));
|
| + "Abc/def/", FieldTrialList::DONT_ACTIVATE_TRIALS,
|
| + base::Bind(&IsAcceptedTestFieldTrial)));
|
| RunLoop().RunUntilIdle();
|
| // Observer shouldn't be notified.
|
| EXPECT_TRUE(observer.trial_name().empty());
|
| @@ -494,6 +514,68 @@ TEST_F(FieldTrialTest, CreateTrialsFromStringNotActiveObserver) {
|
| EXPECT_EQ("def", observer.group_name());
|
| }
|
|
|
| +TEST_F(FieldTrialTest, CreateTrialsFromStringWithUnacceptedFieldTrials) {
|
| + ASSERT_FALSE(FieldTrialList::TrialExists("Unaccepted1"));
|
| + ASSERT_FALSE(FieldTrialList::TrialExists("Foo"));
|
| + ASSERT_FALSE(FieldTrialList::TrialExists("Unaccepted2"));
|
| + ASSERT_FALSE(FieldTrialList::TrialExists("Bar"));
|
| + ASSERT_FALSE(FieldTrialList::TrialExists("Unaccepted3"));
|
| +
|
| + FieldTrialList::CreateTrialsFromString(
|
| + "Unaccepted1/Unaccepted1_name/"
|
| + "Foo/Foo_name/"
|
| + "Unaccepted2/Unaccepted2_name/"
|
| + "Bar/Bar_name/"
|
| + "Unaccepted3/Unaccepted3_name/",
|
| + FieldTrialList::DONT_ACTIVATE_TRIALS,
|
| + base::Bind(&IsAcceptedTestFieldTrial));
|
| +
|
| + EXPECT_FALSE(FieldTrialList::TrialExists("Unaccepted1"));
|
| + EXPECT_TRUE(FieldTrialList::TrialExists("Foo"));
|
| + EXPECT_FALSE(FieldTrialList::TrialExists("Unaccepted2"));
|
| + EXPECT_TRUE(FieldTrialList::TrialExists("Bar"));
|
| + EXPECT_FALSE(FieldTrialList::TrialExists("Unaccepted3"));
|
| +
|
| + FieldTrial::ActiveGroups active_groups;
|
| + FieldTrialList::GetActiveFieldTrialGroups(&active_groups);
|
| + EXPECT_TRUE(active_groups.empty());
|
| +
|
| + FieldTrial* trial = FieldTrialList::Find("Foo");
|
| + ASSERT_NE(static_cast<FieldTrial*>(NULL), trial);
|
| + EXPECT_EQ("Foo", trial->trial_name());
|
| + EXPECT_EQ("Foo_name", trial->group_name());
|
| +
|
| + trial = FieldTrialList::Find("Bar");
|
| + ASSERT_NE(static_cast<FieldTrial*>(NULL), trial);
|
| + EXPECT_EQ("Bar", trial->trial_name());
|
| + EXPECT_EQ("Bar_name", trial->group_name());
|
| +}
|
| +
|
| +TEST_F(FieldTrialTest, CreateTrialsFromStringNullCallback) {
|
| + ASSERT_FALSE(FieldTrialList::TrialExists("Unaccepted1"));
|
| + ASSERT_FALSE(FieldTrialList::TrialExists("Foo"));
|
| +
|
| + // All field trials should be accepted when the callback is null.
|
| + FieldTrialList::CreateTrialsFromString(
|
| + "Unaccepted1/Unaccepted1_name/Foo/Foo_name/",
|
| + FieldTrialList::DONT_ACTIVATE_TRIALS,
|
| + FieldTrialList::IsAcceptedFieldTrialCallback());
|
| +
|
| + FieldTrial::ActiveGroups active_groups;
|
| + FieldTrialList::GetActiveFieldTrialGroups(&active_groups);
|
| + EXPECT_TRUE(active_groups.empty());
|
| +
|
| + FieldTrial* trial = FieldTrialList::Find("Foo");
|
| + ASSERT_NE(static_cast<FieldTrial*>(NULL), trial);
|
| + EXPECT_EQ("Foo", trial->trial_name());
|
| + EXPECT_EQ("Foo_name", trial->group_name());
|
| +
|
| + trial = FieldTrialList::Find("Unaccepted1");
|
| + ASSERT_NE(static_cast<FieldTrial*>(NULL), trial);
|
| + EXPECT_EQ("Unaccepted1", trial->trial_name());
|
| + EXPECT_EQ("Unaccepted1_name", trial->group_name());
|
| +}
|
| +
|
| TEST_F(FieldTrialTest, CreateFieldTrial) {
|
| ASSERT_FALSE(FieldTrialList::TrialExists("Some_name"));
|
|
|
|
|