Commit f93cb653c7ebcc4a818ee6ce9a31935dfbf8dd02
1 parent
09afb243
Adding tests for App, may have found an issue with expected(-1)
Showing
1 changed file
with
72 additions
and
1 deletions
tests/AppTest.cpp
| @@ -39,7 +39,6 @@ TEST_F(TApp, DashedOptions) { | @@ -39,7 +39,6 @@ TEST_F(TApp, DashedOptions) { | ||
| 39 | 39 | ||
| 40 | } | 40 | } |
| 41 | 41 | ||
| 42 | - | ||
| 43 | TEST_F(TApp, OneFlagRef) { | 42 | TEST_F(TApp, OneFlagRef) { |
| 44 | int ref; | 43 | int ref; |
| 45 | app.add_flag("-c,--count", ref); | 44 | app.add_flag("-c,--count", ref); |
| @@ -111,6 +110,22 @@ TEST_F(TApp, DefaultStringAgain) { | @@ -111,6 +110,22 @@ TEST_F(TApp, DefaultStringAgain) { | ||
| 111 | EXPECT_EQ(str, "previous"); | 110 | EXPECT_EQ(str, "previous"); |
| 112 | } | 111 | } |
| 113 | 112 | ||
| 113 | +TEST_F(TApp, DualOptions) { | ||
| 114 | + | ||
| 115 | + std::string str = "previous"; | ||
| 116 | + std::vector<std::string> vstr = {"previous"}; | ||
| 117 | + std::vector<std::string> ans = {"one", "two"}; | ||
| 118 | + app.add_option("-s,--string", str); | ||
| 119 | + app.add_option("-v,--vector", vstr); | ||
| 120 | + | ||
| 121 | + args = {"--vector=one", "--vector=two"}; | ||
| 122 | + run(); | ||
| 123 | + EXPECT_EQ(ans, vstr); | ||
| 124 | + | ||
| 125 | + args = {"--string=one", "--string=two"}; | ||
| 126 | + EXPECT_THROW(run(), CLI::ConversionError); | ||
| 127 | +} | ||
| 128 | + | ||
| 114 | TEST_F(TApp, LotsOfFlags) { | 129 | TEST_F(TApp, LotsOfFlags) { |
| 115 | 130 | ||
| 116 | app.add_flag("-a"); | 131 | app.add_flag("-a"); |
| @@ -229,6 +244,30 @@ TEST_F(TApp, Positionals) { | @@ -229,6 +244,30 @@ TEST_F(TApp, Positionals) { | ||
| 229 | EXPECT_EQ("thing2", posit2); | 244 | EXPECT_EQ("thing2", posit2); |
| 230 | } | 245 | } |
| 231 | 246 | ||
| 247 | + | ||
| 248 | +TEST_F(TApp, ForcedPositional) { | ||
| 249 | + std::vector<std::string> posit; | ||
| 250 | + auto one = app.add_flag("--one"); | ||
| 251 | + auto pos = app.add_option("posit", posit)->expected(2); // Expected -1 broken? | ||
| 252 | + | ||
| 253 | + args = {"--one", "two", "three"}; | ||
| 254 | + run(); | ||
| 255 | + std::vector<std::string> answers1 = {"two", "three"}; | ||
| 256 | + EXPECT_TRUE(one->count()); | ||
| 257 | + EXPECT_EQ(answers1, posit); | ||
| 258 | + | ||
| 259 | + app.reset(); | ||
| 260 | + | ||
| 261 | + args = {"--", "--one", "two", "three"}; | ||
| 262 | + std::vector<std::string> answers2 = {"--one", "two", "three"}; | ||
| 263 | + pos->expected(3); | ||
| 264 | + run(); | ||
| 265 | + | ||
| 266 | + EXPECT_FALSE(one->count()); | ||
| 267 | + EXPECT_EQ(answers2, posit); | ||
| 268 | +} | ||
| 269 | + | ||
| 270 | + | ||
| 232 | TEST_F(TApp, MixedPositionals) { | 271 | TEST_F(TApp, MixedPositionals) { |
| 233 | 272 | ||
| 234 | int positional_int; | 273 | int positional_int; |
| @@ -274,6 +313,18 @@ TEST_F(TApp, Reset) { | @@ -274,6 +313,18 @@ TEST_F(TApp, Reset) { | ||
| 274 | } | 313 | } |
| 275 | 314 | ||
| 276 | 315 | ||
| 316 | +TEST_F(TApp, RemoveOption) { | ||
| 317 | + app.add_flag("--one"); | ||
| 318 | + auto opt = app.add_flag("--two"); | ||
| 319 | + | ||
| 320 | + EXPECT_TRUE(app.remove_option(opt)); | ||
| 321 | + EXPECT_FALSE(app.remove_option(opt)); | ||
| 322 | + | ||
| 323 | + args = {"--two"}; | ||
| 324 | + | ||
| 325 | + EXPECT_THROW(run(), CLI::ExtrasError); | ||
| 326 | +} | ||
| 327 | + | ||
| 277 | TEST_F(TApp, FileNotExists) { | 328 | TEST_F(TApp, FileNotExists) { |
| 278 | std::string myfile{"TestNonFileNotUsed.txt"}; | 329 | std::string myfile{"TestNonFileNotUsed.txt"}; |
| 279 | EXPECT_TRUE(CLI::NonexistentPath(myfile)); | 330 | EXPECT_TRUE(CLI::NonexistentPath(myfile)); |
| @@ -349,6 +400,21 @@ TEST_F(TApp, InIntSet) { | @@ -349,6 +400,21 @@ TEST_F(TApp, InIntSet) { | ||
| 349 | EXPECT_THROW(run(), CLI::ConversionError); | 400 | EXPECT_THROW(run(), CLI::ConversionError); |
| 350 | } | 401 | } |
| 351 | 402 | ||
| 403 | +TEST_F(TApp, FailSet) { | ||
| 404 | + | ||
| 405 | + int choice; | ||
| 406 | + app.add_set("-q,--quick", choice, {1, 2, 3}); | ||
| 407 | + | ||
| 408 | + args = {"--quick", "3", "--quick=2"}; | ||
| 409 | + EXPECT_THROW(run(), CLI::ConversionError); | ||
| 410 | + | ||
| 411 | + app.reset(); | ||
| 412 | + | ||
| 413 | + args = {"--quick=hello"}; | ||
| 414 | + EXPECT_THROW(run(), CLI::ConversionError); | ||
| 415 | +} | ||
| 416 | + | ||
| 417 | + | ||
| 352 | TEST_F(TApp, InSetIgnoreCase) { | 418 | TEST_F(TApp, InSetIgnoreCase) { |
| 353 | 419 | ||
| 354 | std::string choice; | 420 | std::string choice; |
| @@ -372,6 +438,11 @@ TEST_F(TApp, InSetIgnoreCase) { | @@ -372,6 +438,11 @@ TEST_F(TApp, InSetIgnoreCase) { | ||
| 372 | app.reset(); | 438 | app.reset(); |
| 373 | args = {"--quick", "four"}; | 439 | args = {"--quick", "four"}; |
| 374 | EXPECT_THROW(run(), CLI::ConversionError); | 440 | EXPECT_THROW(run(), CLI::ConversionError); |
| 441 | + | ||
| 442 | + app.reset(); | ||
| 443 | + args = {"--quick=one", "--quick=two"}; | ||
| 444 | + EXPECT_THROW(run(), CLI::ConversionError); | ||
| 445 | + | ||
| 375 | } | 446 | } |
| 376 | 447 | ||
| 377 | TEST_F(TApp, VectorFixedString) { | 448 | TEST_F(TApp, VectorFixedString) { |