diff options
author | Omar Polo <op@omarpolo.com> | 2021-01-27 10:47:49 +0000 |
---|---|---|
committer | Omar Polo <op@omarpolo.com> | 2021-01-27 10:47:49 +0000 |
commit | 3300cbe06a9567c66ee63f3866bcbcf3430e0205 (patch) | |
tree | a7686f8e774573b55ebbe18373a27eb60f44baa4 /regress | |
parent | 390a61189309451462c0a1dc56c68f71e334ad4b (diff) |
initial punycode support
Diffstat (limited to 'regress')
-rw-r--r-- | regress/Makefile | 11 | ||||
-rw-r--r-- | regress/puny-test.c | 78 |
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; +} |