2 *******************************************************************************
4 * Copyright (C) 2003-2016, International Business Machines
5 * Corporation and others. All Rights Reserved.
7 *******************************************************************************
8 * file name: idnatest.c
10 * tab size: 8 (not used)
13 * created on: 2003jul11
14 * created by: Ram Viswanadha
18 #include "unicode/utypes.h"
22 #include "unicode/ustring.h"
23 #include "unicode/uidna.h"
27 #define MAX_DEST_SIZE 1000
29 static void TestToUnicode(void);
30 static void TestToASCII(void);
31 static void TestIDNToUnicode(void);
32 static void TestIDNToASCII(void);
33 static void TestCompare(void);
34 static void TestJB4490(void);
35 static void TestJB4475(void);
36 static void TestLength(void);
37 static void TestJB5273(void);
38 static void TestUTS46(void);
40 void addIDNATest(TestNode
** root
);
44 (U_EXPORT2
*TestFunc
) ( const UChar
*src
, int32_t srcLength
,
45 UChar
*dest
, int32_t destCapacity
,
46 int32_t options
, UParseError
*parseError
,
49 (U_EXPORT2
*CompareFunc
) (const UChar
*s1
, int32_t s1Len
,
50 const UChar
*s2
, int32_t s2Len
,
56 addIDNATest(TestNode
** root
)
58 addTest(root
, &TestToUnicode
, "idna/TestToUnicode");
59 addTest(root
, &TestToASCII
, "idna/TestToASCII");
60 addTest(root
, &TestIDNToUnicode
, "idna/TestIDNToUnicode");
61 addTest(root
, &TestIDNToASCII
, "idna/TestIDNToASCII");
62 addTest(root
, &TestCompare
, "idna/TestCompare");
63 addTest(root
, &TestJB4490
, "idna/TestJB4490");
64 addTest(root
, &TestJB4475
, "idna/TestJB4475");
65 addTest(root
, &TestLength
, "idna/TestLength");
66 addTest(root
, &TestJB5273
, "idna/TestJB5273");
67 addTest(root
, &TestUTS46
, "idna/TestUTS46");
71 testAPI(const UChar
* src
, const UChar
* expected
, const char* testName
,
72 UBool useSTD3ASCIIRules
,UErrorCode expectedStatus
,
73 UBool doCompare
, UBool testUnassigned
, TestFunc func
){
75 UErrorCode status
= U_ZERO_ERROR
;
76 UChar destStack
[MAX_DEST_SIZE
];
79 int32_t expectedLen
= (expected
!= NULL
) ? u_strlen(expected
) : 0;
80 int32_t options
= (useSTD3ASCIIRules
== TRUE
) ? UIDNA_USE_STD3_RULES
: UIDNA_DEFAULT
;
81 UParseError parseError
;
86 tSrcLen
= u_strlen(src
);
87 tSrc
=(UChar
*) malloc( U_SIZEOF_UCHAR
* tSrcLen
);
88 memcpy(tSrc
,src
,tSrcLen
* U_SIZEOF_UCHAR
);
91 /* test null-terminated source and return value of number of UChars required */
93 destLen
= func(src
,-1,NULL
,0,options
, &parseError
, &status
);
94 if(status
== U_BUFFER_OVERFLOW_ERROR
){
95 status
= U_ZERO_ERROR
; /* reset error code */
96 if(destLen
+1 < MAX_DEST_SIZE
){
98 destLen
= func(src
,-1,dest
,destLen
+1,options
, &parseError
, &status
);
99 /* TODO : compare output with expected */
100 if(U_SUCCESS(status
) && expectedStatus
!= U_IDNA_STD3_ASCII_RULES_ERROR
&& (doCompare
==TRUE
) && u_strCaseCompare(dest
,destLen
, expected
,expectedLen
,0,&status
)!=0){
101 log_err("Did not get the expected result for null terminated source.\n" );
104 log_err( "%s null terminated source failed. Requires destCapacity > 300\n",testName
);
108 if(status
!= expectedStatus
){
109 log_err_status(status
, "Did not get the expected error for %s null terminated source failed. Expected: %s Got: %s\n",testName
, u_errorName(expectedStatus
), u_errorName(status
));
114 status
= U_ZERO_ERROR
;
115 destLen
= func(src
,-1,NULL
,0,options
| UIDNA_ALLOW_UNASSIGNED
, &parseError
, &status
);
116 if(status
== U_BUFFER_OVERFLOW_ERROR
){
117 status
= U_ZERO_ERROR
; /* reset error code */
118 if(destLen
+1 < MAX_DEST_SIZE
){
120 destLen
= func(src
,-1,dest
,destLen
+1,options
| UIDNA_ALLOW_UNASSIGNED
, &parseError
, &status
);
121 /* TODO : compare output with expected */
122 if(U_SUCCESS(status
) && (doCompare
==TRUE
) && u_strCaseCompare(dest
,destLen
, expected
,expectedLen
,0,&status
)!=0){
123 log_err("Did not get the expected result for %s null terminated source with both options set.\n",testName
);
127 log_err( "%s null terminated source failed. Requires destCapacity > 300\n",testName
);
130 /*testing query string*/
131 if(status
!= expectedStatus
&& expectedStatus
!= U_IDNA_UNASSIGNED_ERROR
){
132 log_err( "Did not get the expected error for %s null terminated source with options set. Expected: %s Got: %s\n",testName
, u_errorName(expectedStatus
), u_errorName(status
));
136 status
= U_ZERO_ERROR
;
138 /* test source with lengthand return value of number of UChars required*/
139 destLen
= func(tSrc
, tSrcLen
, NULL
,0,options
, &parseError
, &status
);
140 if(status
== U_BUFFER_OVERFLOW_ERROR
){
141 status
= U_ZERO_ERROR
; /* reset error code */
142 if(destLen
+1 < MAX_DEST_SIZE
){
144 destLen
= func(src
,u_strlen(src
),dest
,destLen
+1,options
, &parseError
, &status
);
145 /* TODO : compare output with expected */
146 if(U_SUCCESS(status
) && (doCompare
==TRUE
) && u_strCaseCompare(dest
,destLen
, expected
,expectedLen
,0,&status
)!=0){
147 log_err("Did not get the expected result for %s with source length.\n",testName
);
150 log_err( "%s with source length failed. Requires destCapacity > 300\n",testName
);
154 if(status
!= expectedStatus
){
155 log_err( "Did not get the expected error for %s with source length. Expected: %s Got: %s\n",testName
, u_errorName(expectedStatus
), u_errorName(status
));
158 status
= U_ZERO_ERROR
;
160 destLen
= func(tSrc
,tSrcLen
,NULL
,0,options
| UIDNA_ALLOW_UNASSIGNED
, &parseError
, &status
);
162 if(status
== U_BUFFER_OVERFLOW_ERROR
){
163 status
= U_ZERO_ERROR
; /* reset error code */
164 if(destLen
+1 < MAX_DEST_SIZE
){
166 destLen
= func(src
,u_strlen(src
),dest
,destLen
+1,options
| UIDNA_ALLOW_UNASSIGNED
, &parseError
, &status
);
167 /* TODO : compare output with expected */
168 if(U_SUCCESS(status
) && (doCompare
==TRUE
) && u_strCaseCompare(dest
,destLen
, expected
,expectedLen
,0,&status
)!=0){
169 log_err("Did not get the expected result for %s with source length and both options set.\n",testName
);
172 log_err( "%s with source length failed. Requires destCapacity > 300\n",testName
);
175 /*testing query string*/
176 if(status
!= expectedStatus
&& expectedStatus
!= U_IDNA_UNASSIGNED_ERROR
){
177 log_err( "Did not get the expected error for %s with source length and options set. Expected: %s Got: %s\n",testName
, u_errorName(expectedStatus
), u_errorName(status
));
181 status
= U_ZERO_ERROR
;
182 destLen
= func(src
,-1,NULL
,0,options
| UIDNA_USE_STD3_RULES
, &parseError
, &status
);
183 if(status
== U_BUFFER_OVERFLOW_ERROR
){
184 status
= U_ZERO_ERROR
; /* reset error code*/
185 if(destLen
+1 < MAX_DEST_SIZE
){
187 destLen
= func(src
,-1,dest
,destLen
+1,options
| UIDNA_USE_STD3_RULES
, &parseError
, &status
);
188 /* TODO : compare output with expected*/
189 if(U_SUCCESS(status
) && (doCompare
==TRUE
) && u_strCaseCompare(dest
,destLen
, expected
,expectedLen
,0,&status
)!=0){
190 log_err("Did not get the expected result for %s null terminated source with both options set.\n",testName
);
194 log_err( "%s null terminated source failed. Requires destCapacity > 300\n",testName
);
197 /*testing query string*/
198 if(status
!= expectedStatus
){
199 log_err( "Did not get the expected error for %s null terminated source with options set. Expected: %s Got: %s\n",testName
, u_errorName(expectedStatus
), u_errorName(status
));
202 status
= U_ZERO_ERROR
;
204 destLen
= func(tSrc
,tSrcLen
,NULL
,0,options
| UIDNA_USE_STD3_RULES
, &parseError
, &status
);
206 if(status
== U_BUFFER_OVERFLOW_ERROR
){
207 status
= U_ZERO_ERROR
; /* reset error code*/
208 if(destLen
+1 < MAX_DEST_SIZE
){
210 destLen
= func(src
,u_strlen(src
),dest
,destLen
+1,options
| UIDNA_USE_STD3_RULES
, &parseError
, &status
);
211 /* TODO : compare output with expected*/
212 if(U_SUCCESS(status
) && (doCompare
==TRUE
) && u_strCaseCompare(dest
,destLen
, expected
,expectedLen
,0,&status
)!=0){
213 log_err("Did not get the expected result for %s with source length and both options set.\n",testName
);
216 log_err( "%s with source length failed. Requires destCapacity > 300\n",testName
);
219 /*testing query string*/
220 if(status
!= expectedStatus
&& expectedStatus
!= U_IDNA_UNASSIGNED_ERROR
){
221 log_err( "Did not get the expected error for %s with source length and options set. Expected: %s Got: %s\n",testName
, u_errorName(expectedStatus
), u_errorName(status
));
226 static const UChar unicodeIn
[][41] ={
228 0x0644, 0x064A, 0x0647, 0x0645, 0x0627, 0x0628, 0x062A, 0x0643, 0x0644,
229 0x0645, 0x0648, 0x0634, 0x0639, 0x0631, 0x0628, 0x064A, 0x061F, 0x0000
232 0x4ED6, 0x4EEC, 0x4E3A, 0x4EC0, 0x4E48, 0x4E0D, 0x8BF4, 0x4E2D, 0x6587,
236 0x0050, 0x0072, 0x006F, 0x010D, 0x0070, 0x0072, 0x006F, 0x0073, 0x0074,
237 0x011B, 0x006E, 0x0065, 0x006D, 0x006C, 0x0075, 0x0076, 0x00ED, 0x010D,
238 0x0065, 0x0073, 0x006B, 0x0079, 0x0000
241 0x05DC, 0x05DE, 0x05D4, 0x05D4, 0x05DD, 0x05E4, 0x05E9, 0x05D5, 0x05D8,
242 0x05DC, 0x05D0, 0x05DE, 0x05D3, 0x05D1, 0x05E8, 0x05D9, 0x05DD, 0x05E2,
243 0x05D1, 0x05E8, 0x05D9, 0x05EA, 0x0000
246 0x092F, 0x0939, 0x0932, 0x094B, 0x0917, 0x0939, 0x093F, 0x0928, 0x094D,
247 0x0926, 0x0940, 0x0915, 0x094D, 0x092F, 0x094B, 0x0902, 0x0928, 0x0939,
248 0x0940, 0x0902, 0x092C, 0x094B, 0x0932, 0x0938, 0x0915, 0x0924, 0x0947,
249 0x0939, 0x0948, 0x0902, 0x0000
252 0x306A, 0x305C, 0x307F, 0x3093, 0x306A, 0x65E5, 0x672C, 0x8A9E, 0x3092,
253 0x8A71, 0x3057, 0x3066, 0x304F, 0x308C, 0x306A, 0x3044, 0x306E, 0x304B,
258 0xC138, 0xACC4, 0xC758, 0xBAA8, 0xB4E0, 0xC0AC, 0xB78C, 0xB4E4, 0xC774,
259 0xD55C, 0xAD6D, 0xC5B4, 0xB97C, 0xC774, 0xD574, 0xD55C, 0xB2E4, 0xBA74,
260 0xC5BC, 0xB9C8, 0xB098, 0xC88B, 0xC744, 0xAE4C, 0x0000
264 0x043F, 0x043E, 0x0447, 0x0435, 0x043C, 0x0443, 0x0436, 0x0435, 0x043E,
265 0x043D, 0x0438, 0x043D, 0x0435, 0x0433, 0x043E, 0x0432, 0x043E, 0x0440,
266 0x044F, 0x0442, 0x043F, 0x043E, 0x0440, 0x0443, 0x0441, 0x0441, 0x043A,
270 0x0050, 0x006F, 0x0072, 0x0071, 0x0075, 0x00E9, 0x006E, 0x006F, 0x0070,
271 0x0075, 0x0065, 0x0064, 0x0065, 0x006E, 0x0073, 0x0069, 0x006D, 0x0070,
272 0x006C, 0x0065, 0x006D, 0x0065, 0x006E, 0x0074, 0x0065, 0x0068, 0x0061,
273 0x0062, 0x006C, 0x0061, 0x0072, 0x0065, 0x006E, 0x0045, 0x0073, 0x0070,
274 0x0061, 0x00F1, 0x006F, 0x006C, 0x0000
277 0x4ED6, 0x5011, 0x7232, 0x4EC0, 0x9EBD, 0x4E0D, 0x8AAA, 0x4E2D, 0x6587,
281 0x0054, 0x1EA1, 0x0069, 0x0073, 0x0061, 0x006F, 0x0068, 0x1ECD, 0x006B,
282 0x0068, 0x00F4, 0x006E, 0x0067, 0x0074, 0x0068, 0x1EC3, 0x0063, 0x0068,
283 0x1EC9, 0x006E, 0x00F3, 0x0069, 0x0074, 0x0069, 0x1EBF, 0x006E, 0x0067,
284 0x0056, 0x0069, 0x1EC7, 0x0074, 0x0000
287 0x0033, 0x5E74, 0x0042, 0x7D44, 0x91D1, 0x516B, 0x5148, 0x751F, 0x0000
290 0x5B89, 0x5BA4, 0x5948, 0x7F8E, 0x6075, 0x002D, 0x0077, 0x0069, 0x0074,
291 0x0068, 0x002D, 0x0053, 0x0055, 0x0050, 0x0045, 0x0052, 0x002D, 0x004D,
292 0x004F, 0x004E, 0x004B, 0x0045, 0x0059, 0x0053, 0x0000
295 0x0048, 0x0065, 0x006C, 0x006C, 0x006F, 0x002D, 0x0041, 0x006E, 0x006F,
296 0x0074, 0x0068, 0x0065, 0x0072, 0x002D, 0x0057, 0x0061, 0x0079, 0x002D,
297 0x305D, 0x308C, 0x305E, 0x308C, 0x306E, 0x5834, 0x6240, 0x0000
300 0x3072, 0x3068, 0x3064, 0x5C4B, 0x6839, 0x306E, 0x4E0B, 0x0032, 0x0000
303 0x004D, 0x0061, 0x006A, 0x0069, 0x3067, 0x004B, 0x006F, 0x0069, 0x3059,
304 0x308B, 0x0035, 0x79D2, 0x524D, 0x0000
307 0x30D1, 0x30D5, 0x30A3, 0x30FC, 0x0064, 0x0065, 0x30EB, 0x30F3, 0x30D0,
311 0x305D, 0x306E, 0x30B9, 0x30D4, 0x30FC, 0x30C9, 0x3067, 0x0000
313 /* test non-BMP code points */
315 0xD800, 0xDF00, 0xD800, 0xDF01, 0xD800, 0xDF02, 0xD800, 0xDF03, 0xD800, 0xDF05,
316 0xD800, 0xDF06, 0xD800, 0xDF07, 0xD800, 0xDF09, 0xD800, 0xDF0A, 0xD800, 0xDF0B,
320 0xD800, 0xDF0D, 0xD800, 0xDF0C, 0xD800, 0xDF1E, 0xD800, 0xDF0F, 0xD800, 0xDF16,
321 0xD800, 0xDF15, 0xD800, 0xDF14, 0xD800, 0xDF12, 0xD800, 0xDF10, 0xD800, 0xDF20,
327 0x03b5, 0x03bb, 0x03bb, 0x03b7, 0x03bd, 0x03b9, 0x03ba, 0x03ac
331 0x0062, 0x006f, 0x006e, 0x0121, 0x0075, 0x0073, 0x0061, 0x0127,
336 0x043f, 0x043e, 0x0447, 0x0435, 0x043c, 0x0443, 0x0436, 0x0435,
337 0x043e, 0x043d, 0x0438, 0x043d, 0x0435, 0x0433, 0x043e, 0x0432,
338 0x043e, 0x0440, 0x044f, 0x0442, 0x043f, 0x043e, 0x0440, 0x0443,
339 0x0441, 0x0441, 0x043a, 0x0438
342 0x0054,0x0045,0x0053,0x0054
346 static const char * const asciiIn
[] = {
347 "xn--egbpdaj6bu4bxfgehfvwxn",
348 "xn--ihqwcrb4cv8a8dqg056pqjye",
349 "xn--Proprostnemluvesky-uyb24dma41a",
350 "xn--4dbcagdahymbxekheh6e0a7fei0b",
351 "xn--i1baa7eci9glrd9b2ae1bj0hfcgg6iyaf8o0a1dig0cd",
352 "xn--n8jok5ay5dzabd5bym9f0cm5685rrjetr6pdxa",
353 /* "xn--989aomsvi5e83db1d2a355cv1e0vak1dwrv93d5xbh15a0dt30a5jpsd879ccm6fea98c",*/
354 "xn--b1abfaaepdrnnbgefbaDotcwatmq2g4l",
355 "xn--PorqunopuedensimplementehablarenEspaol-fmd56a",
356 "xn--ihqwctvzc91f659drss3x8bo0yb",
357 "xn--TisaohkhngthchnitingVit-kjcr8268qyxafd2f1b9g",
358 "xn--3B-ww4c5e180e575a65lsy2b",
359 "xn---with-SUPER-MONKEYS-pc58ag80a8qai00g7n9n",
360 "xn--Hello-Another-Way--fc4qua05auwb3674vfr0b",
361 "xn--2-u9tlzr9756bt3uc0v",
362 "xn--MajiKoi5-783gue6qz075azm5e",
363 "xn--de-jg4avhby1noc0d",
364 "xn--d9juau41awczczp",
366 "XN--db8CBHEJLGH4E0AL",
367 "xn--hxargifdar", /* Greek */
368 "xn--bonusaa-5bb1da", /* Maltese */
369 "xn--b1abfaaepdrnnbgefbadotcwatmq2g4l", /* Russian (Cyrillic)*/
374 static const char * const domainNames
[] = {
375 "slip129-37-118-146.nc.us.ibm.net",
376 "saratoga.pe.utexas.edu",
377 "dial-120-45.ots.utexas.edu",
378 "woo-085.dorms.waller.net",
379 "hd30-049.hil.compuserve.com",
380 "pem203-31.pe.ttu.edu",
381 "56K-227.MaxTNT3.pdq.net",
382 "dial-36-2.ots.utexas.edu",
383 "slip129-37-23-152.ga.us.ibm.net",
384 "ts45ip119.cadvision.com",
385 "sdn-ts-004txaustP05.dialsprint.net",
386 "bar-tnt1s66.erols.com",
387 "101.st-louis-15.mo.dial-access.att.net",
389 "dial-13-2.ots.utexas.edu",
390 "net-redynet29.datamarkets.com.ar",
391 "ccs-shiva28.reacciun.net.ve",
392 "7.houston-11.tx.dial-access.att.net",
393 "ingw129-37-120-26.mo.us.ibm.net",
394 "dialup6.austintx.com",
396 "slip129-37-119-194.nc.us.ibm.net",
397 "cs7.dillons.co.uk.203.119.193.in-addr.arpa",
398 "swprd1.innovplace.saskatoon.sk.ca",
399 "bikini.bologna.maraut.it",
400 "node91.subnet159-198-79.baxter.com",
401 "cust19.max5.new-york.ny.ms.uu.net",
402 "balexander.slip.andrew.cmu.edu",
403 "pool029.max2.denver.co.dynip.alter.net",
404 "cust49.max9.new-york.ny.ms.uu.net",
405 "s61.abq-dialin2.hollyberry.com",
406 "\\u0917\\u0928\\u0947\\u0936.sanjose.ibm.com", /*':'(0x003a) produces U_IDNA_STD3_ASCII_RULES_ERROR*/
408 /* "www.\\u00E0\\u00B3\\u00AF.com",//' ' (0x0020) produces U_IDNA_STD3_ASCII_RULES_ERROR*/
409 "www.\\u00C2\\u00A4.com",
410 "www.\\u00C2\\u00A3.com",
411 /* "\\u0025", //'%' (0x0025) produces U_IDNA_STD3_ASCII_RULES_ERROR*/
412 /* "\\u005C\\u005C", //'\' (0x005C) produces U_IDNA_STD3_ASCII_RULES_ERROR*/
415 /*"www.\\u0021.com",*/
416 /*"www.\\u0024.com",*/
418 /* These yeild U_IDNA_PROHIBITED_ERROR*/
419 /*"\\u00CF\\u0082.com",*/
420 /*"\\u00CE\\u00B2\\u00C3\\u009Fss.com",*/
421 /*"\\u00E2\\u0098\\u00BA.com",*/
430 UChar buf
[MAX_DEST_SIZE
];
431 const char* testName
= "uidna_toASCII";
432 TestFunc func
= uidna_toASCII
;
433 for(i
=0;i
< UPRV_LENGTHOF(unicodeIn
); i
++){
434 u_charsToUChars(asciiIn
[i
],buf
, (int32_t)strlen(asciiIn
[i
])+1);
435 testAPI(unicodeIn
[i
], buf
,testName
, FALSE
,U_ZERO_ERROR
, TRUE
, TRUE
, func
);
444 UChar buf
[MAX_DEST_SIZE
];
445 const char* testName
= "uidna_toUnicode";
446 TestFunc func
= uidna_toUnicode
;
447 for(i
=0;i
< UPRV_LENGTHOF(asciiIn
); i
++){
448 u_charsToUChars(asciiIn
[i
],buf
, (int32_t)strlen(asciiIn
[i
])+1);
449 testAPI(buf
,unicodeIn
[i
],testName
,FALSE
,U_ZERO_ERROR
, TRUE
, TRUE
, func
);
457 UChar buf
[MAX_DEST_SIZE
];
458 UChar expected
[MAX_DEST_SIZE
];
459 UErrorCode status
= U_ZERO_ERROR
;
461 UParseError parseError
;
462 const char* testName
="uidna_IDNToUnicode";
463 TestFunc func
= uidna_IDNToUnicode
;
464 for(i
=0;i
< UPRV_LENGTHOF(domainNames
); i
++){
465 bufLen
= (int32_t)strlen(domainNames
[i
]);
466 bufLen
= u_unescape(domainNames
[i
],buf
, bufLen
+1);
467 func(buf
,bufLen
,expected
,MAX_DEST_SIZE
, UIDNA_ALLOW_UNASSIGNED
, &parseError
,&status
);
468 if(U_FAILURE(status
)){
469 log_err_status(status
, "%s failed to convert domainNames[%i].Error: %s \n",testName
, i
, u_errorName(status
));
472 testAPI(buf
,expected
,testName
,FALSE
,U_ZERO_ERROR
, TRUE
, TRUE
, func
);
473 /*test toUnicode with all labels in the string*/
474 testAPI(buf
,expected
,testName
, FALSE
,U_ZERO_ERROR
, TRUE
, TRUE
, func
);
475 if(U_FAILURE(status
)){
476 log_err( "%s failed to convert domainNames[%i].Error: %s \n",testName
,i
, u_errorName(status
));
486 UChar buf
[MAX_DEST_SIZE
];
487 UChar expected
[MAX_DEST_SIZE
];
488 UErrorCode status
= U_ZERO_ERROR
;
490 UParseError parseError
;
491 const char* testName
="udina_IDNToASCII";
492 TestFunc func
=uidna_IDNToASCII
;
494 for(i
=0;i
< UPRV_LENGTHOF(domainNames
); i
++){
495 bufLen
= (int32_t)strlen(domainNames
[i
]);
496 bufLen
= u_unescape(domainNames
[i
],buf
, bufLen
+1);
497 func(buf
,bufLen
,expected
,MAX_DEST_SIZE
, UIDNA_ALLOW_UNASSIGNED
, &parseError
,&status
);
498 if(U_FAILURE(status
)){
499 log_err_status(status
, "%s failed to convert domainNames[%i].Error: %s \n",testName
,i
, u_errorName(status
));
502 testAPI(buf
,expected
,testName
, FALSE
,U_ZERO_ERROR
, TRUE
, TRUE
, func
);
503 /*test toASCII with all labels in the string*/
504 testAPI(buf
,expected
,testName
, FALSE
,U_ZERO_ERROR
, FALSE
, TRUE
, func
);
505 if(U_FAILURE(status
)){
506 log_err( "%s failed to convert domainNames[%i].Error: %s \n",testName
,i
, u_errorName(status
));
516 testCompareWithSrc(const UChar
* s1
, int32_t s1Len
,
517 const UChar
* s2
, int32_t s2Len
,
518 const char* testName
, CompareFunc func
,
521 UErrorCode status
= U_ZERO_ERROR
;
522 int32_t retVal
= func(s1
,-1,s2
,-1,UIDNA_DEFAULT
,&status
);
524 if(isEqual
==TRUE
&& retVal
!=0){
525 log_err("Did not get the expected result for %s with null termniated strings.\n",testName
);
527 if(U_FAILURE(status
)){
528 log_err_status(status
, "%s null terminated source failed. Error: %s\n", testName
,u_errorName(status
));
531 status
= U_ZERO_ERROR
;
532 retVal
= func(s1
,-1,s2
,-1,UIDNA_ALLOW_UNASSIGNED
,&status
);
534 if(isEqual
==TRUE
&& retVal
!=0){
535 log_err("Did not get the expected result for %s with null termniated strings with options set.\n", testName
);
537 if(U_FAILURE(status
)){
538 log_err_status(status
, "%s null terminated source and options set failed. Error: %s\n",testName
, u_errorName(status
));
541 status
= U_ZERO_ERROR
;
542 retVal
= func(s1
,s1Len
,s2
,s2Len
,UIDNA_DEFAULT
,&status
);
544 if(isEqual
==TRUE
&& retVal
!=0){
545 log_err("Did not get the expected result for %s with string length.\n",testName
);
547 if(U_FAILURE(status
)){
548 log_err_status(status
, "%s with string length. Error: %s\n",testName
, u_errorName(status
));
551 status
= U_ZERO_ERROR
;
552 retVal
= func(s1
,s1Len
,s2
,s2Len
,UIDNA_ALLOW_UNASSIGNED
,&status
);
554 if(isEqual
==TRUE
&& retVal
!=0){
555 log_err("Did not get the expected result for %s with string length and options set.\n",testName
);
557 if(U_FAILURE(status
)){
558 log_err_status(status
, "%s with string length and options set. Error: %s\n", u_errorName(status
), testName
);
567 const char* testName
="uidna_compare";
568 CompareFunc func
= uidna_compare
;
570 UChar www
[] = {0x0057, 0x0057, 0x0057, 0x002E, 0x0000};
571 UChar com
[] = {0x002E, 0x0043, 0x004F, 0x004D, 0x0000};
572 UChar buf
[MAX_DEST_SIZE
]={0x0057, 0x0057, 0x0057, 0x002E, 0x0000};
573 UChar source
[MAX_DEST_SIZE
]={0},
574 uni0
[MAX_DEST_SIZE
]={0},
575 uni1
[MAX_DEST_SIZE
]={0},
576 ascii0
[MAX_DEST_SIZE
]={0},
577 ascii1
[MAX_DEST_SIZE
]={0},
578 temp
[MAX_DEST_SIZE
] ={0};
581 u_strcat(uni0
,unicodeIn
[0]);
584 u_strcat(uni1
,unicodeIn
[1]);
587 u_charsToUChars(asciiIn
[0], temp
, (int32_t)strlen(asciiIn
[0]));
588 u_strcat(ascii0
,temp
);
589 u_strcat(ascii0
,com
);
591 memset(temp
, 0, U_SIZEOF_UCHAR
* MAX_DEST_SIZE
);
593 u_charsToUChars(asciiIn
[1], temp
, (int32_t)strlen(asciiIn
[1]));
594 u_strcat(ascii1
,temp
);
595 u_strcat(ascii1
,com
);
598 u_strcat(source
, www
);
600 for(i
=0;i
< UPRV_LENGTHOF(unicodeIn
); i
++){
604 memset(buf
+4, 0, (MAX_DEST_SIZE
-4) * U_SIZEOF_UCHAR
);
606 u_charsToUChars(asciiIn
[i
],buf
+4, (int32_t)strlen(asciiIn
[i
]));
610 /* for every entry in unicodeIn array
611 prepend www. and append .com*/
613 u_strncat(source
,unicodeIn
[i
], u_strlen(unicodeIn
[i
]));
614 u_strcat(source
,com
);
616 /* a) compare it with itself*/
618 srcLen
= u_strlen(src
);
620 testCompareWithSrc(src
,srcLen
,src
,srcLen
,testName
, func
, TRUE
);
622 /* b) compare it with asciiIn equivalent */
623 testCompareWithSrc(src
,srcLen
,buf
,u_strlen(buf
),testName
, func
,TRUE
);
625 /* c) compare it with unicodeIn not equivalent*/
627 testCompareWithSrc(src
,srcLen
,uni1
,u_strlen(uni1
),testName
, func
,FALSE
);
629 testCompareWithSrc(src
,srcLen
,uni0
,u_strlen(uni0
),testName
, func
,FALSE
);
631 /* d) compare it with asciiIn not equivalent */
633 testCompareWithSrc(src
,srcLen
,ascii1
,u_strlen(ascii1
),testName
, func
,FALSE
);
635 testCompareWithSrc(src
,srcLen
,ascii0
,u_strlen(ascii0
),testName
, func
,FALSE
);
641 static void TestJB4490(){
642 static const UChar data
[][50]= {
643 {0x00F5,0x00dE,0x00dF,0x00dD, 0x0000},
646 UChar output1
[40] = {0};
647 UChar output2
[40] = {0};
649 for(i
=0; i
< UPRV_LENGTHOF(data
); i
++){
650 const UChar
* src1
= data
[i
];
651 int32_t src1Len
= u_strlen(src1
);
652 UChar
* dest1
= output1
;
653 int32_t dest1Len
= 40;
654 UErrorCode status
= U_ZERO_ERROR
;
658 UChar
* dest2
= output2
;
659 int32_t dest2Len
= 40;
660 dest1Len
= uidna_toASCII(src1
, src1Len
, dest1
, dest1Len
,UIDNA_DEFAULT
, &ps
, &status
);
661 if(U_FAILURE(status
)){
662 log_err_status(status
, "uidna_toUnicode failed with error %s.\n", u_errorName(status
));
666 dest2Len
= uidna_toUnicode(src2
, src2Len
, dest2
, dest2Len
, UIDNA_DEFAULT
, &ps
, &status
);
667 if(U_FAILURE(status
)){
668 log_err_status(status
, "uidna_toUnicode failed with error %s.\n", u_errorName(status
));
673 static void TestJB4475(){
675 static const UChar input
[][10] = {
676 {0x0054,0x0045,0x0053,0x0054,0x0000},/* TEST */
677 {0x0074,0x0065,0x0073,0x0074,0x0000} /* test */
680 UChar output
[40] = {0};
681 for(i
=0; i
< UPRV_LENGTHOF(input
); i
++){
682 const UChar
* src
= input
[i
];
683 int32_t srcLen
= u_strlen(src
);
684 UChar
* dest
= output
;
685 int32_t destLen
= 40;
686 UErrorCode status
= U_ZERO_ERROR
;
689 destLen
= uidna_toASCII(src
, srcLen
, dest
, destLen
,UIDNA_DEFAULT
, &ps
, &status
);
690 if(U_FAILURE(status
)){
691 log_err_status(status
, "uidna_toASCII failed with error %s.\n", u_errorName(status
));
694 if(u_strncmp(input
[i
], dest
, srcLen
)!=0){
695 log_err("uidna_toASCII did not return the expected output.\n");
700 static void TestLength(){
702 static const char* cl
= "my_very_very_very_very_very_very_very_very_very_very_very_very_very_long_and_incredibly_uncreative_domain_label";
703 UChar ul
[128] = {'\0'};
704 UChar dest
[256] = {'\0'};
705 /* this unicode string is longer than MAX_LABEL_BUFFER_SIZE and produces an
706 IDNA prepared string (including xn--)that is exactly 63 bytes long */
707 UChar ul1
[] = { 0xC138, 0xACC4, 0xC758, 0xBAA8, 0xB4E0, 0xC0AC, 0xB78C, 0xB4E4, 0xC774,
708 0xD55C, 0xAD6D, 0xC5B4, 0xB97C, 0xC774, 0x00AD, 0x034F, 0x1806, 0x180B,
709 0x180C, 0x180D, 0x200B, 0x200C, 0x200D, 0x2060, 0xFE00, 0xFE01, 0xFE02,
710 0xFE03, 0xFE04, 0xFE05, 0xFE06, 0xFE07, 0xFE08, 0xFE09, 0xFE0A, 0xFE0B,
711 0xFE0C, 0xFE0D, 0xFE0E, 0xFE0F, 0xFEFF, 0xD574, 0xD55C, 0xB2E4, 0xBA74,
712 0xC138, 0x0041, 0x00AD, 0x034F, 0x1806, 0x180B, 0x180C, 0x180D, 0x200B,
713 0x200C, 0x200D, 0x2060, 0xFE00, 0xFE01, 0xFE02, 0xFE03, 0xFE04, 0xFE05,
714 0xFE06, 0xFE07, 0xFE08, 0xFE09, 0xFE0A, 0xFE0B, 0xFE0C, 0xFE0D, 0xFE0E,
715 0xFE0F, 0xFEFF, 0x00AD, 0x034F, 0x1806, 0x180B, 0x180C, 0x180D, 0x200B,
716 0x200C, 0x200D, 0x2060, 0xFE00, 0xFE01, 0xFE02, 0xFE03, 0xFE04, 0xFE05,
717 0xFE06, 0xFE07, 0xFE08, 0xFE09, 0xFE0A, 0xFE0B, 0xFE0C, 0xFE0D, 0xFE0E,
718 0xFE0F, 0xFEFF, 0x00AD, 0x034F, 0x1806, 0x180B, 0x180C, 0x180D, 0x200B,
719 0x200C, 0x200D, 0x2060, 0xFE00, 0xFE01, 0xFE02, 0xFE03, 0xFE04, 0xFE05,
720 0xFE06, 0xFE07, 0xFE08, 0xFE09, 0xFE0A, 0xFE0B, 0xFE0C, 0xFE0D, 0xFE0E,
721 0xFE0F, 0xFEFF, 0x0000
724 int32_t len1
= UPRV_LENGTHOF(ul1
)-1/*remove the null termination*/;
725 int32_t destLen
= UPRV_LENGTHOF(dest
);
726 UErrorCode status
= U_ZERO_ERROR
;
728 int32_t len
= (int32_t)strlen(cl
);
729 u_charsToUChars(cl
, ul
, len
+1);
730 destLen
= uidna_toUnicode(ul
, len
, dest
, destLen
, UIDNA_DEFAULT
, &ps
, &status
);
731 if(status
!= U_ZERO_ERROR
){
732 log_err_status(status
, "uidna_toUnicode failed with error %s.\n", u_errorName(status
));
735 status
= U_ZERO_ERROR
;
736 destLen
= UPRV_LENGTHOF(dest
);
738 destLen
= uidna_toUnicode(ul
, len
, dest
, destLen
, UIDNA_DEFAULT
, &ps
, &status
);
739 if(status
!= U_ZERO_ERROR
){
740 log_err_status(status
, "uidna_toUnicode failed with error %s.\n", u_errorName(status
));
742 status
= U_ZERO_ERROR
;
743 destLen
= UPRV_LENGTHOF(dest
);
744 len
= (int32_t)strlen(cl
);
745 destLen
= uidna_toASCII(ul
, len
, dest
, destLen
, UIDNA_DEFAULT
, &ps
, &status
);
746 if(status
!= U_IDNA_LABEL_TOO_LONG_ERROR
){
747 log_err_status(status
, "uidna_toASCII failed with error %s.\n", u_errorName(status
));
750 status
= U_ZERO_ERROR
;
751 destLen
= UPRV_LENGTHOF(dest
);
753 destLen
= uidna_toASCII(ul
, len
, dest
, destLen
, UIDNA_DEFAULT
, &ps
, &status
);
754 if(status
!= U_IDNA_LABEL_TOO_LONG_ERROR
){
755 log_err_status(status
, "uidna_toASCII failed with error %s.\n", u_errorName(status
));
758 status
= U_ZERO_ERROR
;
759 destLen
= UPRV_LENGTHOF(dest
);
760 destLen
= uidna_toASCII(ul1
, len1
, dest
, destLen
, UIDNA_DEFAULT
, &ps
, &status
);
761 if(status
!= U_ZERO_ERROR
){
762 log_err_status(status
, "uidna_toASCII failed with error %s.\n", u_errorName(status
));
765 status
= U_ZERO_ERROR
;
766 destLen
= UPRV_LENGTHOF(dest
);
768 destLen
= uidna_toASCII(ul1
, len1
, dest
, destLen
, UIDNA_DEFAULT
, &ps
, &status
);
769 if(status
!= U_ZERO_ERROR
){
770 log_err_status(status
, "uidna_toASCII failed with error %s.\n", u_errorName(status
));
774 static const char* cl
= "my_very_very_long_and_incredibly_uncreative_domain_label.my_very_very_long_and_incredibly_uncreative_domain_label.my_very_very_long_and_incredibly_uncreative_domain_label.my_very_very_long_and_incredibly_uncreative_domain_label.my_very_very_long_and_incredibly_uncreative_domain_label.my_very_very_long_and_incredibly_uncreative_domain_label.ibm.com";
775 UChar ul
[400] = {'\0'};
776 UChar dest
[400] = {'\0'};
777 int32_t destLen
= UPRV_LENGTHOF(dest
);
778 UErrorCode status
= U_ZERO_ERROR
;
780 int32_t len
= (int32_t)strlen(cl
);
781 u_charsToUChars(cl
, ul
, len
+1);
783 destLen
= uidna_IDNToUnicode(ul
, len
, dest
, destLen
, UIDNA_DEFAULT
, &ps
, &status
);
784 if(status
!= U_IDNA_DOMAIN_NAME_TOO_LONG_ERROR
){
785 log_err_status(status
, "uidna_IDNToUnicode failed with error %s.\n", u_errorName(status
));
788 status
= U_ZERO_ERROR
;
789 destLen
= UPRV_LENGTHOF(dest
);
791 destLen
= uidna_IDNToUnicode(ul
, len
, dest
, destLen
, UIDNA_DEFAULT
, &ps
, &status
);
792 if(status
!= U_IDNA_DOMAIN_NAME_TOO_LONG_ERROR
){
793 log_err_status(status
, "uidna_IDNToUnicode failed with error %s.\n", u_errorName(status
));
796 status
= U_ZERO_ERROR
;
797 destLen
= UPRV_LENGTHOF(dest
);
798 len
= (int32_t)strlen(cl
);
799 destLen
= uidna_IDNToASCII(ul
, len
, dest
, destLen
, UIDNA_DEFAULT
, &ps
, &status
);
800 if(status
!= U_IDNA_DOMAIN_NAME_TOO_LONG_ERROR
){
801 log_err_status(status
, "uidna_IDNToASCII failed with error %s.\n", u_errorName(status
));
804 status
= U_ZERO_ERROR
;
805 destLen
= UPRV_LENGTHOF(dest
);
807 destLen
= uidna_IDNToASCII(ul
, len
, dest
, destLen
, UIDNA_DEFAULT
, &ps
, &status
);
808 if(status
!= U_IDNA_DOMAIN_NAME_TOO_LONG_ERROR
){
809 log_err_status(status
, "uidna_IDNToASCII failed with error %s.\n", u_errorName(status
));
812 status
= U_ZERO_ERROR
;
813 uidna_compare(ul
, len
, ul
, len
, UIDNA_DEFAULT
, &status
);
814 if(status
!= U_IDNA_DOMAIN_NAME_TOO_LONG_ERROR
){
815 log_err_status(status
, "uidna_compare failed with error %s.\n", u_errorName(status
));
817 uidna_compare(ul
, -1, ul
, -1, UIDNA_DEFAULT
, &status
);
818 if(status
!= U_IDNA_DOMAIN_NAME_TOO_LONG_ERROR
){
819 log_err_status(status
, "uidna_compare failed with error %s.\n", u_errorName(status
));
823 static void TestJB5273(){
824 static const char INVALID_DOMAIN_NAME
[] = "xn--m\\u00FCller.de";
825 UChar invalid_idn
[25] = {'\0'};
826 int32_t len
= u_unescape(INVALID_DOMAIN_NAME
, invalid_idn
, strlen(INVALID_DOMAIN_NAME
));
827 UChar output
[50] = {'\0'};
828 UErrorCode status
= U_ZERO_ERROR
;
829 UParseError prsError
;
830 int32_t outLen
= uidna_toUnicode(invalid_idn
, len
, output
, 50, UIDNA_DEFAULT
, &prsError
, &status
);
831 (void)outLen
; /* Suppress set but not used warning. */
832 if(U_FAILURE(status
)){
833 log_err_status(status
, "uidna_toUnicode failed with error: %s\n", u_errorName(status
));
835 status
= U_ZERO_ERROR
;
836 outLen
= uidna_toUnicode(invalid_idn
, len
, output
, 50, UIDNA_USE_STD3_RULES
, &prsError
, &status
);
837 if(U_FAILURE(status
)){
838 log_err_status(status
, "uidna_toUnicode failed with error: %s\n", u_errorName(status
));
841 status
= U_ZERO_ERROR
;
842 outLen
= uidna_IDNToUnicode(invalid_idn
, len
, output
, 50, UIDNA_DEFAULT
, &prsError
, &status
);
843 if(U_FAILURE(status
)){
844 log_err_status(status
, "uidna_toUnicode failed with error: %s\n", u_errorName(status
));
846 status
= U_ZERO_ERROR
;
847 outLen
= uidna_IDNToUnicode(invalid_idn
, len
, output
, 50, UIDNA_USE_STD3_RULES
, &prsError
, &status
);
848 if(U_FAILURE(status
)){
849 log_err_status(status
, "uidna_toUnicode failed with error: %s\n", u_errorName(status
));
854 * Test the new (ICU 4.6/2010) C API that was added for UTS #46.
855 * Just an API test: Functionality is tested via C++ intltest.
857 static void TestUTS46() {
858 static const UChar fA_sharps16
[] = { 0x66, 0x41, 0xdf, 0 };
859 static const char fA_sharps8
[] = { 0x66, 0x41, (char)0xc3, (char)0x9f, 0 };
860 static const UChar fa_sharps16
[] = { 0x66, 0x61, 0xdf, 0 };
861 static const char fa_sharps8
[] = { 0x66, 0x61, (char)0xc3, (char)0x9f, 0 };
862 static const UChar fass16
[] = { 0x66, 0x61, 0x73, 0x73, 0 };
863 static const char fass8
[] = { 0x66, 0x61, 0x73, 0x73, 0 };
864 static const UChar fA_BEL
[] = { 0x66, 0x41, 7, 0 };
865 static const UChar fa_FFFD
[] = { 0x66, 0x61, 0xfffd, 0 };
871 UIDNAInfo info
= UIDNA_INFO_INITIALIZER
;
872 UErrorCode errorCode
= U_ZERO_ERROR
;
873 UIDNA
*uts46
= uidna_openUTS46(UIDNA_USE_STD3_RULES
|UIDNA_NONTRANSITIONAL_TO_UNICODE
,
875 if(U_FAILURE(errorCode
)) {
876 log_err_status(errorCode
, "uidna_openUTS46() failed: %s\n", u_errorName(errorCode
));
880 /* These calls should succeed. */
881 length
= uidna_labelToASCII(uts46
, fA_sharps16
, -1,
882 dest16
, UPRV_LENGTHOF(dest16
), &info
, &errorCode
);
883 if( U_FAILURE(errorCode
) || length
!= 4 || 0 != u_memcmp(dest16
, fass16
, 5) ||
884 !info
.isTransitionalDifferent
|| info
.errors
!= 0
886 log_err("uidna_labelToASCII() failed: %s\n", u_errorName(errorCode
));
888 errorCode
= U_ZERO_ERROR
;
889 length
= uidna_labelToUnicode(uts46
, fA_sharps16
, u_strlen(fA_sharps16
),
890 dest16
, UPRV_LENGTHOF(dest16
), &info
, &errorCode
);
891 if( U_FAILURE(errorCode
) || length
!= 3 || 0 != u_memcmp(dest16
, fa_sharps16
, 4) ||
892 !info
.isTransitionalDifferent
|| info
.errors
!= 0
894 log_err("uidna_labelToUnicode() failed: %s\n", u_errorName(errorCode
));
896 errorCode
= U_ZERO_ERROR
;
897 length
= uidna_nameToASCII(uts46
, fA_sharps16
, u_strlen(fA_sharps16
),
898 dest16
, 4, &info
, &errorCode
);
899 if( errorCode
!= U_STRING_NOT_TERMINATED_WARNING
||
900 length
!= 4 || 0 != u_memcmp(dest16
, fass16
, 4) ||
901 !info
.isTransitionalDifferent
|| info
.errors
!= 0
903 log_err("uidna_nameToASCII() failed: %s\n", u_errorName(errorCode
));
905 errorCode
= U_ZERO_ERROR
;
906 length
= uidna_nameToUnicode(uts46
, fA_sharps16
, -1,
907 dest16
, 3, &info
, &errorCode
);
908 if( errorCode
!= U_STRING_NOT_TERMINATED_WARNING
||
909 length
!= 3 || 0 != u_memcmp(dest16
, fa_sharps16
, 3) ||
910 !info
.isTransitionalDifferent
|| info
.errors
!= 0
912 log_err("uidna_nameToUnicode() failed: %s\n", u_errorName(errorCode
));
915 errorCode
= U_ZERO_ERROR
;
916 length
= uidna_labelToASCII_UTF8(uts46
, fA_sharps8
, -1,
917 dest8
, UPRV_LENGTHOF(dest8
), &info
, &errorCode
);
918 if( U_FAILURE(errorCode
) || length
!= 4 || 0 != memcmp(dest8
, fass8
, 5) ||
919 !info
.isTransitionalDifferent
|| info
.errors
!= 0
921 log_err("uidna_labelToASCII_UTF8() failed: %s\n", u_errorName(errorCode
));
923 errorCode
= U_ZERO_ERROR
;
924 length
= uidna_labelToUnicodeUTF8(uts46
, fA_sharps8
, strlen(fA_sharps8
),
925 dest8
, UPRV_LENGTHOF(dest8
), &info
, &errorCode
);
926 if( U_FAILURE(errorCode
) || length
!= 4 || 0 != memcmp(dest8
, fa_sharps8
, 5) ||
927 !info
.isTransitionalDifferent
|| info
.errors
!= 0
929 log_err("uidna_labelToUnicodeUTF8() failed: %s\n", u_errorName(errorCode
));
931 errorCode
= U_ZERO_ERROR
;
932 length
= uidna_nameToASCII_UTF8(uts46
, fA_sharps8
, strlen(fA_sharps8
),
933 dest8
, 4, &info
, &errorCode
);
934 if( errorCode
!= U_STRING_NOT_TERMINATED_WARNING
||
935 length
!= 4 || 0 != memcmp(dest8
, fass8
, 4) ||
936 !info
.isTransitionalDifferent
|| info
.errors
!= 0
938 log_err("uidna_nameToASCII_UTF8() failed: %s\n", u_errorName(errorCode
));
940 errorCode
= U_ZERO_ERROR
;
941 length
= uidna_nameToUnicodeUTF8(uts46
, fA_sharps8
, -1,
942 dest8
, 4, &info
, &errorCode
);
943 if( errorCode
!= U_STRING_NOT_TERMINATED_WARNING
||
944 length
!= 4 || 0 != memcmp(dest8
, fa_sharps8
, 4) ||
945 !info
.isTransitionalDifferent
|| info
.errors
!= 0
947 log_err("uidna_nameToUnicodeUTF8() failed: %s\n", u_errorName(errorCode
));
950 errorCode
= U_ZERO_ERROR
;
951 length
= uidna_nameToASCII(uts46
, NULL
, 0,
952 dest16
, 0, &info
, &errorCode
);
953 if( errorCode
!= U_STRING_NOT_TERMINATED_WARNING
||
955 info
.isTransitionalDifferent
|| info
.errors
!= UIDNA_ERROR_EMPTY_LABEL
957 log_err("uidna_nameToASCII(empty) failed: %s\n", u_errorName(errorCode
));
959 errorCode
= U_ZERO_ERROR
;
960 length
= uidna_nameToUnicode(uts46
, fA_BEL
, -1,
961 dest16
, 3, &info
, &errorCode
);
962 if( errorCode
!= U_STRING_NOT_TERMINATED_WARNING
||
963 length
!= 3 || 0 != u_memcmp(dest16
, fa_FFFD
, 3) ||
964 info
.isTransitionalDifferent
|| info
.errors
== 0
966 log_err("uidna_nameToUnicode(fa<BEL>) failed: %s\n", u_errorName(errorCode
));
969 /* These calls should fail. */
970 errorCode
= U_USELESS_COLLATOR_ERROR
;
971 length
= uidna_labelToASCII(uts46
, fA_sharps16
, -1,
972 dest16
, UPRV_LENGTHOF(dest16
), &info
, &errorCode
);
973 if(errorCode
!= U_USELESS_COLLATOR_ERROR
) {
974 log_err("uidna_labelToASCII(failure) failed: %s\n", u_errorName(errorCode
));
976 errorCode
= U_ZERO_ERROR
;
977 length
= uidna_labelToUnicode(uts46
, fA_sharps16
, u_strlen(fA_sharps16
),
978 dest16
, UPRV_LENGTHOF(dest16
), NULL
, &errorCode
);
979 if(errorCode
!= U_ILLEGAL_ARGUMENT_ERROR
) {
980 log_err("uidna_labelToUnicode(UIDNAInfo=NULL) failed: %s\n", u_errorName(errorCode
));
982 errorCode
= U_ZERO_ERROR
;
983 length
= uidna_nameToASCII(uts46
, NULL
, u_strlen(fA_sharps16
),
984 dest16
, 4, &info
, &errorCode
);
985 if(errorCode
!= U_ILLEGAL_ARGUMENT_ERROR
) {
986 log_err("uidna_nameToASCII(src=NULL) failed: %s\n", u_errorName(errorCode
));
988 errorCode
= U_ZERO_ERROR
;
989 length
= uidna_nameToUnicode(uts46
, fA_sharps16
, -2,
990 dest16
, 3, &info
, &errorCode
);
991 if(errorCode
!= U_ILLEGAL_ARGUMENT_ERROR
) {
992 log_err("uidna_nameToUnicode(length<-1) failed: %s\n", u_errorName(errorCode
));
995 errorCode
= U_ZERO_ERROR
;
996 length
= uidna_labelToASCII_UTF8(uts46
, fA_sharps8
, -1,
997 NULL
, UPRV_LENGTHOF(dest8
), &info
, &errorCode
);
998 if(errorCode
!= U_ILLEGAL_ARGUMENT_ERROR
) {
999 log_err("uidna_labelToASCII_UTF8(dest=NULL) failed: %s\n", u_errorName(errorCode
));
1001 errorCode
= U_ZERO_ERROR
;
1002 length
= uidna_labelToUnicodeUTF8(uts46
, fA_sharps8
, strlen(fA_sharps8
),
1003 dest8
, -1, &info
, &errorCode
);
1004 if(errorCode
!= U_ILLEGAL_ARGUMENT_ERROR
) {
1005 log_err("uidna_labelToUnicodeUTF8(capacity<0) failed: %s\n", u_errorName(errorCode
));
1007 errorCode
= U_ZERO_ERROR
;
1008 length
= uidna_nameToASCII_UTF8(uts46
, dest8
, strlen(fA_sharps8
),
1009 dest8
, 4, &info
, &errorCode
);
1010 if(errorCode
!= U_ILLEGAL_ARGUMENT_ERROR
) {
1011 log_err("uidna_nameToASCII_UTF8(src==dest!=NULL) failed: %s\n", u_errorName(errorCode
));
1013 errorCode
= U_ZERO_ERROR
;
1014 length
= uidna_nameToUnicodeUTF8(uts46
, fA_sharps8
, -1,
1015 dest8
, 3, &info
, &errorCode
);
1016 if(errorCode
!= U_BUFFER_OVERFLOW_ERROR
|| length
!= 4) {
1017 log_err("uidna_nameToUnicodeUTF8() overflow failed: %s\n", u_errorName(errorCode
));
1026 * Hey, Emacs, please set the following:
1029 * indent-tabs-mode: nil