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")); |