Skip to content

Commit 8f1b0e8

Browse files
committed
test: lock down cobra-like error/usage output
1 parent 71ff334 commit 8f1b0e8

File tree

2 files changed

+50
-15
lines changed

2 files changed

+50
-15
lines changed

CMakeLists.txt

Lines changed: 48 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -96,10 +96,12 @@ add_executable(basic_example examples/basic_example.cpp)
9696
target_link_libraries(basic_example PRIVATE clasp)
9797

9898
add_test(NAME basic_help COMMAND basic_example help)
99-
set_tests_properties(basic_help PROPERTIES PASS_REGULAR_EXPRESSION "Usage: app")
99+
set_tests_properties(basic_help PROPERTIES PASS_REGULAR_EXPRESSION [==[^Usage: app \[command\] \[flags\]\r?
100+
]==])
100101

101102
add_test(NAME basic_help_sub COMMAND basic_example help print)
102-
set_tests_properties(basic_help_sub PROPERTIES PASS_REGULAR_EXPRESSION "Usage: app print")
103+
set_tests_properties(basic_help_sub PROPERTIES PASS_REGULAR_EXPRESSION [==[^Usage: app print \[flags\]\r?
104+
]==])
103105

104106
add_test(NAME basic_help_examples COMMAND basic_example --help)
105107
set_tests_properties(basic_help_examples PROPERTIES PASS_REGULAR_EXPRESSION "Examples:")
@@ -111,22 +113,42 @@ add_test(NAME basic_help_shows_types COMMAND basic_example help print)
111113
set_tests_properties(basic_help_shows_types PROPERTIES PASS_REGULAR_EXPRESSION "--message string")
112114

113115
add_test(NAME basic_unknown COMMAND basic_example nope)
114-
set_tests_properties(basic_unknown PROPERTIES PASS_REGULAR_EXPRESSION "unknown command")
116+
set_tests_properties(basic_unknown PROPERTIES PASS_REGULAR_EXPRESSION [==[^Error: unknown command \"nope\" for \"app\"\r?
117+
Run 'app --help' for usage\.\r?
118+
]==])
115119

116120
add_test(NAME basic_missing_flag_value COMMAND basic_example print --message)
117-
set_tests_properties(basic_missing_flag_value PROPERTIES PASS_REGULAR_EXPRESSION "flag needs an argument.*Usage: app print")
121+
set_tests_properties(basic_missing_flag_value PROPERTIES PASS_REGULAR_EXPRESSION [==[^Error: flag needs an argument: --message\r?
122+
\r?
123+
Usage: app print \[flags\]\r?
124+
]==])
118125

119126
add_test(NAME basic_unknown_cmd_suggest COMMAND basic_example prnit)
120-
set_tests_properties(basic_unknown_cmd_suggest PROPERTIES PASS_REGULAR_EXPRESSION [==[Did you mean this\?
121-
print]==])
127+
set_tests_properties(basic_unknown_cmd_suggest PROPERTIES PASS_REGULAR_EXPRESSION [==[^Error: unknown command \"prnit\" for \"app\"\r?
128+
\r?
129+
Did you mean this\?\r?
130+
print\r?
131+
\r?
132+
Run 'app --help' for usage\.\r?
133+
]==])
122134

123135
add_test(NAME basic_unknown_cmd_prefix_suggest COMMAND basic_example pri)
124-
set_tests_properties(basic_unknown_cmd_prefix_suggest PROPERTIES PASS_REGULAR_EXPRESSION [==[Did you mean this\?
125-
print]==])
136+
set_tests_properties(basic_unknown_cmd_prefix_suggest PROPERTIES PASS_REGULAR_EXPRESSION [==[^Error: unknown command \"pri\" for \"app\"\r?
137+
\r?
138+
Did you mean this\?\r?
139+
print\r?
140+
\r?
141+
Run 'app --help' for usage\.\r?
142+
]==])
126143

127144
add_test(NAME basic_unknown_flag_suggest COMMAND basic_example print --mesage hi)
128-
set_tests_properties(basic_unknown_flag_suggest PROPERTIES PASS_REGULAR_EXPRESSION [==[Did you mean this\?
129-
--message]==])
145+
set_tests_properties(basic_unknown_flag_suggest PROPERTIES PASS_REGULAR_EXPRESSION [==[^Error: unknown flag: --mesage\r?
146+
\r?
147+
Did you mean this\?\r?
148+
--message\r?
149+
\r?
150+
Usage: app print \[flags\]\r?
151+
]==])
130152

131153
add_test(NAME basic_no_args_prints_help COMMAND basic_example)
132154
set_tests_properties(basic_no_args_prints_help PROPERTIES PASS_REGULAR_EXPRESSION "Usage: app")
@@ -162,13 +184,22 @@ add_test(NAME args_noargs_ok COMMAND args_example noargs)
162184
set_tests_properties(args_noargs_ok PROPERTIES PASS_REGULAR_EXPRESSION "ok")
163185

164186
add_test(NAME args_noargs_fail_shows_usage COMMAND args_example noargs x)
165-
set_tests_properties(args_noargs_fail_shows_usage PROPERTIES PASS_REGULAR_EXPRESSION "Error: accepts no arguments.*Usage: app noargs")
187+
set_tests_properties(args_noargs_fail_shows_usage PROPERTIES PASS_REGULAR_EXPRESSION [==[^Error: accepts no arguments\r?
188+
\r?
189+
Usage: app noargs \[flags\]\r?
190+
]==])
166191

167192
add_test(NAME args_exact_fail_shows_usage COMMAND args_example exact one)
168-
set_tests_properties(args_exact_fail_shows_usage PROPERTIES PASS_REGULAR_EXPRESSION "Error: accepts 2 arg\\(s\\).*Usage: app exact")
193+
set_tests_properties(args_exact_fail_shows_usage PROPERTIES PASS_REGULAR_EXPRESSION [==[^Error: accepts 2 arg\(s\)\r?
194+
\r?
195+
Usage: app exact \[flags\]\r?
196+
]==])
169197

170198
add_test(NAME args_range_fail_shows_usage COMMAND args_example range a b c)
171-
set_tests_properties(args_range_fail_shows_usage PROPERTIES PASS_REGULAR_EXPRESSION "Error: accepts between 1 and 2 arg\\(s\\).*Usage: app range")
199+
set_tests_properties(args_range_fail_shows_usage PROPERTIES PASS_REGULAR_EXPRESSION [==[^Error: accepts between 1 and 2 arg\(s\)\r?
200+
\r?
201+
Usage: app range \[flags\]\r?
202+
]==])
172203

173204
add_test(NAME args_silence_usage_hides_usage COMMAND args_example silence_usage)
174205
set_tests_properties(args_silence_usage_hides_usage PROPERTIES PASS_REGULAR_EXPRESSION "Error: accepts 1 arg\\(s\\)" FAIL_REGULAR_EXPRESSION "Usage:")
@@ -177,7 +208,10 @@ add_test(NAME args_silence_errors_hides_error COMMAND args_example silence_error
177208
set_tests_properties(args_silence_errors_hides_error PROPERTIES PASS_REGULAR_EXPRESSION "Usage: app silence_errors" FAIL_REGULAR_EXPRESSION "Error:")
178209

179210
add_test(NAME basic_invalid_bool_eq COMMAND basic_example --verbose=maybe print --message hi)
180-
set_tests_properties(basic_invalid_bool_eq PROPERTIES PASS_REGULAR_EXPRESSION [==[invalid argument "maybe" for "--verbose".*Usage: app print]==])
211+
set_tests_properties(basic_invalid_bool_eq PROPERTIES PASS_REGULAR_EXPRESSION [==[^Error: invalid argument \"maybe\" for \"--verbose\"\r?
212+
\r?
213+
Usage: app print \[flags\]\r?
214+
]==])
181215

182216
add_test(NAME basic_disable_flag_parsing COMMAND basic_example raw --help --x -y)
183217
set_tests_properties(basic_disable_flag_parsing PROPERTIES PASS_REGULAR_EXPRESSION "--help --x -y")

include/clasp/command.hpp

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1880,7 +1880,8 @@ class Command {
18801880

18811881
int fail(std::string message, bool showUsage) const {
18821882
if (!silenceErrors_ && !message.empty()) {
1883-
err() << "Error: " << message << "\n";
1883+
err() << "Error: " << message;
1884+
if (message.back() != '\n') err() << "\n";
18841885
}
18851886
if (showUsage && !silenceUsage_) {
18861887
err() << "\n";

0 commit comments

Comments
 (0)