| /* | 
 |  *  Copyright (c) 2025 The WebRTC project authors. All Rights Reserved. | 
 |  * | 
 |  *  Use of this source code is governed by a BSD-style license | 
 |  *  that can be found in the LICENSE file in the root of the source | 
 |  *  tree. An additional intellectual property rights grant can be found | 
 |  *  in the file PATENTS.  All contributing project authors may | 
 |  *  be found in the AUTHORS file in the root of the source tree. | 
 |  */ | 
 |  | 
 | #include "test/create_test_field_trials.h" | 
 |  | 
 | #include <string> | 
 |  | 
 | #include "absl/flags/declare.h" | 
 | #include "absl/flags/flag.h" | 
 | #include "absl/strings/string_view.h" | 
 | #include "api/field_trials.h" | 
 | #include "test/gtest.h" | 
 |  | 
 | // Declare but do not explicitly include the definition of this flag as | 
 | // `CreateTestFieldTrials` has to depend on the definition of this flag. | 
 | ABSL_DECLARE_FLAG(std::string, force_fieldtrials); | 
 |  | 
 | namespace webrtc { | 
 | namespace { | 
 |  | 
 | // Flags are globals. To prevent altering behavior of other tests in the same | 
 | // binary when --force_fieldtrials flag is used, ensure flag is reset to the | 
 | // previous value after unit tests here runs. | 
 | class ScopedSetFlag { | 
 |  public: | 
 |   explicit ScopedSetFlag(absl::string_view value) { | 
 |     old_value_ = absl::GetFlag(FLAGS_force_fieldtrials); | 
 |     absl::SetFlag(&FLAGS_force_fieldtrials, value); | 
 |   } | 
 |  | 
 |   ~ScopedSetFlag() { absl::SetFlag(&FLAGS_force_fieldtrials, old_value_); } | 
 |  | 
 |  private: | 
 |   std::string old_value_; | 
 | }; | 
 |  | 
 | TEST(CreateTestFieldTrialsTest, UsesCommandLineFlag) { | 
 |   ScopedSetFlag override_flag("Trial1/Value1/Trial2/Value2/"); | 
 |   FieldTrials field_trials = CreateTestFieldTrials(); | 
 |  | 
 |   field_trials.RegisterKeysForTesting({"Trial1", "Trial2"}); | 
 |   EXPECT_EQ(field_trials.Lookup("Trial1"), "Value1"); | 
 |   EXPECT_EQ(field_trials.Lookup("Trial2"), "Value2"); | 
 | } | 
 |  | 
 | TEST(CreateTestFieldTrialsTest, UsesConstructionParameter) { | 
 |   FieldTrials field_trials = | 
 |       CreateTestFieldTrials("Trial1/Value1/Trial2/Value2/"); | 
 |  | 
 |   field_trials.RegisterKeysForTesting({"Trial1", "Trial2"}); | 
 |   EXPECT_EQ(field_trials.Lookup("Trial1"), "Value1"); | 
 |   EXPECT_EQ(field_trials.Lookup("Trial2"), "Value2"); | 
 | } | 
 |  | 
 | TEST(CreateTestFieldTrialsTest, | 
 |      ConstructionParameterTakesPrecedenceOverCommandLine) { | 
 |   ScopedSetFlag override_flag("TrialCommon/ValueF/TrialFlag/FlagValue/"); | 
 |   FieldTrials field_trials = CreateTestFieldTrials( | 
 |       "TrialCommon/ValueC/TrialConstructor/ConstructorValue/"); | 
 |  | 
 |   field_trials.RegisterKeysForTesting( | 
 |       {"TrialCommon", "TrialFlag", "TrialConstructor"}); | 
 |   EXPECT_EQ(field_trials.Lookup("TrialCommon"), "ValueC"); | 
 |   EXPECT_EQ(field_trials.Lookup("TrialFlag"), "FlagValue"); | 
 |   EXPECT_EQ(field_trials.Lookup("TrialConstructor"), "ConstructorValue"); | 
 | } | 
 |  | 
 | }  // namespace | 
 | }  // namespace webrtc |