Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(1213)

Unified Diff: base/metrics/field_trial_unittest.cc

Issue 1306653004: Expand FeatureList to support FieldTrial association. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Address Rob's comments. Created 5 years, 3 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: base/metrics/field_trial_unittest.cc
diff --git a/base/metrics/field_trial_unittest.cc b/base/metrics/field_trial_unittest.cc
index ed84d865d5ef081a4017f9e06eda7e9262ce3a4a..ff5c7c4c776fb4a641156f3d2066d641a7928f37 100644
--- a/base/metrics/field_trial_unittest.cc
+++ b/base/metrics/field_trial_unittest.cc
@@ -38,6 +38,18 @@ int OneYearBeforeBuildTime() {
return exploded.year;
}
+// Tests whether a field trial is active (i.e. group() has been called on it),
+// using public FieldTrial API (which doesn't expose this state on the object).
+bool IsFieldTrialActive(FieldTrial* trial) {
+ base::FieldTrial::ActiveGroups active_groups;
+ base::FieldTrialList::GetActiveFieldTrialGroups(&active_groups);
+ for (size_t i = 0; i < active_groups.size(); ++i) {
+ if (active_groups[i].trial_name == trial->trial_name())
+ return true;
+ }
+ return false;
+}
Ilya Sherman 2015/09/16 00:50:44 nit: Perhaps create a helper file to contain this
Alexei Svitkine (slow) 2015/09/23 17:33:32 Doing this in a separate CL: https://codereview.ch
+
// FieldTrialList::Observer implementation for testing.
class TestFieldTrialObserver : public FieldTrialList::Observer {
public:
@@ -72,6 +84,8 @@ class FieldTrialTest : public testing::Test {
private:
MessageLoop message_loop_;
FieldTrialList trial_list_;
+
+ DISALLOW_COPY_AND_ASSIGN(FieldTrialTest);
};
// Test registration, and also check that destructors are called for trials
@@ -376,6 +390,28 @@ TEST_F(FieldTrialTest, ActiveGroupsNotFinalized) {
EXPECT_EQ(active_group.group_name, active_groups[0].group_name);
}
+TEST_F(FieldTrialTest, GetGroupNameWithoutActivation) {
+ const char kTrialName[] = "TestTrial";
+ const char kSecondaryGroupName[] = "SecondaryGroup";
+
+ int default_group = -1;
+ scoped_refptr<FieldTrial> trial =
+ CreateFieldTrial(kTrialName, 100, kDefaultGroupName, &default_group);
+ trial->AppendGroup(kSecondaryGroupName, 50);
+
+ // The trial starts inactive, so |GetActiveGroup()| should return false.
Ilya Sherman 2015/09/16 00:50:44 This comment seems like it was probably written be
Alexei Svitkine (slow) 2015/09/22 21:19:59 Done.
+ EXPECT_FALSE(IsFieldTrialActive(trial.get()));
+
+ // Calling |GetGroupNameWithoutActivation()| should not activate the trial.
+ std::string group_name = trial->GetGroupNameWithoutActivation();
+ EXPECT_FALSE(group_name.empty());
+ EXPECT_FALSE(IsFieldTrialActive(trial.get()));
+
+ // Calling |group_name()| should activate it and return the same group name.
+ EXPECT_EQ(group_name, trial->group_name());
+ EXPECT_TRUE(IsFieldTrialActive(trial.get()));
+}
+
TEST_F(FieldTrialTest, Save) {
std::string save_string;

Powered by Google App Engine
This is Rietveld 408576698