diff options
| author | EuAndreh <eu@euandre.org> | 2024-04-07 11:49:25 -0300 |
|---|---|---|
| committer | EuAndreh <eu@euandre.org> | 2024-04-07 11:49:25 -0300 |
| commit | 381492a000454822398a8737c73ea586464ee56a (patch) | |
| tree | 9e28124ba2373b157356f0d5172b60009a20041e /tests | |
| parent | src/lib.c: Print project metadata on pindaiba_main (diff) | |
| download | pindaiba-381492a000454822398a8737c73ea586464ee56a.tar.gz pindaiba-381492a000454822398a8737c73ea586464ee56a.tar.xz | |
src/util.c: Add slurp(), with a simple test
Diffstat (limited to 'tests')
| -rw-r--r-- | tests/logerr.c | 1 | ||||
| -rw-r--r-- | tests/slurp.c | 37 | ||||
| -rw-r--r-- | tests/slurp.h | 2 | ||||
| -rw-r--r-- | tests/util.c | 66 |
4 files changed, 89 insertions, 17 deletions
diff --git a/tests/logerr.c b/tests/logerr.c index 86b6b1c..c692bdc 100644 --- a/tests/logerr.c +++ b/tests/logerr.c @@ -1,6 +1,5 @@ #include "../src/logerr.c" - #include <assert.h> #include <errno.h> #include <string.h> diff --git a/tests/slurp.c b/tests/slurp.c index 6ea8618..6b6a02e 100644 --- a/tests/slurp.c +++ b/tests/slurp.c @@ -1,20 +1,25 @@ #include "../src/config.h" +#include <errno.h> #include <stdio.h> #include <stdlib.h> #include "slurp.h" + +static const size_t +NULL_TERMINATOR = sizeof((char)'\0'); + int -slurp_for_tests(const char *const FNAME, char **strref) { +slurp_for_tests(const char *const filename, char **out) { int rc = -1; FILE *file = NULL; - char *str = NULL; + char *str = NULL; - file = fopen(FNAME, "r"); - if (!file) { - perror("fopen(FNAME, \"r\")"); + file = fopen(filename, "r"); + if (file == NULL) { + perror("fopen(filename, \"r\")"); goto out; } @@ -28,29 +33,31 @@ slurp_for_tests(const char *const FNAME, char **strref) { perror("ftell(file)"); goto out; } - const size_t size = (size_t)lsize + sizeof(char); + const size_t size = (size_t)lsize; - if (fseek(file, 0L, SEEK_SET)) { - perror("fseek(file, 0L, SEEK_SET)"); + errno = 0; + rewind(file); + if (errno) { + perror("rewind(file)"); goto out; } - str = malloc(size); - if (!str) { + str = malloc(size + NULL_TERMINATOR); + if (str == NULL) { perror("malloc(...)"); goto out; } - if (fread(str, sizeof(char), size - 1, file) != size - 1) { + if (fread(str, sizeof(char), size, file) != size) { perror("fread(...)"); goto out; } - str[size - 1] = '\0'; - *strref = str; + str[size] = '\0'; + *out = str; rc = 0; out: - if (file) { + if (file != NULL) { if (fclose(file)) { perror("flcose(file"); rc = -1; @@ -58,7 +65,7 @@ out: } if (rc) { - if (str) { + if (str != NULL) { free(str); } } diff --git a/tests/slurp.h b/tests/slurp.h index fd6c082..cc8bf52 100644 --- a/tests/slurp.h +++ b/tests/slurp.h @@ -1,2 +1,2 @@ int -slurp_for_tests(const char *const FNAME, char **strref); +slurp_for_tests(const char *const filename, char **out); diff --git a/tests/util.c b/tests/util.c new file mode 100644 index 0000000..5e2e203 --- /dev/null +++ b/tests/util.c @@ -0,0 +1,66 @@ +#include "../src/util.c" + +#include <assert.h> + +#include "../src/testing.h" +#include "slurp.h" + + +static int +test_slurp(void) { + int rc = -1; + + char *given = NULL; + char *expected = NULL; + + { + testing("non-existent file"); + + const char *const filename = __FILE__ ".non-existant"; + const int ret_given = slurp(filename, &given); + const int ret_expected = slurp_for_tests(filename, &expected); + + assert(given == NULL); + assert(expected == NULL); + assert(!!ret_given == !!ret_expected); + + test_ok(); + } + { + testing("slurp() == slurp_for_tests()"); + + if (slurp(__FILE__, &given)) { + logerr("slurp(__FILE__, &given);\n"); + goto out; + } + + if (slurp_for_tests(__FILE__, &expected)) { + logerr("slurp_for_tests(__FILE__, &expected);\n"); + goto out; + } + + assert(given != NULL); + assert(expected != NULL); + assert(strcmp(given, expected) == 0); + test_ok(); + } + + rc = 0; +out: + return rc; +} + + +int +main(void) { + int rc = -1; + + if (test_slurp()) { + logerr("test_slurp();\n"); + goto out; + } + + rc = 0; +out: + return !!rc; +} |
