1
0
Fork 0
mirror of https://github.com/tailix/libkernaux.git synced 2025-04-07 17:32:45 -04:00

Improve tests for command line parser

This commit is contained in:
Alex Kotov 2020-12-02 02:34:46 +05:00
parent af8edee16a
commit 1073bdc670
Signed by: kotovalexarian
GPG key ID: 553C0EBBEB5D5F08

View file

@ -3,263 +3,200 @@
#include <assert.h>
#include <string.h>
static const unsigned int ARGV_COUNT_MAX = 1024;
static const unsigned int ARGV_COUNT_MAX = 100;
static const unsigned int ARG_SIZE_MAX = 4096;
static void test(
const char *cmdline,
unsigned int argv_count_max,
unsigned int arg_size_max,
kernaux_bool expected_result,
const char *expected_error_msg,
unsigned int expected_argc,
const char *const *const expected_argv
);
static const char *const argv0[] = {};
static const char *const argv_foo[] = {"foo"};
static const char *const argv_foo_bar[] = {"foo", "bar"};
static const char *const argv_foo_bar_car[] = {"foo", "bar", "car"};
int main()
{
char error_msg[KERNAUX_CMDLINE_ERROR_MSG_SIZE_MAX];
unsigned int argc = 1234;
char *argv[ARGV_COUNT_MAX];
char buffer[ARGV_COUNT_MAX * ARG_SIZE_MAX];
//==========================================================================
assert(kernaux_cmdline_parse(
test(
"",
error_msg,
&argc,
argv,
buffer,
ARGV_COUNT_MAX,
ARG_SIZE_MAX
));
ARG_SIZE_MAX,
assert(strcmp(error_msg, "") == 0);
assert(argc == 0);
KERNAUX_TRUE,
"",
0,
argv0
);
for (unsigned int index = argc; index < ARGV_COUNT_MAX; ++index) {
assert(argv[index] == KERNAUX_NULL);
}
//==========================================================================
assert(kernaux_cmdline_parse(
test(
" ",
error_msg,
&argc,
argv,
buffer,
ARGV_COUNT_MAX,
ARG_SIZE_MAX
));
ARG_SIZE_MAX,
assert(strcmp(error_msg, "") == 0);
assert(argc == 0);
KERNAUX_TRUE,
"",
0,
argv0
);
for (unsigned int index = argc; index < ARGV_COUNT_MAX; ++index) {
assert(argv[index] == KERNAUX_NULL);
}
//==========================================================================
assert(kernaux_cmdline_parse(
test(
"foo",
error_msg,
&argc,
argv,
buffer,
ARGV_COUNT_MAX,
ARG_SIZE_MAX
));
ARG_SIZE_MAX,
assert(strcmp(error_msg, "") == 0);
assert(argc == 1);
assert(strcmp(argv[0], "foo") == 0);
KERNAUX_TRUE,
"",
1,
argv_foo
);
for (unsigned int index = argc; index < ARGV_COUNT_MAX; ++index) {
assert(argv[index] == KERNAUX_NULL);
}
//==========================================================================
assert(kernaux_cmdline_parse(
test(
"foo bar",
error_msg,
&argc,
argv,
buffer,
ARGV_COUNT_MAX,
ARG_SIZE_MAX
));
ARG_SIZE_MAX,
assert(strcmp(error_msg, "") == 0);
assert(argc == 2);
assert(strcmp(argv[0], "foo") == 0);
assert(strcmp(argv[1], "bar") == 0);
KERNAUX_TRUE,
"",
2,
argv_foo_bar
);
for (unsigned int index = argc; index < ARGV_COUNT_MAX; ++index) {
assert(argv[index] == KERNAUX_NULL);
}
//==========================================================================
assert(kernaux_cmdline_parse(
test(
" foo bar",
error_msg,
&argc,
argv,
buffer,
ARGV_COUNT_MAX,
ARG_SIZE_MAX
));
ARG_SIZE_MAX,
assert(strcmp(error_msg, "") == 0);
assert(argc == 2);
assert(strcmp(argv[0], "foo") == 0);
assert(strcmp(argv[1], "bar") == 0);
KERNAUX_TRUE,
"",
2,
argv_foo_bar
);
for (unsigned int index = argc; index < ARGV_COUNT_MAX; ++index) {
assert(argv[index] == KERNAUX_NULL);
}
//==========================================================================
assert(kernaux_cmdline_parse(
test(
"foo bar ",
error_msg,
&argc,
argv,
buffer,
ARGV_COUNT_MAX,
ARG_SIZE_MAX
));
ARG_SIZE_MAX,
assert(strcmp(error_msg, "") == 0);
assert(argc == 2);
assert(strcmp(argv[0], "foo") == 0);
assert(strcmp(argv[1], "bar") == 0);
KERNAUX_TRUE,
"",
2,
argv_foo_bar
);
for (unsigned int index = argc; index < ARGV_COUNT_MAX; ++index) {
assert(argv[index] == KERNAUX_NULL);
}
//==========================================================================
assert(kernaux_cmdline_parse(
test(
" foo bar ",
error_msg,
&argc,
argv,
buffer,
ARGV_COUNT_MAX,
ARG_SIZE_MAX
));
ARG_SIZE_MAX,
assert(strcmp(error_msg, "") == 0);
assert(argc == 2);
assert(strcmp(argv[0], "foo") == 0);
assert(strcmp(argv[1], "bar") == 0);
KERNAUX_TRUE,
"",
2,
argv_foo_bar
);
for (unsigned int index = argc; index < ARGV_COUNT_MAX; ++index) {
assert(argv[index] == KERNAUX_NULL);
}
//==========================================================================
assert(kernaux_cmdline_parse(
test(
"foo bar",
error_msg,
&argc,
argv,
buffer,
ARGV_COUNT_MAX,
ARG_SIZE_MAX
));
ARG_SIZE_MAX,
assert(strcmp(error_msg, "") == 0);
assert(argc == 2);
assert(strcmp(argv[0], "foo") == 0);
assert(strcmp(argv[1], "bar") == 0);
KERNAUX_TRUE,
"",
2,
argv_foo_bar
);
for (unsigned int index = argc; index < ARGV_COUNT_MAX; ++index) {
assert(argv[index] == KERNAUX_NULL);
}
//==========================================================================
assert(kernaux_cmdline_parse(
test(
" foo bar",
error_msg,
&argc,
argv,
buffer,
ARGV_COUNT_MAX,
ARG_SIZE_MAX
));
ARG_SIZE_MAX,
assert(strcmp(error_msg, "") == 0);
assert(argc == 2);
assert(strcmp(argv[0], "foo") == 0);
assert(strcmp(argv[1], "bar") == 0);
KERNAUX_TRUE,
"",
2,
argv_foo_bar
);
for (unsigned int index = argc; index < ARGV_COUNT_MAX; ++index) {
assert(argv[index] == KERNAUX_NULL);
}
//==========================================================================
assert(kernaux_cmdline_parse(
test(
"foo bar ",
error_msg,
&argc,
argv,
buffer,
ARGV_COUNT_MAX,
ARG_SIZE_MAX
));
ARG_SIZE_MAX,
assert(strcmp(error_msg, "") == 0);
assert(argc == 2);
assert(strcmp(argv[0], "foo") == 0);
assert(strcmp(argv[1], "bar") == 0);
KERNAUX_TRUE,
"",
2,
argv_foo_bar
);
for (unsigned int index = argc; index < ARGV_COUNT_MAX; ++index) {
assert(argv[index] == KERNAUX_NULL);
}
//==========================================================================
assert(kernaux_cmdline_parse(
test(
" foo bar ",
error_msg,
&argc,
argv,
buffer,
ARGV_COUNT_MAX,
ARG_SIZE_MAX
));
ARG_SIZE_MAX,
assert(strcmp(error_msg, "") == 0);
assert(argc == 2);
assert(strcmp(argv[0], "foo") == 0);
assert(strcmp(argv[1], "bar") == 0);
KERNAUX_TRUE,
"",
2,
argv_foo_bar
);
for (unsigned int index = argc; index < ARGV_COUNT_MAX; ++index) {
assert(argv[index] == KERNAUX_NULL);
}
//==========================================================================
assert(kernaux_cmdline_parse(
test(
"foo bar car",
error_msg,
&argc,
argv,
buffer,
ARGV_COUNT_MAX,
ARG_SIZE_MAX
));
ARG_SIZE_MAX,
assert(strcmp(error_msg, "") == 0);
assert(argc == 3);
assert(strcmp(argv[0], "foo") == 0);
assert(strcmp(argv[1], "bar") == 0);
assert(strcmp(argv[2], "car") == 0);
for (unsigned int index = argc; index < ARGV_COUNT_MAX; ++index) {
assert(argv[index] == KERNAUX_NULL);
}
KERNAUX_TRUE,
"",
3,
argv_foo_bar_car
);
return 0;
}
void test(
const char *const cmdline,
const unsigned int argv_count_max,
const unsigned int arg_size_max,
const kernaux_bool expected_result,
const char *const expected_error_msg,
unsigned int expected_argc,
const char *const *const expected_argv
) {
char error_msg[KERNAUX_CMDLINE_ERROR_MSG_SIZE_MAX];
unsigned int argc = 1234;
char *argv[argv_count_max];
char buffer[argv_count_max * arg_size_max];
assert(
kernaux_cmdline_parse(
cmdline,
error_msg,
&argc,
argv,
buffer,
argv_count_max,
arg_size_max
) == !!expected_result
);
assert(strcmp(error_msg, expected_error_msg) == 0);
assert(argc == expected_argc);
for (unsigned int index = 0; index < argc; ++index) {
assert(strcmp(argv[index], expected_argv[index]) == 0);
}
for (unsigned int index = argc; index < ARGV_COUNT_MAX; ++index) {
assert(argv[index] == KERNAUX_NULL);
}
}