diff options
Diffstat (limited to 'base/test/scoped_feature_list.cc')
-rw-r--r-- | base/test/scoped_feature_list.cc | 74 |
1 files changed, 74 insertions, 0 deletions
diff --git a/base/test/scoped_feature_list.cc b/base/test/scoped_feature_list.cc new file mode 100644 index 0000000000..f0f3f4edfb --- /dev/null +++ b/base/test/scoped_feature_list.cc @@ -0,0 +1,74 @@ +// 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 |