summaryrefslogtreecommitdiff
path: root/test
diff options
context:
space:
mode:
Diffstat (limited to 'test')
-rw-r--r--test/argparser_test.cc112
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);
}
};