commandlineflags_gtest.cc
Go to the documentation of this file.
1 #include <cstdlib>
2 
3 #include "../src/commandlineflags.h"
4 #include "../src/internal_macros.h"
5 #include "gmock/gmock.h"
6 #include "gtest/gtest.h"
7 
8 namespace benchmark {
9 namespace {
10 
11 #if defined(BENCHMARK_OS_WINDOWS)
12 int setenv(const char* name, const char* value, int overwrite) {
13  if (!overwrite) {
14  // NOTE: getenv_s is far superior but not available under mingw.
15  char* env_value = getenv(name);
16  if (env_value == nullptr) {
17  return -1;
18  }
19  }
20  return _putenv_s(name, value);
21 }
22 
23 int unsetenv(const char* name) { return _putenv_s(name, ""); }
24 
25 #endif // BENCHMARK_OS_WINDOWS
26 
28  ASSERT_EQ(unsetenv("NOT_IN_ENV"), 0);
29  EXPECT_EQ(BoolFromEnv("not_in_env", true), true);
30 }
31 
33  ASSERT_EQ(setenv("IN_ENV", "0", 1), 0);
34  EXPECT_EQ(BoolFromEnv("in_env", true), false);
35  unsetenv("IN_ENV");
36 
37  ASSERT_EQ(setenv("IN_ENV", "N", 1), 0);
38  EXPECT_EQ(BoolFromEnv("in_env", true), false);
39  unsetenv("IN_ENV");
40 
41  ASSERT_EQ(setenv("IN_ENV", "n", 1), 0);
42  EXPECT_EQ(BoolFromEnv("in_env", true), false);
43  unsetenv("IN_ENV");
44 
45  ASSERT_EQ(setenv("IN_ENV", "NO", 1), 0);
46  EXPECT_EQ(BoolFromEnv("in_env", true), false);
47  unsetenv("IN_ENV");
48 
49  ASSERT_EQ(setenv("IN_ENV", "No", 1), 0);
50  EXPECT_EQ(BoolFromEnv("in_env", true), false);
51  unsetenv("IN_ENV");
52 
53  ASSERT_EQ(setenv("IN_ENV", "no", 1), 0);
54  EXPECT_EQ(BoolFromEnv("in_env", true), false);
55  unsetenv("IN_ENV");
56 
57  ASSERT_EQ(setenv("IN_ENV", "F", 1), 0);
58  EXPECT_EQ(BoolFromEnv("in_env", true), false);
59  unsetenv("IN_ENV");
60 
61  ASSERT_EQ(setenv("IN_ENV", "f", 1), 0);
62  EXPECT_EQ(BoolFromEnv("in_env", true), false);
63  unsetenv("IN_ENV");
64 
65  ASSERT_EQ(setenv("IN_ENV", "FALSE", 1), 0);
66  EXPECT_EQ(BoolFromEnv("in_env", true), false);
67  unsetenv("IN_ENV");
68 
69  ASSERT_EQ(setenv("IN_ENV", "False", 1), 0);
70  EXPECT_EQ(BoolFromEnv("in_env", true), false);
71  unsetenv("IN_ENV");
72 
73  ASSERT_EQ(setenv("IN_ENV", "false", 1), 0);
74  EXPECT_EQ(BoolFromEnv("in_env", true), false);
75  unsetenv("IN_ENV");
76 
77  ASSERT_EQ(setenv("IN_ENV", "OFF", 1), 0);
78  EXPECT_EQ(BoolFromEnv("in_env", true), false);
79  unsetenv("IN_ENV");
80 
81  ASSERT_EQ(setenv("IN_ENV", "Off", 1), 0);
82  EXPECT_EQ(BoolFromEnv("in_env", true), false);
83  unsetenv("IN_ENV");
84 
85  ASSERT_EQ(setenv("IN_ENV", "off", 1), 0);
86  EXPECT_EQ(BoolFromEnv("in_env", true), false);
87  unsetenv("IN_ENV");
88 }
89 
91  ASSERT_EQ(setenv("IN_ENV", "1", 1), 0);
92  EXPECT_EQ(BoolFromEnv("in_env", false), true);
93  unsetenv("IN_ENV");
94 
95  ASSERT_EQ(setenv("IN_ENV", "Y", 1), 0);
96  EXPECT_EQ(BoolFromEnv("in_env", false), true);
97  unsetenv("IN_ENV");
98 
99  ASSERT_EQ(setenv("IN_ENV", "y", 1), 0);
100  EXPECT_EQ(BoolFromEnv("in_env", false), true);
101  unsetenv("IN_ENV");
102 
103  ASSERT_EQ(setenv("IN_ENV", "YES", 1), 0);
104  EXPECT_EQ(BoolFromEnv("in_env", false), true);
105  unsetenv("IN_ENV");
106 
107  ASSERT_EQ(setenv("IN_ENV", "Yes", 1), 0);
108  EXPECT_EQ(BoolFromEnv("in_env", false), true);
109  unsetenv("IN_ENV");
110 
111  ASSERT_EQ(setenv("IN_ENV", "yes", 1), 0);
112  EXPECT_EQ(BoolFromEnv("in_env", false), true);
113  unsetenv("IN_ENV");
114 
115  ASSERT_EQ(setenv("IN_ENV", "T", 1), 0);
116  EXPECT_EQ(BoolFromEnv("in_env", false), true);
117  unsetenv("IN_ENV");
118 
119  ASSERT_EQ(setenv("IN_ENV", "t", 1), 0);
120  EXPECT_EQ(BoolFromEnv("in_env", false), true);
121  unsetenv("IN_ENV");
122 
123  ASSERT_EQ(setenv("IN_ENV", "TRUE", 1), 0);
124  EXPECT_EQ(BoolFromEnv("in_env", false), true);
125  unsetenv("IN_ENV");
126 
127  ASSERT_EQ(setenv("IN_ENV", "True", 1), 0);
128  EXPECT_EQ(BoolFromEnv("in_env", false), true);
129  unsetenv("IN_ENV");
130 
131  ASSERT_EQ(setenv("IN_ENV", "true", 1), 0);
132  EXPECT_EQ(BoolFromEnv("in_env", false), true);
133  unsetenv("IN_ENV");
134 
135  ASSERT_EQ(setenv("IN_ENV", "ON", 1), 0);
136  EXPECT_EQ(BoolFromEnv("in_env", false), true);
137  unsetenv("IN_ENV");
138 
139  ASSERT_EQ(setenv("IN_ENV", "On", 1), 0);
140  EXPECT_EQ(BoolFromEnv("in_env", false), true);
141  unsetenv("IN_ENV");
142 
143  ASSERT_EQ(setenv("IN_ENV", "on", 1), 0);
144  EXPECT_EQ(BoolFromEnv("in_env", false), true);
145  unsetenv("IN_ENV");
146 
147 #ifndef BENCHMARK_OS_WINDOWS
148  ASSERT_EQ(setenv("IN_ENV", "", 1), 0);
149  EXPECT_EQ(BoolFromEnv("in_env", false), true);
150  unsetenv("IN_ENV");
151 #endif
152 }
153 
154 TEST(Int32FromEnv, NotInEnv) {
155  ASSERT_EQ(unsetenv("NOT_IN_ENV"), 0);
156  EXPECT_EQ(Int32FromEnv("not_in_env", 42), 42);
157 }
158 
159 TEST(Int32FromEnv, InvalidInteger) {
160  ASSERT_EQ(setenv("IN_ENV", "foo", 1), 0);
161  EXPECT_EQ(Int32FromEnv("in_env", 42), 42);
162  unsetenv("IN_ENV");
163 }
164 
165 TEST(Int32FromEnv, ValidInteger) {
166  ASSERT_EQ(setenv("IN_ENV", "42", 1), 0);
167  EXPECT_EQ(Int32FromEnv("in_env", 64), 42);
168  unsetenv("IN_ENV");
169 }
170 
171 TEST(DoubleFromEnv, NotInEnv) {
172  ASSERT_EQ(unsetenv("NOT_IN_ENV"), 0);
173  EXPECT_EQ(DoubleFromEnv("not_in_env", 0.51), 0.51);
174 }
175 
176 TEST(DoubleFromEnv, InvalidReal) {
177  ASSERT_EQ(setenv("IN_ENV", "foo", 1), 0);
178  EXPECT_EQ(DoubleFromEnv("in_env", 0.51), 0.51);
179  unsetenv("IN_ENV");
180 }
181 
182 TEST(DoubleFromEnv, ValidReal) {
183  ASSERT_EQ(setenv("IN_ENV", "0.51", 1), 0);
184  EXPECT_EQ(DoubleFromEnv("in_env", 0.71), 0.51);
185  unsetenv("IN_ENV");
186 }
187 
189  ASSERT_EQ(unsetenv("NOT_IN_ENV"), 0);
190  EXPECT_STREQ(StringFromEnv("not_in_env", "foo"), "foo");
191 }
192 
193 TEST(StringFromEnv, Valid) {
194  ASSERT_EQ(setenv("IN_ENV", "foo", 1), 0);
195  EXPECT_STREQ(StringFromEnv("in_env", "bar"), "foo");
196  unsetenv("IN_ENV");
197 }
198 
200  ASSERT_EQ(unsetenv("NOT_IN_ENV"), 0);
201  EXPECT_THAT(KvPairsFromEnv("not_in_env", {{"foo", "bar"}}),
202  testing::ElementsAre(testing::Pair("foo", "bar")));
203 }
204 
205 TEST(KvPairsFromEnv, MalformedReturnsDefault) {
206  ASSERT_EQ(setenv("IN_ENV", "foo", 1), 0);
207  EXPECT_THAT(KvPairsFromEnv("in_env", {{"foo", "bar"}}),
208  testing::ElementsAre(testing::Pair("foo", "bar")));
209  unsetenv("IN_ENV");
210 }
211 
212 TEST(KvPairsFromEnv, Single) {
213  ASSERT_EQ(setenv("IN_ENV", "foo=bar", 1), 0);
214  EXPECT_THAT(KvPairsFromEnv("in_env", {}),
215  testing::ElementsAre(testing::Pair("foo", "bar")));
216  unsetenv("IN_ENV");
217 }
218 
219 TEST(KvPairsFromEnv, Multiple) {
220  ASSERT_EQ(setenv("IN_ENV", "foo=bar,baz=qux", 1), 0);
221  EXPECT_THAT(KvPairsFromEnv("in_env", {}),
223  testing::Pair("baz", "qux")));
224  unsetenv("IN_ENV");
225 }
226 
227 } // namespace
228 } // namespace benchmark
absl::internal_any_invocable::True
std::integral_constant< bool, sizeof(absl::void_t< T... > *) !=0 > True
Definition: internal/any_invocable.h:687
benchmark
Definition: bm_alarm.cc:55
EXPECT_THAT
#define EXPECT_THAT(value, matcher)
benchmark::Int32FromEnv
int32_t Int32FromEnv(const char *flag, int32_t default_val)
Definition: benchmark/src/commandlineflags.cc:130
benchmark::KvPairsFromEnv
std::map< std::string, std::string > KvPairsFromEnv(const char *flag, std::map< std::string, std::string > default_val)
Definition: benchmark/src/commandlineflags.cc:160
setup.name
name
Definition: setup.py:542
benchmark::BoolFromEnv
bool BoolFromEnv(const char *flag, bool default_val)
Definition: benchmark/src/commandlineflags.cc:124
benchmark::StringFromEnv
const char * StringFromEnv(const char *flag, const char *default_val)
Definition: benchmark/src/commandlineflags.cc:154
EXPECT_EQ
#define EXPECT_EQ(a, b)
Definition: iomgr/time_averaged_stats_test.cc:27
google::protobuf.descriptor_pool.Default
def Default()
Definition: bloaty/third_party/protobuf/python/google/protobuf/descriptor_pool.py:1252
testing::ElementsAre
internal::ElementsAreMatcher< ::testing::tuple<> > ElementsAre()
Definition: cares/cares/test/gmock-1.8.0/gmock/gmock.h:13040
TEST
#define TEST(name, init_size,...)
Definition: arena_test.cc:75
testing::Pair
internal::PairMatcher< FirstMatcher, SecondMatcher > Pair(FirstMatcher first_matcher, SecondMatcher second_matcher)
Definition: cares/cares/test/gmock-1.8.0/gmock/gmock.h:9152
value
const char * value
Definition: hpack_parser_table.cc:165
EXPECT_STREQ
#define EXPECT_STREQ(s1, s2)
Definition: bloaty/third_party/googletest/googletest/include/gtest/gtest.h:2095
testing::UnorderedElementsAre
internal::UnorderedElementsAreMatcher< ::testing::tuple<> > UnorderedElementsAre()
Definition: cares/cares/test/gmock-1.8.0/gmock/gmock.h:13255
benchmark::DoubleFromEnv
double DoubleFromEnv(const char *flag, double default_val)
Definition: benchmark/src/commandlineflags.cc:142
getenv
#define getenv(ptr)
Definition: ares_private.h:106
test_server.False
False
Definition: test_server.py:35
ASSERT_EQ
#define ASSERT_EQ(val1, val2)
Definition: bloaty/third_party/googletest/googletest/include/gtest/gtest.h:2056


grpc
Author(s):
autogenerated on Thu Mar 13 2025 02:58:51