Skip to content

Commit 11da751

Browse files
committed
Add more unit tests for command line option parsing
1 parent 7b82846 commit 11da751

File tree

4 files changed

+49
-1
lines changed

4 files changed

+49
-1
lines changed

Diff for: src/cmdline.c

+4
Original file line numberDiff line numberDiff line change
@@ -227,6 +227,10 @@ static int alignment(opt_t *result, char *optarg)
227227
*/
228228
static int command_line_design(opt_t *result, char *optarg)
229229
{
230+
if (strlen(optarg) == 0) {
231+
bx_fprintf(stderr, "%s: empty command line design definition\n", PROJECT);
232+
return 2;
233+
}
230234
result->cld = (char *) strdup(optarg);
231235
if (result->cld == NULL) {
232236
perror(PROJECT);

Diff for: utest/cmdline_test.c

+36
Original file line numberDiff line numberDiff line change
@@ -429,4 +429,40 @@ void test_inputfiles_actual_success(void **state)
429429
}
430430

431431

432+
void test_command_line_design_empty(void **state)
433+
{
434+
(void) state; /* unused */
435+
436+
opt_t *actual = act(2, "-c", "");
437+
438+
assert_null(actual); // invalid option, so we would need to exit with error
439+
assert_int_equal(1, collect_err_size);
440+
assert_string_equal("boxes: empty command line design definition\n", collect_err[0]);
441+
}
442+
443+
444+
void test_help(void **state)
445+
{
446+
(void) state; /* unused */
447+
448+
opt_t *actual = act(1, "-h");
449+
450+
assert_non_null(actual);
451+
assert_int_equal(1, actual->help);
452+
assert_int_equal(0, actual->version_requested);
453+
}
454+
455+
456+
void test_version_requested(void **state)
457+
{
458+
(void) state; /* unused */
459+
460+
opt_t *actual = act(1, "-v");
461+
462+
assert_non_null(actual);
463+
assert_int_equal(0, actual->help);
464+
assert_int_equal(1, actual->version_requested);
465+
}
466+
467+
432468
/*EOF*/ /* vim: set cindent sw=4: */

Diff for: utest/cmdline_test.h

+5
Original file line numberDiff line numberDiff line change
@@ -63,6 +63,11 @@ void test_inputfiles_stdin(void **state);
6363
void test_inputfiles_input_nonexistent(void **state);
6464
void test_inputfiles_actual_success(void **state);
6565

66+
void test_command_line_design_empty(void **state);
67+
68+
void test_help(void **state);
69+
void test_version_requested(void **state);
70+
6671

6772
#endif
6873

Diff for: utest/main.c

+4-1
Original file line numberDiff line numberDiff line change
@@ -78,7 +78,10 @@ int main(void)
7878
cmocka_unit_test_setup(test_inputfiles_stdin_stdout, beforeTest),
7979
cmocka_unit_test_setup(test_inputfiles_stdin, beforeTest),
8080
cmocka_unit_test_setup(test_inputfiles_input_nonexistent, beforeTest),
81-
cmocka_unit_test_setup(test_inputfiles_actual_success, beforeTest)
81+
cmocka_unit_test_setup(test_inputfiles_actual_success, beforeTest),
82+
cmocka_unit_test_setup(test_command_line_design_empty, beforeTest),
83+
cmocka_unit_test_setup(test_help, beforeTest),
84+
cmocka_unit_test_setup(test_version_requested, beforeTest)
8285
};
8386

8487
const struct CMUnitTest regulex_tests[] = {

0 commit comments

Comments
 (0)