X-Git-Url: http://www.chiark.greenend.org.uk/ucgi/~mdw/git/disorder/blobdiff_plain/fce810c27ad09dd73706100435a6e65af0a67604..db86b8ed9c69525f740024d0a11308716148eec0:/lib/test.c diff --git a/lib/test.c b/lib/test.c index 0f38fc3..a105713 100644 --- a/lib/test.c +++ b/lib/test.c @@ -62,6 +62,7 @@ #include "configuration.h" #include "addr.h" #include "base64.h" +#include "url.h" static int tests, errors; static int fail_first; @@ -296,35 +297,42 @@ static int test_multipart_callback(const char *s, void *u) { static void test_mime(void) { char *t, *n, *v; struct vector parts[1]; + struct kvp *k; fprintf(stderr, "test_mime\n"); - t = n = v = 0; - insist(!mime_content_type("text/plain", &t, &n, &v)); + t = 0; + k = 0; + insist(!mime_content_type("text/plain", &t, &k)); check_string(t, "text/plain"); - insist(n == 0); - insist(v == 0); + insist(k == 0); - insist(mime_content_type("TEXT ((broken) comment", &t, &n, &v) < 0); - insist(mime_content_type("TEXT ((broken) comment\\", &t, &n, &v) < 0); + insist(mime_content_type("TEXT ((broken) comment", &t, &k) < 0); + insist(mime_content_type("TEXT ((broken) comment\\", &t, &k) < 0); - t = n = v = 0; - insist(!mime_content_type("TEXT ((nested)\\ comment) /plain", &t, &n, &v)); + t = 0; + k = 0; + insist(!mime_content_type("TEXT ((nested)\\ comment) /plain", &t, &k)); check_string(t, "text/plain"); - insist(n == 0); - insist(v == 0); + insist(k == 0); - t = n = v = 0; - insist(!mime_content_type(" text/plain ; Charset=\"utf-\\8\"", &t, &n, &v)); + t = 0; + k = 0; + insist(!mime_content_type(" text/plain ; Charset=\"utf-\\8\"", &t, &k)); check_string(t, "text/plain"); - check_string(n, "charset"); - check_string(v, "utf-8"); + insist(k != 0); + insist(k->next == 0); + check_string(k->name, "charset"); + check_string(k->value, "utf-8"); - t = n = v = 0; - insist(!mime_content_type("text/plain;charset = ISO-8859-1 ", &t, &n, &v)); + t = 0; + k = 0; + insist(!mime_content_type("text/plain;charset = ISO-8859-1 ", &t, &k)); + insist(k != 0); + insist(k->next == 0); check_string(t, "text/plain"); - check_string(n, "charset"); - check_string(v, "ISO-8859-1"); + check_string(k->name, "charset"); + check_string(k->value, "ISO-8859-1"); t = n = v = 0; insist(!mime_rfc2388_content_disposition("form-data; name=\"field1\"", &t, &n, &v)); @@ -453,6 +461,16 @@ static void test_mime(void) { check_string(mime_qp("x =\r\ny"), "x y"); check_string(mime_qp("x = \r\ny"), "x y"); + check_string(mime_to_qp(""), ""); + check_string(mime_to_qp("foobar\n"), "foobar\n"); + check_string(mime_to_qp("foobar \n"), "foobar=20\n"); + check_string(mime_to_qp("foobar\t\n"), "foobar=09\n"); + check_string(mime_to_qp("foobar \t \n"), "foobar=20=09=20\n"); + check_string(mime_to_qp(" foo=bar"), " foo=3Dbar\n"); + check_string(mime_to_qp("copyright \xC2\xA9"), "copyright =C2=A9\n"); + check_string(mime_to_qp("foo\nbar\nbaz\n"), "foo\nbar\nbaz\n"); + check_string(mime_to_qp("wibble wobble wibble wobble wibble wobble wibble wobble wibble wobble wibble"), "wibble wobble wibble wobble wibble wobble wibble wobble wibble wobble wibb=\nle\n"); + /* from RFC2045 */ check_string(mime_qp("Now's the time =\r\n" "for all folk to come=\r\n" @@ -1371,6 +1389,8 @@ static void test_addr(void) { 0 }; + printf("test_addr\n"); + a.n = 1; a.s = (char **)s; s[0] = "smtp"; @@ -1402,6 +1422,26 @@ static void test_addr(void) { check_string(name, "host localhost service nntp"); } +static void test_url(void) { + struct url p; + + printf("test_url\n"); + + insist(parse_url("http://www.example.com/example/path", &p) == 0); + check_string(p.scheme, "http"); + check_string(p.host, "www.example.com"); + insist(p.port == -1); + check_string(p.path, "/example/path"); + insist(p.query == 0); + + insist(parse_url("https://www.example.com:82/example%2fpath?+query+", &p) == 0); + check_string(p.scheme, "https"); + check_string(p.host, "www.example.com"); + insist(p.port == 82); + check_string(p.path, "/example/path"); + check_string(p.query, "+query+"); +} + int main(void) { mem_init(); fail_first = !!getenv("FAIL_FIRST"); @@ -1468,6 +1508,7 @@ int main(void) { /* selection.c */ test_selection(); test_hash(); + test_url(); fprintf(stderr, "%d errors out of %d tests\n", errors, tests); return !!errors; }