diff options
Diffstat (limited to 'unittests.c')
-rw-r--r-- | unittests.c | 67 |
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]); |