aboutsummaryrefslogtreecommitdiff
path: root/cli/cli-test.c
diff options
context:
space:
mode:
Diffstat (limited to 'cli/cli-test.c')
-rw-r--r--cli/cli-test.c51
1 files changed, 51 insertions, 0 deletions
diff --git a/cli/cli-test.c b/cli/cli-test.c
index c1d7591..0a52782 100644
--- a/cli/cli-test.c
+++ b/cli/cli-test.c
@@ -76,6 +76,55 @@ TEST_BEGIN(test_cli_opt_data_size_set)
}
TEST_END
+TEST_BEGIN(test_cli_opt_long_set)
+{
+ CLI_OPT_LONG(opt, 0, NULL, NULL);
+ struct tcase {
+ const char *input;
+ long expected_val;
+ enum cli_rc expected_rc;
+ } cases[] = {
+ {"420", 420, CLI_RC_OK},
+ {"4K", 0, CLI_RC_BAD_ARGS},
+ {"-6", -6, CLI_RC_OK},
+ {"0.2", 0, CLI_RC_BAD_ARGS},
+ };
+ for (size_t i = 0; i < ARRAY_SIZE(cases); i++) {
+ opt.value = 0;
+ int rc = opt.opt.set(&opt.opt, cases[i].input);
+ asserteq(rc, cases[i].expected_rc);
+ if (rc == CLI_RC_OK)
+ asserteq(opt.value, cases[i].expected_val);
+ }
+ TEST_OUT
+}
+TEST_END
+
+TEST_BEGIN(test_cli_opt_ulong_set)
+{
+ CLI_OPT_ULONG(opt, 0, NULL, NULL);
+ struct tcase {
+ const char *input;
+ unsigned long expected_val;
+ enum cli_rc expected_rc;
+ } cases[] = {
+ {"420", 420, CLI_RC_OK},
+ {"4K", 0, CLI_RC_BAD_ARGS},
+ {"-6", -6, CLI_RC_OK}, // C typing discipline really is this bad
+ {"0.2", 0, CLI_RC_BAD_ARGS},
+ {"0xB00B5", 0xB00B5, CLI_RC_OK},
+ };
+ for (size_t i = 0; i < ARRAY_SIZE(cases); i++) {
+ opt.value = 0;
+ int rc = opt.opt.set(&opt.opt, cases[i].input);
+ asserteq(rc, cases[i].expected_rc);
+ if (rc == CLI_RC_OK)
+ asserteq(opt.value, cases[i].expected_val);
+ }
+ TEST_OUT
+}
+TEST_END
+
TEST_BEGIN(test_parse_long)
{
struct tcase {
@@ -470,6 +519,8 @@ TEST_BEGIN(test_parse_options)
TEST_END
RUN_TESTS(test_cli_opt_data_size_set,
+ test_cli_opt_long_set,
+ test_cli_opt_ulong_set,
test_parse_long,
test_parse_short,
test_parse_options)