xref: /aosp_15_r20/external/cronet/base/test/with_feature_override.h (revision 6777b5387eb2ff775bb5750e3f5d96f37fb7352b)
1*6777b538SAndroid Build Coastguard Worker // Copyright 2020 The Chromium Authors
2*6777b538SAndroid Build Coastguard Worker // Use of this source code is governed by a BSD-style license that can be
3*6777b538SAndroid Build Coastguard Worker // found in the LICENSE file.
4*6777b538SAndroid Build Coastguard Worker 
5*6777b538SAndroid Build Coastguard Worker #ifndef BASE_TEST_WITH_FEATURE_OVERRIDE_H_
6*6777b538SAndroid Build Coastguard Worker #define BASE_TEST_WITH_FEATURE_OVERRIDE_H_
7*6777b538SAndroid Build Coastguard Worker 
8*6777b538SAndroid Build Coastguard Worker #include "base/feature_list.h"
9*6777b538SAndroid Build Coastguard Worker #include "base/test/scoped_feature_list.h"
10*6777b538SAndroid Build Coastguard Worker #include "testing/gtest/include/gtest/gtest.h"
11*6777b538SAndroid Build Coastguard Worker 
12*6777b538SAndroid Build Coastguard Worker namespace base {
13*6777b538SAndroid Build Coastguard Worker namespace test {
14*6777b538SAndroid Build Coastguard Worker 
15*6777b538SAndroid Build Coastguard Worker #define INSTANTIATE_FEATURE_OVERRIDE_TEST_SUITE(test_name) \
16*6777b538SAndroid Build Coastguard Worker   INSTANTIATE_TEST_SUITE_P(All, test_name, testing::Values(false, true))
17*6777b538SAndroid Build Coastguard Worker 
18*6777b538SAndroid Build Coastguard Worker // Base class for a test fixture that enables running tests twice, once with a
19*6777b538SAndroid Build Coastguard Worker // feature enabled and once with it disabled. Must be the first base class of
20*6777b538SAndroid Build Coastguard Worker // the test fixture to take effect during its construction. If
21*6777b538SAndroid Build Coastguard Worker // WithFeatureOverride is added as a parent to an existing test fixture
22*6777b538SAndroid Build Coastguard Worker // all of its existing tests need to be migrated to TEST_P.
23*6777b538SAndroid Build Coastguard Worker //
24*6777b538SAndroid Build Coastguard Worker // Example usage:
25*6777b538SAndroid Build Coastguard Worker //
26*6777b538SAndroid Build Coastguard Worker //  class MyTest : public base::test::WithFeatureOverride, public testing::Test
27*6777b538SAndroid Build Coastguard Worker //  {
28*6777b538SAndroid Build Coastguard Worker //   public:
29*6777b538SAndroid Build Coastguard Worker //    MyTest() : base::test::WithFeatureOverride(kMyFeature){}
30*6777b538SAndroid Build Coastguard Worker //  };
31*6777b538SAndroid Build Coastguard Worker //
32*6777b538SAndroid Build Coastguard Worker //  TEST_P(MyTest, FooBar) {
33*6777b538SAndroid Build Coastguard Worker //    This will run with both the kMyFeature enabled and disabled.
34*6777b538SAndroid Build Coastguard Worker //  }
35*6777b538SAndroid Build Coastguard Worker //
36*6777b538SAndroid Build Coastguard Worker //  INSTANTIATE_FEATURE_OVERRIDE_TEST_SUITE(MyTest);
37*6777b538SAndroid Build Coastguard Worker 
38*6777b538SAndroid Build Coastguard Worker class WithFeatureOverride : public testing::WithParamInterface<bool> {
39*6777b538SAndroid Build Coastguard Worker  public:
40*6777b538SAndroid Build Coastguard Worker   explicit WithFeatureOverride(const base::Feature& feature);
41*6777b538SAndroid Build Coastguard Worker   ~WithFeatureOverride();
42*6777b538SAndroid Build Coastguard Worker 
43*6777b538SAndroid Build Coastguard Worker   WithFeatureOverride(const WithFeatureOverride&) = delete;
44*6777b538SAndroid Build Coastguard Worker   WithFeatureOverride& operator=(const WithFeatureOverride&) = delete;
45*6777b538SAndroid Build Coastguard Worker 
46*6777b538SAndroid Build Coastguard Worker   // Use to know if the configured feature provided in the constructor is
47*6777b538SAndroid Build Coastguard Worker   // enabled or not.
48*6777b538SAndroid Build Coastguard Worker   bool IsParamFeatureEnabled();
49*6777b538SAndroid Build Coastguard Worker 
50*6777b538SAndroid Build Coastguard Worker  private:
51*6777b538SAndroid Build Coastguard Worker   base::test::ScopedFeatureList scoped_feature_list_;
52*6777b538SAndroid Build Coastguard Worker };
53*6777b538SAndroid Build Coastguard Worker 
54*6777b538SAndroid Build Coastguard Worker }  // namespace test
55*6777b538SAndroid Build Coastguard Worker }  // namespace base
56*6777b538SAndroid Build Coastguard Worker 
57*6777b538SAndroid Build Coastguard Worker #endif  // BASE_TEST_WITH_FEATURE_OVERRIDE_H_
58