abseil-cpp/absl/flags/usage_config_test.cc
Go to the documentation of this file.
1 //
2 // Copyright 2019 The Abseil Authors.
3 //
4 // Licensed under the Apache License, Version 2.0 (the "License");
5 // you may not use this file except in compliance with the License.
6 // You may obtain a copy of the License at
7 //
8 // https://www.apache.org/licenses/LICENSE-2.0
9 //
10 // Unless required by applicable law or agreed to in writing, software
11 // distributed under the License is distributed on an "AS IS" BASIS,
12 // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 // See the License for the specific language governing permissions and
14 // limitations under the License.
15 
16 #include "absl/flags/usage_config.h"
17 
18 #include <string>
19 
20 #include "gtest/gtest.h"
21 #include "absl/flags/internal/path_util.h"
22 #include "absl/flags/internal/program_name.h"
23 #include "absl/strings/match.h"
24 #include "absl/strings/string_view.h"
25 
26 namespace {
27 
28 class FlagsUsageConfigTest : public testing::Test {
29  protected:
30  void SetUp() override {
31  // Install Default config for the use on this unit test.
32  // Binary may install a custom config before tests are run.
33  absl::FlagsUsageConfig default_config;
34  absl::SetFlagsUsageConfig(default_config);
35  }
36 };
37 
38 namespace flags = absl::flags_internal;
39 
40 bool TstContainsHelpshortFlags(absl::string_view f) {
41  return absl::StartsWith(flags::Basename(f), "progname.");
42 }
43 
44 bool TstContainsHelppackageFlags(absl::string_view f) {
45  return absl::EndsWith(flags::Package(f), "aaa/");
46 }
47 
48 bool TstContainsHelpFlags(absl::string_view f) {
49  return absl::EndsWith(flags::Package(f), "zzz/");
50 }
51 
52 std::string TstVersionString() { return "program 1.0.0"; }
53 
54 std::string TstNormalizeFilename(absl::string_view filename) {
55  return std::string(filename.substr(2));
56 }
57 
58 void TstReportUsageMessage(absl::string_view msg) {}
59 
60 // --------------------------------------------------------------------
61 
62 TEST_F(FlagsUsageConfigTest, TestGetSetFlagsUsageConfig) {
63  EXPECT_TRUE(flags::GetUsageConfig().contains_helpshort_flags);
64  EXPECT_TRUE(flags::GetUsageConfig().contains_help_flags);
65  EXPECT_TRUE(flags::GetUsageConfig().contains_helppackage_flags);
66  EXPECT_TRUE(flags::GetUsageConfig().version_string);
67  EXPECT_TRUE(flags::GetUsageConfig().normalize_filename);
68 
69  absl::FlagsUsageConfig empty_config;
70  empty_config.contains_helpshort_flags = &TstContainsHelpshortFlags;
71  empty_config.contains_help_flags = &TstContainsHelpFlags;
72  empty_config.contains_helppackage_flags = &TstContainsHelppackageFlags;
73  empty_config.version_string = &TstVersionString;
74  empty_config.normalize_filename = &TstNormalizeFilename;
75  absl::SetFlagsUsageConfig(empty_config);
76 
77  EXPECT_TRUE(flags::GetUsageConfig().contains_helpshort_flags);
78  EXPECT_TRUE(flags::GetUsageConfig().contains_help_flags);
79  EXPECT_TRUE(flags::GetUsageConfig().contains_helppackage_flags);
80  EXPECT_TRUE(flags::GetUsageConfig().version_string);
81  EXPECT_TRUE(flags::GetUsageConfig().normalize_filename);
82 }
83 
84 // --------------------------------------------------------------------
85 
86 TEST_F(FlagsUsageConfigTest, TestContainsHelpshortFlags) {
87 #if defined(_WIN32)
88  flags::SetProgramInvocationName("usage_config_test.exe");
89 #else
90  flags::SetProgramInvocationName("usage_config_test");
91 #endif
92 
94  EXPECT_TRUE(config.contains_helpshort_flags("adir/cd/usage_config_test.cc"));
96  config.contains_helpshort_flags("aaaa/usage_config_test-main.cc"));
97  EXPECT_TRUE(config.contains_helpshort_flags("abc/usage_config_test_main.cc"));
98  EXPECT_FALSE(config.contains_helpshort_flags("usage_config_main.cc"));
99 
100  absl::FlagsUsageConfig empty_config;
101  empty_config.contains_helpshort_flags = &TstContainsHelpshortFlags;
102  absl::SetFlagsUsageConfig(empty_config);
103 
104  EXPECT_TRUE(
105  flags::GetUsageConfig().contains_helpshort_flags("aaa/progname.cpp"));
106  EXPECT_FALSE(
107  flags::GetUsageConfig().contains_helpshort_flags("aaa/progmane.cpp"));
108 }
109 
110 // --------------------------------------------------------------------
111 
112 TEST_F(FlagsUsageConfigTest, TestContainsHelpFlags) {
113  flags::SetProgramInvocationName("usage_config_test");
114 
115  auto config = flags::GetUsageConfig();
116  EXPECT_TRUE(config.contains_help_flags("zzz/usage_config_test.cc"));
117  EXPECT_TRUE(
118  config.contains_help_flags("bdir/a/zzz/usage_config_test-main.cc"));
119  EXPECT_TRUE(
120  config.contains_help_flags("//aqse/zzz/usage_config_test_main.cc"));
121  EXPECT_FALSE(config.contains_help_flags("zzz/aa/usage_config_main.cc"));
122 
123  absl::FlagsUsageConfig empty_config;
124  empty_config.contains_help_flags = &TstContainsHelpFlags;
125  absl::SetFlagsUsageConfig(empty_config);
126 
127  EXPECT_TRUE(flags::GetUsageConfig().contains_help_flags("zzz/main-body.c"));
128  EXPECT_FALSE(
129  flags::GetUsageConfig().contains_help_flags("zzz/dir/main-body.c"));
130 }
131 
132 // --------------------------------------------------------------------
133 
134 TEST_F(FlagsUsageConfigTest, TestContainsHelppackageFlags) {
135  flags::SetProgramInvocationName("usage_config_test");
136 
137  auto config = flags::GetUsageConfig();
138  EXPECT_TRUE(config.contains_helppackage_flags("aaa/usage_config_test.cc"));
139  EXPECT_TRUE(
140  config.contains_helppackage_flags("bbdir/aaa/usage_config_test-main.cc"));
141  EXPECT_TRUE(config.contains_helppackage_flags(
142  "//aqswde/aaa/usage_config_test_main.cc"));
143  EXPECT_FALSE(config.contains_helppackage_flags("aadir/usage_config_main.cc"));
144 
145  absl::FlagsUsageConfig empty_config;
146  empty_config.contains_helppackage_flags = &TstContainsHelppackageFlags;
147  absl::SetFlagsUsageConfig(empty_config);
148 
149  EXPECT_TRUE(
150  flags::GetUsageConfig().contains_helppackage_flags("aaa/main-body.c"));
151  EXPECT_FALSE(
152  flags::GetUsageConfig().contains_helppackage_flags("aadir/main-body.c"));
153 }
154 
155 // --------------------------------------------------------------------
156 
157 TEST_F(FlagsUsageConfigTest, TestVersionString) {
158  flags::SetProgramInvocationName("usage_config_test");
159 
160 #ifdef NDEBUG
161  std::string expected_output = "usage_config_test\n";
162 #else
164  "usage_config_test\nDebug build (NDEBUG not #defined)\n";
165 #endif
166 
167  EXPECT_EQ(flags::GetUsageConfig().version_string(), expected_output);
168 
169  absl::FlagsUsageConfig empty_config;
170  empty_config.version_string = &TstVersionString;
171  absl::SetFlagsUsageConfig(empty_config);
172 
173  EXPECT_EQ(flags::GetUsageConfig().version_string(), "program 1.0.0");
174 }
175 
176 // --------------------------------------------------------------------
177 
178 TEST_F(FlagsUsageConfigTest, TestNormalizeFilename) {
179  // This tests the default implementation.
180  EXPECT_EQ(flags::GetUsageConfig().normalize_filename("a/a.cc"), "a/a.cc");
181  EXPECT_EQ(flags::GetUsageConfig().normalize_filename("/a/a.cc"), "a/a.cc");
182  EXPECT_EQ(flags::GetUsageConfig().normalize_filename("///a/a.cc"), "a/a.cc");
183  EXPECT_EQ(flags::GetUsageConfig().normalize_filename("/"), "");
184 
185  // This tests that the custom implementation is called.
186  absl::FlagsUsageConfig empty_config;
187  empty_config.normalize_filename = &TstNormalizeFilename;
188  absl::SetFlagsUsageConfig(empty_config);
189 
190  EXPECT_EQ(flags::GetUsageConfig().normalize_filename("a/a.cc"), "a.cc");
191  EXPECT_EQ(flags::GetUsageConfig().normalize_filename("aaa/a.cc"), "a/a.cc");
192 
193  // This tests that the default implementation is called.
194  empty_config.normalize_filename = nullptr;
195  absl::SetFlagsUsageConfig(empty_config);
196 
197  EXPECT_EQ(flags::GetUsageConfig().normalize_filename("a/a.cc"), "a/a.cc");
198  EXPECT_EQ(flags::GetUsageConfig().normalize_filename("/a/a.cc"), "a/a.cc");
199  EXPECT_EQ(flags::GetUsageConfig().normalize_filename("///a/a.cc"), "a/a.cc");
200  EXPECT_EQ(flags::GetUsageConfig().normalize_filename("\\a\\a.cc"), "a\\a.cc");
201  EXPECT_EQ(flags::GetUsageConfig().normalize_filename("//"), "");
202  EXPECT_EQ(flags::GetUsageConfig().normalize_filename("\\\\"), "");
203 }
204 
205 } // namespace
EXPECT_FALSE
#define EXPECT_FALSE(condition)
Definition: bloaty/third_party/googletest/googletest/include/gtest/gtest.h:1970
filename
const char * filename
Definition: bloaty/third_party/zlib/contrib/minizip/ioapi.h:135
absl::FlagsUsageConfig::contains_help_flags
flags_internal::FlagKindFilter contains_help_flags
Definition: abseil-cpp/absl/flags/usage_config.h:83
absl::FlagsUsageConfig::contains_helppackage_flags
flags_internal::FlagKindFilter contains_helppackage_flags
Definition: abseil-cpp/absl/flags/usage_config.h:91
absl::StartsWith
bool StartsWith(absl::string_view text, absl::string_view prefix) noexcept
Definition: third_party/abseil-cpp/absl/strings/match.h:58
absl::string_view
Definition: abseil-cpp/absl/strings/string_view.h:167
testing::internal::string
::std::string string
Definition: bloaty/third_party/protobuf/third_party/googletest/googletest/include/gtest/internal/gtest-port.h:881
absl::FlagsUsageConfig::normalize_filename
std::function< std::string(absl::string_view)> normalize_filename
Definition: abseil-cpp/absl/flags/usage_config.h:106
testing::Test
Definition: bloaty/third_party/googletest/googletest/include/gtest/gtest.h:402
EXPECT_EQ
#define EXPECT_EQ(a, b)
Definition: iomgr/time_averaged_stats_test.cc:27
autogen_x86imm.f
f
Definition: autogen_x86imm.py:9
tap2pcap_test.expected_output
expected_output
Definition: tap2pcap_test.py:23
absl::FlagsUsageConfig::version_string
std::function< std::string()> version_string
Definition: abseil-cpp/absl/flags/usage_config.h:95
absl::SetFlagsUsageConfig
void SetFlagsUsageConfig(FlagsUsageConfig usage_config)
Definition: abseil-cpp/absl/flags/usage_config.cc:138
absl::flags_internal::Package
absl::string_view Package(absl::string_view filename)
Definition: abseil-cpp/absl/flags/internal/path_util.h:50
absl::FlagsUsageConfig
Definition: abseil-cpp/absl/flags/usage_config.h:68
msg
std::string msg
Definition: client_interceptors_end2end_test.cc:372
testing::Test::SetUp
virtual void SetUp()
Definition: bloaty/third_party/googletest/googletest/src/gtest.cc:2264
absl::flags_internal::SetProgramInvocationName
void SetProgramInvocationName(absl::string_view prog_name_str)
Definition: abseil-cpp/absl/flags/internal/program_name.cc:49
absl::flags_internal
Definition: abseil-cpp/absl/flags/commandlineflag.h:40
absl::flags_internal::GetUsageConfig
FlagsUsageConfig GetUsageConfig()
Definition: abseil-cpp/absl/flags/usage_config.cc:113
config_s
Definition: bloaty/third_party/zlib/deflate.c:120
absl::FlagsUsageConfig::contains_helpshort_flags
flags_internal::FlagKindFilter contains_helpshort_flags
Definition: abseil-cpp/absl/flags/usage_config.h:75
EXPECT_TRUE
#define EXPECT_TRUE(condition)
Definition: bloaty/third_party/googletest/googletest/include/gtest/gtest.h:1967
absl::raw_logging_internal::Basename
constexpr const char * Basename(const char *fname, int offset)
Definition: abseil-cpp/absl/base/internal/raw_logging.h:119
absl::EndsWith
bool EndsWith(absl::string_view text, absl::string_view suffix) noexcept
Definition: third_party/abseil-cpp/absl/strings/match.h:68
TEST_F
#define TEST_F(test_fixture, test_name)
Definition: bloaty/third_party/googletest/googletest/include/gtest/gtest.h:2367


grpc
Author(s):
autogenerated on Fri May 16 2025 03:00:48