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