summaryrefslogtreecommitdiff
path: root/unittests.c
diff options
context:
space:
mode:
Diffstat (limited to 'unittests.c')
-rw-r--r--unittests.c73
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]);