1
0
mirror of https://github.com/CLIUtils/CLI11.git synced 2025-04-30 04:33:53 +00:00

Adding positional handling

This commit is contained in:
Henry Fredrick Schreiner 2017-01-29 20:10:36 -05:00
parent 5f3e20a906
commit 30a91b4a72
2 changed files with 38 additions and 1 deletions

View File

@ -541,6 +541,9 @@ public:
throw CallForHelp(); throw CallForHelp();
} }
// Positionals end up being inserted in the correct order, but we want to pop them off the back end
std::reverse(std::begin(positionals), std::end(positionals));
for(Option& opt : options) { for(Option& opt : options) {
while (opt.positional() && opt.count() < opt.expected() && positionals.size() > 0) { while (opt.positional() && opt.count() < opt.expected() && positionals.size() > 0) {
opt.get_new(); opt.get_new();

View File

@ -143,6 +143,40 @@ TEST_F(TApp, ShortOpts) {
EXPECT_EQ("zyz", someopt); EXPECT_EQ("zyz", someopt);
} }
TEST_F(TApp, Positionals) {
std::string posit1;
std::string posit2;
app.add_option("posit1", posit1, "", CLI::POSITIONAL);
app.add_option("posit2", posit2, "", CLI::POSITIONAL);
args = {"thing1","thing2"};
run();
EXPECT_EQ(1, app.count("posit1"));
EXPECT_EQ(1, app.count("posit2"));
EXPECT_EQ("thing1", posit1);
EXPECT_EQ("thing2", posit2);
}
TEST_F(TApp, MixedPositionals) {
int positional_int;
std::string positional_string;
app.add_option("posit1", positional_int, "", CLI::POSITIONAL);
app.add_option("posit2", positional_string, "", CLI::POSITIONAL);
args = {"--posit2","thing2","7"};
run();
EXPECT_EQ(1, app.count("posit2"));
EXPECT_EQ(1, app.count("posit1"));
EXPECT_EQ(7, positional_int);
EXPECT_EQ("thing2", positional_string);
}
TEST_F(TApp, Reset) { TEST_F(TApp, Reset) {
app.add_flag("simple"); app.add_flag("simple");
@ -241,4 +275,4 @@ TEST_F(SubcommandProgram, SpareSub) {
// TODO: Add default/type info to help // TODO: Add default/type info to help
// TODO: Add set checking // TODO: Add set checking
// TODO: Try all of the options together // TODO: Try all of the options together
// TODO: Add make_option alternative with type