summaryrefslogtreecommitdiff
path: root/tests
diff options
context:
space:
mode:
Diffstat (limited to 'tests')
-rw-r--r--tests/logerr.c1
-rw-r--r--tests/slurp.c37
-rw-r--r--tests/slurp.h2
-rw-r--r--tests/util.c66
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;
+}