diff options
Diffstat (limited to 'unittests.c')
-rw-r--r-- | unittests.c | 73 |
1 files changed, 73 insertions, 0 deletions
diff --git a/unittests.c b/unittests.c index b4ad978..32bb270 100644 --- a/unittests.c +++ b/unittests.c @@ -1096,6 +1096,77 @@ static int test_read_reads_string(void) } +static int readline_test(Dynstr *(*callback)(char *filename)) +{ + char tempname[] = "unittest.XXXXXX"; + int fd; + const char cline1[] = "life is too short for str* and mem* in apps\n"; + const char cline2[] = "use dynstr instead!\n"; + Dynstr *lines; + Dynstr *line1; + Dynstr *line2; + Dynstr *result; + + fd = mkstemp(tempname); + if (fd == -1) + abort(); + + line1 = dynstr_new_from_constant_cstring(cline1); + line2 = dynstr_new_from_constant_cstring(cline2); + lines = dynstr_cat(line1, line2, NULL); + if (dynstr_write(fd, lines) != dynstr_len(lines)) + abort(); + close(fd); + + result = callback(tempname); + + FAIL_UNLESS_EQUAL(dynstr_cmp(line1, result), 0); + + dynstr_free(line1); + dynstr_free(line2); + dynstr_free(lines); + dynstr_free(result); + + return true; +} + + +static Dynstr *freadline_callback(char *filename) +{ + FILE *f; + Dynstr *line1; + + f = fopen(filename, "r"); + line1 = dynstr_freadline(f); + fclose(f); + return line1; +} + + +static int test_freadline_reads_first_line(void) +{ + return readline_test(freadline_callback); +} + + +static Dynstr *readline_callback(char *filename) +{ + int fd; + Dynstr *line1; + + fd = open(filename, O_RDONLY, 0); + line1 = dynstr_readline(fd); + close(fd); + return line1; +} + + +static int test_readline_reads_first_line(void) +{ + return readline_test(readline_callback); +} + + static void setup(void) { dynstr_init(); @@ -1186,6 +1257,8 @@ static const struct test tests[] = { TEST(test_write_writes_string), TEST(test_fread_reads_string), TEST(test_read_reads_string), + TEST(test_freadline_reads_first_line), + TEST(test_readline_reads_first_line), }; static const int num_tests = sizeof(tests) / sizeof(tests[0]); |