1*9356374aSAndroid Build Coastguard Worker //
2*9356374aSAndroid Build Coastguard Worker // Copyright 2019 The Abseil Authors.
3*9356374aSAndroid Build Coastguard Worker //
4*9356374aSAndroid Build Coastguard Worker // Licensed under the Apache License, Version 2.0 (the "License");
5*9356374aSAndroid Build Coastguard Worker // you may not use this file except in compliance with the License.
6*9356374aSAndroid Build Coastguard Worker // You may obtain a copy of the License at
7*9356374aSAndroid Build Coastguard Worker //
8*9356374aSAndroid Build Coastguard Worker // https://www.apache.org/licenses/LICENSE-2.0
9*9356374aSAndroid Build Coastguard Worker //
10*9356374aSAndroid Build Coastguard Worker // Unless required by applicable law or agreed to in writing, software
11*9356374aSAndroid Build Coastguard Worker // distributed under the License is distributed on an "AS IS" BASIS,
12*9356374aSAndroid Build Coastguard Worker // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13*9356374aSAndroid Build Coastguard Worker // See the License for the specific language governing permissions and
14*9356374aSAndroid Build Coastguard Worker // limitations under the License.
15*9356374aSAndroid Build Coastguard Worker
16*9356374aSAndroid Build Coastguard Worker #include "absl/flags/reflection.h"
17*9356374aSAndroid Build Coastguard Worker
18*9356374aSAndroid Build Coastguard Worker #include <memory>
19*9356374aSAndroid Build Coastguard Worker #include <string>
20*9356374aSAndroid Build Coastguard Worker
21*9356374aSAndroid Build Coastguard Worker #include "gmock/gmock.h"
22*9356374aSAndroid Build Coastguard Worker #include "gtest/gtest.h"
23*9356374aSAndroid Build Coastguard Worker #include "absl/flags/config.h"
24*9356374aSAndroid Build Coastguard Worker #include "absl/flags/flag.h"
25*9356374aSAndroid Build Coastguard Worker #include "absl/memory/memory.h"
26*9356374aSAndroid Build Coastguard Worker #include "absl/strings/str_cat.h"
27*9356374aSAndroid Build Coastguard Worker #include "absl/strings/str_split.h"
28*9356374aSAndroid Build Coastguard Worker
29*9356374aSAndroid Build Coastguard Worker ABSL_FLAG(int, int_flag, 1, "int_flag help");
30*9356374aSAndroid Build Coastguard Worker ABSL_FLAG(std::string, string_flag, "dflt", "string_flag help");
31*9356374aSAndroid Build Coastguard Worker ABSL_RETIRED_FLAG(bool, bool_retired_flag, false, "bool_retired_flag help");
32*9356374aSAndroid Build Coastguard Worker
33*9356374aSAndroid Build Coastguard Worker namespace {
34*9356374aSAndroid Build Coastguard Worker
35*9356374aSAndroid Build Coastguard Worker class ReflectionTest : public testing::Test {
36*9356374aSAndroid Build Coastguard Worker protected:
SetUp()37*9356374aSAndroid Build Coastguard Worker void SetUp() override {
38*9356374aSAndroid Build Coastguard Worker #if ABSL_FLAGS_STRIP_NAMES
39*9356374aSAndroid Build Coastguard Worker GTEST_SKIP() << "This test requires flag names to be present";
40*9356374aSAndroid Build Coastguard Worker #endif
41*9356374aSAndroid Build Coastguard Worker flag_saver_ = absl::make_unique<absl::FlagSaver>();
42*9356374aSAndroid Build Coastguard Worker }
TearDown()43*9356374aSAndroid Build Coastguard Worker void TearDown() override { flag_saver_.reset(); }
44*9356374aSAndroid Build Coastguard Worker
45*9356374aSAndroid Build Coastguard Worker private:
46*9356374aSAndroid Build Coastguard Worker std::unique_ptr<absl::FlagSaver> flag_saver_;
47*9356374aSAndroid Build Coastguard Worker };
48*9356374aSAndroid Build Coastguard Worker
49*9356374aSAndroid Build Coastguard Worker // --------------------------------------------------------------------
50*9356374aSAndroid Build Coastguard Worker
TEST_F(ReflectionTest,TestFindCommandLineFlag)51*9356374aSAndroid Build Coastguard Worker TEST_F(ReflectionTest, TestFindCommandLineFlag) {
52*9356374aSAndroid Build Coastguard Worker auto* handle = absl::FindCommandLineFlag("some_flag");
53*9356374aSAndroid Build Coastguard Worker EXPECT_EQ(handle, nullptr);
54*9356374aSAndroid Build Coastguard Worker
55*9356374aSAndroid Build Coastguard Worker handle = absl::FindCommandLineFlag("int_flag");
56*9356374aSAndroid Build Coastguard Worker EXPECT_NE(handle, nullptr);
57*9356374aSAndroid Build Coastguard Worker
58*9356374aSAndroid Build Coastguard Worker handle = absl::FindCommandLineFlag("string_flag");
59*9356374aSAndroid Build Coastguard Worker EXPECT_NE(handle, nullptr);
60*9356374aSAndroid Build Coastguard Worker
61*9356374aSAndroid Build Coastguard Worker handle = absl::FindCommandLineFlag("bool_retired_flag");
62*9356374aSAndroid Build Coastguard Worker EXPECT_NE(handle, nullptr);
63*9356374aSAndroid Build Coastguard Worker }
64*9356374aSAndroid Build Coastguard Worker
65*9356374aSAndroid Build Coastguard Worker // --------------------------------------------------------------------
66*9356374aSAndroid Build Coastguard Worker
TEST_F(ReflectionTest,TestGetAllFlags)67*9356374aSAndroid Build Coastguard Worker TEST_F(ReflectionTest, TestGetAllFlags) {
68*9356374aSAndroid Build Coastguard Worker auto all_flags = absl::GetAllFlags();
69*9356374aSAndroid Build Coastguard Worker EXPECT_NE(all_flags.find("int_flag"), all_flags.end());
70*9356374aSAndroid Build Coastguard Worker EXPECT_EQ(all_flags.find("bool_retired_flag"), all_flags.end());
71*9356374aSAndroid Build Coastguard Worker EXPECT_EQ(all_flags.find("some_undefined_flag"), all_flags.end());
72*9356374aSAndroid Build Coastguard Worker
73*9356374aSAndroid Build Coastguard Worker std::vector<absl::string_view> flag_names_first_attempt;
74*9356374aSAndroid Build Coastguard Worker auto all_flags_1 = absl::GetAllFlags();
75*9356374aSAndroid Build Coastguard Worker for (auto f : all_flags_1) {
76*9356374aSAndroid Build Coastguard Worker flag_names_first_attempt.push_back(f.first);
77*9356374aSAndroid Build Coastguard Worker }
78*9356374aSAndroid Build Coastguard Worker
79*9356374aSAndroid Build Coastguard Worker std::vector<absl::string_view> flag_names_second_attempt;
80*9356374aSAndroid Build Coastguard Worker auto all_flags_2 = absl::GetAllFlags();
81*9356374aSAndroid Build Coastguard Worker for (auto f : all_flags_2) {
82*9356374aSAndroid Build Coastguard Worker flag_names_second_attempt.push_back(f.first);
83*9356374aSAndroid Build Coastguard Worker }
84*9356374aSAndroid Build Coastguard Worker
85*9356374aSAndroid Build Coastguard Worker EXPECT_THAT(flag_names_first_attempt,
86*9356374aSAndroid Build Coastguard Worker ::testing::UnorderedElementsAreArray(flag_names_second_attempt));
87*9356374aSAndroid Build Coastguard Worker }
88*9356374aSAndroid Build Coastguard Worker
89*9356374aSAndroid Build Coastguard Worker // --------------------------------------------------------------------
90*9356374aSAndroid Build Coastguard Worker
91*9356374aSAndroid Build Coastguard Worker struct CustomUDT {
CustomUDT__anonaa6fc8e10111::CustomUDT92*9356374aSAndroid Build Coastguard Worker CustomUDT() : a(1), b(1) {}
CustomUDT__anonaa6fc8e10111::CustomUDT93*9356374aSAndroid Build Coastguard Worker CustomUDT(int a_, int b_) : a(a_), b(b_) {}
94*9356374aSAndroid Build Coastguard Worker
operator ==(const CustomUDT & f1,const CustomUDT & f2)95*9356374aSAndroid Build Coastguard Worker friend bool operator==(const CustomUDT& f1, const CustomUDT& f2) {
96*9356374aSAndroid Build Coastguard Worker return f1.a == f2.a && f1.b == f2.b;
97*9356374aSAndroid Build Coastguard Worker }
98*9356374aSAndroid Build Coastguard Worker
99*9356374aSAndroid Build Coastguard Worker int a;
100*9356374aSAndroid Build Coastguard Worker int b;
101*9356374aSAndroid Build Coastguard Worker };
AbslParseFlag(absl::string_view in,CustomUDT * f,std::string *)102*9356374aSAndroid Build Coastguard Worker bool AbslParseFlag(absl::string_view in, CustomUDT* f, std::string*) {
103*9356374aSAndroid Build Coastguard Worker std::vector<absl::string_view> parts =
104*9356374aSAndroid Build Coastguard Worker absl::StrSplit(in, ':', absl::SkipWhitespace());
105*9356374aSAndroid Build Coastguard Worker
106*9356374aSAndroid Build Coastguard Worker if (parts.size() != 2) return false;
107*9356374aSAndroid Build Coastguard Worker
108*9356374aSAndroid Build Coastguard Worker if (!absl::SimpleAtoi(parts[0], &f->a)) return false;
109*9356374aSAndroid Build Coastguard Worker
110*9356374aSAndroid Build Coastguard Worker if (!absl::SimpleAtoi(parts[1], &f->b)) return false;
111*9356374aSAndroid Build Coastguard Worker
112*9356374aSAndroid Build Coastguard Worker return true;
113*9356374aSAndroid Build Coastguard Worker }
AbslUnparseFlag(const CustomUDT & f)114*9356374aSAndroid Build Coastguard Worker std::string AbslUnparseFlag(const CustomUDT& f) {
115*9356374aSAndroid Build Coastguard Worker return absl::StrCat(f.a, ":", f.b);
116*9356374aSAndroid Build Coastguard Worker }
117*9356374aSAndroid Build Coastguard Worker
118*9356374aSAndroid Build Coastguard Worker } // namespace
119*9356374aSAndroid Build Coastguard Worker
120*9356374aSAndroid Build Coastguard Worker // --------------------------------------------------------------------
121*9356374aSAndroid Build Coastguard Worker
122*9356374aSAndroid Build Coastguard Worker ABSL_FLAG(bool, test_flag_01, true, "");
123*9356374aSAndroid Build Coastguard Worker ABSL_FLAG(int, test_flag_02, 1234, "");
124*9356374aSAndroid Build Coastguard Worker ABSL_FLAG(int16_t, test_flag_03, -34, "");
125*9356374aSAndroid Build Coastguard Worker ABSL_FLAG(uint16_t, test_flag_04, 189, "");
126*9356374aSAndroid Build Coastguard Worker ABSL_FLAG(int32_t, test_flag_05, 10765, "");
127*9356374aSAndroid Build Coastguard Worker ABSL_FLAG(uint32_t, test_flag_06, 40000, "");
128*9356374aSAndroid Build Coastguard Worker ABSL_FLAG(int64_t, test_flag_07, -1234567, "");
129*9356374aSAndroid Build Coastguard Worker ABSL_FLAG(uint64_t, test_flag_08, 9876543, "");
130*9356374aSAndroid Build Coastguard Worker ABSL_FLAG(double, test_flag_09, -9.876e-50, "");
131*9356374aSAndroid Build Coastguard Worker ABSL_FLAG(float, test_flag_10, 1.234e12f, "");
132*9356374aSAndroid Build Coastguard Worker ABSL_FLAG(std::string, test_flag_11, "", "");
133*9356374aSAndroid Build Coastguard Worker ABSL_FLAG(absl::Duration, test_flag_12, absl::Minutes(10), "");
134*9356374aSAndroid Build Coastguard Worker static int counter = 0;
__anonaa6fc8e10202() 135*9356374aSAndroid Build Coastguard Worker ABSL_FLAG(int, test_flag_13, 200, "").OnUpdate([]() { counter++; });
136*9356374aSAndroid Build Coastguard Worker ABSL_FLAG(CustomUDT, test_flag_14, {}, "");
137*9356374aSAndroid Build Coastguard Worker
138*9356374aSAndroid Build Coastguard Worker namespace {
139*9356374aSAndroid Build Coastguard Worker
TEST_F(ReflectionTest,TestFlagSaverInScope)140*9356374aSAndroid Build Coastguard Worker TEST_F(ReflectionTest, TestFlagSaverInScope) {
141*9356374aSAndroid Build Coastguard Worker {
142*9356374aSAndroid Build Coastguard Worker absl::FlagSaver s;
143*9356374aSAndroid Build Coastguard Worker counter = 0;
144*9356374aSAndroid Build Coastguard Worker absl::SetFlag(&FLAGS_test_flag_01, false);
145*9356374aSAndroid Build Coastguard Worker absl::SetFlag(&FLAGS_test_flag_02, -1021);
146*9356374aSAndroid Build Coastguard Worker absl::SetFlag(&FLAGS_test_flag_03, 6009);
147*9356374aSAndroid Build Coastguard Worker absl::SetFlag(&FLAGS_test_flag_04, 44);
148*9356374aSAndroid Build Coastguard Worker absl::SetFlag(&FLAGS_test_flag_05, +800);
149*9356374aSAndroid Build Coastguard Worker absl::SetFlag(&FLAGS_test_flag_06, -40978756);
150*9356374aSAndroid Build Coastguard Worker absl::SetFlag(&FLAGS_test_flag_07, 23405);
151*9356374aSAndroid Build Coastguard Worker absl::SetFlag(&FLAGS_test_flag_08, 975310);
152*9356374aSAndroid Build Coastguard Worker absl::SetFlag(&FLAGS_test_flag_09, 1.00001);
153*9356374aSAndroid Build Coastguard Worker absl::SetFlag(&FLAGS_test_flag_10, -3.54f);
154*9356374aSAndroid Build Coastguard Worker absl::SetFlag(&FLAGS_test_flag_11, "asdf");
155*9356374aSAndroid Build Coastguard Worker absl::SetFlag(&FLAGS_test_flag_12, absl::Hours(20));
156*9356374aSAndroid Build Coastguard Worker absl::SetFlag(&FLAGS_test_flag_13, 4);
157*9356374aSAndroid Build Coastguard Worker absl::SetFlag(&FLAGS_test_flag_14, CustomUDT{-1, -2});
158*9356374aSAndroid Build Coastguard Worker }
159*9356374aSAndroid Build Coastguard Worker
160*9356374aSAndroid Build Coastguard Worker EXPECT_EQ(absl::GetFlag(FLAGS_test_flag_01), true);
161*9356374aSAndroid Build Coastguard Worker EXPECT_EQ(absl::GetFlag(FLAGS_test_flag_02), 1234);
162*9356374aSAndroid Build Coastguard Worker EXPECT_EQ(absl::GetFlag(FLAGS_test_flag_03), -34);
163*9356374aSAndroid Build Coastguard Worker EXPECT_EQ(absl::GetFlag(FLAGS_test_flag_04), 189);
164*9356374aSAndroid Build Coastguard Worker EXPECT_EQ(absl::GetFlag(FLAGS_test_flag_05), 10765);
165*9356374aSAndroid Build Coastguard Worker EXPECT_EQ(absl::GetFlag(FLAGS_test_flag_06), 40000);
166*9356374aSAndroid Build Coastguard Worker EXPECT_EQ(absl::GetFlag(FLAGS_test_flag_07), -1234567);
167*9356374aSAndroid Build Coastguard Worker EXPECT_EQ(absl::GetFlag(FLAGS_test_flag_08), 9876543);
168*9356374aSAndroid Build Coastguard Worker EXPECT_NEAR(absl::GetFlag(FLAGS_test_flag_09), -9.876e-50, 1e-55);
169*9356374aSAndroid Build Coastguard Worker EXPECT_NEAR(absl::GetFlag(FLAGS_test_flag_10), 1.234e12f, 1e5f);
170*9356374aSAndroid Build Coastguard Worker EXPECT_EQ(absl::GetFlag(FLAGS_test_flag_11), "");
171*9356374aSAndroid Build Coastguard Worker EXPECT_EQ(absl::GetFlag(FLAGS_test_flag_12), absl::Minutes(10));
172*9356374aSAndroid Build Coastguard Worker EXPECT_EQ(absl::GetFlag(FLAGS_test_flag_13), 200);
173*9356374aSAndroid Build Coastguard Worker EXPECT_EQ(absl::GetFlag(FLAGS_test_flag_14), CustomUDT{});
174*9356374aSAndroid Build Coastguard Worker EXPECT_EQ(counter, 2);
175*9356374aSAndroid Build Coastguard Worker }
176*9356374aSAndroid Build Coastguard Worker
177*9356374aSAndroid Build Coastguard Worker // --------------------------------------------------------------------
178*9356374aSAndroid Build Coastguard Worker
TEST_F(ReflectionTest,TestFlagSaverVsUpdateViaReflection)179*9356374aSAndroid Build Coastguard Worker TEST_F(ReflectionTest, TestFlagSaverVsUpdateViaReflection) {
180*9356374aSAndroid Build Coastguard Worker {
181*9356374aSAndroid Build Coastguard Worker absl::FlagSaver s;
182*9356374aSAndroid Build Coastguard Worker counter = 0;
183*9356374aSAndroid Build Coastguard Worker std::string error;
184*9356374aSAndroid Build Coastguard Worker EXPECT_TRUE(
185*9356374aSAndroid Build Coastguard Worker absl::FindCommandLineFlag("test_flag_01")->ParseFrom("false", &error))
186*9356374aSAndroid Build Coastguard Worker << error;
187*9356374aSAndroid Build Coastguard Worker EXPECT_TRUE(
188*9356374aSAndroid Build Coastguard Worker absl::FindCommandLineFlag("test_flag_02")->ParseFrom("-4536", &error))
189*9356374aSAndroid Build Coastguard Worker << error;
190*9356374aSAndroid Build Coastguard Worker EXPECT_TRUE(
191*9356374aSAndroid Build Coastguard Worker absl::FindCommandLineFlag("test_flag_03")->ParseFrom("111", &error))
192*9356374aSAndroid Build Coastguard Worker << error;
193*9356374aSAndroid Build Coastguard Worker EXPECT_TRUE(
194*9356374aSAndroid Build Coastguard Worker absl::FindCommandLineFlag("test_flag_04")->ParseFrom("909", &error))
195*9356374aSAndroid Build Coastguard Worker << error;
196*9356374aSAndroid Build Coastguard Worker EXPECT_TRUE(
197*9356374aSAndroid Build Coastguard Worker absl::FindCommandLineFlag("test_flag_05")->ParseFrom("-2004", &error))
198*9356374aSAndroid Build Coastguard Worker << error;
199*9356374aSAndroid Build Coastguard Worker EXPECT_TRUE(
200*9356374aSAndroid Build Coastguard Worker absl::FindCommandLineFlag("test_flag_06")->ParseFrom("1000023", &error))
201*9356374aSAndroid Build Coastguard Worker << error;
202*9356374aSAndroid Build Coastguard Worker EXPECT_TRUE(
203*9356374aSAndroid Build Coastguard Worker absl::FindCommandLineFlag("test_flag_07")->ParseFrom("69305", &error))
204*9356374aSAndroid Build Coastguard Worker << error;
205*9356374aSAndroid Build Coastguard Worker EXPECT_TRUE(absl::FindCommandLineFlag("test_flag_08")
206*9356374aSAndroid Build Coastguard Worker ->ParseFrom("1000000001", &error))
207*9356374aSAndroid Build Coastguard Worker << error;
208*9356374aSAndroid Build Coastguard Worker EXPECT_TRUE(
209*9356374aSAndroid Build Coastguard Worker absl::FindCommandLineFlag("test_flag_09")->ParseFrom("2.09021", &error))
210*9356374aSAndroid Build Coastguard Worker << error;
211*9356374aSAndroid Build Coastguard Worker EXPECT_TRUE(
212*9356374aSAndroid Build Coastguard Worker absl::FindCommandLineFlag("test_flag_10")->ParseFrom("-33.1", &error))
213*9356374aSAndroid Build Coastguard Worker << error;
214*9356374aSAndroid Build Coastguard Worker EXPECT_TRUE(
215*9356374aSAndroid Build Coastguard Worker absl::FindCommandLineFlag("test_flag_11")->ParseFrom("ADD_FOO", &error))
216*9356374aSAndroid Build Coastguard Worker << error;
217*9356374aSAndroid Build Coastguard Worker EXPECT_TRUE(absl::FindCommandLineFlag("test_flag_12")
218*9356374aSAndroid Build Coastguard Worker ->ParseFrom("3h11m16s", &error))
219*9356374aSAndroid Build Coastguard Worker << error;
220*9356374aSAndroid Build Coastguard Worker EXPECT_TRUE(
221*9356374aSAndroid Build Coastguard Worker absl::FindCommandLineFlag("test_flag_13")->ParseFrom("0", &error))
222*9356374aSAndroid Build Coastguard Worker << error;
223*9356374aSAndroid Build Coastguard Worker EXPECT_TRUE(
224*9356374aSAndroid Build Coastguard Worker absl::FindCommandLineFlag("test_flag_14")->ParseFrom("10:1", &error))
225*9356374aSAndroid Build Coastguard Worker << error;
226*9356374aSAndroid Build Coastguard Worker }
227*9356374aSAndroid Build Coastguard Worker
228*9356374aSAndroid Build Coastguard Worker EXPECT_EQ(absl::GetFlag(FLAGS_test_flag_01), true);
229*9356374aSAndroid Build Coastguard Worker EXPECT_EQ(absl::GetFlag(FLAGS_test_flag_02), 1234);
230*9356374aSAndroid Build Coastguard Worker EXPECT_EQ(absl::GetFlag(FLAGS_test_flag_03), -34);
231*9356374aSAndroid Build Coastguard Worker EXPECT_EQ(absl::GetFlag(FLAGS_test_flag_04), 189);
232*9356374aSAndroid Build Coastguard Worker EXPECT_EQ(absl::GetFlag(FLAGS_test_flag_05), 10765);
233*9356374aSAndroid Build Coastguard Worker EXPECT_EQ(absl::GetFlag(FLAGS_test_flag_06), 40000);
234*9356374aSAndroid Build Coastguard Worker EXPECT_EQ(absl::GetFlag(FLAGS_test_flag_07), -1234567);
235*9356374aSAndroid Build Coastguard Worker EXPECT_EQ(absl::GetFlag(FLAGS_test_flag_08), 9876543);
236*9356374aSAndroid Build Coastguard Worker EXPECT_NEAR(absl::GetFlag(FLAGS_test_flag_09), -9.876e-50, 1e-55);
237*9356374aSAndroid Build Coastguard Worker EXPECT_NEAR(absl::GetFlag(FLAGS_test_flag_10), 1.234e12f, 1e5f);
238*9356374aSAndroid Build Coastguard Worker EXPECT_EQ(absl::GetFlag(FLAGS_test_flag_11), "");
239*9356374aSAndroid Build Coastguard Worker EXPECT_EQ(absl::GetFlag(FLAGS_test_flag_12), absl::Minutes(10));
240*9356374aSAndroid Build Coastguard Worker EXPECT_EQ(absl::GetFlag(FLAGS_test_flag_13), 200);
241*9356374aSAndroid Build Coastguard Worker EXPECT_EQ(absl::GetFlag(FLAGS_test_flag_14), CustomUDT{});
242*9356374aSAndroid Build Coastguard Worker EXPECT_EQ(counter, 2);
243*9356374aSAndroid Build Coastguard Worker }
244*9356374aSAndroid Build Coastguard Worker
245*9356374aSAndroid Build Coastguard Worker // --------------------------------------------------------------------
246*9356374aSAndroid Build Coastguard Worker
TEST_F(ReflectionTest,TestMultipleFlagSaversInEnclosedScopes)247*9356374aSAndroid Build Coastguard Worker TEST_F(ReflectionTest, TestMultipleFlagSaversInEnclosedScopes) {
248*9356374aSAndroid Build Coastguard Worker {
249*9356374aSAndroid Build Coastguard Worker absl::FlagSaver s;
250*9356374aSAndroid Build Coastguard Worker absl::SetFlag(&FLAGS_test_flag_08, 10);
251*9356374aSAndroid Build Coastguard Worker EXPECT_EQ(absl::GetFlag(FLAGS_test_flag_08), 10);
252*9356374aSAndroid Build Coastguard Worker {
253*9356374aSAndroid Build Coastguard Worker absl::FlagSaver s;
254*9356374aSAndroid Build Coastguard Worker absl::SetFlag(&FLAGS_test_flag_08, 20);
255*9356374aSAndroid Build Coastguard Worker EXPECT_EQ(absl::GetFlag(FLAGS_test_flag_08), 20);
256*9356374aSAndroid Build Coastguard Worker {
257*9356374aSAndroid Build Coastguard Worker absl::FlagSaver s;
258*9356374aSAndroid Build Coastguard Worker absl::SetFlag(&FLAGS_test_flag_08, -200);
259*9356374aSAndroid Build Coastguard Worker EXPECT_EQ(absl::GetFlag(FLAGS_test_flag_08), -200);
260*9356374aSAndroid Build Coastguard Worker }
261*9356374aSAndroid Build Coastguard Worker EXPECT_EQ(absl::GetFlag(FLAGS_test_flag_08), 20);
262*9356374aSAndroid Build Coastguard Worker }
263*9356374aSAndroid Build Coastguard Worker EXPECT_EQ(absl::GetFlag(FLAGS_test_flag_08), 10);
264*9356374aSAndroid Build Coastguard Worker }
265*9356374aSAndroid Build Coastguard Worker EXPECT_EQ(absl::GetFlag(FLAGS_test_flag_08), 9876543);
266*9356374aSAndroid Build Coastguard Worker }
267*9356374aSAndroid Build Coastguard Worker
268*9356374aSAndroid Build Coastguard Worker } // namespace
269