• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 // Copyright 2023 The Chromium Authors
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
4 
5 package org.chromium.base;
6 
7 import org.junit.Assert;
8 import org.junit.Rule;
9 import org.junit.Test;
10 import org.junit.runner.RunWith;
11 
12 import org.chromium.base.FeatureList.TestValues;
13 import org.chromium.base.test.BaseRobolectricTestRunner;
14 import org.chromium.base.test.util.Features.EnableFeatures;
15 import org.chromium.base.test.util.Features.JUnitProcessor;
16 
17 /** Unit tests for {@link FeatureList}. */
18 @RunWith(BaseRobolectricTestRunner.class)
19 public class FeatureListUnitTest {
20     @Rule public JUnitProcessor mFeaturesProcessor = new JUnitProcessor();
21 
22     private static final String FEATURE_A = "FeatureA";
23     private static final String FEATURE_A_PARAM_1 = "Param1InFeatureA";
24     private static final String FEATURE_A_PARAM_2 = "Param2InFeatureA";
25     private static final String FEATURE_B = "FeatureB";
26 
27     @Test
test_getTestValueForFeature_noOverride_throwsException()28     public void test_getTestValueForFeature_noOverride_throwsException() {
29         Assert.assertThrows(
30                 IllegalArgumentException.class,
31                 () -> FeatureList.getTestValueForFeature(FEATURE_A));
32     }
33 
34     @Test
test_getTestValueForFeature_canUseDefaults_noException()35     public void test_getTestValueForFeature_canUseDefaults_noException() {
36         FeatureList.setTestCanUseDefaultsForTesting();
37 
38         Assert.assertNull(FeatureList.getTestValueForFeature(FEATURE_A));
39     }
40 
41     @Test
test_getTestValueForFieldTrialParam_noOverride_returnsNull()42     public void test_getTestValueForFieldTrialParam_noOverride_returnsNull() {
43         Assert.assertNull(FeatureList.getTestValueForFieldTrialParam(FEATURE_A, FEATURE_A_PARAM_1));
44     }
45 
46     @Test
test_getTestValueForFeature_override()47     public void test_getTestValueForFeature_override() {
48         TestValues testValues = new TestValues();
49         testValues.addFeatureFlagOverride(FEATURE_A, true);
50         FeatureList.setTestValues(testValues);
51 
52         Assert.assertEquals(true, FeatureList.getTestValueForFeature(FEATURE_A));
53 
54         testValues.addFeatureFlagOverride(FEATURE_A, false);
55         FeatureList.setTestValues(testValues);
56 
57         Assert.assertEquals(false, FeatureList.getTestValueForFeature(FEATURE_A));
58     }
59 
60     @Test
test_getTestValueForFieldTrialParam_override()61     public void test_getTestValueForFieldTrialParam_override() {
62         TestValues testValues = new TestValues();
63         testValues.addFieldTrialParamOverride(FEATURE_A, FEATURE_A_PARAM_1, "paramValue");
64         FeatureList.setTestValues(testValues);
65 
66         Assert.assertEquals(
67                 "paramValue",
68                 FeatureList.getTestValueForFieldTrialParam(FEATURE_A, FEATURE_A_PARAM_1));
69 
70         // Other params should still return null
71         Assert.assertNull(FeatureList.getTestValueForFieldTrialParam(FEATURE_A, FEATURE_A_PARAM_2));
72     }
73 
74     @Test
test_getTestValueForFeature_overrideOther_throwsException()75     public void test_getTestValueForFeature_overrideOther_throwsException() {
76         TestValues testValues = new TestValues();
77         testValues.addFeatureFlagOverride(FEATURE_A, true);
78         FeatureList.setTestValues(testValues);
79 
80         Assert.assertThrows(
81                 IllegalArgumentException.class,
82                 () -> FeatureList.getTestValueForFeature(FEATURE_B));
83     }
84 
85     @Test
test_mergeTestValues_noConflict()86     public void test_mergeTestValues_noConflict() {
87         TestValues testValues1 = new TestValues();
88         testValues1.addFeatureFlagOverride(FEATURE_A, false);
89         testValues1.addFieldTrialParamOverride(FEATURE_A, FEATURE_A_PARAM_1, "paramValue1");
90 
91         TestValues testValues2 = new TestValues();
92         testValues2.addFeatureFlagOverride(FEATURE_B, true);
93         testValues2.addFieldTrialParamOverride(FEATURE_A, FEATURE_A_PARAM_2, "paramValue2");
94 
95         FeatureList.setTestValues(testValues1);
96         FeatureList.mergeTestValues(testValues2, true);
97 
98         Assert.assertEquals(false, FeatureList.getTestValueForFeature(FEATURE_A));
99         Assert.assertEquals(true, FeatureList.getTestValueForFeature(FEATURE_B));
100         Assert.assertEquals(
101                 "paramValue1",
102                 FeatureList.getTestValueForFieldTrialParam(FEATURE_A, FEATURE_A_PARAM_1));
103         Assert.assertEquals(
104                 "paramValue2",
105                 FeatureList.getTestValueForFieldTrialParam(FEATURE_A, FEATURE_A_PARAM_2));
106     }
107 
108     @Test
test_mergeTestValues_replace()109     public void test_mergeTestValues_replace() {
110         TestValues testValues1 = new TestValues();
111         testValues1.addFeatureFlagOverride(FEATURE_A, false);
112         testValues1.addFieldTrialParamOverride(FEATURE_A, FEATURE_A_PARAM_1, "false");
113 
114         TestValues testValues2 = new TestValues();
115         testValues2.addFeatureFlagOverride(FEATURE_A, true);
116         testValues2.addFieldTrialParamOverride(FEATURE_A, FEATURE_A_PARAM_1, "true");
117 
118         FeatureList.setTestValues(testValues1);
119         FeatureList.mergeTestValues(testValues2, true);
120 
121         Assert.assertEquals(true, FeatureList.getTestValueForFeature(FEATURE_A));
122         Assert.assertEquals(
123                 "true", FeatureList.getTestValueForFieldTrialParam(FEATURE_A, FEATURE_A_PARAM_1));
124     }
125 
126     @Test
test_mergeTestValues_doNotReplace()127     public void test_mergeTestValues_doNotReplace() {
128         TestValues testValues1 = new TestValues();
129         testValues1.addFeatureFlagOverride(FEATURE_A, false);
130         testValues1.addFieldTrialParamOverride(FEATURE_A, FEATURE_A_PARAM_1, "false");
131 
132         TestValues testValues2 = new TestValues();
133         testValues2.addFeatureFlagOverride(FEATURE_A, true);
134         testValues2.addFieldTrialParamOverride(FEATURE_A, FEATURE_A_PARAM_1, "true");
135 
136         FeatureList.setTestValues(testValues1);
137         FeatureList.mergeTestValues(testValues2, false);
138 
139         Assert.assertEquals(false, FeatureList.getTestValueForFeature(FEATURE_A));
140         Assert.assertEquals(
141                 "false", FeatureList.getTestValueForFieldTrialParam(FEATURE_A, FEATURE_A_PARAM_1));
142     }
143 
144     @Test
145     @EnableFeatures({FEATURE_A, FEATURE_B})
test_setTestValues_replacesAnnotation()146     public void test_setTestValues_replacesAnnotation() {
147         FeatureList.setTestCanUseDefaultsForTesting();
148 
149         TestValues testValues = new TestValues();
150         testValues.addFeatureFlagOverride(FEATURE_A, false);
151         FeatureList.setTestValues(testValues);
152 
153         Assert.assertEquals(false, FeatureList.getTestValueForFeature(FEATURE_A));
154         Assert.assertNull(FeatureList.getTestValueForFeature(FEATURE_B));
155     }
156 
157     @Test
158     @EnableFeatures({FEATURE_A, FEATURE_B})
test_mergeTestValues_replace_overridesAnnotation()159     public void test_mergeTestValues_replace_overridesAnnotation() {
160         TestValues testValues = new TestValues();
161         testValues.addFeatureFlagOverride(FEATURE_A, false);
162         FeatureList.mergeTestValues(testValues, true);
163 
164         Assert.assertEquals(false, FeatureList.getTestValueForFeature(FEATURE_A));
165         Assert.assertEquals(true, FeatureList.getTestValueForFeature(FEATURE_B));
166     }
167 
168     @Test
169     @EnableFeatures({FEATURE_A, FEATURE_B})
test_mergeTestValues_doNotReplace_doesNotOverrideAnnotation()170     public void test_mergeTestValues_doNotReplace_doesNotOverrideAnnotation() {
171         TestValues testValues = new TestValues();
172         testValues.addFeatureFlagOverride(FEATURE_A, false);
173         FeatureList.mergeTestValues(testValues, false);
174 
175         Assert.assertEquals(true, FeatureList.getTestValueForFeature(FEATURE_A));
176         Assert.assertEquals(true, FeatureList.getTestValueForFeature(FEATURE_B));
177     }
178 }
179