1 #include "test_utils.h"
2 #include "string_utils.h"
5 #define T_ASSERT(pred, msg) do {\
6 if ((pred)) { t_pass("%s: %s", __FUNCTION__, msg); } else { t_fail("%s: %s", __FUNCTION__, msg); } \
9 void test_unescape_newlines() {
10 char *src
= "foo\nbar\\n\\baz\\n";
11 char *expected
= "foo\nbar\n\\baz\n";
12 char *dest
= (char *)malloc(strlen(src
));
13 size_t len
= 0, expected_size
= 0;
14 len
= unescape_newlines(dest
, src
, strlen(src
) + 1);
15 T_ASSERT(0 == strcmp(expected
, dest
), "newlines unescaped as expected");
16 expected_size
= strlen(expected
) + 1;
17 T_ASSERT(len
== expected_size
, "returned length is correct");
18 expected_size
= strlen(dest
) + 1;
19 T_ASSERT(len
== expected_size
, "destination buffer is of correct length");
22 /*test binary safe-ness*/
23 src
= "foo\nbar\\nboll\0kaka";
24 expected
= "foo\nbar\nboll\0kaka";
26 dest
= (char *)malloc(expected_size
);
27 len
= unescape_newlines(dest
, src
, 19);
28 T_ASSERT(expected_size
== len
, "returned length is correct");
29 T_ASSERT(0 == memcmp(expected
, dest
, len
), "length argument is respected");
32 /* test quoted backslash */
34 expected
= "foo\\nbar";
36 dest
= (char *)malloc(expected_size
);
37 len
= unescape_newlines(dest
, src
, strlen(src
) + 1);
38 T_ASSERT(expected_size
== len
, "returned length is correct");
39 T_ASSERT(0 == memcmp(expected
, dest
, len
), "length argument is respected");
45 len
= unescape_newlines(out
, in
, 4);
46 T_ASSERT(4 == len
, "returned length is correct");
47 T_ASSERT(4 == strlen(out
), "only the correct number of bytes copied");
48 T_ASSERT(out
[3] == '\\', "half an escaped newline isn't parsed");
51 int main(int argc
, char *argv
[]) {
55 t_start("testing string utilities");
56 test_unescape_newlines();