1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
base / scoped_add_feature_flags_unittest.cc [blame]
// Copyright 2019 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/scoped_add_feature_flags.h"
#include <cstring>
#include <string>
#include <string_view>
#include "base/base_switches.h"
#include "base/command_line.h"
#include "base/feature_list.h"
#include "base/strings/string_util.h"
#include "testing/gtest/include/gtest/gtest.h"
namespace base {
namespace {
// Converts a string to CommandLine::StringType, which is std::wstring on
// Windows and std::string on other platforms.
CommandLine::StringType ToCommandLineStringType(std::string_view s) {
return CommandLine::StringType(s.begin(), s.end());
}
} // namespace
TEST(ScopedAddFeatureFlags, ConflictWithExistingFlags) {
CommandLine command_line(CommandLine::NO_PROGRAM);
command_line.AppendSwitchASCII(switches::kEnableFeatures,
"ExistingEnabledFoo,ExistingEnabledBar");
command_line.AppendSwitchASCII(switches::kDisableFeatures,
"ExistingDisabledFoo,ExistingDisabledBar");
static BASE_FEATURE(kExistingEnabledFoo, "ExistingEnabledFoo",
FEATURE_DISABLED_BY_DEFAULT);
static BASE_FEATURE(kExistingDisabledFoo, "ExistingDisabledFoo",
FEATURE_DISABLED_BY_DEFAULT);
static BASE_FEATURE(kEnabledBaz, "EnabledBaz", FEATURE_DISABLED_BY_DEFAULT);
static BASE_FEATURE(kDisabledBaz, "DisabledBaz", FEATURE_DISABLED_BY_DEFAULT);
{
ScopedAddFeatureFlags scoped_add(&command_line);
scoped_add.EnableIfNotSet(kExistingEnabledFoo);
scoped_add.EnableIfNotSet(kExistingDisabledFoo);
scoped_add.EnableIfNotSet(kEnabledBaz);
scoped_add.DisableIfNotSet(kExistingEnabledFoo);
scoped_add.DisableIfNotSet(kExistingDisabledFoo);
scoped_add.DisableIfNotSet(kDisabledBaz);
}
EXPECT_EQ(std::string("ExistingEnabledFoo,ExistingEnabledBar,EnabledBaz"),
command_line.GetSwitchValueASCII(switches::kEnableFeatures));
EXPECT_EQ(std::string("ExistingDisabledFoo,ExistingDisabledBar,DisabledBaz"),
command_line.GetSwitchValueASCII(switches::kDisableFeatures));
// There should not be duplicate --enable-features or --disable-features flags
EXPECT_EQ(
ToCommandLineStringType(
" --enable-features=ExistingEnabledFoo,ExistingEnabledBar,EnabledBaz"
" --disable-features=ExistingDisabledFoo,ExistingDisabledBar,"
"DisabledBaz"),
JoinString(command_line.argv(), ToCommandLineStringType(" ")));
}
TEST(ScopedAddFeatureFlags, FlagWithParameter) {
CommandLine command_line(CommandLine::NO_PROGRAM);
command_line.AppendSwitchASCII(switches::kEnableFeatures,
"ExistingEnabledFoo");
static BASE_FEATURE(kExistingEnabledFoo, "ExistingEnabledFoo",
FEATURE_DISABLED_BY_DEFAULT);
static BASE_FEATURE(kFeatureWithParameter, "FeatureWithParam",
FEATURE_DISABLED_BY_DEFAULT);
{
ScopedAddFeatureFlags scoped_add(&command_line);
scoped_add.EnableIfNotSet(kExistingEnabledFoo);
scoped_add.EnableIfNotSetWithParameter(kFeatureWithParameter, "name",
"value");
EXPECT_TRUE(scoped_add.IsEnabledWithParameter(kFeatureWithParameter, "name",
"value"));
}
EXPECT_EQ(std::string("ExistingEnabledFoo,FeatureWithParam:name/value"),
command_line.GetSwitchValueASCII(switches::kEnableFeatures));
}
} // namespace base