OLD | NEW |
---|---|
(Empty) | |
1 // Copyright 2017 The Chromium Authors. All rights reserved. | |
2 // Use of this source code is governed by a BSD-style license that can be | |
3 // found in the LICENSE file. | |
4 | |
5 #include "base/test/scoped_feature_list.h" | |
6 | |
7 #include <string> | |
8 #include "base/metrics/field_trial.h" | |
9 #include "testing/gtest/include/gtest/gtest.h" | |
10 | |
11 namespace { | |
12 | |
13 const base::Feature kTestFeature1{"TestFeature1", | |
14 base::FEATURE_DISABLED_BY_DEFAULT}; | |
15 const base::Feature kTestFeature2{"TestFeature2", | |
16 base::FEATURE_DISABLED_BY_DEFAULT}; | |
17 | |
18 void ExpectFeatures(const std::string& enabled_features, | |
19 const std::string& disabled_features) { | |
20 base::FeatureList* list = base::FeatureList::GetInstance(); | |
21 std::string actual_enabled_features; | |
22 std::string actual_disabled_features; | |
23 | |
24 list->GetFeatureOverrides(&actual_enabled_features, | |
25 &actual_disabled_features); | |
26 | |
27 EXPECT_EQ(enabled_features, actual_enabled_features); | |
28 EXPECT_EQ(disabled_features, actual_disabled_features); | |
29 } | |
30 | |
31 } // namespace | |
32 | |
33 namespace base { | |
Alexei Svitkine (slow)
2017/04/24 15:55:11
Use the same namespace as the .cc code - which is
| |
34 | |
35 class ScopedFeatureListTest : public testing::Test { | |
36 public: | |
37 ScopedFeatureListTest() { | |
38 // Clear default feature list. | |
39 std::unique_ptr<base::FeatureList> feature_list(new base::FeatureList); | |
40 feature_list->InitializeFromCommandLine(std::string(), std::string()); | |
41 original_feature_list_ = base::FeatureList::ClearInstanceForTesting(); | |
42 base::FeatureList::SetInstance(std::move(feature_list)); | |
43 } | |
44 | |
45 ~ScopedFeatureListTest() override { | |
46 // Restore feature list. | |
47 if (original_feature_list_) { | |
48 base::FeatureList::ClearInstanceForTesting(); | |
49 base::FeatureList::RestoreInstanceForTesting( | |
50 std::move(original_feature_list_)); | |
51 } | |
52 } | |
53 | |
54 private: | |
55 // Save the present FeatureList and restore it after test finish. | |
56 std::unique_ptr<FeatureList> original_feature_list_; | |
57 }; | |
Alexei Svitkine (slow)
2017/04/24 15:55:11
DISALLOW_COPY_AND_ASSIGN()
| |
58 | |
59 TEST_F(ScopedFeatureListTest, BasicScoped) { | |
60 ExpectFeatures(std::string(), std::string()); | |
61 EXPECT_FALSE(FeatureList::IsEnabled(kTestFeature1)); | |
62 { | |
63 test::ScopedFeatureList feature_list1; | |
64 feature_list1.InitFromCommandLine("TestFeature1", std::string()); | |
65 ExpectFeatures("TestFeature1", std::string()); | |
66 EXPECT_TRUE(FeatureList::IsEnabled(kTestFeature1)); | |
67 } | |
68 ExpectFeatures(std::string(), std::string()); | |
69 EXPECT_FALSE(FeatureList::IsEnabled(kTestFeature1)); | |
70 } | |
71 | |
72 TEST_F(ScopedFeatureListTest, EnableFeatureOverrideDisable) { | |
73 test::ScopedFeatureList feature_list1; | |
74 feature_list1.InitWithFeatures({}, {kTestFeature1}); | |
75 | |
76 { | |
77 test::ScopedFeatureList feature_list2; | |
78 feature_list2.InitWithFeatures({kTestFeature1}, {}); | |
79 ExpectFeatures("TestFeature1", std::string()); | |
80 } | |
81 } | |
82 | |
83 TEST_F(ScopedFeatureListTest, FeatureOverrideNotMakeDuplicate) { | |
84 test::ScopedFeatureList feature_list1; | |
85 feature_list1.InitWithFeatures({}, {kTestFeature1}); | |
86 | |
87 { | |
88 test::ScopedFeatureList feature_list2; | |
89 feature_list2.InitWithFeatures({}, {kTestFeature1}); | |
90 ExpectFeatures(std::string(), "TestFeature1"); | |
91 } | |
92 } | |
93 | |
94 TEST_F(ScopedFeatureListTest, FeatureOverrideFeatureWithDefault) { | |
95 test::ScopedFeatureList feature_list1; | |
96 feature_list1.InitFromCommandLine("*TestFeature1", std::string()); | |
97 | |
98 { | |
99 test::ScopedFeatureList feature_list2; | |
100 feature_list2.InitWithFeatures({kTestFeature1}, {}); | |
101 ExpectFeatures("TestFeature1", std::string()); | |
102 } | |
103 } | |
104 | |
105 TEST_F(ScopedFeatureListTest, FeatureOverrideFeatureWithDefault2) { | |
106 test::ScopedFeatureList feature_list1; | |
107 feature_list1.InitFromCommandLine("*TestFeature1", std::string()); | |
108 | |
109 { | |
110 test::ScopedFeatureList feature_list2; | |
111 feature_list2.InitWithFeatures({}, {kTestFeature1}); | |
112 ExpectFeatures(std::string(), "TestFeature1"); | |
113 } | |
114 } | |
115 | |
116 TEST_F(ScopedFeatureListTest, FeatureOverrideFeatureWithEnabledFieldTried) { | |
117 test::ScopedFeatureList feature_list1; | |
118 | |
119 std::unique_ptr<FeatureList> feature_list(new FeatureList); | |
120 FieldTrialList field_trial_list(nullptr); | |
121 FieldTrial* trial = FieldTrialList::CreateFieldTrial("TrialExample", "A"); | |
122 feature_list->RegisterFieldTrialOverride( | |
123 kTestFeature1.name, FeatureList::OVERRIDE_ENABLE_FEATURE, trial); | |
124 feature_list1.InitWithFeatureList(std::move(feature_list)); | |
125 | |
126 { | |
127 test::ScopedFeatureList feature_list2; | |
128 feature_list2.InitWithFeatures({kTestFeature1}, {}); | |
129 ExpectFeatures("TestFeature1", std::string()); | |
130 } | |
131 } | |
132 | |
133 TEST_F(ScopedFeatureListTest, FeatureOverrideFeatureWithDisabledFieldTried) { | |
134 test::ScopedFeatureList feature_list1; | |
135 | |
136 std::unique_ptr<FeatureList> feature_list(new FeatureList); | |
137 FieldTrialList field_trial_list(nullptr); | |
138 FieldTrial* trial = FieldTrialList::CreateFieldTrial("TrialExample", "A"); | |
139 feature_list->RegisterFieldTrialOverride( | |
140 kTestFeature1.name, FeatureList::OVERRIDE_DISABLE_FEATURE, trial); | |
141 feature_list1.InitWithFeatureList(std::move(feature_list)); | |
142 | |
143 { | |
144 test::ScopedFeatureList feature_list2; | |
145 feature_list2.InitWithFeatures({kTestFeature1}, {}); | |
146 ExpectFeatures("TestFeature1", std::string()); | |
147 } | |
148 } | |
149 | |
150 TEST_F(ScopedFeatureListTest, FeatureOverrideKeepsOtherExistingFeature) { | |
151 test::ScopedFeatureList feature_list1; | |
152 feature_list1.InitWithFeatures({}, {kTestFeature1}); | |
153 | |
154 { | |
155 test::ScopedFeatureList feature_list2; | |
156 feature_list2.InitWithFeatures({}, {kTestFeature2}); | |
157 EXPECT_FALSE(FeatureList::IsEnabled(kTestFeature1)); | |
158 EXPECT_FALSE(FeatureList::IsEnabled(kTestFeature2)); | |
159 } | |
160 } | |
161 | |
162 TEST_F(ScopedFeatureListTest, FeatureOverrideKeepsOtherExistingFeature2) { | |
163 test::ScopedFeatureList feature_list1; | |
164 feature_list1.InitWithFeatures({}, {kTestFeature1}); | |
165 | |
166 { | |
167 test::ScopedFeatureList feature_list2; | |
168 feature_list2.InitWithFeatures({kTestFeature2}, {}); | |
169 ExpectFeatures("TestFeature2", "TestFeature1"); | |
170 } | |
171 } | |
172 | |
173 TEST_F(ScopedFeatureListTest, FeatureOverrideKeepsOtherExistingDefaultFeature) { | |
174 test::ScopedFeatureList feature_list1; | |
175 feature_list1.InitFromCommandLine("*TestFeature1", std::string()); | |
176 | |
177 { | |
178 test::ScopedFeatureList feature_list2; | |
179 feature_list2.InitWithFeatures({}, {kTestFeature2}); | |
180 ExpectFeatures("*TestFeature1", "TestFeature2"); | |
181 } | |
182 } | |
183 | |
184 } // namespace base | |
OLD | NEW |