aboutsummaryrefslogtreecommitdiff
path: root/tests
diff options
context:
space:
mode:
authorLion Kortlepel <[email protected]>2026-02-01 12:34:45 +0000
committerLion Kortlepel <[email protected]>2026-02-01 12:34:45 +0000
commit1f51309907acb1bed6e588961ccb4a6a792b85c0 (patch)
treedb8b5a6168bc73dbbe034d2b5d449c27c8c7c86d /tests
parentacf522e7bab50b24ec702b405b4e450b65f835cd (diff)
downloadargs-1f51309907acb1bed6e588961ccb4a6a792b85c0.tar.zst
args-1f51309907acb1bed6e588961ccb4a6a792b85c0.zip
feat!: break api by removing `n` from positionals, implement help string
Diffstat (limited to 'tests')
-rw-r--r--tests/tests.c105
1 files changed, 93 insertions, 12 deletions
diff --git a/tests/tests.c b/tests/tests.c
index 0a136b1..1f45ea8 100644
--- a/tests/tests.c
+++ b/tests/tests.c
@@ -42,6 +42,49 @@ TEST_CASE(basic_args) {
return 0;
}
+TEST_CASE(basic_args_with_unused_positionals) {
+ int help = 0;
+ int test = 0;
+ int no = 0;
+ const char* unused = NULL;
+ ls_args args;
+ char* argv[] = { "./hello", "-h", "--test", NULL };
+ int argc = sizeof(argv) / sizeof(*argv) - 1;
+
+ ls_args_init(&args);
+ ls_args_pos_string(&args, &unused, "Not used", 0);
+ ls_args_bool(&args, &help, "h", "help", "Provides help", 0);
+ ls_args_pos_string(&args, &unused, "Not used", 0);
+ ls_args_bool(&args, &test, "t", "test", "A test argument", 0);
+ ls_args_pos_string(&args, &unused, "Not used", 0);
+ ls_args_bool(&args, &no, "n", "nope", "An argument that isn't present", 0);
+ ls_args_pos_string(&args, &unused, "Not used", 0);
+ if (!ls_args_parse(&args, argc, argv)) {
+ printf("Error: %s\n", args.last_error);
+ ASSERT(!"ls_args_parse failed");
+ }
+ ASSERT_EQ(help, 1, "%d");
+ ASSERT_EQ(test, 1, "%d");
+ ASSERT_EQ(no, 0, "%d");
+ ls_args_free(&args);
+ return 0;
+}
+
+TEST_CASE(help_alloc_fail) {
+ int help = 0;
+ ls_args args;
+ char* help_str;
+ ls_args_init(&args);
+ ls_args_bool(&args, &help, "h", "help", "Provides help", 0);
+ fail_alloc = 1;
+ help_str = ls_args_help(&args);
+ fail_alloc = 0;
+ ASSERT_STR_EQ(args.last_error, "Allocation failure");
+ ASSERT_STR_EQ(help_str, "Not enough memory available to generate help text.");
+ ls_args_free(&args);
+ return 0;
+}
+
TEST_CASE(basic_args_required) {
int help = 0;
int test = 0;
@@ -77,11 +120,11 @@ TEST_CASE(basic_args_positional) {
ls_args_init(&args);
ls_args_bool(&args, &help, "h", "help", "Provides help", 0);
- ls_args_pos_string(&args, 0, &input, "Input file", 0);
+ ls_args_pos_string(&args, &input, "Input file", 0);
ls_args_bool(&args, &test, "t", "test", "A test argument", 0);
ls_args_bool(&args, &no, "n", "nope", "An argument that isn't present", 0);
- ls_args_pos_string(&args, 1, &output, "Output file", 0);
+ ls_args_pos_string(&args, &output, "Output file", 0);
if (!ls_args_parse(&args, argc, argv)) {
printf("Error: %s\n", args.last_error);
@@ -104,8 +147,8 @@ TEST_CASE(too_many_positional_after_double_dash) {
int argc = sizeof(argv) / sizeof(*argv) - 1;
ls_args_init(&args);
- ls_args_pos_string(&args, 0, &first, "First positional argument", 0);
- ls_args_pos_string(&args, 1, &second, "Second positional argument", 0);
+ ls_args_pos_string(&args, &first, "First positional argument", 0);
+ ls_args_pos_string(&args, &second, "Second positional argument", 0);
ASSERT(!ls_args_parse(&args, argc, argv));
ASSERT_STR_EQ(args.last_error, "Unexpected argument 'three'");
@@ -114,26 +157,64 @@ TEST_CASE(too_many_positional_after_double_dash) {
}
TEST_CASE(basic_args_positional_required_error) {
+ const char* first;
+ ls_args args;
+ char* argv[] = { "./hello", NULL };
+ int argc = sizeof(argv) / sizeof(*argv) - 1;
+
+ ls_args_init(&args);
+ ls_args_pos_string(&args, &first, "first file", LS_ARGS_REQUIRED);
+
+ ASSERT(!ls_args_parse(&args, argc, argv));
+
+ ASSERT_STR_EQ(args.last_error, "Required argument 'first file' not provided");
+ ls_args_free(&args);
+ return 0;
+}
+
+TEST_CASE(positional_value_same_as_flag) {
int help = 0;
+ const char* outfile = "out.txt";
+ const char* infile = NULL;
+ const char* testfile = NULL;
+ ls_args args;
+ char* argv[] = { "./basic_example", "hello.txt", "-o", "bruh", "h", NULL };
+ int argc = sizeof(argv) / sizeof(*argv) - 1;
+
+ ls_args_init(&args);
+ ls_args_bool(&args, &help, "h", "help", "Prints help", 0);
+ ls_args_string(&args, &outfile, "o", "out",
+ "Specify the outfile, default 'out.txt'", 0);
+ ls_args_pos_string(&args, &infile, "Input file", LS_ARGS_REQUIRED);
+ ls_args_pos_string(&args, &testfile, "Test file", 0);
+
+ ASSERT(ls_args_parse(&args, argc, argv));
+ ASSERT_STR_EQ(infile, "hello.txt");
+ ASSERT_STR_EQ(outfile, "bruh");
+ ASSERT_STR_EQ(testfile, "h");
+
+ ls_args_free(&args);
+ return 0;
+}
+
+TEST_CASE(basic_args_positional_required) {
const char* first;
ls_args args;
char* argv[] = { "./hello", "world", NULL };
int argc = sizeof(argv) / sizeof(*argv) - 1;
ls_args_init(&args);
- ls_args_pos_string(&args, 0, &first, "First positional argument", LS_ARGS_REQUIRED);
+ ls_args_pos_string(&args, &first, "first file", LS_ARGS_REQUIRED);
- ASSERT(!ls_args_parse(&args, argc, argv));
+ ASSERT(ls_args_parse(&args, argc, argv));
- ASSERT_STR_EQ(args.last_error, "Required positional argument not found (argument 0)");
+ ASSERT_STR_EQ(first, "world");
ls_args_free(&args);
return 0;
}
TEST_CASE(basic_args_positional_only_error) {
int help = 0;
- const char* input;
- const char* output;
ls_args args;
char* argv[] = { "./hello", "world", NULL };
int argc = sizeof(argv) / sizeof(*argv) - 1;
@@ -373,7 +454,7 @@ TEST_CASE(alloc_fail_pos_string) {
/* deliberately fail the allocation here */
fail_alloc = 1;
/* if the allocation fails, this fails */
- ret = ls_args_pos_string(&args, 0, &input, "Input file", 0);
+ ret = ls_args_pos_string(&args, &input, "Input file", 0);
fail_alloc = 0;
ASSERT(!ret);
ASSERT_STR_EQ(args.last_error, "Allocation failure");
@@ -415,8 +496,8 @@ TEST_CASE(parse_stop) {
int argc = sizeof(argv) / sizeof(*argv) - 1;
ls_args_init(&args);
- ls_args_pos_string(&args, 0, &first, "First positional argument", 0);
- ls_args_pos_string(&args, 1, &second, "First positional argument", 0);
+ ls_args_pos_string(&args, &first, "First positional argument", 0);
+ ls_args_pos_string(&args, &second, "First positional argument", 0);
ls_args_bool(&args, &help, "h", "help", "Provides help", 0);
ASSERT(ls_args_parse(&args, argc, argv));
ASSERT_STR_EQ(first, "-h");