summaryrefslogtreecommitdiff
path: root/unittests.c
diff options
context:
space:
mode:
Diffstat (limited to 'unittests.c')
-rw-r--r--unittests.c67
1 files changed, 67 insertions, 0 deletions
diff --git a/unittests.c b/unittests.c
index f888f94..b4ad978 100644
--- a/unittests.c
+++ b/unittests.c
@@ -1031,6 +1031,71 @@ static int test_write_writes_string(void)
}
+static int read_test(Dynstr *(*callback)(char *filename, size_t size))
+{
+ char tempname[] = "unittest.XXXXXX";
+ int fd;
+ Dynstr *dynstr;
+ Dynstr *dynstr2;
+ const char canonical[] = "life is too short for str* and mem* in apps";
+
+ fd = mkstemp(tempname);
+ if (fd == -1)
+ abort();
+ if (write(fd, canonical, sizeof(canonical)) == -1)
+ abort();
+ close(fd);
+
+ dynstr = callback(tempname, sizeof(canonical) * 2);
+ FAIL_UNLESS(dynstr != NULL);
+ FAIL_UNLESS_EQUAL(dynstr_len(dynstr), sizeof(canonical));
+
+ dynstr2 = dynstr_new_from_memory(canonical, sizeof(canonical));
+ FAIL_UNLESS_EQUAL(dynstr_cmp(dynstr, dynstr2), 0);
+
+ dynstr_free(dynstr);
+ dynstr_free(dynstr2);
+
+ return true;
+}
+
+
+static Dynstr *fread_callback(char *filename, size_t size)
+{
+ FILE *f;
+ Dynstr *dynstr;
+
+ f = fopen(filename, "r");
+ dynstr = dynstr_fread(f, size);
+ fclose(f);
+ return dynstr;
+}
+
+
+static int test_fread_reads_string(void)
+{
+ return read_test(fread_callback);
+}
+
+
+static Dynstr *read_callback(char *filename, size_t size)
+{
+ int fd;
+ Dynstr *dynstr;
+
+ fd = open(filename, O_RDONLY, 0);
+ dynstr = dynstr_read(fd, size);
+ close(fd);
+ return dynstr;
+}
+
+
+static int test_read_reads_string(void)
+{
+ return read_test(read_callback);
+}
+
+
static void setup(void)
{
dynstr_init();
@@ -1119,6 +1184,8 @@ static const struct test tests[] = {
TEST(test_cmp_returns_positive_if_second_string_comes_first),
TEST(test_fwrite_writes_string),
TEST(test_write_writes_string),
+ TEST(test_fread_reads_string),
+ TEST(test_read_reads_string),
};
static const int num_tests = sizeof(tests) / sizeof(tests[0]);