aboutsummaryrefslogtreecommitdiff
path: root/regress
diff options
context:
space:
mode:
authorOmar Polo <op@omarpolo.com>2021-01-27 10:47:49 +0000
committerOmar Polo <op@omarpolo.com>2021-01-27 10:47:49 +0000
commit3300cbe06a9567c66ee63f3866bcbcf3430e0205 (patch)
treea7686f8e774573b55ebbe18373a27eb60f44baa4 /regress
parent390a61189309451462c0a1dc56c68f71e334ad4b (diff)
initial punycode support
Diffstat (limited to 'regress')
-rw-r--r--regress/Makefile11
-rw-r--r--regress/puny-test.c78
2 files changed, 86 insertions, 3 deletions
diff --git a/regress/Makefile b/regress/Makefile
index 3c9c572..5000165 100644
--- a/regress/Makefile
+++ b/regress/Makefile
@@ -2,11 +2,16 @@ include ../Makefile.local
.PHONY: all clean runtime
-all: iri_test runtime
+all: puny-test testdata iri_test cert.pem
+ ./puny-test
+ ./runtime
./iri_test
+puny-test: puny-test.o ../puny.o ../utf8.o
+ ${CC} puny-test.o ../puny.o ../utf8.o -o puny-test
+
iri_test: iri_test.o ../iri.o ../utf8.o
- ${CC} iri_test.o ../iri.o ../utf8.o -o iri_test ${LDFLAGS}
+ ${CC} iri_test.o ../iri.o ../utf8.o -o iri_test
fill-file: fill-file.o
${CC} fill-file.o -o fill-file
@@ -38,5 +43,5 @@ testdata: fill-file
cp hello testdata/dir
cp testdata/index.gmi testdata/dir/foo.gmi
-runtime: testdata cert.pem
+runtime: testdata
./runtime
diff --git a/regress/puny-test.c b/regress/puny-test.c
new file mode 100644
index 0000000..b25f82a
--- /dev/null
+++ b/regress/puny-test.c
@@ -0,0 +1,78 @@
+/*
+ * Copyright (c) 2021 Omar Polo <op@omarpolo.com>
+ *
+ * Permission to use, copy, modify, and distribute this software for any
+ * purpose with or without fee is hereby granted, provided that the above
+ * copyright notice and this permission notice appear in all copies.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
+ * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
+ * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
+ * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
+ * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
+ * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
+ * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
+ */
+
+#include <stdio.h>
+#include <string.h>
+
+#include "../gmid.h"
+
+struct suite {
+ const char *src;
+ const char *res;
+} t[] = {
+ {"foo", "foo"},
+ {"xn-invalid", "xn-invalid"},
+ {"naïve", "naïve"},
+ {"xn--8ca", "è"},
+ {"xn--caff-8oa", "caffè"},
+ {"xn--nave-6pa", "naïve"},
+ {"xn--e-0mbbc", "τeστ"},
+ {"xn--8ca67lbac", "τèστ"},
+ {"xn--28j2a3ar1p", "こんにちは"},
+ {"xn--hello--ur7iy09x", "hello-世界"},
+ {"xn--hi--hi-rr7iy09x", "hi-世界-hi"},
+ {"xn--caf-8la.foo.org", "cafè.foo.org"},
+ /* 3 bytes */
+ {"xn--j6h", "♨"},
+ /* 4 bytes */
+ {"xn--x73l", "𩸽"},
+ {"xn--x73laaa", "𩸽𩸽𩸽𩸽"},
+ {NULL, NULL}
+};
+
+int
+main(int argc, char **argv)
+{
+ struct suite *i;
+ int failed;
+ char *hostname;
+ char buf[64]; /* name len */
+
+ failed = 0;
+ for (i = t; i->src != NULL; ++i) {
+ if ((hostname = strdup(i->src)) == NULL)
+ return 0;
+
+ memset(buf, 0, sizeof(buf));
+ if (!puny_decode(hostname, buf, sizeof(buf))) {
+ printf("decode: failure with %s\n", i->src);
+ failed = 1;
+ continue;
+ }
+
+ if (strcmp(buf, i->res)) {
+ printf("ERR: expected \"%s\", got \"%s\"\n",
+ i->res, buf);
+ failed = 1;
+ continue;
+ } else
+ printf("OK: %s => %s\n", i->src, buf);
+
+ free(hostname);
+ }
+
+ return failed;
+}