diff options
author | Bent Bisballe Nyeng <deva@aasimon.org> | 2025-02-24 20:51:43 +0100 |
---|---|---|
committer | Bent Bisballe Nyeng <deva@aasimon.org> | 2025-02-24 20:51:43 +0100 |
commit | a5951731e49a6884f42c2a07c9e65355831b4394 (patch) | |
tree | 47710c23df7a2aa799c4fff469f21e40c97d9e68 /test | |
parent | 7107ac464f3bf1b89d6b759c20a09ecc323f8cb0 (diff) |
WIPcli11
Diffstat (limited to 'test')
-rw-r--r-- | test/argparser_test.cc | 112 |
1 files changed, 101 insertions, 11 deletions
diff --git a/test/argparser_test.cc b/test/argparser_test.cc index 842b214..740add0 100644 --- a/test/argparser_test.cc +++ b/test/argparser_test.cc @@ -11,10 +11,103 @@ class ArgParserTest public: ArgParserTest() { - uTEST(ArgParserTest::test); + uTEST(ArgParserTest::test_zero); + uTEST(ArgParserTest::test_one); + uTEST(ArgParserTest::test_many); + uTEST(ArgParserTest::test_exceptional); + uTEST(ArgParserTest::test2); } - void test() + void test_zero() + { + const char* argv[] = { "app-name" }; + int argc = sizeof(argv)/sizeof(*argv); + + arg::Parser<int> args; + + auto res = args.parse(argc, argv); + uASSERT_EQUAL(0, res); + } + + void test_one() + { + const char* argv[] = { "app-name", "-x", "42" }; + int argc = sizeof(argv)/sizeof(*argv); + + arg::Parser<int> args; + + int x{}; + args.add("-x", "--long-x", + std::function([&](int i){ x = i; return 0;}), "Help x"); + + auto res = args.parse(argc, argv); + uASSERT_EQUAL(0, res); + uASSERT_EQUAL(42, x); + } + + void test_many() + { + const char* argv[] = { "app-name", "-x", "42", "-y", "7", "-z" }; + int argc = sizeof(argv)/sizeof(*argv); + + arg::Parser<int> args; + + int x{}; + int y{}; + bool z{false}; + + args.add("-x", "--long-x", + std::function([&](int i){ x = i; return 0;}), "Help x"); + + args.add("-y", "--long-y", + std::function([&](int i){ y = i; return 0;}), "Help y"); + + args.add("-z", "--long-z", + std::function([&](){ z = true; return 0;}), "Help z"); + + auto res = args.parse(argc, argv); + uASSERT_EQUAL(0, res); + uASSERT_EQUAL(42, x); + uASSERT_EQUAL(7, y); + uASSERT_EQUAL(true, z); + } + + void test_exceptional() + { + arg::Parser<int> args; + + int x{}; + int y{}; + + args.add("-x", "--long-x", + std::function([&](int i){ x = i; return 0;}), "Help x"); + + args.add("-y", "--long-y", + std::function([&](int i){ y = i; return 0;}), "Help y"); + + { // Missing arg at trailing opt + const char* argv[] = { "app-name", "-x" }; + int argc = sizeof(argv)/sizeof(*argv); + auto res = args.parse(argc, argv); + uASSERT_EQUAL(1, res); + } + + { // Missing arg before other opt + const char* argv[] = { "app-name", "-x", "-y" }; + int argc = sizeof(argv)/sizeof(*argv); + auto res = args.parse(argc, argv); + uASSERT_EQUAL(1, res); + } + + { // Unknown arg + const char* argv[] = { "app-name", "-T" }; + int argc = sizeof(argv)/sizeof(*argv); + auto res = args.parse(argc, argv); + uASSERT_EQUAL(1, res); + } + } + + void test2() { const char* argv[] = { @@ -23,15 +116,11 @@ public: "42" }; int argc = sizeof(argv)/sizeof(*argv); - ArgParser<int, std::optional<int>> args; + arg::Parser<int, std::optional<int>> args; - args.add("-x", "--some-x", - std::function([](int i) - { - std::cout << "int: " << i << "\n"; - return 0; - }), - "Helptext for -x,--some-x"); + int x{}; + args.add("-x", "--long-x", + std::function([&](int i){ x = i; return 0;}), "Help"); args.add("-X", "--opt-x", std::function([](std::optional<int> i) @@ -41,7 +130,8 @@ public: }), "Helptext for -X,--opt-x"); - args.parse(argc, argv); + auto res = args.parse(argc, argv); + uASSERT_EQUAL(0, res); } }; |