chiark / gitweb /
Make tests/play.py more reliable.
[disorder] / lib / test.c
index 0f38fc368547382786e558678295c4c45b304d32..a10571342947db4e17593ae681f3bf612da6a9ed 100644 (file)
@@ -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;
 }