Skip to content

Commit 3e794b1

Browse files
committed
test: broaden coverage for completion and deprecated paths
1 parent 7534d25 commit 3e794b1

File tree

3 files changed

+93
-0
lines changed

3 files changed

+93
-0
lines changed

CMakeLists.txt

Lines changed: 46 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -128,6 +128,9 @@ add_test(NAME basic_unknown_flag_suggest COMMAND basic_example print --mesage hi
128128
set_tests_properties(basic_unknown_flag_suggest PROPERTIES PASS_REGULAR_EXPRESSION [==[Did you mean this\?
129129
--message]==])
130130

131+
add_test(NAME basic_no_args_prints_help COMMAND basic_example)
132+
set_tests_properties(basic_no_args_prints_help PROPERTIES PASS_REGULAR_EXPRESSION "Usage: app")
133+
131134
add_test(NAME basic_persistent_flag_before_sub COMMAND basic_example --verbose print --message hi)
132135
set_tests_properties(basic_persistent_flag_before_sub PROPERTIES PASS_REGULAR_EXPRESSION "hi")
133136

@@ -257,6 +260,9 @@ set_tests_properties(completion_powershell_dynamic PROPERTIES PASS_REGULAR_EXPRE
257260
add_test(NAME completion_powershell_eq_split COMMAND completion_example completion powershell)
258261
set_tests_properties(completion_powershell_eq_split PROPERTIES PASS_REGULAR_EXPRESSION "\\$origWordToComplete")
259262

263+
add_test(NAME completion_complete_no_desc_includes_version COMMAND completion_example __completeNoDesc --)
264+
set_tests_properties(completion_complete_no_desc_includes_version PROPERTIES PASS_REGULAR_EXPRESSION "--version")
265+
260266
add_executable(file_completion_example examples/file_completion_example.cpp)
261267
target_link_libraries(file_completion_example PRIVATE clasp)
262268

@@ -374,6 +380,15 @@ set_tests_properties(dynamic_complete_valid_args PROPERTIES PASS_REGULAR_EXPRESS
374380
add_test(NAME dynamic_complete_flag_value COMMAND dynamic_completion_example __completeNoDesc paint --color r)
375381
set_tests_properties(dynamic_complete_flag_value PROPERTIES PASS_REGULAR_EXPRESSION "red")
376382

383+
add_test(NAME dynamic_complete_flag_value_short COMMAND dynamic_completion_example __completeNoDesc paint -c r)
384+
set_tests_properties(dynamic_complete_flag_value_short PROPERTIES PASS_REGULAR_EXPRESSION "red")
385+
386+
add_test(NAME dynamic_complete_flag_value_eq_short COMMAND dynamic_completion_example __completeNoDesc paint -c=r)
387+
set_tests_properties(dynamic_complete_flag_value_eq_short PROPERTIES PASS_REGULAR_EXPRESSION "-c=red")
388+
389+
add_test(NAME dynamic_complete_flag_names_short COMMAND dynamic_completion_example __completeNoDesc paint -)
390+
set_tests_properties(dynamic_complete_flag_names_short PROPERTIES PASS_REGULAR_EXPRESSION "-c")
391+
377392
add_test(NAME dynamic_complete_flag_value_eq COMMAND dynamic_completion_example __completeNoDesc paint --color=r)
378393
set_tests_properties(dynamic_complete_flag_value_eq PROPERTIES PASS_REGULAR_EXPRESSION "--color=red")
379394

@@ -622,6 +637,12 @@ set_tests_properties(net_extra_mask_ok PROPERTIES PASS_REGULAR_EXPRESSION "mask=
622637
add_test(NAME net_extra_invalid_mask COMMAND net_extra_example show --mask 255.0.255.0)
623638
set_tests_properties(net_extra_invalid_mask PROPERTIES PASS_REGULAR_EXPRESSION [==[invalid argument "255.0.255.0" for "--mask".*Usage: app show]==])
624639

640+
add_test(NAME net_extra_empty_mask_ok COMMAND net_extra_example show --mask=)
641+
set_tests_properties(net_extra_empty_mask_ok PROPERTIES PASS_REGULAR_EXPRESSION "mask=")
642+
643+
add_test(NAME net_extra_ipv6_mask_rejected COMMAND net_extra_example show --mask 2001:db8::1)
644+
set_tests_properties(net_extra_ipv6_mask_rejected PROPERTIES PASS_REGULAR_EXPRESSION [==[invalid argument "2001:db8::1" for "--mask".*Usage: app show]==])
645+
625646
add_executable(url_example examples/url_example.cpp)
626647
target_link_libraries(url_example PRIVATE clasp)
627648

@@ -637,6 +658,12 @@ set_tests_properties(url_invalid_scheme PROPERTIES PASS_REGULAR_EXPRESSION [==[i
637658
add_test(NAME url_invalid_empty_authority COMMAND url_example show --url http:///a)
638659
set_tests_properties(url_invalid_empty_authority PROPERTIES PASS_REGULAR_EXPRESSION [==[invalid argument "http:///a" for "--url".*Usage: app show]==])
639660

661+
add_test(NAME url_relative_ok COMMAND url_example show --url foo/bar)
662+
set_tests_properties(url_relative_ok PROPERTIES PASS_REGULAR_EXPRESSION "url=foo/bar")
663+
664+
add_test(NAME url_empty_ok COMMAND url_example show --url=)
665+
set_tests_properties(url_empty_ok PROPERTIES PASS_REGULAR_EXPRESSION "url=")
666+
640667
add_executable(flag_convert_example examples/flag_convert_example.cpp)
641668
target_link_libraries(flag_convert_example PRIVATE clasp)
642669

@@ -775,6 +802,25 @@ set_tests_properties(utils_suggest_prefix_branch PROPERTIES PASS_REGULAR_EXPRESS
775802
add_test(NAME utils_suggest_distance_branch COMMAND utils_suggest_example prnit print)
776803
set_tests_properties(utils_suggest_distance_branch PROPERTIES PASS_REGULAR_EXPRESSION "print")
777804

805+
add_executable(traverse_completion_example examples/traverse_completion_example.cpp)
806+
target_link_libraries(traverse_completion_example PRIVATE clasp)
807+
808+
add_test(NAME traverse_completion_flag_before_sub_skips_value COMMAND traverse_completion_example __completeNoDesc --message hi p)
809+
set_tests_properties(traverse_completion_flag_before_sub_skips_value PROPERTIES PASS_REGULAR_EXPRESSION "print")
810+
811+
add_test(NAME traverse_completion_short_group_skips_value COMMAND traverse_completion_example __completeNoDesc -vm hi p)
812+
set_tests_properties(traverse_completion_short_group_skips_value PROPERTIES PASS_REGULAR_EXPRESSION "print")
813+
814+
add_test(NAME traverse_completion_bool_negation COMMAND traverse_completion_example __completeNoDesc --no-verbose p)
815+
set_tests_properties(traverse_completion_bool_negation PROPERTIES PASS_REGULAR_EXPRESSION "print")
816+
817+
add_executable(deprecated_example examples/deprecated_example.cpp)
818+
target_link_libraries(deprecated_example PRIVATE clasp)
819+
820+
add_test(NAME deprecated_command_and_flag_warn COMMAND deprecated_example old --old-flag)
821+
set_tests_properties(deprecated_command_and_flag_warn PROPERTIES
822+
PASS_REGULAR_EXPRESSION [==[deprecated: use `app new` instead.*Flag \"--old-flag\" is deprecated: use `--new-flag` instead]==])
823+
778824
add_executable(custom_value_example examples/custom_value_example.cpp)
779825
target_link_libraries(custom_value_example PRIVATE clasp)
780826

examples/deprecated_example.cpp

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,24 @@
1+
#include <iostream>
2+
#include <string>
3+
#include <vector>
4+
5+
#include "clasp/clasp.hpp"
6+
7+
int main(int argc, char** argv) {
8+
clasp::Command rootCmd("app", "Deprecated example");
9+
rootCmd.version("0.1.0");
10+
11+
clasp::Command oldCmd("old", "Old command");
12+
oldCmd.deprecated("use `app new` instead");
13+
oldCmd.withFlag("--old-flag", "", "An old flag");
14+
oldCmd.markFlagDeprecated("--old-flag", "use `--new-flag` instead");
15+
oldCmd.action([](clasp::Command&, const clasp::Parser& parser, const std::vector<std::string>&) {
16+
std::cout << "ran old\n";
17+
std::cout << "old_flag=" << (parser.hasFlag("--old-flag") ? "true" : "false") << "\n";
18+
return 0;
19+
});
20+
21+
rootCmd.addCommand(std::move(oldCmd));
22+
return rootCmd.run(argc, argv);
23+
}
24+
Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
#include <iostream>
2+
#include <string>
3+
#include <vector>
4+
5+
#include "clasp/clasp.hpp"
6+
7+
int main(int argc, char** argv) {
8+
clasp::Command rootCmd("app", "TraverseChildren + completion example");
9+
rootCmd.traverseChildren();
10+
rootCmd.withPersistentFlag("--verbose", "-v", "Enable verbose output");
11+
rootCmd.enableCompletion();
12+
13+
clasp::Command printCmd("print", "Print a message");
14+
printCmd.withFlag("--message", "-m", "message", "Message", std::string("hi"));
15+
printCmd.action([](clasp::Command&, const clasp::Parser& parser, const std::vector<std::string>&) {
16+
std::cout << parser.getFlag<std::string>("--message", "hi") << "\n";
17+
return 0;
18+
});
19+
20+
rootCmd.addCommand(std::move(printCmd));
21+
return rootCmd.run(argc, argv);
22+
}
23+

0 commit comments

Comments
 (0)