Commit 232c792bae2b494493f346cdab0890368b300412
Committed by
Henry Schreiner
1 parent
0959430e
Adding examples to tests
Showing
8 changed files
with
80 additions
and
20 deletions
examples/CMakeLists.txt
| ... | ... | @@ -15,11 +15,71 @@ function(add_cli_exe T) |
| 15 | 15 | endfunction() |
| 16 | 16 | |
| 17 | 17 | add_cli_exe(simple simple.cpp) |
| 18 | +add_test(NAME simple_basic COMMAND simple) | |
| 19 | +add_test(NAME simple_all COMMAND simple -f filename.txt -c 12 --flag --flag -d 1.2) | |
| 20 | +set_property(TEST simple_all PROPERTY PASS_REGULAR_EXPRESSION | |
| 21 | + "Working on file: filename.txt, direct count: 1, opt count: 1" | |
| 22 | + "Working on count: 12, direct count: 1, opt count: 1" | |
| 23 | + "Received flag: 2 (2) times" | |
| 24 | + "Some value: 1.2") | |
| 25 | + | |
| 26 | + | |
| 18 | 27 | add_cli_exe(subcommands subcommands.cpp) |
| 28 | +add_test(NAME subcommands_none COMMAND subcommands) | |
| 29 | +set_property(TEST subcommands_none PROPERTY | |
| 30 | + PASS_REGULAR_EXPRESSION "A subcommand is required") | |
| 31 | +add_test(NAME subcommands_all COMMAND subcommands --random start --file name stop --count) | |
| 32 | +set_property(TEST subcommands_all PROPERTY PASS_REGULAR_EXPRESSION | |
| 33 | + "Working on --file from start: name" | |
| 34 | + "Working on --count from stop: 1, direct count: 1" | |
| 35 | + "Count of --random flag: 1" | |
| 36 | + "Subcommand: start" | |
| 37 | + "Subcommand: stop") | |
| 38 | + | |
| 19 | 39 | add_cli_exe(groups groups.cpp) |
| 40 | +add_test(NAME groups_none COMMAND groups) | |
| 41 | +set_property(TEST groups_none PROPERTY PASS_REGULAR_EXPRESSION | |
| 42 | + "This is a timer:" | |
| 43 | + "--file is required" | |
| 44 | + "Run with --help for more information.") | |
| 45 | +add_test(NAME groups_all COMMAND groups --file this --count --count -d 1.2) | |
| 46 | +set_property(TEST groups_all PROPERTY PASS_REGULAR_EXPRESSION | |
| 47 | + "This is a timer:" | |
| 48 | + "Working on file: this, direct count: 1, opt count: 1" | |
| 49 | + "Working on count: 2, direct count: 2, opt count: 2" | |
| 50 | + "Some value: 1.2") | |
| 51 | + | |
| 20 | 52 | add_cli_exe(inter_argument_order inter_argument_order.cpp) |
| 53 | +add_test(NAME inter_argument_order COMMAND inter_argument_order --foo 1 2 3 --x --bar 4 5 6 --z --foo 7 8) | |
| 54 | +set_property(TEST inter_argument_order PROPERTY PASS_REGULAR_EXPRESSION | |
| 55 | + [=[foo : 1 | |
| 56 | +foo : 2 | |
| 57 | +foo : 3 | |
| 58 | +bar : 4 | |
| 59 | +bar : 5 | |
| 60 | +bar : 6 | |
| 61 | +foo : 7 | |
| 62 | +foo : 8]=]) | |
| 63 | + | |
| 21 | 64 | add_cli_exe(prefix_command prefix_command.cpp) |
| 65 | +add_test(NAME prefix_command COMMAND prefix_command -v 3 2 1 -- other one two 3) | |
| 66 | +set_property(TEST prefix_command PROPERTY PASS_REGULAR_EXPRESSION | |
| 67 | + "Prefix: 3 : 2 : 1" | |
| 68 | + "Remaining commands: -- other one two 3") | |
| 69 | + | |
| 22 | 70 | add_cli_exe(enum enum.cpp) |
| 71 | +add_test(NAME enum_pass COMMAND enum -l 1) | |
| 72 | +add_test(NAME enum_fail COMMAND enum -l 4) | |
| 73 | +set_property(TEST enum_fail PROPERTY PASS_REGULAR_EXPRESSION | |
| 74 | + "Could not convert: -l,--level = 4") | |
| 75 | + | |
| 23 | 76 | add_cli_exe(modhelp modhelp.cpp) |
| 77 | +add_test(NAME modhelp COMMAND modhelp -a test -h) | |
| 78 | +set_property(TEST modhelp PROPERTY PASS_REGULAR_EXPRESSION | |
| 79 | + "Option -a string in help: test") | |
| 24 | 80 | |
| 25 | 81 | add_subdirectory(subcom_in_files) |
| 82 | +add_test(NAME subcom_in_files COMMAND subcommand_main subcommand_a -f this.txt --with-foo) | |
| 83 | +set_property(TEST subcom_in_files PROPERTY PASS_REGULAR_EXPRESSION | |
| 84 | + "Working on file: this\.txt" | |
| 85 | + "Using foo!") | ... | ... |
examples/inter_argument_order.cpp
| ... | ... | @@ -5,15 +5,15 @@ |
| 5 | 5 | #include <algorithm> |
| 6 | 6 | |
| 7 | 7 | int main(int argc, char **argv) { |
| 8 | - CLI::App app; | |
| 8 | + CLI::App app{"An app to practice mixing unlimited arguments, but still recover the original order."}; | |
| 9 | 9 | |
| 10 | 10 | std::vector<int> foos; |
| 11 | - auto foo = app.add_option("--foo,-f", foos); | |
| 11 | + auto foo = app.add_option("--foo,-f", foos, "Some unlimited argument"); | |
| 12 | 12 | |
| 13 | 13 | std::vector<int> bars; |
| 14 | - auto bar = app.add_option("--bar", bars); | |
| 14 | + auto bar = app.add_option("--bar", bars, "Some unlimited arggument"); | |
| 15 | 15 | |
| 16 | - app.add_flag("--z,--x"); // Random other flags | |
| 16 | + app.add_flag("--z,--x", "Random other flags"); | |
| 17 | 17 | |
| 18 | 18 | // Standard parsing lines (copy and paste in, or use CLI11_PARSE) |
| 19 | 19 | try { |
| ... | ... | @@ -22,7 +22,7 @@ int main(int argc, char **argv) { |
| 22 | 22 | return app.exit(e); |
| 23 | 23 | } |
| 24 | 24 | |
| 25 | - // I perfer using the back and popping | |
| 25 | + // I prefer using the back and popping | |
| 26 | 26 | std::reverse(std::begin(foos), std::end(foos)); |
| 27 | 27 | std::reverse(std::begin(bars), std::end(bars)); |
| 28 | 28 | ... | ... |
examples/modhelp.cpp
| 1 | -// Modify the help print so that argument values are accessible | |
| 2 | -// Note that this will not shortcut `->required` and other similar options | |
| 3 | 1 | |
| 4 | 2 | #include "CLI/CLI.hpp" |
| 5 | 3 | |
| 6 | 4 | #include <iostream> |
| 7 | 5 | |
| 8 | 6 | int main(int argc, char **argv) { |
| 9 | - CLI::App test; | |
| 7 | + CLI::App test{R"raw(Modify the help print so that argument values are accessible. | |
| 8 | +Note that this will not shortcut `->required` and other similar options.)raw"}; | |
| 10 | 9 | |
| 11 | 10 | // Remove help flag because it shortcuts all processing |
| 12 | 11 | test.set_help_flag(); |
| ... | ... | @@ -22,10 +21,10 @@ int main(int argc, char **argv) { |
| 22 | 21 | if(*help) |
| 23 | 22 | throw CLI::CallForHelp(); |
| 24 | 23 | } catch(const CLI::Error &e) { |
| 25 | - std::cout << "Option string:" << some_option << std::endl; | |
| 24 | + std::cout << "Option -a string in help: " << some_option << std::endl; | |
| 26 | 25 | return test.exit(e); |
| 27 | 26 | } |
| 28 | 27 | |
| 29 | - std::cout << "Option string:" << some_option << std::endl; | |
| 28 | + std::cout << "Option -a string: " << some_option << std::endl; | |
| 30 | 29 | return 0; |
| 31 | 30 | } | ... | ... |
examples/prefix_command.cpp
| ... | ... | @@ -6,20 +6,18 @@ int main(int argc, char **argv) { |
| 6 | 6 | app.prefix_command(); |
| 7 | 7 | |
| 8 | 8 | std::vector<int> vals; |
| 9 | - app.add_option("--vals,-v", vals)->expected(1); | |
| 9 | + app.add_option("--vals,-v", vals)->expected(-1); | |
| 10 | 10 | |
| 11 | 11 | CLI11_PARSE(app, argc, argv); |
| 12 | 12 | |
| 13 | 13 | std::vector<std::string> more_comms = app.remaining(); |
| 14 | 14 | |
| 15 | - std::cout << "Prefix:"; | |
| 15 | + std::cout << "Prefix"; | |
| 16 | 16 | for(int v : vals) |
| 17 | - std::cout << v << ":"; | |
| 17 | + std::cout << ": " << v << " "; | |
| 18 | 18 | |
| 19 | 19 | std::cout << std::endl << "Remaining commands: "; |
| 20 | 20 | |
| 21 | - // Perfer to loop over from beginning, not "pop" order | |
| 22 | - std::reverse(std::begin(more_comms), std::end(more_comms)); | |
| 23 | 21 | for(auto com : more_comms) |
| 24 | 22 | std::cout << com << " "; |
| 25 | 23 | std::cout << std::endl; | ... | ... |
examples/simple.cpp
| ... | ... | @@ -22,7 +22,7 @@ int main(int argc, char **argv) { |
| 22 | 22 | << ", opt count: " << opt->count() << std::endl; |
| 23 | 23 | std::cout << "Working on count: " << count << ", direct count: " << app.count("--count") |
| 24 | 24 | << ", opt count: " << copt->count() << std::endl; |
| 25 | - std::cout << "Recieved flag: " << v << " (" << flag->count() << ") times\n"; | |
| 25 | + std::cout << "Received flag: " << v << " (" << flag->count() << ") times\n"; | |
| 26 | 26 | std::cout << "Some value: " << value << std::endl; |
| 27 | 27 | |
| 28 | 28 | return 0; | ... | ... |
examples/subcom_in_files/CMakeLists.txt
examples/subcom_in_files/main.cpp renamed to examples/subcom_in_files/subcommand_main.cpp
examples/subcommands.cpp
| ... | ... | @@ -6,6 +6,7 @@ int main(int argc, char **argv) { |
| 6 | 6 | app.add_flag("--random", "Some random flag"); |
| 7 | 7 | CLI::App *start = app.add_subcommand("start", "A great subcommand"); |
| 8 | 8 | CLI::App *stop = app.add_subcommand("stop", "Do you really want to stop?"); |
| 9 | + app.require_subcommand(); // 1 or more | |
| 9 | 10 | |
| 10 | 11 | std::string file; |
| 11 | 12 | start->add_option("-f,--file", file, "File name"); |
| ... | ... | @@ -14,10 +15,12 @@ int main(int argc, char **argv) { |
| 14 | 15 | |
| 15 | 16 | CLI11_PARSE(app, argc, argv); |
| 16 | 17 | |
| 17 | - std::cout << "Working on file: " << file << ", direct count: " << start->count("--file") << std::endl; | |
| 18 | - std::cout << "Working on count: " << s->count() << ", direct count: " << stop->count("--count") << std::endl; | |
| 18 | + std::cout << "Working on --file from start: " << file << std::endl; | |
| 19 | + std::cout << "Working on --count from stop: " << s->count() << ", direct count: " << stop->count("--count") | |
| 20 | + << std::endl; | |
| 21 | + std::cout << "Count of --random flag: " << app.count("--random") << std::endl; | |
| 19 | 22 | for(auto subcom : app.get_subcommands()) |
| 20 | - std::cout << "Subcommand:" << subcom->get_name() << std::endl; | |
| 23 | + std::cout << "Subcommand: " << subcom->get_name() << std::endl; | |
| 21 | 24 | |
| 22 | 25 | return 0; |
| 23 | 26 | } | ... | ... |