-
Notifications
You must be signed in to change notification settings - Fork 362
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
add some unit tests for the fallthrough_parent command
rework return values from _parse_* function to return true if the value was processed false otherwise, this simplified the logic and got rid of the pulling and clearing of the missing fields from option groups. add TriggerOff and TriggerOn helper functions and some tests for them add shapes example of multiple callbacks in order. allow specification of callbacks that get executed immediately on completion of parsing of subcommand add tests for enabled/disabled by default add _get_fallthrough_parent. To get the most appropriate parent to fallthrough to add enabled and disabled by default functions add positional_arity example Add a pre_parse_callback_ for apps. The Pre parse callback takes an argument for the number of remaining arguments left to process, and will execute prior to parsing for subcommands, and after the first option parse for option_groups.
- Loading branch information
Showing
9 changed files
with
721 additions
and
106 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,38 @@ | ||
#include "CLI/CLI.hpp" | ||
|
||
int main(int argc, char **argv) { | ||
|
||
CLI::App app("test for positional arity"); | ||
|
||
auto numbers = app.add_option_group("numbers", "specify key numbers"); | ||
auto files = app.add_option_group("files", "specify files"); | ||
int num1 = -1, num2 = -1; | ||
numbers->add_option("num1", num1, "first number"); | ||
numbers->add_option("num2", num2, "second number"); | ||
std::string file1, file2; | ||
files->add_option("file1", file1, "first file")->required(); | ||
files->add_option("file2", file2, "second file"); | ||
// set a pre parse callback that turns the numbers group on or off depending on the number of arguments | ||
app.preparse_callback([numbers](size_t arity) { | ||
if(arity <= 2) { | ||
numbers->disabled(); | ||
} else { | ||
numbers->disabled(false); | ||
} | ||
}); | ||
|
||
CLI11_PARSE(app, argc, argv); | ||
|
||
if(num1 != -1) | ||
std::cout << "Num1 = " << num1 << '\n'; | ||
|
||
if(num2 != -1) | ||
std::cout << "Num2 = " << num2 << '\n'; | ||
|
||
std::cout << "File 1 = " << file1 << '\n'; | ||
if(!file2.empty()) { | ||
std::cout << "File 2 = " << file2 << '\n'; | ||
} | ||
|
||
return 0; | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,48 @@ | ||
#include "CLI/CLI.hpp" | ||
|
||
int main(int argc, char **argv) { | ||
|
||
CLI::App app("load shapes"); | ||
|
||
app.set_help_all_flag("--help-all"); | ||
auto circle = app.add_subcommand("circle", "draw a circle")->immediate_callback(); | ||
double radius{0.0}; | ||
int circle_counter = 0; | ||
circle->callback([&radius, &circle_counter] { | ||
++circle_counter; | ||
std::cout << "circle" << circle_counter << " with radius " << radius << std::endl; | ||
}); | ||
|
||
circle->add_option("radius", radius, "the radius of the circle")->required(); | ||
|
||
auto rect = app.add_subcommand("rectangle", "draw a rectangle")->immediate_callback(); | ||
double edge1{0.0}; | ||
double edge2{0.0}; | ||
int rect_counter = 0; | ||
rect->callback([&edge1, &edge2, &rect_counter] { | ||
++rect_counter; | ||
if(edge2 == 0) { | ||
edge2 = edge1; | ||
} | ||
std::cout << "rectangle" << rect_counter << " with edges [" << edge1 << ',' << edge2 << "]" << std::endl; | ||
edge2 = 0; | ||
}); | ||
|
||
rect->add_option("edge1", edge1, "the first edge length of the rectangle")->required(); | ||
rect->add_option("edge2", edge2, "the second edge length of the rectangle"); | ||
|
||
auto tri = app.add_subcommand("triangle", "draw a rectangle")->immediate_callback(); | ||
std::vector<double> sides; | ||
int tri_counter = 0; | ||
tri->callback([&sides, &tri_counter] { | ||
++tri_counter; | ||
|
||
std::cout << "triangle" << tri_counter << " with sides [" << CLI::detail::join(sides) << "]" << std::endl; | ||
}); | ||
|
||
tri->add_option("sides", sides, "the side lengths of the triangle"); | ||
|
||
CLI11_PARSE(app, argc, argv); | ||
|
||
return 0; | ||
} |
Oops, something went wrong.