// Copyright 2016 The Chromium Authors. All rights reserved. // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. #ifndef BASE_TEST_SCOPED_FEATURE_LIST_H_ #define BASE_TEST_SCOPED_FEATURE_LIST_H_ #include <initializer_list> #include "base/feature_list.h" namespace base { namespace test { // ScopedFeatureList resets the global FeatureList instance to a new empty // instance and restores the original instance upon destruction. // Note: Re-using the same object is not allowed. To reset the feature // list and initialize it anew, destroy an existing scoped list and init // a new one. class ScopedFeatureList final { public: ScopedFeatureList(); ~ScopedFeatureList(); // Initializes and registers a FeatureList instance with no overrides. void Init(); // Initializes and registers the given FeatureList instance. void InitWithFeatureList(std::unique_ptr<FeatureList> feature_list); // Initializes and registers a FeatureList instance with the given enabled // and disabled features. void InitWithFeatures( const std::initializer_list<base::Feature>& enabled_features, const std::initializer_list<base::Feature>& disabled_features); // Initializes and registers a FeatureList instance with the given // enabled and disabled features (comma-separated names). void InitFromCommandLine(const std::string& enable_features, const std::string& disable_features); // Initializes and registers a FeatureList instance enabling a single // feature. void InitAndEnableFeature(const base::Feature& feature); // Initializes and registers a FeatureList instance disabling a single // feature. void InitAndDisableFeature(const base::Feature& feature); private: std::unique_ptr<FeatureList> original_feature_list_; DISALLOW_COPY_AND_ASSIGN(ScopedFeatureList); }; } // namespace test } // namespace base #endif // BASE_TEST_SCOPED_FEATURE_LIST_H_