| // 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. |
| |
| #include "base/test/scoped_feature_list.h" |
| |
| #include <string> |
| |
| namespace base { |
| namespace test { |
| |
| namespace { |
| |
| static std::string GetFeatureString( |
| const std::initializer_list<base::Feature>& features) { |
| std::string output; |
| for (const base::Feature& feature : features) { |
| if (!output.empty()) |
| output += ","; |
| output += feature.name; |
| } |
| return output; |
| } |
| |
| } // namespace |
| |
| ScopedFeatureList::ScopedFeatureList() {} |
| |
| ScopedFeatureList::~ScopedFeatureList() { |
| if (original_feature_list_) { |
| base::FeatureList::ClearInstanceForTesting(); |
| base::FeatureList::RestoreInstanceForTesting( |
| std::move(original_feature_list_)); |
| } |
| } |
| |
| void ScopedFeatureList::Init() { |
| std::unique_ptr<base::FeatureList> feature_list(new base::FeatureList); |
| feature_list->InitializeFromCommandLine(std::string(), std::string()); |
| InitWithFeatureList(std::move(feature_list)); |
| } |
| |
| void ScopedFeatureList::InitWithFeatures( |
| const std::initializer_list<base::Feature>& enabled_features, |
| const std::initializer_list<base::Feature>& disabled_features) { |
| InitFromCommandLine(GetFeatureString(enabled_features), |
| GetFeatureString(disabled_features)); |
| } |
| |
| void ScopedFeatureList::InitWithFeatureList( |
| std::unique_ptr<FeatureList> feature_list) { |
| DCHECK(!original_feature_list_); |
| original_feature_list_ = base::FeatureList::ClearInstanceForTesting(); |
| base::FeatureList::SetInstance(std::move(feature_list)); |
| } |
| |
| void ScopedFeatureList::InitFromCommandLine( |
| const std::string& enable_features, |
| const std::string& disable_features) { |
| std::unique_ptr<base::FeatureList> feature_list(new base::FeatureList); |
| feature_list->InitializeFromCommandLine(enable_features, disable_features); |
| InitWithFeatureList(std::move(feature_list)); |
| } |
| |
| void ScopedFeatureList::InitAndEnableFeature(const base::Feature& feature) { |
| InitFromCommandLine(feature.name, std::string()); |
| } |
| |
| void ScopedFeatureList::InitAndDisableFeature(const base::Feature& feature) { |
| InitFromCommandLine(std::string(), feature.name); |
| } |
| |
| } // namespace test |
| } // namespace base |