// Copyright 2024 The Chromium Authors // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. #include "base/test/test_suite_helper.h" #include "base/base_switches.h" #include "base/command_line.h" #include "base/test/scoped_feature_list.h" namespace base::test { void InitScopedFeatureListForTesting(ScopedFeatureList& scoped_feature_list) { const CommandLine* command_line = CommandLine::ForCurrentProcess(); // We set up a FeatureList via ScopedFeatureList::InitFromCommandLine(). // This ensures that code using that API will not hit an error that it's // not set. It will be cleared by ~ScopedFeatureList(). // TestFeatureForBrowserTest1 and TestFeatureForBrowserTest2 used in // ContentBrowserTestScopedFeatureListTest to ensure ScopedFeatureList keeps // features from command line. // TestBlinkFeatureDefault is used in RuntimeEnabledFeaturesTest to test a // behavior with OverrideState::OVERIDE_USE_DEFAULT. std::string enabled = command_line->GetSwitchValueASCII(switches::kEnableFeatures); std::string disabled = command_line->GetSwitchValueASCII(switches::kDisableFeatures); enabled += ",TestFeatureForBrowserTest1,*TestBlinkFeatureDefault"; disabled += ",TestFeatureForBrowserTest2"; scoped_feature_list.InitFromCommandLine(enabled, disabled); // The enable-features and disable-features flags were just slurped into a // FeatureList, so remove them from the command line. Tests should enable // and disable features via the ScopedFeatureList API rather than // command-line flags. CommandLine new_command_line(command_line->GetProgram()); CommandLine::SwitchMap switches = command_line->GetSwitches(); switches.erase(switches::kEnableFeatures); switches.erase(switches::kDisableFeatures); for (const auto& iter : switches) { new_command_line.AppendSwitchNative(iter.first, iter.second); } *CommandLine::ForCurrentProcess() = new_command_line; } } // namespace base::test