• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 // Copyright 2022 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 static org.junit.Assert.assertFalse;
8 import static org.junit.Assert.assertTrue;
9 
10 import org.junit.After;
11 import org.junit.Test;
12 import org.junit.runner.RunWith;
13 
14 import org.chromium.base.test.BaseRobolectricTestRunner;
15 
16 import java.util.Map;
17 
18 /** Unit Tests for {@link MutableFlagWithSafeDefault}. */
19 @RunWith(BaseRobolectricTestRunner.class)
20 public class MutableFlagWithSafeDefaultUnitTest {
21     static final String FEATURE_A_NAME = "FeatureA";
22     static final String FEATURE_B_NAME = "FeatureB";
23     static final Map<String, Boolean> A_ON_B_OFF =
24             Map.of(FEATURE_A_NAME, true, FEATURE_B_NAME, false);
25 
26     private static class TestFeatureMap extends FeatureMap {
27         @Override
getNativeMap()28         protected long getNativeMap() {
29             return 0;
30         }
31     }
32 
33     private final TestFeatureMap mFeatureMap = new TestFeatureMap();
34 
35     @After
tearDown()36     public void tearDown() {
37         Flag.resetFlagsForTesting();
38     }
39 
40     @Test(expected = AssertionError.class)
testDuplicateFeatureInMap_throwsException()41     public void testDuplicateFeatureInMap_throwsException() {
42         mFeatureMap.mutableFlagWithSafeDefault(FEATURE_A_NAME, false);
43         mFeatureMap.mutableFlagWithSafeDefault(FEATURE_A_NAME, false);
44     }
45 
46     @Test(expected = AssertionError.class)
testDuplicateFeatureOutsideOfMap_throwsException()47     public void testDuplicateFeatureOutsideOfMap_throwsException() {
48         mFeatureMap.mutableFlagWithSafeDefault(FEATURE_A_NAME, false);
49         new MutableFlagWithSafeDefault(mFeatureMap, FEATURE_A_NAME, false);
50     }
51 
52     @Test
testNativeInitialized_getsFromChromeFeatureList()53     public void testNativeInitialized_getsFromChromeFeatureList() {
54         MutableFlagWithSafeDefault featureA =
55                 mFeatureMap.mutableFlagWithSafeDefault(FEATURE_A_NAME, false);
56         MutableFlagWithSafeDefault featureB =
57                 mFeatureMap.mutableFlagWithSafeDefault(FEATURE_B_NAME, true);
58 
59         // Values from ChromeFeatureList should be used from now on.
60         FeatureList.setTestFeatures(A_ON_B_OFF);
61 
62         // Verify that {@link MutableFlagWithSafeDefault} returns native values.
63         assertTrue(featureA.isEnabled());
64         assertFalse(featureB.isEnabled());
65     }
66 
67     @Test
testNativeNotInitialized_useDefault()68     public void testNativeNotInitialized_useDefault() {
69         MutableFlagWithSafeDefault featureA =
70                 mFeatureMap.mutableFlagWithSafeDefault(FEATURE_A_NAME, false);
71         MutableFlagWithSafeDefault featureB =
72                 mFeatureMap.mutableFlagWithSafeDefault(FEATURE_B_NAME, true);
73 
74         // Query the flags to make sure the default values are returned.
75         assertFalse(featureA.isEnabled());
76         assertTrue(featureB.isEnabled());
77     }
78 
79     @Test
testNativeInitializedUsedDefault_getsFromChromeFeatureList()80     public void testNativeInitializedUsedDefault_getsFromChromeFeatureList() {
81         MutableFlagWithSafeDefault featureA =
82                 mFeatureMap.mutableFlagWithSafeDefault(FEATURE_A_NAME, false);
83         MutableFlagWithSafeDefault featureB =
84                 mFeatureMap.mutableFlagWithSafeDefault(FEATURE_B_NAME, true);
85 
86         // Query the flags to make sure the default values are returned.
87         assertFalse(featureA.isEnabled());
88         assertTrue(featureB.isEnabled());
89 
90         // Values from ChromeFeatureList should be used from now on.
91         FeatureList.setTestFeatures(A_ON_B_OFF);
92 
93         // Verify that {@link MutableFlagWithSafeDefault} returns native values.
94         assertTrue(featureA.isEnabled());
95         assertFalse(featureB.isEnabled());
96     }
97 }
98