From 78967f3ef62438e9a3abaaa69704338e3b01757b Mon Sep 17 00:00:00 2001 From: "Gu://em_" Date: Thu, 8 Jan 2026 16:59:37 +0100 Subject: [PATCH] test: iob_init and iob_close tests (+ small typo fix in src) --- src/io_backend/io_backend.c | 2 +- src/io_backend/io_backend.h | 2 +- tests/unit/io_backend/io_backend.c | 122 +++++++++++++++++++++++++++++ 3 files changed, 124 insertions(+), 2 deletions(-) create mode 100644 tests/unit/io_backend/io_backend.c diff --git a/src/io_backend/io_backend.c b/src/io_backend/io_backend.c index 7e7c1c3..97fe974 100644 --- a/src/io_backend/io_backend.c +++ b/src/io_backend/io_backend.c @@ -17,7 +17,7 @@ static enum iob_state state = IOB_STATE_NOT_INITIALIZED; int iob_init(struct iob_context *ctx) { if (state != IOB_STATE_NOT_INITIALIZED) - return IOB_ERROR_MODULE_NOT_INITIALIZED; + return IOB_ERROR_MODULE_ALREADY_INITIALIZED; context = *ctx; diff --git a/src/io_backend/io_backend.h b/src/io_backend/io_backend.h index c2079f0..cd5ec8a 100644 --- a/src/io_backend/io_backend.h +++ b/src/io_backend/io_backend.h @@ -7,7 +7,7 @@ #define IOB_ERROR_GENERIC -1 #define IOB_ERROR_BAD_ARG -2 #define IOB_ERROR_MODULE_NOT_INITIALIZED -3 -#define IOB_ERROR_MODULE_ALREADY_INITALIZED -4 +#define IOB_ERROR_MODULE_ALREADY_INITIALIZED -4 #define IOB_ERROR_CANNOT_OPEN_FILE -5 enum iob_mode { diff --git a/tests/unit/io_backend/io_backend.c b/tests/unit/io_backend/io_backend.c new file mode 100644 index 0000000..8640cdb --- /dev/null +++ b/tests/unit/io_backend/io_backend.c @@ -0,0 +1,122 @@ +#include +#include + +#include + +#include + +TestSuite(IO_Backend); + +// IOB Init + +Test(IO_Backend, init_null) +{ + struct iob_context ctx = { + .iob_mode = IOB_MODE_NULL; + .args = NULL; + }; + int actual = iob_init(ctx); + int expected = IOB_ERROR_BAD_ARG; + cr_expect(actual == expected, "Expected: %d. Got: %d", expected, actual); +} + +Test(IO_Backend, init_stdin) +{ + struct iob_context ctx = { + .iob_mode = IOB_MODE_STDIN; + .args = NULL; + }; + int actual = iob_init(ctx); + int expected = 0; + cr_expect(actual == expected, "Expected: %d. Got: %d", expected, actual); + iob_close(); +} + +// WARNING: this one could fail because of iob_close in the previous test +// Same applies for other tests +Test(IO_Backend, init_script) +{ + char* script_name = "script.tmp" + struct iob_context ctx = { + .iob_mode = IOB_MODE_SCRIPT; + .args = script_name; + }; + // Create file + FILE* f = fopen(script_name, "w"); + fclose(f); + + int actual = iob_init(ctx); + int expected = 0; + cr_expect(actual == expected, "Expected: %d. Got: %d", expected, actual); + iob_close(); + remove(script_name); +} + +Test(IO_Backend, init_script_not_a_file) +{ + char* script_name = "not_a_file.tmp" + struct iob_context ctx = { + .iob_mode = IOB_MODE_SCRIPT; + .args = script_name; + }; + int actual = iob_init(ctx); + int expected = IOB_ERROR_CANNOT_OPEN_FILE; + cr_expect(actual == expected, "Expected: %d. Got: %d", expected, actual); +} + +Test(IO_Backend, init_script_null) +{ + struct iob_context ctx = { + .iob_mode = IOB_MODE_SCRIPT; + .args = NULL; + }; + int actual = iob_init(ctx); + int expected = IOB_ERROR_CANNOT_OPEN_FILE; + cr_expect(actual == expected, "Expected: %d. Got: %d", expected, actual); +} + +Test(IO_Backend, init_cmd) +{ + char* cmd = "iamacommand --yesido" + struct iob_context ctx = { + .iob_mode = IOB_MODE_CMD; + .args = cmd; + }; + int actual = iob_init(ctx); + int expected = 0; + cr_expect(actual == expected, "Expected: %d. Got: %d", expected, actual); + iob_close(); +} + +Test(IO_Backend, init_cmd_null) +{ + struct iob_context ctx = { + .iob_mode = IOB_MODE_CMD; + .args = NULL; + }; + int actual = iob_init(ctx); + int expected = IOB_ERROR_BAD_ARG; + cr_expect(actual == expected, "Expected: %d. Got: %d", expected, actual); +} + +Test(IO_Backend, init_already_init) +{ + char* cmd = "iamacommand --yesido" + struct iob_context ctx = { + .iob_mode = IOB_MODE_CMD; + .args = cmd; + }; + iob_init(ctx); + int actual = iob_init(ctx); + int expected = IOB_ERROR_ALREADY_INITIALIZED; + cr_expect(actual == expected, "Expected: %d. Got: %d", expected, actual); + iob_close(); +} + +Test(IO_Backend, close_not_init) +{ + iob_close(); // Shouldn't do anything +} + +// IOB Stream +// TODO