diff options
Diffstat (limited to 'tests/str-idna.c')
-rw-r--r-- | tests/str-idna.c | 41 |
1 files changed, 28 insertions, 13 deletions
diff --git a/tests/str-idna.c b/tests/str-idna.c index bc7531e6ef..1134c291d6 100644 --- a/tests/str-idna.c +++ b/tests/str-idna.c @@ -26,19 +26,23 @@ #include <setjmp.h> #include <limits.h> #include <stdint.h> +#include <stdio.h> #include <stdlib.h> #include <string.h> #include <gnutls/gnutls.h> #include <cmocka.h> -int _gnutls_idna_map(const char *input, unsigned ilen, gnutls_datum_t *out, unsigned flags); -int _gnutls_idna_reverse_map(const char * input, unsigned ilen, gnutls_datum_t *out, unsigned flags); +#ifdef HAVE_LIBIDN2 +# define GLOBAL_FLAGS GNUTLS_IDNA_FORCE_2008 +#else +# define GLOBAL_FLAGS 0 +#endif #define MATCH_FUNC(fname, str, normalized) \ static void fname(void **glob_state) \ { \ gnutls_datum_t out; \ - int ret = _gnutls_idna_map(str, strlen(str), &out, 0); \ + int ret = gnutls_idna_map(str, strlen(str), &out, GLOBAL_FLAGS); \ if (normalized == NULL) { /* expect failure */ \ assert_int_not_equal(ret, 0); \ return; \ @@ -56,7 +60,7 @@ static void fname##_reverse(void **glob_state) \ int ret; \ if (normalized == NULL) \ return; \ - ret = _gnutls_idna_reverse_map(normalized, strlen(normalized), &out, 0); \ + ret = gnutls_idna_reverse_map(normalized, strlen(normalized), &out, 0); \ assert_int_equal(ret, 0); \ \ assert_int_equal(strcmp((char*)out.data, (char*)str), 0); \ @@ -64,6 +68,8 @@ static void fname##_reverse(void **glob_state) \ } \ MATCH_FUNC(fname, str, normalized) +#define EMPTY_FUNC(name) static void name(void **glob_state) { \ + return; } /* some vectors taken from: * http://www.unicode.org/Public/idna/9.0.0/IdnaTest.txt @@ -72,30 +78,35 @@ MATCH_FUNC(fname, str, normalized) MATCH_FUNC_TWO_WAY(test_ascii, "localhost", "localhost"); MATCH_FUNC_TWO_WAY(test_ascii_caps, "LOCALHOST", "LOCALHOST"); MATCH_FUNC_TWO_WAY(test_greek1, "βόλοσ.com", "xn--nxasmq6b.com"); -MATCH_FUNC(test_caps_greek, "ΒΌΛΟΣ.com", "xn--nxasmq6b.com"); MATCH_FUNC_TWO_WAY(test_mix, "简体中文.εξτρα.com", "xn--fiqu1az03c18t.xn--mxah1amo.com"); -MATCH_FUNC(test_caps_german1, "Ü.ü", "xn--tda.xn--tda"); -MATCH_FUNC(test_caps_german2, "Bücher.de", "xn--bcher-kva.de"); MATCH_FUNC_TWO_WAY(test_german4, "bücher.de", "xn--bcher-kva.de"); MATCH_FUNC_TWO_WAY(test_u1, "夡夞夜夙", "xn--bssffl"); MATCH_FUNC_TWO_WAY(test_jp2, "日本語.jp", "xn--wgv71a119e.jp"); -MATCH_FUNC(test_dots, "a.b.c。d。", "a.b.c.d."); #ifdef HAVE_LIBIDN2 /* IDNA 2008 */ MATCH_FUNC_TWO_WAY(test_greek2, "βόλος.com", "xn--nxasmm1c.com"); MATCH_FUNC_TWO_WAY(test_german1, "faß.de", "xn--fa-hia.de"); # if IDN2_VERSION_NUMBER >= 0x00140000 +MATCH_FUNC(test_caps_greek, "ΒΌΛΟΣ.com", "xn--nxasmq6b.com"); +MATCH_FUNC(test_caps_german1, "Ü.ü", "xn--tda.xn--tda"); +MATCH_FUNC(test_caps_german2, "Bücher.de", "xn--bcher-kva.de"); MATCH_FUNC(test_caps_german3, "Faß.de", "xn--fa-hia.de"); +MATCH_FUNC(test_dots, "a.b.c。d。", "a.b.c.d."); # else -static void test_caps_german3(void **glob_state) -{ - return; -} +EMPTY_FUNC(test_caps_german1); +EMPTY_FUNC(test_caps_german2); +EMPTY_FUNC(test_caps_german3); +EMPTY_FUNC(test_caps_greek); +EMPTY_FUNC(test_dots); # endif #else /* IDNA 2003 */ +MATCH_FUNC(test_caps_greek, "ΒΌΛΟΣ.com", "xn--nxasmq6b.com"); MATCH_FUNC(test_greek2, "βόλος.com", "xn--nxasmq6b.com"); MATCH_FUNC(test_german1, "faß.de", "fass.de"); +MATCH_FUNC(test_caps_german1, "Ü.ü", "xn--tda.xn--tda"); +MATCH_FUNC(test_caps_german2, "Bücher.de", "xn--bcher-kva.de"); MATCH_FUNC(test_caps_german3, "Faß.de", "fass.de"); +MATCH_FUNC(test_dots, "a.b.c。d。", "a.b.c.d."); #endif int main(void) @@ -130,9 +141,13 @@ int main(void) cmocka_unit_test(test_dots) }; - ret = _gnutls_idna_map("x", 1, &tmp, 0); + ret = gnutls_idna_map("β", strlen("β"), &tmp, GLOBAL_FLAGS); if (ret == GNUTLS_E_UNIMPLEMENTED_FEATURE) exit(77); + else if (ret < 0) { + fprintf(stderr, "error: %s\n", gnutls_strerror(ret)); + exit(1); + } gnutls_free(tmp.data); return cmocka_run_group_tests(tests, NULL, NULL); |