Commit 30a91b4a72fbeec06aa260a8d69e8f2de4e74bf0
1 parent
5f3e20a9
Adding positional handling
Showing
2 changed files
with
38 additions
and
1 deletions
include/CLI.hpp
| @@ -541,6 +541,9 @@ public: | @@ -541,6 +541,9 @@ public: | ||
| 541 | throw CallForHelp(); | 541 | throw CallForHelp(); |
| 542 | } | 542 | } |
| 543 | 543 | ||
| 544 | + // Positionals end up being inserted in the correct order, but we want to pop them off the back end | ||
| 545 | + std::reverse(std::begin(positionals), std::end(positionals)); | ||
| 546 | + | ||
| 544 | for(Option& opt : options) { | 547 | for(Option& opt : options) { |
| 545 | while (opt.positional() && opt.count() < opt.expected() && positionals.size() > 0) { | 548 | while (opt.positional() && opt.count() < opt.expected() && positionals.size() > 0) { |
| 546 | opt.get_new(); | 549 | opt.get_new(); |
tests/CLITest.cpp
| @@ -143,6 +143,40 @@ TEST_F(TApp, ShortOpts) { | @@ -143,6 +143,40 @@ TEST_F(TApp, ShortOpts) { | ||
| 143 | EXPECT_EQ("zyz", someopt); | 143 | EXPECT_EQ("zyz", someopt); |
| 144 | } | 144 | } |
| 145 | 145 | ||
| 146 | +TEST_F(TApp, Positionals) { | ||
| 147 | + | ||
| 148 | + std::string posit1; | ||
| 149 | + std::string posit2; | ||
| 150 | + app.add_option("posit1", posit1, "", CLI::POSITIONAL); | ||
| 151 | + app.add_option("posit2", posit2, "", CLI::POSITIONAL); | ||
| 152 | + | ||
| 153 | + args = {"thing1","thing2"}; | ||
| 154 | + | ||
| 155 | + run(); | ||
| 156 | + | ||
| 157 | + EXPECT_EQ(1, app.count("posit1")); | ||
| 158 | + EXPECT_EQ(1, app.count("posit2")); | ||
| 159 | + EXPECT_EQ("thing1", posit1); | ||
| 160 | + EXPECT_EQ("thing2", posit2); | ||
| 161 | +} | ||
| 162 | + | ||
| 163 | +TEST_F(TApp, MixedPositionals) { | ||
| 164 | + | ||
| 165 | + int positional_int; | ||
| 166 | + std::string positional_string; | ||
| 167 | + app.add_option("posit1", positional_int, "", CLI::POSITIONAL); | ||
| 168 | + app.add_option("posit2", positional_string, "", CLI::POSITIONAL); | ||
| 169 | + | ||
| 170 | + args = {"--posit2","thing2","7"}; | ||
| 171 | + | ||
| 172 | + run(); | ||
| 173 | + | ||
| 174 | + EXPECT_EQ(1, app.count("posit2")); | ||
| 175 | + EXPECT_EQ(1, app.count("posit1")); | ||
| 176 | + EXPECT_EQ(7, positional_int); | ||
| 177 | + EXPECT_EQ("thing2", positional_string); | ||
| 178 | +} | ||
| 179 | + | ||
| 146 | TEST_F(TApp, Reset) { | 180 | TEST_F(TApp, Reset) { |
| 147 | 181 | ||
| 148 | app.add_flag("simple"); | 182 | app.add_flag("simple"); |
| @@ -241,4 +275,4 @@ TEST_F(SubcommandProgram, SpareSub) { | @@ -241,4 +275,4 @@ TEST_F(SubcommandProgram, SpareSub) { | ||
| 241 | // TODO: Add default/type info to help | 275 | // TODO: Add default/type info to help |
| 242 | // TODO: Add set checking | 276 | // TODO: Add set checking |
| 243 | // TODO: Try all of the options together | 277 | // TODO: Try all of the options together |
| 244 | - | 278 | +// TODO: Add make_option alternative with type |