xref: /minix3/external/bsd/bind/dist/contrib/idn/idnkit-1.0-src/lib/tests/api.tsy (revision 00b67f09dd46474d133c95011a48590a8e8f94c7)
1*00b67f09SDavid van Moolenbroek#ifndef lint
2*00b67f09SDavid van Moolenbroekstatic char *rcsid = "Id: api.tsy,v 1.1 2003/06/04 00:26:50 marka Exp ";
3*00b67f09SDavid van Moolenbroek#endif
4*00b67f09SDavid van Moolenbroek
5*00b67f09SDavid van Moolenbroek/*
6*00b67f09SDavid van Moolenbroek * Copyright (c) 2002 Japan Network Information Center.
7*00b67f09SDavid van Moolenbroek * All rights reserved.
8*00b67f09SDavid van Moolenbroek *
9*00b67f09SDavid van Moolenbroek * By using this file, you agree to the terms and conditions set forth bellow.
10*00b67f09SDavid van Moolenbroek *
11*00b67f09SDavid van Moolenbroek * 			LICENSE TERMS AND CONDITIONS
12*00b67f09SDavid van Moolenbroek *
13*00b67f09SDavid van Moolenbroek * The following License Terms and Conditions apply, unless a different
14*00b67f09SDavid van Moolenbroek * license is obtained from Japan Network Information Center ("JPNIC"),
15*00b67f09SDavid van Moolenbroek * a Japanese association, Kokusai-Kougyou-Kanda Bldg 6F, 2-3-4 Uchi-Kanda,
16*00b67f09SDavid van Moolenbroek * Chiyoda-ku, Tokyo 101-0047, Japan.
17*00b67f09SDavid van Moolenbroek *
18*00b67f09SDavid van Moolenbroek * 1. Use, Modification and Redistribution (including distribution of any
19*00b67f09SDavid van Moolenbroek *    modified or derived work) in source and/or binary forms is permitted
20*00b67f09SDavid van Moolenbroek *    under this License Terms and Conditions.
21*00b67f09SDavid van Moolenbroek *
22*00b67f09SDavid van Moolenbroek * 2. Redistribution of source code must retain the copyright notices as they
23*00b67f09SDavid van Moolenbroek *    appear in each source code file, this License Terms and Conditions.
24*00b67f09SDavid van Moolenbroek *
25*00b67f09SDavid van Moolenbroek * 3. Redistribution in binary form must reproduce the Copyright Notice,
26*00b67f09SDavid van Moolenbroek *    this License Terms and Conditions, in the documentation and/or other
27*00b67f09SDavid van Moolenbroek *    materials provided with the distribution.  For the purposes of binary
28*00b67f09SDavid van Moolenbroek *    distribution the "Copyright Notice" refers to the following language:
29*00b67f09SDavid van Moolenbroek *    "Copyright (c) 2000-2002 Japan Network Information Center.  All rights reserved."
30*00b67f09SDavid van Moolenbroek *
31*00b67f09SDavid van Moolenbroek * 4. The name of JPNIC may not be used to endorse or promote products
32*00b67f09SDavid van Moolenbroek *    derived from this Software without specific prior written approval of
33*00b67f09SDavid van Moolenbroek *    JPNIC.
34*00b67f09SDavid van Moolenbroek *
35*00b67f09SDavid van Moolenbroek * 5. Disclaimer/Limitation of Liability: THIS SOFTWARE IS PROVIDED BY JPNIC
36*00b67f09SDavid van Moolenbroek *    "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
37*00b67f09SDavid van Moolenbroek *    LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
38*00b67f09SDavid van Moolenbroek *    PARTICULAR PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL JPNIC BE LIABLE
39*00b67f09SDavid van Moolenbroek *    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
40*00b67f09SDavid van Moolenbroek *    CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
41*00b67f09SDavid van Moolenbroek *    SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR
42*00b67f09SDavid van Moolenbroek *    BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
43*00b67f09SDavid van Moolenbroek *    WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
44*00b67f09SDavid van Moolenbroek *    OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
45*00b67f09SDavid van Moolenbroek *    ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
46*00b67f09SDavid van Moolenbroek */
47*00b67f09SDavid van Moolenbroek
48*00b67f09SDavid van Moolenbroek#include <stddef.h>
49*00b67f09SDavid van Moolenbroek#include <stdio.h>
50*00b67f09SDavid van Moolenbroek#include <stdlib.h>
51*00b67f09SDavid van Moolenbroek#include <string.h>
52*00b67f09SDavid van Moolenbroek#include <idn/api.h>
53*00b67f09SDavid van Moolenbroek#include <idn/log.h>
54*00b67f09SDavid van Moolenbroek
55*00b67f09SDavid van Moolenbroek#include "codeset.h"
56*00b67f09SDavid van Moolenbroek#include "setenv.h"
57*00b67f09SDavid van Moolenbroek
58*00b67f09SDavid van Moolenbroek#ifndef EUCJP_ENCODING_NAME
59*00b67f09SDavid van Moolenbroek#define EUCJP_ENCODING_NAME	"eucJP"
60*00b67f09SDavid van Moolenbroek#endif
61*00b67f09SDavid van Moolenbroek
62*00b67f09SDavid van Moolenbroek/*
63*00b67f09SDavid van Moolenbroek * U+304B: hiragana letter KA
64*00b67f09SDavid van Moolenbroek * U+3099: combining katakana-hiragana voiced sound mark
65*00b67f09SDavid van Moolenbroek *
66*00b67f09SDavid van Moolenbroek * 	map("U+304B U+3099") -> "U+304C"
67*00b67f09SDavid van Moolenbroek *
68*00b67f09SDavid van Moolenbroek * U+304C: hiragana letter GA
69*00b67f09SDavid van Moolenbroek */
70*00b67f09SDavid van Moolenbroek#define UTF8_NAME		"A<U+304B><U+3099>"
71*00b67f09SDavid van Moolenbroek#define UTF8_REVNAME		"a<U+304C>"
72*00b67f09SDavid van Moolenbroek
73*00b67f09SDavid van Moolenbroek/*
74*00b67f09SDavid van Moolenbroek * A4AC: hiragana letter GA (in EUC-JP)
75*00b67f09SDavid van Moolenbroek */
76*00b67f09SDavid van Moolenbroek#define EUCJP_NAME	"\xa4\xac"
77*00b67f09SDavid van Moolenbroek#define EUCJP_REVNAME	"\xa4\xac"
78*00b67f09SDavid van Moolenbroek
79*00b67f09SDavid van Moolenbroek/*
80*00b67f09SDavid van Moolenbroek * Conversion result of "U+304B U+3099 A"
81*00b67f09SDavid van Moolenbroek */
82*00b67f09SDavid van Moolenbroek#define PUNYCODE_NAME	"xn--a-i8t"
83*00b67f09SDavid van Moolenbroek
84*00b67f09SDavid van Moolenbroek/*
85*00b67f09SDavid van Moolenbroek * Conversion result of "A U+304B U+3099" (in EUC-JP).
86*00b67f09SDavid van Moolenbroek */
87*00b67f09SDavid van Moolenbroek#define AUX_EUCJP_NAME	"xn--a-i\xa3\xb8t"
88*00b67f09SDavid van Moolenbroek
89*00b67f09SDavid van Moolenbroek
90*00b67f09SDavid van Moolenbroek//--------------------------------------------------------------------
91*00b67f09SDavid van Moolenbroek// Setups and Teardowns.
92*00b67f09SDavid van Moolenbroek//--------------------------------------------------------------------
93*00b67f09SDavid van Moolenbroek
94*00b67f09SDavid van Moolenbroek//# SETUP
95*00b67f09SDavid van Moolenbroek//	group: generic-conversion
96*00b67f09SDavid van Moolenbroek//--
97*00b67f09SDavid van Moolenbroek//	Initialize the `api' module.
98*00b67f09SDavid van Moolenbroek//	Set local encoding to `UTF-8'.
99*00b67f09SDavid van Moolenbroek{
100*00b67f09SDavid van Moolenbroek	char to[256];
101*00b67f09SDavid van Moolenbroek	idn_result_t r;
102*00b67f09SDavid van Moolenbroek
103*00b67f09SDavid van Moolenbroek	setenv("IDN_LOCAL_CODESET", "UTF-8", 1);
104*00b67f09SDavid van Moolenbroek	unsetenv("IDN_DISABLE");
105*00b67f09SDavid van Moolenbroek	idn_nameinit(0);
106*00b67f09SDavid van Moolenbroek}
107*00b67f09SDavid van Moolenbroek
108*00b67f09SDavid van Moolenbroek//# SETUP
109*00b67f09SDavid van Moolenbroek//	group: quiet
110*00b67f09SDavid van Moolenbroek//--
111*00b67f09SDavid van Moolenbroek//	Set log level to `fatal' to supress log messages.
112*00b67f09SDavid van Moolenbroek{
113*00b67f09SDavid van Moolenbroek	int saved_log_level;
114*00b67f09SDavid van Moolenbroek
115*00b67f09SDavid van Moolenbroek	saved_log_level = idn_log_getlevel();
116*00b67f09SDavid van Moolenbroek	idn_log_setlevel(idn_log_level_fatal);
117*00b67f09SDavid van Moolenbroek}
118*00b67f09SDavid van Moolenbroek
119*00b67f09SDavid van Moolenbroek//# TEARDOWN
120*00b67f09SDavid van Moolenbroek//	group: quiet
121*00b67f09SDavid van Moolenbroek//--
122*00b67f09SDavid van Moolenbroek//	Restore log level.
123*00b67f09SDavid van Moolenbroek{
124*00b67f09SDavid van Moolenbroek	idn_log_setlevel(saved_log_level);
125*00b67f09SDavid van Moolenbroek}
126*00b67f09SDavid van Moolenbroek
127*00b67f09SDavid van Moolenbroek//--------------------------------------------------------------------
128*00b67f09SDavid van Moolenbroek// Testcases.
129*00b67f09SDavid van Moolenbroek//--------------------------------------------------------------------
130*00b67f09SDavid van Moolenbroek
131*00b67f09SDavid van Moolenbroek//# TESTCASE
132*00b67f09SDavid van Moolenbroek//	title: basic conversion by encodename()
133*00b67f09SDavid van Moolenbroek//	group: generic-conversion
134*00b67f09SDavid van Moolenbroek{
135*00b67f09SDavid van Moolenbroek	r = idn_encodename(IDN_ENCODE_APP, UTF8_NAME, to, sizeof(to));
136*00b67f09SDavid van Moolenbroek	ASSERT_RESULT(r, idn_success);
137*00b67f09SDavid van Moolenbroek	ASSERT_STRING(to, PUNYCODE_NAME);
138*00b67f09SDavid van Moolenbroek}
139*00b67f09SDavid van Moolenbroek
140*00b67f09SDavid van Moolenbroek//# TESTCASE
141*00b67f09SDavid van Moolenbroek//	title: basic conversion by decodename()
142*00b67f09SDavid van Moolenbroek//	group: generic-conversion
143*00b67f09SDavid van Moolenbroek{
144*00b67f09SDavid van Moolenbroek	r = idn_decodename(IDN_DECODE_APP, PUNYCODE_NAME, to, sizeof(to));
145*00b67f09SDavid van Moolenbroek	ASSERT_RESULT(r, idn_success);
146*00b67f09SDavid van Moolenbroek	ASSERT_STRING(to, UTF8_REVNAME);
147*00b67f09SDavid van Moolenbroek}
148*00b67f09SDavid van Moolenbroek
149*00b67f09SDavid van Moolenbroek//# TESTCASE
150*00b67f09SDavid van Moolenbroek//	title: basic conversion by decodename2()
151*00b67f09SDavid van Moolenbroek//	group: generic-conversion
152*00b67f09SDavid van Moolenbroek{
153*00b67f09SDavid van Moolenbroek	r = idn_decodename2(IDN_DECODE_APP, AUX_EUCJP_NAME, to, sizeof(to),
154*00b67f09SDavid van Moolenbroek			    EUCJP_ENCODING_NAME);
155*00b67f09SDavid van Moolenbroek#ifdef WITHOUT_ICONV
156*00b67f09SDavid van Moolenbroek	ASSERT_RESULT(r, idn_failure);
157*00b67f09SDavid van Moolenbroek#else
158*00b67f09SDavid van Moolenbroek	ASSERT_RESULT(r, idn_success);
159*00b67f09SDavid van Moolenbroek	ASSERT_STRING(to, UTF8_REVNAME);
160*00b67f09SDavid van Moolenbroek#endif
161*00b67f09SDavid van Moolenbroek}
162*00b67f09SDavid van Moolenbroek
163*00b67f09SDavid van Moolenbroek//# TESTCASE
164*00b67f09SDavid van Moolenbroek//	title: call decodename2() with auxencoding=NULL
165*00b67f09SDavid van Moolenbroek//	group: generic-conversion
166*00b67f09SDavid van Moolenbroek{
167*00b67f09SDavid van Moolenbroek#ifdef WITHOUT_ICONV
168*00b67f09SDavid van Moolenbroek	SKIP_TESTCASE;
169*00b67f09SDavid van Moolenbroek#else
170*00b67f09SDavid van Moolenbroek	r = idn_decodename2(IDN_DECODE_APP, PUNYCODE_NAME, to, sizeof(to),
171*00b67f09SDavid van Moolenbroek			    NULL);
172*00b67f09SDavid van Moolenbroek	ASSERT_RESULT(r, idn_success);
173*00b67f09SDavid van Moolenbroek	ASSERT_STRING(to, UTF8_REVNAME);
174*00b67f09SDavid van Moolenbroek#endif
175*00b67f09SDavid van Moolenbroek}
176*00b67f09SDavid van Moolenbroek
177*00b67f09SDavid van Moolenbroek//# TESTCASE
178*00b67f09SDavid van Moolenbroek//	title: call encodename() with actions=0
179*00b67f09SDavid van Moolenbroek//	group: generic-conversion
180*00b67f09SDavid van Moolenbroek{
181*00b67f09SDavid van Moolenbroek	r = idn_encodename(0, UTF8_NAME, to, sizeof(to));
182*00b67f09SDavid van Moolenbroek	ASSERT_RESULT(r, idn_success);
183*00b67f09SDavid van Moolenbroek	ASSERT_STRING(to, UTF8_NAME);
184*00b67f09SDavid van Moolenbroek}
185*00b67f09SDavid van Moolenbroek
186*00b67f09SDavid van Moolenbroek//# TESTCASE
187*00b67f09SDavid van Moolenbroek//	title: call decodename() with actions=0
188*00b67f09SDavid van Moolenbroek//	group: generic-conversion
189*00b67f09SDavid van Moolenbroek{
190*00b67f09SDavid van Moolenbroek	r = idn_decodename(0, PUNYCODE_NAME, to, sizeof(to));
191*00b67f09SDavid van Moolenbroek	ASSERT_RESULT(r, idn_success);
192*00b67f09SDavid van Moolenbroek	ASSERT_STRING(to, PUNYCODE_NAME);
193*00b67f09SDavid van Moolenbroek}
194*00b67f09SDavid van Moolenbroek
195*00b67f09SDavid van Moolenbroek//# TESTCASE
196*00b67f09SDavid van Moolenbroek//	title: call decodename2() with actions=0
197*00b67f09SDavid van Moolenbroek//	group: generic-conversion
198*00b67f09SDavid van Moolenbroek{
199*00b67f09SDavid van Moolenbroek#ifdef WITHOUT_ICONV
200*00b67f09SDavid van Moolenbroek	SKIP_TESTCASE;
201*00b67f09SDavid van Moolenbroek#else
202*00b67f09SDavid van Moolenbroek	r = idn_decodename2(0, AUX_EUCJP_NAME, to, sizeof(to),
203*00b67f09SDavid van Moolenbroek			    EUCJP_ENCODING_NAME);
204*00b67f09SDavid van Moolenbroek	ASSERT_RESULT(r, idn_success);
205*00b67f09SDavid van Moolenbroek	ASSERT_STRING(to, AUX_EUCJP_NAME);
206*00b67f09SDavid van Moolenbroek#endif
207*00b67f09SDavid van Moolenbroek}
208*00b67f09SDavid van Moolenbroek
209*00b67f09SDavid van Moolenbroek//# TESTCASE
210*00b67f09SDavid van Moolenbroek//	title: call encodename() with actions=rtcheck
211*00b67f09SDavid van Moolenbroek//	group: generic-conversion quiet
212*00b67f09SDavid van Moolenbroek{
213*00b67f09SDavid van Moolenbroek	r = idn_encodename(IDN_RTCHECK, EUCJP_NAME, to, sizeof(to));
214*00b67f09SDavid van Moolenbroek	ASSERT_RESULT(r, idn_invalid_action);
215*00b67f09SDavid van Moolenbroek}
216*00b67f09SDavid van Moolenbroek
217*00b67f09SDavid van Moolenbroek//# TESTCASE
218*00b67f09SDavid van Moolenbroek//	title: call encodename() with actions=decode-query
219*00b67f09SDavid van Moolenbroek//	group: generic-conversion quiet
220*00b67f09SDavid van Moolenbroek{
221*00b67f09SDavid van Moolenbroek	r = idn_encodename(IDN_DECODE_QUERY, EUCJP_NAME, to, sizeof(to));
222*00b67f09SDavid van Moolenbroek	ASSERT_RESULT(r, idn_invalid_action);
223*00b67f09SDavid van Moolenbroek}
224*00b67f09SDavid van Moolenbroek
225*00b67f09SDavid van Moolenbroek//# TESTCASE
226*00b67f09SDavid van Moolenbroek//	title: call encodename() with actions=decode-app
227*00b67f09SDavid van Moolenbroek//	group: generic-conversion quiet
228*00b67f09SDavid van Moolenbroek{
229*00b67f09SDavid van Moolenbroek	r = idn_encodename(IDN_DECODE_APP, EUCJP_NAME, to, sizeof(to));
230*00b67f09SDavid van Moolenbroek	ASSERT_RESULT(r, idn_invalid_action);
231*00b67f09SDavid van Moolenbroek}
232*00b67f09SDavid van Moolenbroek
233*00b67f09SDavid van Moolenbroek//# TESTCASE
234*00b67f09SDavid van Moolenbroek//	title: call encodename() with actions=decode-stored
235*00b67f09SDavid van Moolenbroek//	group: generic-conversion quiet
236*00b67f09SDavid van Moolenbroek{
237*00b67f09SDavid van Moolenbroek	r = idn_encodename(IDN_DECODE_STORED, EUCJP_NAME, to, sizeof(to));
238*00b67f09SDavid van Moolenbroek	ASSERT_RESULT(r, idn_invalid_action);
239*00b67f09SDavid van Moolenbroek}
240*00b67f09SDavid van Moolenbroek
241*00b67f09SDavid van Moolenbroek//# TESTCASE
242*00b67f09SDavid van Moolenbroek//	title: call encodename() with actions=(1<<31)
243*00b67f09SDavid van Moolenbroek//	group: generic-conversion quiet
244*00b67f09SDavid van Moolenbroek{
245*00b67f09SDavid van Moolenbroek	r = idn_encodename(1 << 31, EUCJP_NAME, to, sizeof(to));
246*00b67f09SDavid van Moolenbroek	ASSERT_RESULT(r, idn_invalid_action);
247*00b67f09SDavid van Moolenbroek}
248*00b67f09SDavid van Moolenbroek
249*00b67f09SDavid van Moolenbroek//# TESTCASE
250*00b67f09SDavid van Moolenbroek//	title: call decodename() with actions=localmap
251*00b67f09SDavid van Moolenbroek//	group: generic-conversion quiet
252*00b67f09SDavid van Moolenbroek{
253*00b67f09SDavid van Moolenbroek	r = idn_decodename(IDN_LOCALMAP, PUNYCODE_NAME, to, sizeof(to));
254*00b67f09SDavid van Moolenbroek	ASSERT_RESULT(r, idn_invalid_action);
255*00b67f09SDavid van Moolenbroek}
256*00b67f09SDavid van Moolenbroek
257*00b67f09SDavid van Moolenbroek//# TESTCASE
258*00b67f09SDavid van Moolenbroek//	title: call decodename2() with actions=localmap
259*00b67f09SDavid van Moolenbroek//	group: generic-conversion quiet
260*00b67f09SDavid van Moolenbroek{
261*00b67f09SDavid van Moolenbroek#ifdef WITHOUT_ICONV
262*00b67f09SDavid van Moolenbroek	SKIP_TESTCASE;
263*00b67f09SDavid van Moolenbroek#else
264*00b67f09SDavid van Moolenbroek	r = idn_decodename2(IDN_LOCALMAP, AUX_EUCJP_NAME, to, sizeof(to),
265*00b67f09SDavid van Moolenbroek			    EUCJP_ENCODING_NAME);
266*00b67f09SDavid van Moolenbroek	ASSERT_RESULT(r, idn_invalid_action);
267*00b67f09SDavid van Moolenbroek#endif
268*00b67f09SDavid van Moolenbroek}
269*00b67f09SDavid van Moolenbroek
270*00b67f09SDavid van Moolenbroek//# TESTCASE
271*00b67f09SDavid van Moolenbroek//	title: call decodename() with actions=lencheck
272*00b67f09SDavid van Moolenbroek//	group: generic-conversion quiet
273*00b67f09SDavid van Moolenbroek{
274*00b67f09SDavid van Moolenbroek	r = idn_decodename(IDN_LENCHECK, PUNYCODE_NAME, to, sizeof(to));
275*00b67f09SDavid van Moolenbroek	ASSERT_RESULT(r, idn_invalid_action);
276*00b67f09SDavid van Moolenbroek}
277*00b67f09SDavid van Moolenbroek
278*00b67f09SDavid van Moolenbroek//# TESTCASE
279*00b67f09SDavid van Moolenbroek//	title: call decodename2() with actions=lencheck
280*00b67f09SDavid van Moolenbroek//	group: generic-conversion quiet
281*00b67f09SDavid van Moolenbroek{
282*00b67f09SDavid van Moolenbroek#ifdef WITHOUT_ICONV
283*00b67f09SDavid van Moolenbroek	SKIP_TESTCASE;
284*00b67f09SDavid van Moolenbroek#else
285*00b67f09SDavid van Moolenbroek	r = idn_decodename2(IDN_LENCHECK, AUX_EUCJP_NAME, to, sizeof(to),
286*00b67f09SDavid van Moolenbroek			    EUCJP_ENCODING_NAME);
287*00b67f09SDavid van Moolenbroek	ASSERT_RESULT(r, idn_invalid_action);
288*00b67f09SDavid van Moolenbroek#endif
289*00b67f09SDavid van Moolenbroek}
290*00b67f09SDavid van Moolenbroek
291*00b67f09SDavid van Moolenbroek//# TESTCASE
292*00b67f09SDavid van Moolenbroek//	title: call decodename() with actions=encode-query
293*00b67f09SDavid van Moolenbroek//	group: generic-conversion quiet
294*00b67f09SDavid van Moolenbroek{
295*00b67f09SDavid van Moolenbroek	r = idn_decodename(IDN_ENCODE_QUERY, PUNYCODE_NAME, to, sizeof(to));
296*00b67f09SDavid van Moolenbroek	ASSERT_RESULT(r, idn_invalid_action);
297*00b67f09SDavid van Moolenbroek}
298*00b67f09SDavid van Moolenbroek
299*00b67f09SDavid van Moolenbroek//# TESTCASE
300*00b67f09SDavid van Moolenbroek//	title: call decodename2() with actions=encode-query
301*00b67f09SDavid van Moolenbroek//	group: generic-conversion quiet
302*00b67f09SDavid van Moolenbroek{
303*00b67f09SDavid van Moolenbroek#ifdef WITHOUT_ICONV
304*00b67f09SDavid van Moolenbroek	SKIP_TESTCASE;
305*00b67f09SDavid van Moolenbroek#else
306*00b67f09SDavid van Moolenbroek	r = idn_decodename2(IDN_ENCODE_QUERY, AUX_EUCJP_NAME, to, sizeof(to),
307*00b67f09SDavid van Moolenbroek			    EUCJP_ENCODING_NAME);
308*00b67f09SDavid van Moolenbroek	ASSERT_RESULT(r, idn_invalid_action);
309*00b67f09SDavid van Moolenbroek#endif
310*00b67f09SDavid van Moolenbroek}
311*00b67f09SDavid van Moolenbroek
312*00b67f09SDavid van Moolenbroek//# TESTCASE
313*00b67f09SDavid van Moolenbroek//	title: call decodename() with actions=encode-app
314*00b67f09SDavid van Moolenbroek//	group: generic-conversion quiet
315*00b67f09SDavid van Moolenbroek{
316*00b67f09SDavid van Moolenbroek	r = idn_decodename(IDN_ENCODE_APP, PUNYCODE_NAME, to, sizeof(to));
317*00b67f09SDavid van Moolenbroek	ASSERT_RESULT(r, idn_invalid_action);
318*00b67f09SDavid van Moolenbroek}
319*00b67f09SDavid van Moolenbroek
320*00b67f09SDavid van Moolenbroek//# TESTCASE
321*00b67f09SDavid van Moolenbroek//	title: call decodename2() with actions=encode-app
322*00b67f09SDavid van Moolenbroek//	group: generic-conversion quiet
323*00b67f09SDavid van Moolenbroek{
324*00b67f09SDavid van Moolenbroek#ifdef WITHOUT_ICONV
325*00b67f09SDavid van Moolenbroek	SKIP_TESTCASE;
326*00b67f09SDavid van Moolenbroek#else
327*00b67f09SDavid van Moolenbroek	r = idn_decodename2(IDN_ENCODE_APP, AUX_EUCJP_NAME, to, sizeof(to),
328*00b67f09SDavid van Moolenbroek			    EUCJP_ENCODING_NAME);
329*00b67f09SDavid van Moolenbroek	ASSERT_RESULT(r, idn_invalid_action);
330*00b67f09SDavid van Moolenbroek#endif
331*00b67f09SDavid van Moolenbroek}
332*00b67f09SDavid van Moolenbroek
333*00b67f09SDavid van Moolenbroek//# TESTCASE
334*00b67f09SDavid van Moolenbroek//	title: call decodename() with actions=encode-stored
335*00b67f09SDavid van Moolenbroek//	group: generic-conversion quiet
336*00b67f09SDavid van Moolenbroek{
337*00b67f09SDavid van Moolenbroek	r = idn_decodename(IDN_ENCODE_STORED, PUNYCODE_NAME, to, sizeof(to));
338*00b67f09SDavid van Moolenbroek	ASSERT_RESULT(r, idn_invalid_action);
339*00b67f09SDavid van Moolenbroek}
340*00b67f09SDavid van Moolenbroek
341*00b67f09SDavid van Moolenbroek//# TESTCASE
342*00b67f09SDavid van Moolenbroek//	title: call decodename2() with actions=encode-stored
343*00b67f09SDavid van Moolenbroek//	group: generic-conversion quiet
344*00b67f09SDavid van Moolenbroek{
345*00b67f09SDavid van Moolenbroek#ifdef WITHOUT_ICONV
346*00b67f09SDavid van Moolenbroek	SKIP_TESTCASE;
347*00b67f09SDavid van Moolenbroek#else
348*00b67f09SDavid van Moolenbroek	r = idn_decodename2(IDN_ENCODE_STORED, AUX_EUCJP_NAME, to, sizeof(to),
349*00b67f09SDavid van Moolenbroek			    EUCJP_ENCODING_NAME);
350*00b67f09SDavid van Moolenbroek	ASSERT_RESULT(r, idn_invalid_action);
351*00b67f09SDavid van Moolenbroek#endif
352*00b67f09SDavid van Moolenbroek}
353*00b67f09SDavid van Moolenbroek
354*00b67f09SDavid van Moolenbroek//# TESTCASE
355*00b67f09SDavid van Moolenbroek//	title: call decodename() with actions=(1<<31)
356*00b67f09SDavid van Moolenbroek//	group: generic-conversion quiet
357*00b67f09SDavid van Moolenbroek{
358*00b67f09SDavid van Moolenbroek	r = idn_decodename(1 << 31, PUNYCODE_NAME, to, sizeof(to));
359*00b67f09SDavid van Moolenbroek	ASSERT_RESULT(r, idn_invalid_action);
360*00b67f09SDavid van Moolenbroek}
361*00b67f09SDavid van Moolenbroek
362*00b67f09SDavid van Moolenbroek//# TESTCASE
363*00b67f09SDavid van Moolenbroek//	title: call decodename2() with actions=(1<<31)
364*00b67f09SDavid van Moolenbroek//	group: generic-conversion quiet
365*00b67f09SDavid van Moolenbroek{
366*00b67f09SDavid van Moolenbroek#ifdef WITHOUT_ICONV
367*00b67f09SDavid van Moolenbroek	SKIP_TESTCASE;
368*00b67f09SDavid van Moolenbroek#else
369*00b67f09SDavid van Moolenbroek	r = idn_decodename2(1 << 31, AUX_EUCJP_NAME, to, sizeof(to),
370*00b67f09SDavid van Moolenbroek			    EUCJP_ENCODING_NAME);
371*00b67f09SDavid van Moolenbroek	ASSERT_RESULT(r, idn_invalid_action);
372*00b67f09SDavid van Moolenbroek#endif
373*00b67f09SDavid van Moolenbroek}
374*00b67f09SDavid van Moolenbroek
375*00b67f09SDavid van Moolenbroek//# TESTCASE
376*00b67f09SDavid van Moolenbroek//	title: call encodename() with actions=localconv
377*00b67f09SDavid van Moolenbroek//	group: generic-conversion quiet
378*00b67f09SDavid van Moolenbroek{
379*00b67f09SDavid van Moolenbroek#ifndef WITHOUT_ICONV
380*00b67f09SDavid van Moolenbroek	SKIP_TESTCASE;
381*00b67f09SDavid van Moolenbroek#else
382*00b67f09SDavid van Moolenbroek	r = idn_encodename(IDN_LOCALCONV, UTF8_NAME, to, sizeof(to));
383*00b67f09SDavid van Moolenbroek	ASSERT_RESULT(r, idn_invalid_action);
384*00b67f09SDavid van Moolenbroek#endif
385*00b67f09SDavid van Moolenbroek}
386*00b67f09SDavid van Moolenbroek
387*00b67f09SDavid van Moolenbroek//# TESTCASE
388*00b67f09SDavid van Moolenbroek//	title: call decodename() with actions=localconv
389*00b67f09SDavid van Moolenbroek//	group: generic-conversion quiet
390*00b67f09SDavid van Moolenbroek{
391*00b67f09SDavid van Moolenbroek#ifndef WITHOUT_ICONV
392*00b67f09SDavid van Moolenbroek	SKIP_TESTCASE;
393*00b67f09SDavid van Moolenbroek#else
394*00b67f09SDavid van Moolenbroek	r = idn_decodename(IDN_LOCALCONV, PUNYCODE_NAME, to, sizeof(to));
395*00b67f09SDavid van Moolenbroek	ASSERT_RESULT(r, idn_invalid_action);
396*00b67f09SDavid van Moolenbroek#endif
397*00b67f09SDavid van Moolenbroek}
398*00b67f09SDavid van Moolenbroek
399*00b67f09SDavid van Moolenbroek//# TESTCASE
400*00b67f09SDavid van Moolenbroek//	title: call decodename2() with actions=localconv
401*00b67f09SDavid van Moolenbroek//	group: generic-conversion
402*00b67f09SDavid van Moolenbroek{
403*00b67f09SDavid van Moolenbroek#ifndef WITHOUT_ICONV
404*00b67f09SDavid van Moolenbroek	SKIP_TESTCASE;
405*00b67f09SDavid van Moolenbroek#else
406*00b67f09SDavid van Moolenbroek	r = idn_decodename2(IDN_LOCALCONV, AUX_EUCJP_NAME, to, sizeof(to),
407*00b67f09SDavid van Moolenbroek			    EUCJP_ENCODING_NAME);
408*00b67f09SDavid van Moolenbroek	ASSERT_RESULT(r, idn_failure);
409*00b67f09SDavid van Moolenbroek#endif
410*00b67f09SDavid van Moolenbroek}
411*00b67f09SDavid van Moolenbroek
412*00b67f09SDavid van Moolenbroek//# TESTCASE
413*00b67f09SDavid van Moolenbroek//	title: call enable(0) and then encodename()
414*00b67f09SDavid van Moolenbroek//	group: generic-conversion
415*00b67f09SDavid van Moolenbroek{
416*00b67f09SDavid van Moolenbroek	idn_enable(0);
417*00b67f09SDavid van Moolenbroek	r = idn_encodename(IDN_ENCODE_APP, UTF8_NAME, to, sizeof(to));
418*00b67f09SDavid van Moolenbroek	ASSERT_RESULT(r, idn_success);
419*00b67f09SDavid van Moolenbroek	ASSERT_STRING(to, UTF8_NAME);
420*00b67f09SDavid van Moolenbroek}
421*00b67f09SDavid van Moolenbroek
422*00b67f09SDavid van Moolenbroek//# TESTCASE
423*00b67f09SDavid van Moolenbroek//	title: call decodename() when IDN_DISABLE is defined
424*00b67f09SDavid van Moolenbroek//	group: generic-conversion
425*00b67f09SDavid van Moolenbroek{
426*00b67f09SDavid van Moolenbroek	idn_enable(0);
427*00b67f09SDavid van Moolenbroek	r = idn_decodename(IDN_DECODE_APP, PUNYCODE_NAME, to, sizeof(to));
428*00b67f09SDavid van Moolenbroek	ASSERT_RESULT(r, idn_success);
429*00b67f09SDavid van Moolenbroek	ASSERT_STRING(to, PUNYCODE_NAME);
430*00b67f09SDavid van Moolenbroek}
431*00b67f09SDavid van Moolenbroek
432*00b67f09SDavid van Moolenbroek//# TESTCASE
433*00b67f09SDavid van Moolenbroek//	title: call decodename() when IDN_DISABLE is defined
434*00b67f09SDavid van Moolenbroek//	group: generic-conversion
435*00b67f09SDavid van Moolenbroek{
436*00b67f09SDavid van Moolenbroek#ifdef WITHOUT_ICONV
437*00b67f09SDavid van Moolenbroek	SKIP_TESTCASE;
438*00b67f09SDavid van Moolenbroek#else
439*00b67f09SDavid van Moolenbroek	idn_enable(0);
440*00b67f09SDavid van Moolenbroek	r = idn_decodename2(IDN_DECODE_APP, AUX_EUCJP_NAME, to, sizeof(to),
441*00b67f09SDavid van Moolenbroek			    EUCJP_ENCODING_NAME);
442*00b67f09SDavid van Moolenbroek	ASSERT_RESULT(r, idn_success);
443*00b67f09SDavid van Moolenbroek	ASSERT_STRING(to, AUX_EUCJP_NAME);
444*00b67f09SDavid van Moolenbroek#endif
445*00b67f09SDavid van Moolenbroek}
446*00b67f09SDavid van Moolenbroek
447*00b67f09SDavid van Moolenbroek//# TESTCASE
448*00b67f09SDavid van Moolenbroek//	title: call enable(0) and then encodename()
449*00b67f09SDavid van Moolenbroek//	group: generic-conversion
450*00b67f09SDavid van Moolenbroek{
451*00b67f09SDavid van Moolenbroek	idn_enable(0);
452*00b67f09SDavid van Moolenbroek	r = idn_encodename(IDN_ENCODE_APP, UTF8_NAME, to, sizeof(to));
453*00b67f09SDavid van Moolenbroek	ASSERT_RESULT(r, idn_success);
454*00b67f09SDavid van Moolenbroek	ASSERT_STRING(to, UTF8_NAME);
455*00b67f09SDavid van Moolenbroek}
456*00b67f09SDavid van Moolenbroek
457*00b67f09SDavid van Moolenbroek//# TESTCASE
458*00b67f09SDavid van Moolenbroek//	title: call enable(0) and then decodename()
459*00b67f09SDavid van Moolenbroek//	group: generic-conversion
460*00b67f09SDavid van Moolenbroek{
461*00b67f09SDavid van Moolenbroek	idn_enable(0);
462*00b67f09SDavid van Moolenbroek	r = idn_decodename(IDN_DECODE_APP, PUNYCODE_NAME, to, sizeof(to));
463*00b67f09SDavid van Moolenbroek	ASSERT_RESULT(r, idn_success);
464*00b67f09SDavid van Moolenbroek	ASSERT_STRING(to, PUNYCODE_NAME);
465*00b67f09SDavid van Moolenbroek}
466*00b67f09SDavid van Moolenbroek
467*00b67f09SDavid van Moolenbroek//# TESTCASE
468*00b67f09SDavid van Moolenbroek//	title: call enable(0) and then decodename2()
469*00b67f09SDavid van Moolenbroek//	group: generic-conversion
470*00b67f09SDavid van Moolenbroek{
471*00b67f09SDavid van Moolenbroek#ifdef WITHOUT_ICONV
472*00b67f09SDavid van Moolenbroek	SKIP_TESTCASE;
473*00b67f09SDavid van Moolenbroek#else
474*00b67f09SDavid van Moolenbroek	idn_enable(0);
475*00b67f09SDavid van Moolenbroek	r = idn_decodename2(IDN_DECODE_APP, AUX_EUCJP_NAME, to, sizeof(to),
476*00b67f09SDavid van Moolenbroek			    EUCJP_ENCODING_NAME);
477*00b67f09SDavid van Moolenbroek	ASSERT_RESULT(r, idn_success);
478*00b67f09SDavid van Moolenbroek	ASSERT_STRING(to, AUX_EUCJP_NAME);
479*00b67f09SDavid van Moolenbroek#endif
480*00b67f09SDavid van Moolenbroek}
481*00b67f09SDavid van Moolenbroek
482*00b67f09SDavid van Moolenbroek//# TESTCASE
483*00b67f09SDavid van Moolenbroek//	title: set IDN_DISABLE and call encodename()
484*00b67f09SDavid van Moolenbroek//	group: generic-conversion
485*00b67f09SDavid van Moolenbroek{
486*00b67f09SDavid van Moolenbroek	setenv("IDN_DISABLE", "1", 1);
487*00b67f09SDavid van Moolenbroek	r = idn_encodename(IDN_ENCODE_APP, UTF8_NAME, to, sizeof(to));
488*00b67f09SDavid van Moolenbroek	ASSERT_RESULT(r, idn_success);
489*00b67f09SDavid van Moolenbroek	ASSERT_STRING(to, UTF8_NAME);
490*00b67f09SDavid van Moolenbroek}
491*00b67f09SDavid van Moolenbroek
492*00b67f09SDavid van Moolenbroek//# TESTCASE
493*00b67f09SDavid van Moolenbroek//	title: set IDN_DISABLE and call decodename()
494*00b67f09SDavid van Moolenbroek//	group: generic-conversion
495*00b67f09SDavid van Moolenbroek{
496*00b67f09SDavid van Moolenbroek	setenv("IDN_DISABLE", "1", 1);
497*00b67f09SDavid van Moolenbroek	r = idn_decodename(IDN_DECODE_APP, PUNYCODE_NAME, to, sizeof(to));
498*00b67f09SDavid van Moolenbroek	ASSERT_RESULT(r, idn_success);
499*00b67f09SDavid van Moolenbroek	ASSERT_STRING(to, PUNYCODE_NAME);
500*00b67f09SDavid van Moolenbroek}
501*00b67f09SDavid van Moolenbroek
502*00b67f09SDavid van Moolenbroek//# TESTCASE
503*00b67f09SDavid van Moolenbroek//	title: set IDN_DISABLE and call decodename2()
504*00b67f09SDavid van Moolenbroek//	group: generic-conversion
505*00b67f09SDavid van Moolenbroek{
506*00b67f09SDavid van Moolenbroek#ifdef WITHOUT_ICONV
507*00b67f09SDavid van Moolenbroek	SKIP_TESTCASE;
508*00b67f09SDavid van Moolenbroek#else
509*00b67f09SDavid van Moolenbroek	setenv("IDN_DISABLE", "1", 1);
510*00b67f09SDavid van Moolenbroek	r = idn_decodename2(IDN_DECODE_APP, AUX_EUCJP_NAME, to, sizeof(to),
511*00b67f09SDavid van Moolenbroek			    EUCJP_ENCODING_NAME);
512*00b67f09SDavid van Moolenbroek	ASSERT_RESULT(r, idn_success);
513*00b67f09SDavid van Moolenbroek	ASSERT_STRING(to, AUX_EUCJP_NAME);
514*00b67f09SDavid van Moolenbroek#endif
515*00b67f09SDavid van Moolenbroek}
516*00b67f09SDavid van Moolenbroek
517*00b67f09SDavid van Moolenbroek//# TESTCASE
518*00b67f09SDavid van Moolenbroek//	title: set IDN_DISABLE, and then call enable(1) and encodename()
519*00b67f09SDavid van Moolenbroek//	group: generic-conversion
520*00b67f09SDavid van Moolenbroek{
521*00b67f09SDavid van Moolenbroek	setenv("IDN_DISABLE", "1", 1);
522*00b67f09SDavid van Moolenbroek	idn_enable(1);
523*00b67f09SDavid van Moolenbroek	r = idn_encodename(IDN_ENCODE_APP, UTF8_NAME, to, sizeof(to));
524*00b67f09SDavid van Moolenbroek	ASSERT_RESULT(r, idn_success);
525*00b67f09SDavid van Moolenbroek	ASSERT_STRING(to, PUNYCODE_NAME);
526*00b67f09SDavid van Moolenbroek}
527*00b67f09SDavid van Moolenbroek
528*00b67f09SDavid van Moolenbroek//# TESTCASE
529*00b67f09SDavid van Moolenbroek//	title: set IDN_DISABLE, and then call enable(1) and decodename()
530*00b67f09SDavid van Moolenbroek//	group: generic-conversion
531*00b67f09SDavid van Moolenbroek{
532*00b67f09SDavid van Moolenbroek	setenv("IDN_DISABLE", "1", 1);
533*00b67f09SDavid van Moolenbroek	idn_enable(1);
534*00b67f09SDavid van Moolenbroek	r = idn_decodename(IDN_DECODE_APP, PUNYCODE_NAME, to, sizeof(to));
535*00b67f09SDavid van Moolenbroek	ASSERT_RESULT(r, idn_success);
536*00b67f09SDavid van Moolenbroek	ASSERT_STRING(to, UTF8_REVNAME);
537*00b67f09SDavid van Moolenbroek}
538*00b67f09SDavid van Moolenbroek
539*00b67f09SDavid van Moolenbroek//# TESTCASE
540*00b67f09SDavid van Moolenbroek//	title: set IDN_DISABLE, and then call enable(1) and decodename2()
541*00b67f09SDavid van Moolenbroek//	group: generic-conversion
542*00b67f09SDavid van Moolenbroek{
543*00b67f09SDavid van Moolenbroek#ifdef WITHOUT_ICONV
544*00b67f09SDavid van Moolenbroek	SKIP_TESTCASE;
545*00b67f09SDavid van Moolenbroek#else
546*00b67f09SDavid van Moolenbroek	setenv("IDN_DISABLE", "1", 1);
547*00b67f09SDavid van Moolenbroek	idn_enable(1);
548*00b67f09SDavid van Moolenbroek	r = idn_decodename2(IDN_DECODE_APP, AUX_EUCJP_NAME, to, sizeof(to),
549*00b67f09SDavid van Moolenbroek			    EUCJP_ENCODING_NAME);
550*00b67f09SDavid van Moolenbroek	ASSERT_RESULT(r, idn_success);
551*00b67f09SDavid van Moolenbroek	ASSERT_STRING(to, UTF8_REVNAME);
552*00b67f09SDavid van Moolenbroek#endif
553*00b67f09SDavid van Moolenbroek}
554*00b67f09SDavid van Moolenbroek
555*00b67f09SDavid van Moolenbroek//# TESTCASE
556*00b67f09SDavid van Moolenbroek//	title: overrun test for arg `to' of encodename()
557*00b67f09SDavid van Moolenbroek//	group: generic-conversion
558*00b67f09SDavid van Moolenbroek{
559*00b67f09SDavid van Moolenbroek	/* Normal case */
560*00b67f09SDavid van Moolenbroek	r = idn_encodename(IDN_ENCODE_APP, UTF8_NAME, to,
561*00b67f09SDavid van Moolenbroek			   strlen(PUNYCODE_NAME) + 1);
562*00b67f09SDavid van Moolenbroek	ASSERT_RESULT(r, idn_success);
563*00b67f09SDavid van Moolenbroek	ASSERT_STRING(to, PUNYCODE_NAME);
564*00b67f09SDavid van Moolenbroek
565*00b67f09SDavid van Moolenbroek	r = idn_encodename(IDN_ENCODE_APP, UTF8_NAME, to,
566*00b67f09SDavid van Moolenbroek			   strlen(PUNYCODE_NAME));
567*00b67f09SDavid van Moolenbroek	ASSERT_RESULT(r, idn_buffer_overflow);
568*00b67f09SDavid van Moolenbroek
569*00b67f09SDavid van Moolenbroek	/* enable(0) case */
570*00b67f09SDavid van Moolenbroek	idn_enable(0);
571*00b67f09SDavid van Moolenbroek	r = idn_encodename(IDN_ENCODE_APP, UTF8_NAME, to,
572*00b67f09SDavid van Moolenbroek			   strlen(UTF8_NAME) + 1);
573*00b67f09SDavid van Moolenbroek	ASSERT_RESULT(r, idn_success);
574*00b67f09SDavid van Moolenbroek	ASSERT_STRING(to, UTF8_NAME);
575*00b67f09SDavid van Moolenbroek
576*00b67f09SDavid van Moolenbroek	r = idn_encodename(IDN_ENCODE_APP, UTF8_NAME, to,
577*00b67f09SDavid van Moolenbroek			   strlen(UTF8_NAME));
578*00b67f09SDavid van Moolenbroek	ASSERT_RESULT(r, idn_buffer_overflow);
579*00b67f09SDavid van Moolenbroek
580*00b67f09SDavid van Moolenbroek	/* actions=0 case */
581*00b67f09SDavid van Moolenbroek	idn_enable(1);
582*00b67f09SDavid van Moolenbroek	r = idn_encodename(0, UTF8_NAME, to, strlen(UTF8_NAME) + 1);
583*00b67f09SDavid van Moolenbroek	ASSERT_RESULT(r, idn_success);
584*00b67f09SDavid van Moolenbroek	ASSERT_STRING(to, UTF8_NAME);
585*00b67f09SDavid van Moolenbroek
586*00b67f09SDavid van Moolenbroek	r = idn_encodename(0, UTF8_NAME, to, strlen(UTF8_NAME));
587*00b67f09SDavid van Moolenbroek	ASSERT_RESULT(r, idn_buffer_overflow);
588*00b67f09SDavid van Moolenbroek}
589*00b67f09SDavid van Moolenbroek
590*00b67f09SDavid van Moolenbroek//# TESTCASE
591*00b67f09SDavid van Moolenbroek//	title: overrun test for arg `to' of decodename()
592*00b67f09SDavid van Moolenbroek//	group: generic-conversion
593*00b67f09SDavid van Moolenbroek{
594*00b67f09SDavid van Moolenbroek	/* Normal case */
595*00b67f09SDavid van Moolenbroek	r = idn_decodename(IDN_DECODE_APP, PUNYCODE_NAME, to,
596*00b67f09SDavid van Moolenbroek			   strlen(UTF8_REVNAME) + 1);
597*00b67f09SDavid van Moolenbroek	ASSERT_RESULT(r, idn_success);
598*00b67f09SDavid van Moolenbroek	ASSERT_STRING(to, UTF8_REVNAME);
599*00b67f09SDavid van Moolenbroek
600*00b67f09SDavid van Moolenbroek	r = idn_decodename(IDN_DECODE_APP, PUNYCODE_NAME, to,
601*00b67f09SDavid van Moolenbroek			   strlen(UTF8_REVNAME));
602*00b67f09SDavid van Moolenbroek	ASSERT_RESULT(r, idn_buffer_overflow);
603*00b67f09SDavid van Moolenbroek
604*00b67f09SDavid van Moolenbroek	/* idn_enable(0) case */
605*00b67f09SDavid van Moolenbroek	idn_enable(0);
606*00b67f09SDavid van Moolenbroek	r = idn_decodename(IDN_DECODE_APP, PUNYCODE_NAME, to,
607*00b67f09SDavid van Moolenbroek			   strlen(PUNYCODE_NAME) + 1);
608*00b67f09SDavid van Moolenbroek	ASSERT_RESULT(r, idn_success);
609*00b67f09SDavid van Moolenbroek	ASSERT_STRING(to, PUNYCODE_NAME);
610*00b67f09SDavid van Moolenbroek
611*00b67f09SDavid van Moolenbroek	r = idn_decodename(IDN_DECODE_APP, PUNYCODE_NAME, to,
612*00b67f09SDavid van Moolenbroek			   strlen(PUNYCODE_NAME));
613*00b67f09SDavid van Moolenbroek	ASSERT_RESULT(r, idn_buffer_overflow);
614*00b67f09SDavid van Moolenbroek
615*00b67f09SDavid van Moolenbroek	/* actions=0 case */
616*00b67f09SDavid van Moolenbroek	idn_enable(1);
617*00b67f09SDavid van Moolenbroek	r = idn_decodename(0, PUNYCODE_NAME, to, strlen(PUNYCODE_NAME) + 1);
618*00b67f09SDavid van Moolenbroek	ASSERT_RESULT(r, idn_success);
619*00b67f09SDavid van Moolenbroek	ASSERT_STRING(to, PUNYCODE_NAME);
620*00b67f09SDavid van Moolenbroek
621*00b67f09SDavid van Moolenbroek	r = idn_decodename(0, PUNYCODE_NAME, to, strlen(PUNYCODE_NAME));
622*00b67f09SDavid van Moolenbroek	ASSERT_RESULT(r, idn_buffer_overflow);
623*00b67f09SDavid van Moolenbroek}
624*00b67f09SDavid van Moolenbroek
625*00b67f09SDavid van Moolenbroek//# TESTCASE
626*00b67f09SDavid van Moolenbroek//	title: overrun test for arg `to' of decodename2()
627*00b67f09SDavid van Moolenbroek//	group: generic-conversion
628*00b67f09SDavid van Moolenbroek{
629*00b67f09SDavid van Moolenbroek#ifdef WITHOUT_ICONV
630*00b67f09SDavid van Moolenbroek	SKIP_TESTCASE;
631*00b67f09SDavid van Moolenbroek#else
632*00b67f09SDavid van Moolenbroek	/* Normal case */
633*00b67f09SDavid van Moolenbroek	r = idn_decodename2(IDN_DECODE_APP, AUX_EUCJP_NAME, to,
634*00b67f09SDavid van Moolenbroek			    strlen(UTF8_REVNAME) + 1, EUCJP_ENCODING_NAME);
635*00b67f09SDavid van Moolenbroek	ASSERT_RESULT(r, idn_success);
636*00b67f09SDavid van Moolenbroek	ASSERT_STRING(to, UTF8_REVNAME);
637*00b67f09SDavid van Moolenbroek
638*00b67f09SDavid van Moolenbroek	r = idn_decodename2(IDN_DECODE_APP, AUX_EUCJP_NAME, to,
639*00b67f09SDavid van Moolenbroek			    strlen(UTF8_REVNAME), EUCJP_ENCODING_NAME);
640*00b67f09SDavid van Moolenbroek	ASSERT_RESULT(r, idn_buffer_overflow);
641*00b67f09SDavid van Moolenbroek
642*00b67f09SDavid van Moolenbroek	/* idn_enable(0) case */
643*00b67f09SDavid van Moolenbroek	idn_enable(0);
644*00b67f09SDavid van Moolenbroek	r = idn_decodename2(IDN_DECODE_APP, AUX_EUCJP_NAME, to,
645*00b67f09SDavid van Moolenbroek			    strlen(AUX_EUCJP_NAME) + 1, EUCJP_ENCODING_NAME);
646*00b67f09SDavid van Moolenbroek	ASSERT_RESULT(r, idn_success);
647*00b67f09SDavid van Moolenbroek	ASSERT_STRING(to, AUX_EUCJP_NAME);
648*00b67f09SDavid van Moolenbroek
649*00b67f09SDavid van Moolenbroek	r = idn_decodename2(IDN_DECODE_APP, AUX_EUCJP_NAME, to,
650*00b67f09SDavid van Moolenbroek			    strlen(AUX_EUCJP_NAME), EUCJP_ENCODING_NAME);
651*00b67f09SDavid van Moolenbroek	ASSERT_RESULT(r, idn_buffer_overflow);
652*00b67f09SDavid van Moolenbroek
653*00b67f09SDavid van Moolenbroek	/* actions=0 case */
654*00b67f09SDavid van Moolenbroek	idn_enable(1);
655*00b67f09SDavid van Moolenbroek	r = idn_decodename2(0, AUX_EUCJP_NAME, to, strlen(AUX_EUCJP_NAME) + 1,
656*00b67f09SDavid van Moolenbroek			    EUCJP_ENCODING_NAME);
657*00b67f09SDavid van Moolenbroek	ASSERT_RESULT(r, idn_success);
658*00b67f09SDavid van Moolenbroek	ASSERT_STRING(to, AUX_EUCJP_NAME);
659*00b67f09SDavid van Moolenbroek
660*00b67f09SDavid van Moolenbroek	r = idn_decodename2(0, AUX_EUCJP_NAME, to, strlen(AUX_EUCJP_NAME),
661*00b67f09SDavid van Moolenbroek			    EUCJP_ENCODING_NAME);
662*00b67f09SDavid van Moolenbroek	ASSERT_RESULT(r, idn_buffer_overflow);
663*00b67f09SDavid van Moolenbroek
664*00b67f09SDavid van Moolenbroek#endif
665*00b67f09SDavid van Moolenbroek}
666*00b67f09SDavid van Moolenbroek
667*00b67f09SDavid van Moolenbroek//# TESTCASE
668*00b67f09SDavid van Moolenbroek//	title: call encodename() with tolen=0
669*00b67f09SDavid van Moolenbroek//	group: generic-conversion
670*00b67f09SDavid van Moolenbroek{
671*00b67f09SDavid van Moolenbroek	r = idn_encodename(IDN_ENCODE_APP, UTF8_NAME, to, 0);
672*00b67f09SDavid van Moolenbroek	ASSERT_RESULT(r, idn_buffer_overflow);
673*00b67f09SDavid van Moolenbroek}
674*00b67f09SDavid van Moolenbroek
675*00b67f09SDavid van Moolenbroek//# TESTCASE
676*00b67f09SDavid van Moolenbroek//	title: call decodename() with tolen=0
677*00b67f09SDavid van Moolenbroek//	group: generic-conversion
678*00b67f09SDavid van Moolenbroek{
679*00b67f09SDavid van Moolenbroek	r = idn_decodename(IDN_DECODE_APP, PUNYCODE_NAME, to, 0);
680*00b67f09SDavid van Moolenbroek	ASSERT_RESULT(r, idn_buffer_overflow);
681*00b67f09SDavid van Moolenbroek}
682*00b67f09SDavid van Moolenbroek
683*00b67f09SDavid van Moolenbroek//# TESTCASE
684*00b67f09SDavid van Moolenbroek//	title: call decodename2() with tolen=0
685*00b67f09SDavid van Moolenbroek//	group: generic-conversion
686*00b67f09SDavid van Moolenbroek{
687*00b67f09SDavid van Moolenbroek#ifdef WITHOUT_ICONV
688*00b67f09SDavid van Moolenbroek	SKIP_TESTCASE;
689*00b67f09SDavid van Moolenbroek#else
690*00b67f09SDavid van Moolenbroek	r = idn_decodename2(IDN_DECODE_APP, AUX_EUCJP_NAME, to, 0,
691*00b67f09SDavid van Moolenbroek			    EUCJP_ENCODING_NAME);
692*00b67f09SDavid van Moolenbroek	ASSERT_RESULT(r, idn_buffer_overflow);
693*00b67f09SDavid van Moolenbroek#endif
694*00b67f09SDavid van Moolenbroek}
695*00b67f09SDavid van Moolenbroek
696*00b67f09SDavid van Moolenbroek//# TESTCASE
697*00b67f09SDavid van Moolenbroek//	title: convert an empty string using encodename()
698*00b67f09SDavid van Moolenbroek//	group: generic-conversion
699*00b67f09SDavid van Moolenbroek{
700*00b67f09SDavid van Moolenbroek	r = idn_encodename(IDN_ENCODE_APP, "", to, sizeof(to));
701*00b67f09SDavid van Moolenbroek	ASSERT_RESULT(r, idn_success);
702*00b67f09SDavid van Moolenbroek	ASSERT_STRING(to, "");
703*00b67f09SDavid van Moolenbroek}
704*00b67f09SDavid van Moolenbroek
705*00b67f09SDavid van Moolenbroek//# TESTCASE
706*00b67f09SDavid van Moolenbroek//	title: convert an empty string using decodename()
707*00b67f09SDavid van Moolenbroek//	group: generic-conversion
708*00b67f09SDavid van Moolenbroek{
709*00b67f09SDavid van Moolenbroek	r = idn_decodename(IDN_DECODE_APP, "", to, sizeof(to));
710*00b67f09SDavid van Moolenbroek	ASSERT_RESULT(r, idn_success);
711*00b67f09SDavid van Moolenbroek	ASSERT_STRING(to, "");
712*00b67f09SDavid van Moolenbroek}
713*00b67f09SDavid van Moolenbroek
714*00b67f09SDavid van Moolenbroek//# TESTCASE
715*00b67f09SDavid van Moolenbroek//	title: convert an empty string using decodename2()
716*00b67f09SDavid van Moolenbroek//	group: generic-conversion
717*00b67f09SDavid van Moolenbroek{
718*00b67f09SDavid van Moolenbroek#ifdef WITHOUT_ICONV
719*00b67f09SDavid van Moolenbroek	SKIP_TESTCASE;
720*00b67f09SDavid van Moolenbroek#else
721*00b67f09SDavid van Moolenbroek	r = idn_decodename2(IDN_DECODE_APP, "", to, sizeof(to),
722*00b67f09SDavid van Moolenbroek			    EUCJP_ENCODING_NAME);
723*00b67f09SDavid van Moolenbroek	ASSERT_RESULT(r, idn_success);
724*00b67f09SDavid van Moolenbroek	ASSERT_STRING(to, "");
725*00b67f09SDavid van Moolenbroek#endif
726*00b67f09SDavid van Moolenbroek}
727*00b67f09SDavid van Moolenbroek
728*00b67f09SDavid van Moolenbroek//# TESTCASE
729*00b67f09SDavid van Moolenbroek//	title: prohcheck by encodename()
730*00b67f09SDavid van Moolenbroek//	group: generic-conversion
731*00b67f09SDavid van Moolenbroek{
732*00b67f09SDavid van Moolenbroek	/* U+1680: prohibited character */
733*00b67f09SDavid van Moolenbroek	r = idn_encodename(IDN_PROHCHECK, "<U+1680>", to, sizeof(to));
734*00b67f09SDavid van Moolenbroek	ASSERT_RESULT(r, idn_prohibited);
735*00b67f09SDavid van Moolenbroek}
736*00b67f09SDavid van Moolenbroek
737*00b67f09SDavid van Moolenbroek//# TESTCASE
738*00b67f09SDavid van Moolenbroek//	title: unascheck by encodename()
739*00b67f09SDavid van Moolenbroek//	group: generic-conversion
740*00b67f09SDavid van Moolenbroek{
741*00b67f09SDavid van Moolenbroek	/* U+0221: unassigned codepoint */
742*00b67f09SDavid van Moolenbroek	r = idn_encodename(IDN_UNASCHECK, "<U+0221>", to, sizeof(to));
743*00b67f09SDavid van Moolenbroek	ASSERT_RESULT(r, idn_prohibited);
744*00b67f09SDavid van Moolenbroek}
745*00b67f09SDavid van Moolenbroek
746*00b67f09SDavid van Moolenbroek//# TESTCASE
747*00b67f09SDavid van Moolenbroek//	title: bidicheck by encodename()
748*00b67f09SDavid van Moolenbroek//	group: generic-conversion
749*00b67f09SDavid van Moolenbroek{
750*00b67f09SDavid van Moolenbroek	/* U+05D0:   bidirectional property is "R" */
751*00b67f09SDavid van Moolenbroek	/* `a':      bidirectional property is "L" */
752*00b67f09SDavid van Moolenbroek	/* `0', `-': bidirectional property is "N" */
753*00b67f09SDavid van Moolenbroek	r = idn_encodename(IDN_BIDICHECK, "<U+05D0>", to, sizeof(to));
754*00b67f09SDavid van Moolenbroek	ASSERT_RESULT(r, idn_success);
755*00b67f09SDavid van Moolenbroek
756*00b67f09SDavid van Moolenbroek	r = idn_encodename(IDN_BIDICHECK, "<U+05D0><U+05D0>",
757*00b67f09SDavid van Moolenbroek			   to, sizeof(to));
758*00b67f09SDavid van Moolenbroek	ASSERT_RESULT(r, idn_success);
759*00b67f09SDavid van Moolenbroek
760*00b67f09SDavid van Moolenbroek	r = idn_encodename(IDN_BIDICHECK, "<U+05D0><U+05D0>-a",
761*00b67f09SDavid van Moolenbroek			   to, sizeof(to));
762*00b67f09SDavid van Moolenbroek	ASSERT_RESULT(r, idn_prohibited);
763*00b67f09SDavid van Moolenbroek
764*00b67f09SDavid van Moolenbroek	r = idn_encodename(IDN_BIDICHECK, "<U+05D0>-a-<U+05D0>",
765*00b67f09SDavid van Moolenbroek			   to, sizeof(to));
766*00b67f09SDavid van Moolenbroek	ASSERT_RESULT(r, idn_prohibited);
767*00b67f09SDavid van Moolenbroek
768*00b67f09SDavid van Moolenbroek	r = idn_encodename(IDN_BIDICHECK, "a-<U+05D0><U+05D0>",
769*00b67f09SDavid van Moolenbroek			   to, sizeof(to));
770*00b67f09SDavid van Moolenbroek	ASSERT_RESULT(r, idn_prohibited);
771*00b67f09SDavid van Moolenbroek
772*00b67f09SDavid van Moolenbroek	r = idn_encodename(IDN_BIDICHECK, "<U+05D0><U+05D0>-0",
773*00b67f09SDavid van Moolenbroek			   to, sizeof(to));
774*00b67f09SDavid van Moolenbroek	ASSERT_RESULT(r, idn_prohibited);
775*00b67f09SDavid van Moolenbroek
776*00b67f09SDavid van Moolenbroek	r = idn_encodename(IDN_BIDICHECK, "<U+05D0>-0-<U+05D0>",
777*00b67f09SDavid van Moolenbroek			   to, sizeof(to));
778*00b67f09SDavid van Moolenbroek	ASSERT_RESULT(r, idn_success);
779*00b67f09SDavid van Moolenbroek
780*00b67f09SDavid van Moolenbroek	r = idn_encodename(IDN_BIDICHECK, "0-<U+05D0><U+05D0>",
781*00b67f09SDavid van Moolenbroek			   to, sizeof(to));
782*00b67f09SDavid van Moolenbroek	ASSERT_RESULT(r, idn_prohibited);
783*00b67f09SDavid van Moolenbroek}
784*00b67f09SDavid van Moolenbroek
785*00b67f09SDavid van Moolenbroek//# TESTCASE
786*00b67f09SDavid van Moolenbroek//	title: asccheck by encodename()
787*00b67f09SDavid van Moolenbroek//	group: generic-conversion
788*00b67f09SDavid van Moolenbroek{
789*00b67f09SDavid van Moolenbroek	r = idn_encodename(IDN_ASCCHECK, "-name", to, sizeof(to));
790*00b67f09SDavid van Moolenbroek	ASSERT_RESULT(r, idn_prohibited);
791*00b67f09SDavid van Moolenbroek
792*00b67f09SDavid van Moolenbroek	r = idn_encodename(IDN_ASCCHECK, "name-", to, sizeof(to));
793*00b67f09SDavid van Moolenbroek	ASSERT_RESULT(r, idn_prohibited);
794*00b67f09SDavid van Moolenbroek
795*00b67f09SDavid van Moolenbroek	r = idn_encodename(IDN_ASCCHECK, "n ame", to, sizeof(to));
796*00b67f09SDavid van Moolenbroek	ASSERT_RESULT(r, idn_prohibited);
797*00b67f09SDavid van Moolenbroek}
798*00b67f09SDavid van Moolenbroek
799*00b67f09SDavid van Moolenbroek//# TESTCASE
800*00b67f09SDavid van Moolenbroek//	title: lencheck by encodename()
801*00b67f09SDavid van Moolenbroek//	group: generic-conversion
802*00b67f09SDavid van Moolenbroek{
803*00b67f09SDavid van Moolenbroek	r = idn_encodename(IDN_LENCHECK,
804*00b67f09SDavid van Moolenbroek			   "123456789-123456789-123456789-123456789-"
805*00b67f09SDavid van Moolenbroek			   "123456789-123456789-123", to, sizeof(to));
806*00b67f09SDavid van Moolenbroek	ASSERT_RESULT(r, idn_success);
807*00b67f09SDavid van Moolenbroek
808*00b67f09SDavid van Moolenbroek	r = idn_encodename(IDN_LENCHECK,
809*00b67f09SDavid van Moolenbroek			   "123456789-123456789-123456789-123456789-"
810*00b67f09SDavid van Moolenbroek			   "123456789-123456789-1234", to, sizeof(to));
811*00b67f09SDavid van Moolenbroek	ASSERT_RESULT(r, idn_invalid_length);
812*00b67f09SDavid van Moolenbroek
813*00b67f09SDavid van Moolenbroek	r = idn_encodename(IDN_LENCHECK, "a..b", to, sizeof(to));
814*00b67f09SDavid van Moolenbroek	ASSERT_RESULT(r, idn_invalid_length);
815*00b67f09SDavid van Moolenbroek}
816*00b67f09SDavid van Moolenbroek
817*00b67f09SDavid van Moolenbroek//# TESTCASE
818*00b67f09SDavid van Moolenbroek//	title: rtcheck non-prohchecked label by decodename()
819*00b67f09SDavid van Moolenbroek//	group: generic-conversion
820*00b67f09SDavid van Moolenbroek{
821*00b67f09SDavid van Moolenbroek	/* "xn--6ue" -> "U+1680" (prohibited character) */
822*00b67f09SDavid van Moolenbroek	r = idn_decodename(IDN_RTCHECK, "xn--6ue", to, sizeof(to));
823*00b67f09SDavid van Moolenbroek	ASSERT_RESULT(r, idn_success);
824*00b67f09SDavid van Moolenbroek	ASSERT_STRING(to, "xn--6ue");
825*00b67f09SDavid van Moolenbroek}
826*00b67f09SDavid van Moolenbroek
827*00b67f09SDavid van Moolenbroek//# TESTCASE
828*00b67f09SDavid van Moolenbroek//	title: rtcheck non-unaschecked label by decodename()
829*00b67f09SDavid van Moolenbroek//	group: generic-conversion
830*00b67f09SDavid van Moolenbroek{
831*00b67f09SDavid van Moolenbroek	/* "xn--6la" -> "U+0221" (unassigned codepoint) */
832*00b67f09SDavid van Moolenbroek	r = idn_decodename(IDN_IDNCONV | IDN_RTCHECK | IDN_UNASCHECK,
833*00b67f09SDavid van Moolenbroek			   "xn--6la", to, sizeof(to));
834*00b67f09SDavid van Moolenbroek	ASSERT_RESULT(r, idn_success);
835*00b67f09SDavid van Moolenbroek	ASSERT_STRING(to, "xn--6la");
836*00b67f09SDavid van Moolenbroek}
837*00b67f09SDavid van Moolenbroek
838*00b67f09SDavid van Moolenbroek//# TESTCASE
839*00b67f09SDavid van Moolenbroek//	title: rtcheck non-ascchecked label by decodename()
840*00b67f09SDavid van Moolenbroek//	group: generic-conversion
841*00b67f09SDavid van Moolenbroek{
842*00b67f09SDavid van Moolenbroek	/* "xn----x7t" -> "- U+3042" */
843*00b67f09SDavid van Moolenbroek	r = idn_decodename(IDN_IDNCONV | IDN_RTCHECK | IDN_ASCCHECK,
844*00b67f09SDavid van Moolenbroek			   "xn----x7t", to, sizeof(to));
845*00b67f09SDavid van Moolenbroek	ASSERT_RESULT(r, idn_success);
846*00b67f09SDavid van Moolenbroek	ASSERT_STRING(to, "xn----x7t");
847*00b67f09SDavid van Moolenbroek
848*00b67f09SDavid van Moolenbroek	/* "xn----w7t" -> "U+3042 -" */
849*00b67f09SDavid van Moolenbroek	r = idn_decodename(IDN_IDNCONV | IDN_RTCHECK | IDN_ASCCHECK,
850*00b67f09SDavid van Moolenbroek			   "xn----w7t", to, sizeof(to));
851*00b67f09SDavid van Moolenbroek	ASSERT_RESULT(r, idn_success);
852*00b67f09SDavid van Moolenbroek	ASSERT_STRING(to, "xn----w7t");
853*00b67f09SDavid van Moolenbroek}
854*00b67f09SDavid van Moolenbroek
855*00b67f09SDavid van Moolenbroek//# TESTCASE
856*00b67f09SDavid van Moolenbroek//	title: rtcheck non-lenchecked label by decodename()
857*00b67f09SDavid van Moolenbroek//	group: generic-conversion
858*00b67f09SDavid van Moolenbroek{
859*00b67f09SDavid van Moolenbroek	/* `s1' has 63 characters */
860*00b67f09SDavid van Moolenbroek	const char *s1 =
861*00b67f09SDavid van Moolenbroek	    "xn--l8jaa5522a8sj38bzugvvblo3y90fjzgvxlmxscifws3d43odzaq6aj340b";
862*00b67f09SDavid van Moolenbroek
863*00b67f09SDavid van Moolenbroek	const char *s1rev =
864*00b67f09SDavid van Moolenbroek	    "<U+9752><U+68EE><U+5CA9><U+624B><U+5BAE><U+57CE><U+79CB><U+7530>"
865*00b67f09SDavid van Moolenbroek	    "<U+5C71><U+5F62><U+798F><U+5CF6><U+6771><U+4EAC><U+795E><U+5948>"
866*00b67f09SDavid van Moolenbroek	    "<U+5DDD><U+3042><U+3042><U+3042>";
867*00b67f09SDavid van Moolenbroek
868*00b67f09SDavid van Moolenbroek	/* `s2' has 64 characters */
869*00b67f09SDavid van Moolenbroek	const char *s2 =
870*00b67f09SDavid van Moolenbroek	    "xn--a-w7ta6522a8sj38bzugvvblo3y90fjzgvxlmxscifws3d43odzaq6aj340b";
871*00b67f09SDavid van Moolenbroek
872*00b67f09SDavid van Moolenbroek	/* `s3' has an empty label */
873*00b67f09SDavid van Moolenbroek	const char *s3 = "a..b";
874*00b67f09SDavid van Moolenbroek
875*00b67f09SDavid van Moolenbroek	r = idn_decodename(IDN_IDNCONV | IDN_RTCHECK, s1, to, sizeof(to));
876*00b67f09SDavid van Moolenbroek	ASSERT_RESULT(r, idn_success);
877*00b67f09SDavid van Moolenbroek	ASSERT_STRING(to, s1rev);
878*00b67f09SDavid van Moolenbroek
879*00b67f09SDavid van Moolenbroek	r = idn_decodename(IDN_IDNCONV | IDN_RTCHECK, s2, to, sizeof(to));
880*00b67f09SDavid van Moolenbroek	ASSERT_RESULT(r, idn_success);
881*00b67f09SDavid van Moolenbroek	ASSERT_STRING(to, s2);
882*00b67f09SDavid van Moolenbroek
883*00b67f09SDavid van Moolenbroek	r = idn_decodename(IDN_IDNCONV | IDN_RTCHECK, s3, to, sizeof(to));
884*00b67f09SDavid van Moolenbroek	ASSERT_RESULT(r, idn_success);
885*00b67f09SDavid van Moolenbroek	ASSERT_STRING(to, s3);
886*00b67f09SDavid van Moolenbroek}
887*00b67f09SDavid van Moolenbroek
888*00b67f09SDavid van Moolenbroek//# TESTCASE
889*00b67f09SDavid van Moolenbroek//	title: rtcheck non-prohchecked label by decodename2()
890*00b67f09SDavid van Moolenbroek//	group: generic-conversion
891*00b67f09SDavid van Moolenbroek{
892*00b67f09SDavid van Moolenbroek#ifdef WITHOUT_ICONV
893*00b67f09SDavid van Moolenbroek	SKIP_TESTCASE;
894*00b67f09SDavid van Moolenbroek#else
895*00b67f09SDavid van Moolenbroek	/* "xn--6ue" -> "U+1680" (prohibited character) */
896*00b67f09SDavid van Moolenbroek	r = idn_decodename2(IDN_RTCHECK, "xn--6ue", to, sizeof(to),
897*00b67f09SDavid van Moolenbroek			    EUCJP_ENCODING_NAME);
898*00b67f09SDavid van Moolenbroek	ASSERT_RESULT(r, idn_success);
899*00b67f09SDavid van Moolenbroek	ASSERT_STRING(to, "xn--6ue");
900*00b67f09SDavid van Moolenbroek#endif
901*00b67f09SDavid van Moolenbroek}
902*00b67f09SDavid van Moolenbroek
903*00b67f09SDavid van Moolenbroek//# TESTCASE
904*00b67f09SDavid van Moolenbroek//	title: rtcheck non-unaschecked label by decodename2()
905*00b67f09SDavid van Moolenbroek//	group: generic-conversion
906*00b67f09SDavid van Moolenbroek{
907*00b67f09SDavid van Moolenbroek#ifdef WITHOUT_ICONV
908*00b67f09SDavid van Moolenbroek	SKIP_TESTCASE;
909*00b67f09SDavid van Moolenbroek#else
910*00b67f09SDavid van Moolenbroek	/* "xn--6la" -> "U+0221" (unassigned codepoint) */
911*00b67f09SDavid van Moolenbroek	r = idn_decodename2(IDN_IDNCONV | IDN_RTCHECK | IDN_UNASCHECK,
912*00b67f09SDavid van Moolenbroek			    "xn--6la", to, sizeof(to), EUCJP_ENCODING_NAME);
913*00b67f09SDavid van Moolenbroek	ASSERT_RESULT(r, idn_success);
914*00b67f09SDavid van Moolenbroek	ASSERT_STRING(to, "xn--6la");
915*00b67f09SDavid van Moolenbroek#endif
916*00b67f09SDavid van Moolenbroek}
917*00b67f09SDavid van Moolenbroek
918*00b67f09SDavid van Moolenbroek//# TESTCASE
919*00b67f09SDavid van Moolenbroek//	title: rtcheck non-ascchecked label by decodename2()
920*00b67f09SDavid van Moolenbroek//	group: generic-conversion
921*00b67f09SDavid van Moolenbroek{
922*00b67f09SDavid van Moolenbroek#ifdef WITHOUT_ICONV
923*00b67f09SDavid van Moolenbroek	SKIP_TESTCASE;
924*00b67f09SDavid van Moolenbroek#else
925*00b67f09SDavid van Moolenbroek	/* "xn----x7t" -> "- U+3042" */
926*00b67f09SDavid van Moolenbroek	r = idn_decodename2(IDN_IDNCONV | IDN_RTCHECK | IDN_ASCCHECK,
927*00b67f09SDavid van Moolenbroek			    "xn----x7t", to, sizeof(to), EUCJP_ENCODING_NAME);
928*00b67f09SDavid van Moolenbroek
929*00b67f09SDavid van Moolenbroek	ASSERT_RESULT(r, idn_success);
930*00b67f09SDavid van Moolenbroek	ASSERT_STRING(to, "xn----x7t");
931*00b67f09SDavid van Moolenbroek
932*00b67f09SDavid van Moolenbroek	/* "xn----w7t" -> "U+3042 -" */
933*00b67f09SDavid van Moolenbroek	r = idn_decodename2(IDN_IDNCONV | IDN_RTCHECK | IDN_ASCCHECK,
934*00b67f09SDavid van Moolenbroek			    "xn----w7t", to, sizeof(to), EUCJP_ENCODING_NAME);
935*00b67f09SDavid van Moolenbroek	ASSERT_RESULT(r, idn_success);
936*00b67f09SDavid van Moolenbroek	ASSERT_STRING(to, "xn----w7t");
937*00b67f09SDavid van Moolenbroek#endif
938*00b67f09SDavid van Moolenbroek}
939*00b67f09SDavid van Moolenbroek
940*00b67f09SDavid van Moolenbroek//# TESTCASE
941*00b67f09SDavid van Moolenbroek//	title: rtcheck non-lenchecked label by decodename2()
942*00b67f09SDavid van Moolenbroek//	group: generic-conversion
943*00b67f09SDavid van Moolenbroek{
944*00b67f09SDavid van Moolenbroek#ifdef WITHOUT_ICONV
945*00b67f09SDavid van Moolenbroek	SKIP_TESTCASE;
946*00b67f09SDavid van Moolenbroek#else
947*00b67f09SDavid van Moolenbroek	/* `s1' has 63 characters */
948*00b67f09SDavid van Moolenbroek	const char *s1 =
949*00b67f09SDavid van Moolenbroek	    "xn--l8jaa5522a8sj38bzugvvblo3y90fjzgvxlmxscifws3d43odzaq6aj340b";
950*00b67f09SDavid van Moolenbroek
951*00b67f09SDavid van Moolenbroek	const char *s1rev =
952*00b67f09SDavid van Moolenbroek	    "<U+9752><U+68EE><U+5CA9><U+624B><U+5BAE><U+57CE><U+79CB><U+7530>"
953*00b67f09SDavid van Moolenbroek	    "<U+5C71><U+5F62><U+798F><U+5CF6><U+6771><U+4EAC><U+795E><U+5948>"
954*00b67f09SDavid van Moolenbroek	    "<U+5DDD><U+3042><U+3042><U+3042>";
955*00b67f09SDavid van Moolenbroek
956*00b67f09SDavid van Moolenbroek	/* `s2' has 64 characters */
957*00b67f09SDavid van Moolenbroek	const char *s2 =
958*00b67f09SDavid van Moolenbroek	    "xn--a-w7ta6522a8sj38bzugvvblo3y90fjzgvxlmxscifws3d43odzaq6aj340b";
959*00b67f09SDavid van Moolenbroek
960*00b67f09SDavid van Moolenbroek	/* `s3' has an empty label */
961*00b67f09SDavid van Moolenbroek	const char *s3 = "a..b";
962*00b67f09SDavid van Moolenbroek
963*00b67f09SDavid van Moolenbroek	r = idn_decodename2(IDN_IDNCONV | IDN_RTCHECK, s1, to, sizeof(to),
964*00b67f09SDavid van Moolenbroek			    EUCJP_ENCODING_NAME);
965*00b67f09SDavid van Moolenbroek	ASSERT_RESULT(r, idn_success);
966*00b67f09SDavid van Moolenbroek	ASSERT_STRING(to, s1rev);
967*00b67f09SDavid van Moolenbroek
968*00b67f09SDavid van Moolenbroek	r = idn_decodename2(IDN_IDNCONV | IDN_RTCHECK, s2, to, sizeof(to),
969*00b67f09SDavid van Moolenbroek			    EUCJP_ENCODING_NAME);
970*00b67f09SDavid van Moolenbroek	ASSERT_RESULT(r, idn_success);
971*00b67f09SDavid van Moolenbroek	ASSERT_STRING(to, s2);
972*00b67f09SDavid van Moolenbroek
973*00b67f09SDavid van Moolenbroek	r = idn_decodename(IDN_IDNCONV | IDN_RTCHECK, s3, to, sizeof(to));
974*00b67f09SDavid van Moolenbroek	ASSERT_RESULT(r, idn_success);
975*00b67f09SDavid van Moolenbroek	ASSERT_STRING(to, s3);
976*00b67f09SDavid van Moolenbroek#endif
977*00b67f09SDavid van Moolenbroek}
978*00b67f09SDavid van Moolenbroek
979*00b67f09SDavid van Moolenbroek//# TESTCASE
980*00b67f09SDavid van Moolenbroek//	title: pass broken string as `from' to encodename()
981*00b67f09SDavid van Moolenbroek//	group: generic-conversion quiet
982*00b67f09SDavid van Moolenbroek{
983*00b67f09SDavid van Moolenbroek	/* "\xe3\x21" is not valid UTF-8 string */
984*00b67f09SDavid van Moolenbroek	r = idn_encodename(IDN_ENCODE_APP, "\xe3\x21", to, sizeof(to));
985*00b67f09SDavid van Moolenbroek	ASSERT_RESULT(r, idn_invalid_encoding);
986*00b67f09SDavid van Moolenbroek}
987*00b67f09SDavid van Moolenbroek
988*00b67f09SDavid van Moolenbroek//# TESTCASE
989*00b67f09SDavid van Moolenbroek//	title: pass broken string as `from' to decodename()
990*00b67f09SDavid van Moolenbroek//	group: generic-conversion quiet
991*00b67f09SDavid van Moolenbroek{
992*00b67f09SDavid van Moolenbroek	/* "\xe3\x21" is not valid UTF-8 string */
993*00b67f09SDavid van Moolenbroek	r = idn_decodename(IDN_DECODE_APP, "\xe3\x21", to, sizeof(to));
994*00b67f09SDavid van Moolenbroek	ASSERT_RESULT(r, idn_invalid_encoding);
995*00b67f09SDavid van Moolenbroek}
996*00b67f09SDavid van Moolenbroek
997*00b67f09SDavid van Moolenbroek//# TESTCASE
998*00b67f09SDavid van Moolenbroek//	title: pass broken string as `from' to decodename2()
999*00b67f09SDavid van Moolenbroek//	group: generic-conversion quiet
1000*00b67f09SDavid van Moolenbroek{
1001*00b67f09SDavid van Moolenbroek#ifdef WITHOUT_ICONV
1002*00b67f09SDavid van Moolenbroek	SKIP_TESTCASE;
1003*00b67f09SDavid van Moolenbroek#else
1004*00b67f09SDavid van Moolenbroek	/* "\xa4\x21" is not valid EUC-JP string */
1005*00b67f09SDavid van Moolenbroek	r = idn_decodename2(IDN_DECODE_APP, "\xa4\x21", to, sizeof(to),
1006*00b67f09SDavid van Moolenbroek			    EUCJP_ENCODING_NAME);
1007*00b67f09SDavid van Moolenbroek	ASSERT_RESULT(r, idn_invalid_encoding);
1008*00b67f09SDavid van Moolenbroek#endif
1009*00b67f09SDavid van Moolenbroek}
1010