1b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru/* 2b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru ******************************************************************************* 3b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * 427f654740f2a26ad62a5c155af9199af9e69b889claireho * Copyright (C) 2003-2010, International Business Machines 5b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * Corporation and others. All Rights Reserved. 6b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * 7b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru ******************************************************************************* 8b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * file name: idnatest.c 9b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * encoding: US-ASCII 10b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * tab size: 8 (not used) 11b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * indentation:4 12b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * 13b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * created on: 2003jul11 14b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * created by: Ram Viswanadha 15b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru */ 16b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#include <stdlib.h> 17b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#include <string.h> 18b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#include "unicode/utypes.h" 19b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 20b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#if !UCONFIG_NO_IDNA 21b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 22b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#include "unicode/ustring.h" 23b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#include "unicode/uidna.h" 24b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#include "cintltst.h" 25b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 26b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 27b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 28b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#define LENGTHOF(array) (int32_t)(sizeof(array)/sizeof((array)[0])) 29b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#define MAX_DEST_SIZE 1000 30b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 31b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Querustatic void TestToUnicode(void); 32b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Querustatic void TestToASCII(void); 33b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Querustatic void TestIDNToUnicode(void); 34b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Querustatic void TestIDNToASCII(void); 35b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Querustatic void TestCompare(void); 36b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Querustatic void TestJB4490(void); 37b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Querustatic void TestJB4475(void); 38b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Querustatic void TestLength(void); 39b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Querustatic void TestJB5273(void); 4027f654740f2a26ad62a5c155af9199af9e69b889clairehostatic void TestUTS46(void); 4127f654740f2a26ad62a5c155af9199af9e69b889claireho 42b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruvoid addIDNATest(TestNode** root); 43b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 44b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 45b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Querutypedef int32_t 46b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru(U_EXPORT2 *TestFunc) ( const UChar *src, int32_t srcLength, 47b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UChar *dest, int32_t destCapacity, 48b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru int32_t options, UParseError *parseError, 49b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UErrorCode *status); 50b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Querutypedef int32_t 51b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru(U_EXPORT2 *CompareFunc) (const UChar *s1, int32_t s1Len, 52b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru const UChar *s2, int32_t s2Len, 53b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru int32_t options, 54b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UErrorCode *status); 55b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 56b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 57b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruvoid 58b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste QueruaddIDNATest(TestNode** root) 59b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru{ 60b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru addTest(root, &TestToUnicode, "idna/TestToUnicode"); 61b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru addTest(root, &TestToASCII, "idna/TestToASCII"); 62b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru addTest(root, &TestIDNToUnicode, "idna/TestIDNToUnicode"); 63b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru addTest(root, &TestIDNToASCII, "idna/TestIDNToASCII"); 64b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru addTest(root, &TestCompare, "idna/TestCompare"); 65b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru addTest(root, &TestJB4490, "idna/TestJB4490"); 66b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru addTest(root, &TestJB4475, "idna/TestJB4475"); 67b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru addTest(root, &TestLength, "idna/TestLength"); 68b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru addTest(root, &TestJB5273, "idna/TestJB5273"); 6927f654740f2a26ad62a5c155af9199af9e69b889claireho addTest(root, &TestUTS46, "idna/TestUTS46"); 70b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru} 71b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 72b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Querustatic void 73b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste QuerutestAPI(const UChar* src, const UChar* expected, const char* testName, 74b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UBool useSTD3ASCIIRules,UErrorCode expectedStatus, 75b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UBool doCompare, UBool testUnassigned, TestFunc func){ 76b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 77b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UErrorCode status = U_ZERO_ERROR; 78b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UChar destStack[MAX_DEST_SIZE]; 79b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru int32_t destLen = 0; 80b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UChar* dest = NULL; 81b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru int32_t expectedLen = (expected != NULL) ? u_strlen(expected) : 0; 82b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru int32_t options = (useSTD3ASCIIRules == TRUE) ? UIDNA_USE_STD3_RULES : UIDNA_DEFAULT; 83b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UParseError parseError; 84b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru int32_t tSrcLen = 0; 85b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UChar* tSrc = NULL; 86b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 87b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if(src != NULL){ 88b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru tSrcLen = u_strlen(src); 89b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru tSrc =(UChar*) malloc( U_SIZEOF_UCHAR * tSrcLen ); 90b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru memcpy(tSrc,src,tSrcLen * U_SIZEOF_UCHAR); 91b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 92b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 93b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru /* test null-terminated source and return value of number of UChars required */ 94b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 95b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru destLen = func(src,-1,NULL,0,options, &parseError , &status); 96b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if(status == U_BUFFER_OVERFLOW_ERROR){ 97b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru status = U_ZERO_ERROR; /* reset error code */ 98b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if(destLen+1 < MAX_DEST_SIZE){ 99b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru dest = destStack; 100b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru destLen = func(src,-1,dest,destLen+1,options, &parseError, &status); 101b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru /* TODO : compare output with expected */ 102b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if(U_SUCCESS(status) && expectedStatus != U_IDNA_STD3_ASCII_RULES_ERROR&& (doCompare==TRUE) && u_strCaseCompare(dest,destLen, expected,expectedLen,0,&status)!=0){ 103b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru log_err("Did not get the expected result for null terminated source.\n" ); 104b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 105b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru }else{ 106b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru log_err( "%s null terminated source failed. Requires destCapacity > 300\n",testName); 107b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 108b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 109b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 110b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if(status != expectedStatus){ 1116d5deb12725f146643d443090dfa11b206df528aJean-Baptiste Queru 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)); 112b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru free(tSrc); 113b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru return; 114b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 115b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if(testUnassigned ){ 116b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru status = U_ZERO_ERROR; 117b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru destLen = func(src,-1,NULL,0,options | UIDNA_ALLOW_UNASSIGNED, &parseError, &status); 118b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if(status == U_BUFFER_OVERFLOW_ERROR){ 119b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru status = U_ZERO_ERROR; /* reset error code */ 120b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if(destLen+1 < MAX_DEST_SIZE){ 121b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru dest = destStack; 122b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru destLen = func(src,-1,dest,destLen+1,options | UIDNA_ALLOW_UNASSIGNED, &parseError, &status); 123b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru /* TODO : compare output with expected */ 124b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if(U_SUCCESS(status) && (doCompare==TRUE) && u_strCaseCompare(dest,destLen, expected,expectedLen,0,&status)!=0){ 125b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru log_err("Did not get the expected result for %s null terminated source with both options set.\n",testName); 126b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 127b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 128b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru }else{ 129b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru log_err( "%s null terminated source failed. Requires destCapacity > 300\n",testName); 130b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 131b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 132b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru /*testing query string*/ 133b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if(status != expectedStatus && expectedStatus != U_IDNA_UNASSIGNED_ERROR){ 134b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 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)); 135b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 136b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 137b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 138b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru status = U_ZERO_ERROR; 139b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 140b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru /* test source with lengthand return value of number of UChars required*/ 141b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru destLen = func(tSrc, tSrcLen, NULL,0,options, &parseError, &status); 142b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if(status == U_BUFFER_OVERFLOW_ERROR){ 143b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru status = U_ZERO_ERROR; /* reset error code */ 144b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if(destLen+1 < MAX_DEST_SIZE){ 145b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru dest = destStack; 146b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru destLen = func(src,u_strlen(src),dest,destLen+1,options, &parseError, &status); 147b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru /* TODO : compare output with expected */ 148b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if(U_SUCCESS(status) && (doCompare==TRUE) && u_strCaseCompare(dest,destLen, expected,expectedLen,0,&status)!=0){ 149b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru log_err("Did not get the expected result for %s with source length.\n",testName); 150b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 151b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru }else{ 152b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru log_err( "%s with source length failed. Requires destCapacity > 300\n",testName); 153b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 154b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 155b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 156b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if(status != expectedStatus){ 157b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 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)); 158b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 159b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if(testUnassigned){ 160b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru status = U_ZERO_ERROR; 161b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 162b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru destLen = func(tSrc,tSrcLen,NULL,0,options | UIDNA_ALLOW_UNASSIGNED, &parseError, &status); 163b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 164b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if(status == U_BUFFER_OVERFLOW_ERROR){ 165b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru status = U_ZERO_ERROR; /* reset error code */ 166b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if(destLen+1 < MAX_DEST_SIZE){ 167b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru dest = destStack; 168b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru destLen = func(src,u_strlen(src),dest,destLen+1,options | UIDNA_ALLOW_UNASSIGNED, &parseError, &status); 169b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru /* TODO : compare output with expected */ 170b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if(U_SUCCESS(status) && (doCompare==TRUE) && u_strCaseCompare(dest,destLen, expected,expectedLen,0,&status)!=0){ 171b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru log_err("Did not get the expected result for %s with source length and both options set.\n",testName); 172b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 173b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru }else{ 174b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru log_err( "%s with source length failed. Requires destCapacity > 300\n",testName); 175b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 176b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 177b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru /*testing query string*/ 178b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if(status != expectedStatus && expectedStatus != U_IDNA_UNASSIGNED_ERROR){ 179b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 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)); 180b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 181b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 182b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 183b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru status = U_ZERO_ERROR; 184b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru destLen = func(src,-1,NULL,0,options | UIDNA_USE_STD3_RULES, &parseError, &status); 185b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if(status == U_BUFFER_OVERFLOW_ERROR){ 186b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru status = U_ZERO_ERROR; /* reset error code*/ 187b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if(destLen+1 < MAX_DEST_SIZE){ 188b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru dest = destStack; 189b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru destLen = func(src,-1,dest,destLen+1,options | UIDNA_USE_STD3_RULES, &parseError, &status); 190b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru /* TODO : compare output with expected*/ 191b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if(U_SUCCESS(status) && (doCompare==TRUE) && u_strCaseCompare(dest,destLen, expected,expectedLen,0,&status)!=0){ 192b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru log_err("Did not get the expected result for %s null terminated source with both options set.\n",testName); 193b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 194b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 195b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru }else{ 196b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru log_err( "%s null terminated source failed. Requires destCapacity > 300\n",testName); 197b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 198b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 199b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru /*testing query string*/ 200b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if(status != expectedStatus){ 201b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 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)); 202b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 203b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 204b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru status = U_ZERO_ERROR; 205b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 206b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru destLen = func(tSrc,tSrcLen,NULL,0,options | UIDNA_USE_STD3_RULES, &parseError, &status); 207b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 208b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if(status == U_BUFFER_OVERFLOW_ERROR){ 209b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru status = U_ZERO_ERROR; /* reset error code*/ 210b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if(destLen+1 < MAX_DEST_SIZE){ 211b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru dest = destStack; 212b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru destLen = func(src,u_strlen(src),dest,destLen+1,options | UIDNA_USE_STD3_RULES, &parseError, &status); 213b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru /* TODO : compare output with expected*/ 214b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if(U_SUCCESS(status) && (doCompare==TRUE) && u_strCaseCompare(dest,destLen, expected,expectedLen,0,&status)!=0){ 215b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru log_err("Did not get the expected result for %s with source length and both options set.\n",testName); 216b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 217b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru }else{ 218b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru log_err( "%s with source length failed. Requires destCapacity > 300\n",testName); 219b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 220b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 221b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru /*testing query string*/ 222b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if(status != expectedStatus && expectedStatus != U_IDNA_UNASSIGNED_ERROR){ 223b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 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)); 224b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 225b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru free(tSrc); 226b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru} 227b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 228b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Querustatic const UChar unicodeIn[][41] ={ 229b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru { 230b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 0x0644, 0x064A, 0x0647, 0x0645, 0x0627, 0x0628, 0x062A, 0x0643, 0x0644, 231b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 0x0645, 0x0648, 0x0634, 0x0639, 0x0631, 0x0628, 0x064A, 0x061F, 0x0000 232b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru }, 233b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru { 234b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 0x4ED6, 0x4EEC, 0x4E3A, 0x4EC0, 0x4E48, 0x4E0D, 0x8BF4, 0x4E2D, 0x6587, 235b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 0x0000 236b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru }, 237b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru { 238b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 0x0050, 0x0072, 0x006F, 0x010D, 0x0070, 0x0072, 0x006F, 0x0073, 0x0074, 239b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 0x011B, 0x006E, 0x0065, 0x006D, 0x006C, 0x0075, 0x0076, 0x00ED, 0x010D, 240b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 0x0065, 0x0073, 0x006B, 0x0079, 0x0000 241b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru }, 242b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru { 243b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 0x05DC, 0x05DE, 0x05D4, 0x05D4, 0x05DD, 0x05E4, 0x05E9, 0x05D5, 0x05D8, 244b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 0x05DC, 0x05D0, 0x05DE, 0x05D3, 0x05D1, 0x05E8, 0x05D9, 0x05DD, 0x05E2, 245b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 0x05D1, 0x05E8, 0x05D9, 0x05EA, 0x0000 246b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru }, 247b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru { 248b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 0x092F, 0x0939, 0x0932, 0x094B, 0x0917, 0x0939, 0x093F, 0x0928, 0x094D, 249b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 0x0926, 0x0940, 0x0915, 0x094D, 0x092F, 0x094B, 0x0902, 0x0928, 0x0939, 250b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 0x0940, 0x0902, 0x092C, 0x094B, 0x0932, 0x0938, 0x0915, 0x0924, 0x0947, 251b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 0x0939, 0x0948, 0x0902, 0x0000 252b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru }, 253b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru { 254b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 0x306A, 0x305C, 0x307F, 0x3093, 0x306A, 0x65E5, 0x672C, 0x8A9E, 0x3092, 255b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 0x8A71, 0x3057, 0x3066, 0x304F, 0x308C, 0x306A, 0x3044, 0x306E, 0x304B, 256b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 0x0000 257b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru }, 258b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru/* 259b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru { 260b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 0xC138, 0xACC4, 0xC758, 0xBAA8, 0xB4E0, 0xC0AC, 0xB78C, 0xB4E4, 0xC774, 261b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 0xD55C, 0xAD6D, 0xC5B4, 0xB97C, 0xC774, 0xD574, 0xD55C, 0xB2E4, 0xBA74, 262b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 0xC5BC, 0xB9C8, 0xB098, 0xC88B, 0xC744, 0xAE4C, 0x0000 263b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru }, 264b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru*/ 265b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru { 266b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 0x043F, 0x043E, 0x0447, 0x0435, 0x043C, 0x0443, 0x0436, 0x0435, 0x043E, 267b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 0x043D, 0x0438, 0x043D, 0x0435, 0x0433, 0x043E, 0x0432, 0x043E, 0x0440, 268b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 0x044F, 0x0442, 0x043F, 0x043E, 0x0440, 0x0443, 0x0441, 0x0441, 0x043A, 269b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 0x0438, 0x0000 270b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru }, 271b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru { 272b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 0x0050, 0x006F, 0x0072, 0x0071, 0x0075, 0x00E9, 0x006E, 0x006F, 0x0070, 273b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 0x0075, 0x0065, 0x0064, 0x0065, 0x006E, 0x0073, 0x0069, 0x006D, 0x0070, 274b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 0x006C, 0x0065, 0x006D, 0x0065, 0x006E, 0x0074, 0x0065, 0x0068, 0x0061, 275b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 0x0062, 0x006C, 0x0061, 0x0072, 0x0065, 0x006E, 0x0045, 0x0073, 0x0070, 276b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 0x0061, 0x00F1, 0x006F, 0x006C, 0x0000 277b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru }, 278b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru { 279b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 0x4ED6, 0x5011, 0x7232, 0x4EC0, 0x9EBD, 0x4E0D, 0x8AAA, 0x4E2D, 0x6587, 280b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 0x0000 281b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru }, 282b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru { 283b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 0x0054, 0x1EA1, 0x0069, 0x0073, 0x0061, 0x006F, 0x0068, 0x1ECD, 0x006B, 284b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 0x0068, 0x00F4, 0x006E, 0x0067, 0x0074, 0x0068, 0x1EC3, 0x0063, 0x0068, 285b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 0x1EC9, 0x006E, 0x00F3, 0x0069, 0x0074, 0x0069, 0x1EBF, 0x006E, 0x0067, 286b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 0x0056, 0x0069, 0x1EC7, 0x0074, 0x0000 287b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru }, 288b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru { 289b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 0x0033, 0x5E74, 0x0042, 0x7D44, 0x91D1, 0x516B, 0x5148, 0x751F, 0x0000 290b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru }, 291b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru { 292b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 0x5B89, 0x5BA4, 0x5948, 0x7F8E, 0x6075, 0x002D, 0x0077, 0x0069, 0x0074, 293b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 0x0068, 0x002D, 0x0053, 0x0055, 0x0050, 0x0045, 0x0052, 0x002D, 0x004D, 294b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 0x004F, 0x004E, 0x004B, 0x0045, 0x0059, 0x0053, 0x0000 295b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru }, 296b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru { 297b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 0x0048, 0x0065, 0x006C, 0x006C, 0x006F, 0x002D, 0x0041, 0x006E, 0x006F, 298b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 0x0074, 0x0068, 0x0065, 0x0072, 0x002D, 0x0057, 0x0061, 0x0079, 0x002D, 299b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 0x305D, 0x308C, 0x305E, 0x308C, 0x306E, 0x5834, 0x6240, 0x0000 300b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru }, 301b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru { 302b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 0x3072, 0x3068, 0x3064, 0x5C4B, 0x6839, 0x306E, 0x4E0B, 0x0032, 0x0000 303b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru }, 304b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru { 305b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 0x004D, 0x0061, 0x006A, 0x0069, 0x3067, 0x004B, 0x006F, 0x0069, 0x3059, 306b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 0x308B, 0x0035, 0x79D2, 0x524D, 0x0000 307b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru }, 308b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru { 309b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 0x30D1, 0x30D5, 0x30A3, 0x30FC, 0x0064, 0x0065, 0x30EB, 0x30F3, 0x30D0, 310b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 0x0000 311b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru }, 312b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru { 313b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 0x305D, 0x306E, 0x30B9, 0x30D4, 0x30FC, 0x30C9, 0x3067, 0x0000 314b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru }, 315b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru /* test non-BMP code points */ 316b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru { 317b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 0xD800, 0xDF00, 0xD800, 0xDF01, 0xD800, 0xDF02, 0xD800, 0xDF03, 0xD800, 0xDF05, 318b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 0xD800, 0xDF06, 0xD800, 0xDF07, 0xD800, 0xDF09, 0xD800, 0xDF0A, 0xD800, 0xDF0B, 319b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 0x0000 320b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru }, 321b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru { 322b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 0xD800, 0xDF0D, 0xD800, 0xDF0C, 0xD800, 0xDF1E, 0xD800, 0xDF0F, 0xD800, 0xDF16, 323b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 0xD800, 0xDF15, 0xD800, 0xDF14, 0xD800, 0xDF12, 0xD800, 0xDF10, 0xD800, 0xDF20, 324b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 0xD800, 0xDF21, 325b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 0x0000 326b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru }, 327b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru /* Greek */ 328b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru { 329b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 0x03b5, 0x03bb, 0x03bb, 0x03b7, 0x03bd, 0x03b9, 0x03ba, 0x03ac 330b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru }, 331b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru /* Maltese */ 332b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru { 333b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 0x0062, 0x006f, 0x006e, 0x0121, 0x0075, 0x0073, 0x0061, 0x0127, 334b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 0x0127, 0x0061 335b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru }, 336b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru /* Russian */ 337b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru { 338b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 0x043f, 0x043e, 0x0447, 0x0435, 0x043c, 0x0443, 0x0436, 0x0435, 339b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 0x043e, 0x043d, 0x0438, 0x043d, 0x0435, 0x0433, 0x043e, 0x0432, 340b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 0x043e, 0x0440, 0x044f, 0x0442, 0x043f, 0x043e, 0x0440, 0x0443, 341b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 0x0441, 0x0441, 0x043a, 0x0438 342b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru }, 343b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru { 344b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 0x0054,0x0045,0x0053,0x0054 345b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 346b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru}; 347b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 348b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Querustatic const char * const asciiIn[] = { 349b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru "xn--egbpdaj6bu4bxfgehfvwxn", 350b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru "xn--ihqwcrb4cv8a8dqg056pqjye", 351b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru "xn--Proprostnemluvesky-uyb24dma41a", 352b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru "xn--4dbcagdahymbxekheh6e0a7fei0b", 353b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru "xn--i1baa7eci9glrd9b2ae1bj0hfcgg6iyaf8o0a1dig0cd", 354b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru "xn--n8jok5ay5dzabd5bym9f0cm5685rrjetr6pdxa", 355b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru/* "xn--989aomsvi5e83db1d2a355cv1e0vak1dwrv93d5xbh15a0dt30a5jpsd879ccm6fea98c",*/ 356b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru "xn--b1abfaaepdrnnbgefbaDotcwatmq2g4l", 357b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru "xn--PorqunopuedensimplementehablarenEspaol-fmd56a", 358b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru "xn--ihqwctvzc91f659drss3x8bo0yb", 359b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru "xn--TisaohkhngthchnitingVit-kjcr8268qyxafd2f1b9g", 360b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru "xn--3B-ww4c5e180e575a65lsy2b", 361b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru "xn---with-SUPER-MONKEYS-pc58ag80a8qai00g7n9n", 362b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru "xn--Hello-Another-Way--fc4qua05auwb3674vfr0b", 363b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru "xn--2-u9tlzr9756bt3uc0v", 364b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru "xn--MajiKoi5-783gue6qz075azm5e", 365b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru "xn--de-jg4avhby1noc0d", 366b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru "xn--d9juau41awczczp", 367b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru "XN--097CCDEKGHQJK", 368b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru "XN--db8CBHEJLGH4E0AL", 369b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru "xn--hxargifdar", /* Greek */ 370b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru "xn--bonusaa-5bb1da", /* Maltese */ 371b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru "xn--b1abfaaepdrnnbgefbadotcwatmq2g4l", /* Russian (Cyrillic)*/ 372b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru "TEST" 373b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 374b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru}; 375b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 376b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Querustatic const char * const domainNames[] = { 377b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru "slip129-37-118-146.nc.us.ibm.net", 378b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru "saratoga.pe.utexas.edu", 379b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru "dial-120-45.ots.utexas.edu", 380b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru "woo-085.dorms.waller.net", 381b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru "hd30-049.hil.compuserve.com", 382b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru "pem203-31.pe.ttu.edu", 383b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru "56K-227.MaxTNT3.pdq.net", 384b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru "dial-36-2.ots.utexas.edu", 385b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru "slip129-37-23-152.ga.us.ibm.net", 386b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru "ts45ip119.cadvision.com", 387b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru "sdn-ts-004txaustP05.dialsprint.net", 388b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru "bar-tnt1s66.erols.com", 389b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru "101.st-louis-15.mo.dial-access.att.net", 390b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru "h92-245.Arco.COM", 391b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru "dial-13-2.ots.utexas.edu", 392b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru "net-redynet29.datamarkets.com.ar", 393b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru "ccs-shiva28.reacciun.net.ve", 394b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru "7.houston-11.tx.dial-access.att.net", 395b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru "ingw129-37-120-26.mo.us.ibm.net", 396b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru "dialup6.austintx.com", 397b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru "dns2.tpao.gov.tr", 398b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru "slip129-37-119-194.nc.us.ibm.net", 399b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru "cs7.dillons.co.uk.203.119.193.in-addr.arpa", 400b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru "swprd1.innovplace.saskatoon.sk.ca", 401b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru "bikini.bologna.maraut.it", 402b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru "node91.subnet159-198-79.baxter.com", 403b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru "cust19.max5.new-york.ny.ms.uu.net", 404b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru "balexander.slip.andrew.cmu.edu", 405b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru "pool029.max2.denver.co.dynip.alter.net", 406b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru "cust49.max9.new-york.ny.ms.uu.net", 407b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru "s61.abq-dialin2.hollyberry.com", 408b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru "\\u0917\\u0928\\u0947\\u0936.sanjose.ibm.com", /*':'(0x003a) produces U_IDNA_STD3_ASCII_RULES_ERROR*/ 409b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru "www.xn--vea.com", 410b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru /* "www.\\u00E0\\u00B3\\u00AF.com",//' ' (0x0020) produces U_IDNA_STD3_ASCII_RULES_ERROR*/ 411b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru "www.\\u00C2\\u00A4.com", 412b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru "www.\\u00C2\\u00A3.com", 413b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru /* "\\u0025", //'%' (0x0025) produces U_IDNA_STD3_ASCII_RULES_ERROR*/ 414b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru /* "\\u005C\\u005C", //'\' (0x005C) produces U_IDNA_STD3_ASCII_RULES_ERROR*/ 415b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru /*"@",*/ 416b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru /*"\\u002F",*/ 417b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru /*"www.\\u0021.com",*/ 418b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru /*"www.\\u0024.com",*/ 419b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru /*"\\u003f",*/ 420b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru /* These yeild U_IDNA_PROHIBITED_ERROR*/ 421b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru /*"\\u00CF\\u0082.com",*/ 422b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru /*"\\u00CE\\u00B2\\u00C3\\u009Fss.com",*/ 423b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru /*"\\u00E2\\u0098\\u00BA.com",*/ 424b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru "\\u00C3\\u00BC.com" 425b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 426b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru}; 427b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 428b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Querustatic void 429b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste QueruTestToASCII(){ 430b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 431b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru int32_t i; 432b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UChar buf[MAX_DEST_SIZE]; 433b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru const char* testName = "uidna_toASCII"; 434b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru TestFunc func = uidna_toASCII; 435b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru for(i=0;i< (int32_t)(sizeof(unicodeIn)/sizeof(unicodeIn[0])); i++){ 436b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru u_charsToUChars(asciiIn[i],buf, (int32_t)strlen(asciiIn[i])+1); 437b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru testAPI(unicodeIn[i], buf,testName, FALSE,U_ZERO_ERROR, TRUE, TRUE, func); 438b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 439b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 440b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru} 441b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 442b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Querustatic void 443b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste QueruTestToUnicode(){ 444b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 445b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru int32_t i; 446b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UChar buf[MAX_DEST_SIZE]; 447b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru const char* testName = "uidna_toUnicode"; 448b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru TestFunc func = uidna_toUnicode; 449b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru for(i=0;i< (int32_t)(sizeof(asciiIn)/sizeof(asciiIn[0])); i++){ 450b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru u_charsToUChars(asciiIn[i],buf, (int32_t)strlen(asciiIn[i])+1); 451b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru testAPI(buf,unicodeIn[i],testName,FALSE,U_ZERO_ERROR, TRUE, TRUE, func); 452b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 453b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru} 454b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 455b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 456b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Querustatic void 457b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste QueruTestIDNToUnicode(){ 458b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru int32_t i; 459b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UChar buf[MAX_DEST_SIZE]; 460b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UChar expected[MAX_DEST_SIZE]; 461b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UErrorCode status = U_ZERO_ERROR; 462b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru int32_t bufLen = 0; 463b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UParseError parseError; 464b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru const char* testName="uidna_IDNToUnicode"; 465b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru TestFunc func = uidna_IDNToUnicode; 466b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru for(i=0;i< (int32_t)(sizeof(domainNames)/sizeof(domainNames[0])); i++){ 467b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru bufLen = (int32_t)strlen(domainNames[i]); 468b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru bufLen = u_unescape(domainNames[i],buf, bufLen+1); 469b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru func(buf,bufLen,expected,MAX_DEST_SIZE, UIDNA_ALLOW_UNASSIGNED, &parseError,&status); 470b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if(U_FAILURE(status)){ 4716d5deb12725f146643d443090dfa11b206df528aJean-Baptiste Queru log_err_status(status, "%s failed to convert domainNames[%i].Error: %s \n",testName, i, u_errorName(status)); 472b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru break; 473b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 474b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru testAPI(buf,expected,testName,FALSE,U_ZERO_ERROR, TRUE, TRUE, func); 475b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru /*test toUnicode with all labels in the string*/ 476b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru testAPI(buf,expected,testName, FALSE,U_ZERO_ERROR, TRUE, TRUE, func); 477b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if(U_FAILURE(status)){ 478b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru log_err( "%s failed to convert domainNames[%i].Error: %s \n",testName,i, u_errorName(status)); 479b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru break; 480b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 481b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 482b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 483b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru} 484b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 485b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Querustatic void 486b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste QueruTestIDNToASCII(){ 487b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru int32_t i; 488b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UChar buf[MAX_DEST_SIZE]; 489b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UChar expected[MAX_DEST_SIZE]; 490b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UErrorCode status = U_ZERO_ERROR; 491b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru int32_t bufLen = 0; 492b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UParseError parseError; 493b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru const char* testName="udina_IDNToASCII"; 494b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru TestFunc func=uidna_IDNToASCII; 495b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 496b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru for(i=0;i< (int32_t)(sizeof(domainNames)/sizeof(domainNames[0])); i++){ 497b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru bufLen = (int32_t)strlen(domainNames[i]); 498b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru bufLen = u_unescape(domainNames[i],buf, bufLen+1); 499b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru func(buf,bufLen,expected,MAX_DEST_SIZE, UIDNA_ALLOW_UNASSIGNED, &parseError,&status); 500b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if(U_FAILURE(status)){ 5016d5deb12725f146643d443090dfa11b206df528aJean-Baptiste Queru log_err_status(status, "%s failed to convert domainNames[%i].Error: %s \n",testName,i, u_errorName(status)); 502b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru break; 503b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 504b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru testAPI(buf,expected,testName, FALSE,U_ZERO_ERROR, TRUE, TRUE, func); 505b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru /*test toASCII with all labels in the string*/ 506b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru testAPI(buf,expected,testName, FALSE,U_ZERO_ERROR, FALSE, TRUE, func); 507b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if(U_FAILURE(status)){ 508b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru log_err( "%s failed to convert domainNames[%i].Error: %s \n",testName,i, u_errorName(status)); 509b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru break; 510b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 511b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 512b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 513b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 514b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru} 515b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 516b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 517b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Querustatic void 518b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste QuerutestCompareWithSrc(const UChar* s1, int32_t s1Len, 519b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru const UChar* s2, int32_t s2Len, 520b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru const char* testName, CompareFunc func, 521b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UBool isEqual){ 522b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 523b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UErrorCode status = U_ZERO_ERROR; 524b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru int32_t retVal = func(s1,-1,s2,-1,UIDNA_DEFAULT,&status); 525b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 526b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if(isEqual==TRUE && retVal !=0){ 527b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru log_err("Did not get the expected result for %s with null termniated strings.\n",testName); 528b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 529b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if(U_FAILURE(status)){ 5306d5deb12725f146643d443090dfa11b206df528aJean-Baptiste Queru log_err_status(status, "%s null terminated source failed. Error: %s\n", testName,u_errorName(status)); 531b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 532b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 533b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru status = U_ZERO_ERROR; 534b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru retVal = func(s1,-1,s2,-1,UIDNA_ALLOW_UNASSIGNED,&status); 535b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 536b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if(isEqual==TRUE && retVal !=0){ 537b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru log_err("Did not get the expected result for %s with null termniated strings with options set.\n", testName); 538b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 539b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if(U_FAILURE(status)){ 5406d5deb12725f146643d443090dfa11b206df528aJean-Baptiste Queru log_err_status(status, "%s null terminated source and options set failed. Error: %s\n",testName, u_errorName(status)); 541b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 542b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 543b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru status = U_ZERO_ERROR; 544b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru retVal = func(s1,s1Len,s2,s2Len,UIDNA_DEFAULT,&status); 545b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 546b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if(isEqual==TRUE && retVal !=0){ 547b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru log_err("Did not get the expected result for %s with string length.\n",testName); 548b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 549b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if(U_FAILURE(status)){ 5506d5deb12725f146643d443090dfa11b206df528aJean-Baptiste Queru log_err_status(status, "%s with string length. Error: %s\n",testName, u_errorName(status)); 551b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 552b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 553b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru status = U_ZERO_ERROR; 554b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru retVal = func(s1,s1Len,s2,s2Len,UIDNA_ALLOW_UNASSIGNED,&status); 555b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 556b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if(isEqual==TRUE && retVal !=0){ 557b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru log_err("Did not get the expected result for %s with string length and options set.\n",testName); 558b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 559b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if(U_FAILURE(status)){ 5606d5deb12725f146643d443090dfa11b206df528aJean-Baptiste Queru log_err_status(status, "%s with string length and options set. Error: %s\n", u_errorName(status), testName); 561b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 562b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru} 563b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 564b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 565b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Querustatic void 566b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste QueruTestCompare(){ 567b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru int32_t i; 568b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 569b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru const char* testName ="uidna_compare"; 570b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru CompareFunc func = uidna_compare; 571b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 572b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UChar www[] = {0x0057, 0x0057, 0x0057, 0x002E, 0x0000}; 573b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UChar com[] = {0x002E, 0x0043, 0x004F, 0x004D, 0x0000}; 574b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UChar buf[MAX_DEST_SIZE]={0x0057, 0x0057, 0x0057, 0x002E, 0x0000}; 575b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UChar source[MAX_DEST_SIZE]={0}, 576b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru uni0[MAX_DEST_SIZE]={0}, 577b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru uni1[MAX_DEST_SIZE]={0}, 578b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru ascii0[MAX_DEST_SIZE]={0}, 579b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru ascii1[MAX_DEST_SIZE]={0}, 580b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru temp[MAX_DEST_SIZE] ={0}; 581b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 582b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 583b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru u_strcat(uni0,unicodeIn[0]); 584b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru u_strcat(uni0,com); 585b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 586b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru u_strcat(uni1,unicodeIn[1]); 587b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru u_strcat(uni1,com); 588b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 589b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru u_charsToUChars(asciiIn[0], temp, (int32_t)strlen(asciiIn[0])); 590b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru u_strcat(ascii0,temp); 591b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru u_strcat(ascii0,com); 592b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 593b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru memset(temp, 0, U_SIZEOF_UCHAR * MAX_DEST_SIZE); 594b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 595b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru u_charsToUChars(asciiIn[1], temp, (int32_t)strlen(asciiIn[1])); 596b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru u_strcat(ascii1,temp); 597b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru u_strcat(ascii1,com); 598b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 599b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru /* prepend www. */ 600b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru u_strcat(source, www); 601b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 602b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru for(i=0;i< (int32_t)(sizeof(unicodeIn)/sizeof(unicodeIn[0])); i++){ 603b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UChar* src; 604b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru int32_t srcLen; 605b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 606b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru memset(buf+4, 0, (MAX_DEST_SIZE-4) * U_SIZEOF_UCHAR); 607b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 608b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru u_charsToUChars(asciiIn[i],buf+4, (int32_t)strlen(asciiIn[i])); 609b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru u_strcat(buf,com); 610b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 611b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 612b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru /* for every entry in unicodeIn array 613b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru prepend www. and append .com*/ 614b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru source[4]=0; 615b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru u_strncat(source,unicodeIn[i], u_strlen(unicodeIn[i])); 616b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru u_strcat(source,com); 617b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 618b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru /* a) compare it with itself*/ 619b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru src = source; 620b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru srcLen = u_strlen(src); 621b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 622b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru testCompareWithSrc(src,srcLen,src,srcLen,testName, func, TRUE); 623b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 624b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru /* b) compare it with asciiIn equivalent */ 625b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru testCompareWithSrc(src,srcLen,buf,u_strlen(buf),testName, func,TRUE); 626b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 627b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru /* c) compare it with unicodeIn not equivalent*/ 628b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if(i==0){ 629b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru testCompareWithSrc(src,srcLen,uni1,u_strlen(uni1),testName, func,FALSE); 630b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru }else{ 631b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru testCompareWithSrc(src,srcLen,uni0,u_strlen(uni0),testName, func,FALSE); 632b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 633b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru /* d) compare it with asciiIn not equivalent */ 634b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if(i==0){ 635b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru testCompareWithSrc(src,srcLen,ascii1,u_strlen(ascii1),testName, func,FALSE); 636b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru }else{ 637b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru testCompareWithSrc(src,srcLen,ascii0,u_strlen(ascii0),testName, func,FALSE); 638b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 639b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 640b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 641b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru} 642b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 643b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Querustatic void TestJB4490(){ 644b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru static const UChar data[][50]= { 645b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru {0x00F5,0x00dE,0x00dF,0x00dD, 0x0000}, 646b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru {0xFB00,0xFB01} 647b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru }; 648b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UChar output1[40] = {0}; 649b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UChar output2[40] = {0}; 650b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru int32_t i; 651b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru for(i=0; i< sizeof(data)/sizeof(data[0]); i++){ 652b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru const UChar* src1 = data[i]; 653b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru int32_t src1Len = u_strlen(src1); 654b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UChar* dest1 = output1; 655b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru int32_t dest1Len = 40; 656b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UErrorCode status = U_ZERO_ERROR; 657b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UParseError ps; 658b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UChar* src2 = NULL; 659b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru int32_t src2Len = 0; 660b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UChar* dest2 = output2; 661b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru int32_t dest2Len = 40; 662b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru dest1Len = uidna_toASCII(src1, src1Len, dest1, dest1Len,UIDNA_DEFAULT, &ps, &status); 663b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if(U_FAILURE(status)){ 6646d5deb12725f146643d443090dfa11b206df528aJean-Baptiste Queru log_err_status(status, "uidna_toUnicode failed with error %s.\n", u_errorName(status)); 665b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 666b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru src2 = dest1; 667b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru src2Len = dest1Len; 668b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru dest2Len = uidna_toUnicode(src2, src2Len, dest2, dest2Len, UIDNA_DEFAULT, &ps, &status); 669b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if(U_FAILURE(status)){ 6706d5deb12725f146643d443090dfa11b206df528aJean-Baptiste Queru log_err_status(status, "uidna_toUnicode failed with error %s.\n", u_errorName(status)); 671b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 672b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 673b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru} 674b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 675b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Querustatic void TestJB4475(){ 676b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 677b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru static const UChar input[][10] = { 678b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru {0x0054,0x0045,0x0053,0x0054,0x0000},/* TEST */ 679b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru {0x0074,0x0065,0x0073,0x0074,0x0000} /* test */ 680b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru }; 681b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru int i; 682b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UChar output[40] = {0}; 683b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru for(i=0; i< sizeof(input)/sizeof(input[0]); i++){ 684b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru const UChar* src = input[i]; 685b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru int32_t srcLen = u_strlen(src); 686b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UChar* dest = output; 687b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru int32_t destLen = 40; 688b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UErrorCode status = U_ZERO_ERROR; 689b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UParseError ps; 690b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 691b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru destLen = uidna_toASCII(src, srcLen, dest, destLen,UIDNA_DEFAULT, &ps, &status); 692b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if(U_FAILURE(status)){ 6936d5deb12725f146643d443090dfa11b206df528aJean-Baptiste Queru log_err_status(status, "uidna_toASCII failed with error %s.\n", u_errorName(status)); 6946d5deb12725f146643d443090dfa11b206df528aJean-Baptiste Queru continue; 695b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 696b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if(u_strncmp(input[i], dest, srcLen)!=0){ 697b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru log_err("uidna_toASCII did not return the expected output.\n"); 698b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 699b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 700b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru} 701b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 702b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Querustatic void TestLength(){ 703b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru { 704b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru static const char* cl = "my_very_very_very_very_very_very_very_very_very_very_very_very_very_long_and_incredibly_uncreative_domain_label"; 705b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UChar ul[128] = {'\0'}; 706b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UChar dest[256] = {'\0'}; 707b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru /* this unicode string is longer than MAX_LABEL_BUFFER_SIZE and produces an 708b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru IDNA prepared string (including xn--)that is exactly 63 bytes long */ 709b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UChar ul1[] = { 0xC138, 0xACC4, 0xC758, 0xBAA8, 0xB4E0, 0xC0AC, 0xB78C, 0xB4E4, 0xC774, 710b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 0xD55C, 0xAD6D, 0xC5B4, 0xB97C, 0xC774, 0x00AD, 0x034F, 0x1806, 0x180B, 711b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 0x180C, 0x180D, 0x200B, 0x200C, 0x200D, 0x2060, 0xFE00, 0xFE01, 0xFE02, 712b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 0xFE03, 0xFE04, 0xFE05, 0xFE06, 0xFE07, 0xFE08, 0xFE09, 0xFE0A, 0xFE0B, 713b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 0xFE0C, 0xFE0D, 0xFE0E, 0xFE0F, 0xFEFF, 0xD574, 0xD55C, 0xB2E4, 0xBA74, 714b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 0xC138, 0x0041, 0x00AD, 0x034F, 0x1806, 0x180B, 0x180C, 0x180D, 0x200B, 715b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 0x200C, 0x200D, 0x2060, 0xFE00, 0xFE01, 0xFE02, 0xFE03, 0xFE04, 0xFE05, 716b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 0xFE06, 0xFE07, 0xFE08, 0xFE09, 0xFE0A, 0xFE0B, 0xFE0C, 0xFE0D, 0xFE0E, 717b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 0xFE0F, 0xFEFF, 0x00AD, 0x034F, 0x1806, 0x180B, 0x180C, 0x180D, 0x200B, 718b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 0x200C, 0x200D, 0x2060, 0xFE00, 0xFE01, 0xFE02, 0xFE03, 0xFE04, 0xFE05, 719b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 0xFE06, 0xFE07, 0xFE08, 0xFE09, 0xFE0A, 0xFE0B, 0xFE0C, 0xFE0D, 0xFE0E, 720b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 0xFE0F, 0xFEFF, 0x00AD, 0x034F, 0x1806, 0x180B, 0x180C, 0x180D, 0x200B, 721b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 0x200C, 0x200D, 0x2060, 0xFE00, 0xFE01, 0xFE02, 0xFE03, 0xFE04, 0xFE05, 722b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 0xFE06, 0xFE07, 0xFE08, 0xFE09, 0xFE0A, 0xFE0B, 0xFE0C, 0xFE0D, 0xFE0E, 723b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 0xFE0F, 0xFEFF, 0x0000 724b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru }; 725b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 726b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru int32_t len1 = LENGTHOF(ul1)-1/*remove the null termination*/; 727b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru int32_t destLen = LENGTHOF(dest); 728b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UErrorCode status = U_ZERO_ERROR; 729b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UParseError ps; 730b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru int32_t len = (int32_t)strlen(cl); 731b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru u_charsToUChars(cl, ul, len+1); 732b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru destLen = uidna_toUnicode(ul, len, dest, destLen, UIDNA_DEFAULT, &ps, &status); 733b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if(status != U_ZERO_ERROR){ 7346d5deb12725f146643d443090dfa11b206df528aJean-Baptiste Queru log_err_status(status, "uidna_toUnicode failed with error %s.\n", u_errorName(status)); 735b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 736b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 737b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru status = U_ZERO_ERROR; 738b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru destLen = LENGTHOF(dest); 739b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru len = -1; 740b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru destLen = uidna_toUnicode(ul, len, dest, destLen, UIDNA_DEFAULT, &ps, &status); 741b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if(status != U_ZERO_ERROR){ 7426d5deb12725f146643d443090dfa11b206df528aJean-Baptiste Queru log_err_status(status, "uidna_toUnicode failed with error %s.\n", u_errorName(status)); 743b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 744b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru status = U_ZERO_ERROR; 745b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru destLen = LENGTHOF(dest); 746b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru len = (int32_t)strlen(cl); 747b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru destLen = uidna_toASCII(ul, len, dest, destLen, UIDNA_DEFAULT, &ps, &status); 748b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if(status != U_IDNA_LABEL_TOO_LONG_ERROR){ 7496d5deb12725f146643d443090dfa11b206df528aJean-Baptiste Queru log_err_status(status, "uidna_toASCII failed with error %s.\n", u_errorName(status)); 750b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 751b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 752b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru status = U_ZERO_ERROR; 753b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru destLen = LENGTHOF(dest); 754b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru len = -1; 755b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru destLen = uidna_toASCII(ul, len, dest, destLen, UIDNA_DEFAULT, &ps, &status); 756b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if(status != U_IDNA_LABEL_TOO_LONG_ERROR){ 7576d5deb12725f146643d443090dfa11b206df528aJean-Baptiste Queru log_err_status(status, "uidna_toASCII failed with error %s.\n", u_errorName(status)); 758b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 759b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 760b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru status = U_ZERO_ERROR; 761b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru destLen = LENGTHOF(dest); 762b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru destLen = uidna_toASCII(ul1, len1, dest, destLen, UIDNA_DEFAULT, &ps, &status); 763b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if(status != U_ZERO_ERROR){ 7646d5deb12725f146643d443090dfa11b206df528aJean-Baptiste Queru log_err_status(status, "uidna_toASCII failed with error %s.\n", u_errorName(status)); 765b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 766b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 767b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru status = U_ZERO_ERROR; 768b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru destLen = LENGTHOF(dest); 769b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru len1 = -1; 770b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru destLen = uidna_toASCII(ul1, len1, dest, destLen, UIDNA_DEFAULT, &ps, &status); 771b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if(status != U_ZERO_ERROR){ 7726d5deb12725f146643d443090dfa11b206df528aJean-Baptiste Queru log_err_status(status, "uidna_toASCII failed with error %s.\n", u_errorName(status)); 773b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 774b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 775b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru { 776b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 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"; 777b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UChar ul[400] = {'\0'}; 778b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UChar dest[400] = {'\0'}; 779b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru int32_t destLen = LENGTHOF(dest); 780b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UErrorCode status = U_ZERO_ERROR; 781b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UParseError ps; 782b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru int32_t len = (int32_t)strlen(cl); 783b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru u_charsToUChars(cl, ul, len+1); 784b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 785b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru destLen = uidna_IDNToUnicode(ul, len, dest, destLen, UIDNA_DEFAULT, &ps, &status); 786b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if(status != U_IDNA_DOMAIN_NAME_TOO_LONG_ERROR){ 7876d5deb12725f146643d443090dfa11b206df528aJean-Baptiste Queru log_err_status(status, "uidna_IDNToUnicode failed with error %s.\n", u_errorName(status)); 788b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 789b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 790b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru status = U_ZERO_ERROR; 791b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru destLen = LENGTHOF(dest); 792b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru len = -1; 793b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru destLen = uidna_IDNToUnicode(ul, len, dest, destLen, UIDNA_DEFAULT, &ps, &status); 794b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if(status != U_IDNA_DOMAIN_NAME_TOO_LONG_ERROR){ 7956d5deb12725f146643d443090dfa11b206df528aJean-Baptiste Queru log_err_status(status, "uidna_IDNToUnicode failed with error %s.\n", u_errorName(status)); 796b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 797b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 798b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru status = U_ZERO_ERROR; 799b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru destLen = LENGTHOF(dest); 800b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru len = (int32_t)strlen(cl); 801b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru destLen = uidna_IDNToASCII(ul, len, dest, destLen, UIDNA_DEFAULT, &ps, &status); 802b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if(status != U_IDNA_DOMAIN_NAME_TOO_LONG_ERROR){ 8036d5deb12725f146643d443090dfa11b206df528aJean-Baptiste Queru log_err_status(status, "uidna_IDNToASCII failed with error %s.\n", u_errorName(status)); 804b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 805b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 806b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru status = U_ZERO_ERROR; 807b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru destLen = LENGTHOF(dest); 808b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru len = -1; 809b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru destLen = uidna_IDNToASCII(ul, len, dest, destLen, UIDNA_DEFAULT, &ps, &status); 810b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if(status != U_IDNA_DOMAIN_NAME_TOO_LONG_ERROR){ 8116d5deb12725f146643d443090dfa11b206df528aJean-Baptiste Queru log_err_status(status, "uidna_IDNToASCII failed with error %s.\n", u_errorName(status)); 812b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 813b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 814b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru status = U_ZERO_ERROR; 815b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru uidna_compare(ul, len, ul, len, UIDNA_DEFAULT, &status); 816b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if(status != U_IDNA_DOMAIN_NAME_TOO_LONG_ERROR){ 8176d5deb12725f146643d443090dfa11b206df528aJean-Baptiste Queru log_err_status(status, "uidna_compare failed with error %s.\n", u_errorName(status)); 818b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 819b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru uidna_compare(ul, -1, ul, -1, UIDNA_DEFAULT, &status); 820b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if(status != U_IDNA_DOMAIN_NAME_TOO_LONG_ERROR){ 8216d5deb12725f146643d443090dfa11b206df528aJean-Baptiste Queru log_err_status(status, "uidna_compare failed with error %s.\n", u_errorName(status)); 822b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 823b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 824b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru} 825b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Querustatic void TestJB5273(){ 826b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru static const char INVALID_DOMAIN_NAME[] = "xn--m\\u00FCller.de"; 827b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UChar invalid_idn[25] = {'\0'}; 828b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru int32_t len = u_unescape(INVALID_DOMAIN_NAME, invalid_idn, strlen(INVALID_DOMAIN_NAME)); 829b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UChar output[50] = {'\0'}; 830b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UErrorCode status = U_ZERO_ERROR; 831b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UParseError prsError; 832b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru int32_t outLen = uidna_toUnicode(invalid_idn, len, output, 50, UIDNA_DEFAULT, &prsError, &status); 833b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if(U_FAILURE(status)){ 8346d5deb12725f146643d443090dfa11b206df528aJean-Baptiste Queru log_err_status(status, "uidna_toUnicode failed with error: %s\n", u_errorName(status)); 835b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 836b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru status = U_ZERO_ERROR; 837b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru outLen = uidna_toUnicode(invalid_idn, len, output, 50, UIDNA_USE_STD3_RULES, &prsError, &status); 838b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if(U_FAILURE(status)){ 8396d5deb12725f146643d443090dfa11b206df528aJean-Baptiste Queru log_err_status(status, "uidna_toUnicode failed with error: %s\n", u_errorName(status)); 840b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 841b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 842b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru status = U_ZERO_ERROR; 843b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru outLen = uidna_IDNToUnicode(invalid_idn, len, output, 50, UIDNA_DEFAULT, &prsError, &status); 844b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if(U_FAILURE(status)){ 8456d5deb12725f146643d443090dfa11b206df528aJean-Baptiste Queru log_err_status(status, "uidna_toUnicode failed with error: %s\n", u_errorName(status)); 846b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 847b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru status = U_ZERO_ERROR; 848b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru outLen = uidna_IDNToUnicode(invalid_idn, len, output, 50, UIDNA_USE_STD3_RULES, &prsError, &status); 849b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if(U_FAILURE(status)){ 8506d5deb12725f146643d443090dfa11b206df528aJean-Baptiste Queru log_err_status(status, "uidna_toUnicode failed with error: %s\n", u_errorName(status)); 851b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 852b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru} 85327f654740f2a26ad62a5c155af9199af9e69b889claireho 85427f654740f2a26ad62a5c155af9199af9e69b889claireho/* 85527f654740f2a26ad62a5c155af9199af9e69b889claireho * Test the new (ICU 4.6/2010) C API that was added for UTS #46. 85627f654740f2a26ad62a5c155af9199af9e69b889claireho * Just an API test: Functionality is tested via C++ intltest. 85727f654740f2a26ad62a5c155af9199af9e69b889claireho */ 85827f654740f2a26ad62a5c155af9199af9e69b889clairehostatic void TestUTS46() { 85927f654740f2a26ad62a5c155af9199af9e69b889claireho static const UChar fA_sharps16[] = { 0x66, 0x41, 0xdf, 0 }; 86027f654740f2a26ad62a5c155af9199af9e69b889claireho static const char fA_sharps8[] = { 0x66, 0x41, (char)0xc3, (char)0x9f, 0 }; 86127f654740f2a26ad62a5c155af9199af9e69b889claireho static const UChar fa_sharps16[] = { 0x66, 0x61, 0xdf, 0 }; 86227f654740f2a26ad62a5c155af9199af9e69b889claireho static const char fa_sharps8[] = { 0x66, 0x61, (char)0xc3, (char)0x9f, 0 }; 86327f654740f2a26ad62a5c155af9199af9e69b889claireho static const UChar fass16[] = { 0x66, 0x61, 0x73, 0x73, 0 }; 86427f654740f2a26ad62a5c155af9199af9e69b889claireho static const char fass8[] = { 0x66, 0x61, 0x73, 0x73, 0 }; 86527f654740f2a26ad62a5c155af9199af9e69b889claireho static const UChar fA_BEL[] = { 0x66, 0x41, 7, 0 }; 86627f654740f2a26ad62a5c155af9199af9e69b889claireho static const UChar fa_FFFD[] = { 0x66, 0x61, 0xfffd, 0 }; 86727f654740f2a26ad62a5c155af9199af9e69b889claireho 86827f654740f2a26ad62a5c155af9199af9e69b889claireho UChar dest16[10]; 86927f654740f2a26ad62a5c155af9199af9e69b889claireho char dest8[10]; 87027f654740f2a26ad62a5c155af9199af9e69b889claireho int32_t length; 87127f654740f2a26ad62a5c155af9199af9e69b889claireho 87227f654740f2a26ad62a5c155af9199af9e69b889claireho UIDNAInfo info = UIDNA_INFO_INITIALIZER; 87327f654740f2a26ad62a5c155af9199af9e69b889claireho UErrorCode errorCode = U_ZERO_ERROR; 87427f654740f2a26ad62a5c155af9199af9e69b889claireho UIDNA *uts46 = uidna_openUTS46(UIDNA_USE_STD3_RULES|UIDNA_NONTRANSITIONAL_TO_UNICODE, 87527f654740f2a26ad62a5c155af9199af9e69b889claireho &errorCode); 87627f654740f2a26ad62a5c155af9199af9e69b889claireho if(U_FAILURE(errorCode)) { 87727f654740f2a26ad62a5c155af9199af9e69b889claireho log_err_status(errorCode, "uidna_openUTS46() failed: %s\n", u_errorName(errorCode)); 87827f654740f2a26ad62a5c155af9199af9e69b889claireho return; 87927f654740f2a26ad62a5c155af9199af9e69b889claireho } 88027f654740f2a26ad62a5c155af9199af9e69b889claireho 88127f654740f2a26ad62a5c155af9199af9e69b889claireho /* These calls should succeed. */ 88227f654740f2a26ad62a5c155af9199af9e69b889claireho length = uidna_labelToASCII(uts46, fA_sharps16, -1, 88327f654740f2a26ad62a5c155af9199af9e69b889claireho dest16, LENGTHOF(dest16), &info, &errorCode); 88427f654740f2a26ad62a5c155af9199af9e69b889claireho if( U_FAILURE(errorCode) || length != 4 || 0 != u_memcmp(dest16, fass16, 5) || 88527f654740f2a26ad62a5c155af9199af9e69b889claireho !info.isTransitionalDifferent || info.errors != 0 88627f654740f2a26ad62a5c155af9199af9e69b889claireho ) { 88727f654740f2a26ad62a5c155af9199af9e69b889claireho log_err("uidna_labelToASCII() failed: %s\n", u_errorName(errorCode)); 88827f654740f2a26ad62a5c155af9199af9e69b889claireho } 88927f654740f2a26ad62a5c155af9199af9e69b889claireho errorCode = U_ZERO_ERROR; 89027f654740f2a26ad62a5c155af9199af9e69b889claireho length = uidna_labelToUnicode(uts46, fA_sharps16, u_strlen(fA_sharps16), 89127f654740f2a26ad62a5c155af9199af9e69b889claireho dest16, LENGTHOF(dest16), &info, &errorCode); 89227f654740f2a26ad62a5c155af9199af9e69b889claireho if( U_FAILURE(errorCode) || length != 3 || 0 != u_memcmp(dest16, fa_sharps16, 4) || 89327f654740f2a26ad62a5c155af9199af9e69b889claireho !info.isTransitionalDifferent || info.errors != 0 89427f654740f2a26ad62a5c155af9199af9e69b889claireho ) { 89527f654740f2a26ad62a5c155af9199af9e69b889claireho log_err("uidna_labelToUnicode() failed: %s\n", u_errorName(errorCode)); 89627f654740f2a26ad62a5c155af9199af9e69b889claireho } 89727f654740f2a26ad62a5c155af9199af9e69b889claireho errorCode = U_ZERO_ERROR; 89827f654740f2a26ad62a5c155af9199af9e69b889claireho length = uidna_nameToASCII(uts46, fA_sharps16, u_strlen(fA_sharps16), 89927f654740f2a26ad62a5c155af9199af9e69b889claireho dest16, 4, &info, &errorCode); 90027f654740f2a26ad62a5c155af9199af9e69b889claireho if( errorCode != U_STRING_NOT_TERMINATED_WARNING || 90127f654740f2a26ad62a5c155af9199af9e69b889claireho length != 4 || 0 != u_memcmp(dest16, fass16, 4) || 90227f654740f2a26ad62a5c155af9199af9e69b889claireho !info.isTransitionalDifferent || info.errors != 0 90327f654740f2a26ad62a5c155af9199af9e69b889claireho ) { 90427f654740f2a26ad62a5c155af9199af9e69b889claireho log_err("uidna_nameToASCII() failed: %s\n", u_errorName(errorCode)); 90527f654740f2a26ad62a5c155af9199af9e69b889claireho } 90627f654740f2a26ad62a5c155af9199af9e69b889claireho errorCode = U_ZERO_ERROR; 90727f654740f2a26ad62a5c155af9199af9e69b889claireho length = uidna_nameToUnicode(uts46, fA_sharps16, -1, 90827f654740f2a26ad62a5c155af9199af9e69b889claireho dest16, 3, &info, &errorCode); 90927f654740f2a26ad62a5c155af9199af9e69b889claireho if( errorCode != U_STRING_NOT_TERMINATED_WARNING || 91027f654740f2a26ad62a5c155af9199af9e69b889claireho length != 3 || 0 != u_memcmp(dest16, fa_sharps16, 3) || 91127f654740f2a26ad62a5c155af9199af9e69b889claireho !info.isTransitionalDifferent || info.errors != 0 91227f654740f2a26ad62a5c155af9199af9e69b889claireho ) { 91327f654740f2a26ad62a5c155af9199af9e69b889claireho log_err("uidna_nameToUnicode() failed: %s\n", u_errorName(errorCode)); 91427f654740f2a26ad62a5c155af9199af9e69b889claireho } 91527f654740f2a26ad62a5c155af9199af9e69b889claireho 91627f654740f2a26ad62a5c155af9199af9e69b889claireho errorCode = U_ZERO_ERROR; 91727f654740f2a26ad62a5c155af9199af9e69b889claireho length = uidna_labelToASCII_UTF8(uts46, fA_sharps8, -1, 91827f654740f2a26ad62a5c155af9199af9e69b889claireho dest8, LENGTHOF(dest8), &info, &errorCode); 91927f654740f2a26ad62a5c155af9199af9e69b889claireho if( U_FAILURE(errorCode) || length != 4 || 0 != memcmp(dest8, fass8, 5) || 92027f654740f2a26ad62a5c155af9199af9e69b889claireho !info.isTransitionalDifferent || info.errors != 0 92127f654740f2a26ad62a5c155af9199af9e69b889claireho ) { 92227f654740f2a26ad62a5c155af9199af9e69b889claireho log_err("uidna_labelToASCII_UTF8() failed: %s\n", u_errorName(errorCode)); 92327f654740f2a26ad62a5c155af9199af9e69b889claireho } 92427f654740f2a26ad62a5c155af9199af9e69b889claireho errorCode = U_ZERO_ERROR; 92527f654740f2a26ad62a5c155af9199af9e69b889claireho length = uidna_labelToUnicodeUTF8(uts46, fA_sharps8, strlen(fA_sharps8), 92627f654740f2a26ad62a5c155af9199af9e69b889claireho dest8, LENGTHOF(dest8), &info, &errorCode); 92727f654740f2a26ad62a5c155af9199af9e69b889claireho if( U_FAILURE(errorCode) || length != 4 || 0 != memcmp(dest8, fa_sharps8, 5) || 92827f654740f2a26ad62a5c155af9199af9e69b889claireho !info.isTransitionalDifferent || info.errors != 0 92927f654740f2a26ad62a5c155af9199af9e69b889claireho ) { 93027f654740f2a26ad62a5c155af9199af9e69b889claireho log_err("uidna_labelToUnicodeUTF8() failed: %s\n", u_errorName(errorCode)); 93127f654740f2a26ad62a5c155af9199af9e69b889claireho } 93227f654740f2a26ad62a5c155af9199af9e69b889claireho errorCode = U_ZERO_ERROR; 93327f654740f2a26ad62a5c155af9199af9e69b889claireho length = uidna_nameToASCII_UTF8(uts46, fA_sharps8, strlen(fA_sharps8), 93427f654740f2a26ad62a5c155af9199af9e69b889claireho dest8, 4, &info, &errorCode); 93527f654740f2a26ad62a5c155af9199af9e69b889claireho if( errorCode != U_STRING_NOT_TERMINATED_WARNING || 93627f654740f2a26ad62a5c155af9199af9e69b889claireho length != 4 || 0 != memcmp(dest8, fass8, 4) || 93727f654740f2a26ad62a5c155af9199af9e69b889claireho !info.isTransitionalDifferent || info.errors != 0 93827f654740f2a26ad62a5c155af9199af9e69b889claireho ) { 93927f654740f2a26ad62a5c155af9199af9e69b889claireho log_err("uidna_nameToASCII_UTF8() failed: %s\n", u_errorName(errorCode)); 94027f654740f2a26ad62a5c155af9199af9e69b889claireho } 94127f654740f2a26ad62a5c155af9199af9e69b889claireho errorCode = U_ZERO_ERROR; 94227f654740f2a26ad62a5c155af9199af9e69b889claireho length = uidna_nameToUnicodeUTF8(uts46, fA_sharps8, -1, 94327f654740f2a26ad62a5c155af9199af9e69b889claireho dest8, 4, &info, &errorCode); 94427f654740f2a26ad62a5c155af9199af9e69b889claireho if( errorCode != U_STRING_NOT_TERMINATED_WARNING || 94527f654740f2a26ad62a5c155af9199af9e69b889claireho length != 4 || 0 != memcmp(dest8, fa_sharps8, 4) || 94627f654740f2a26ad62a5c155af9199af9e69b889claireho !info.isTransitionalDifferent || info.errors != 0 94727f654740f2a26ad62a5c155af9199af9e69b889claireho ) { 94827f654740f2a26ad62a5c155af9199af9e69b889claireho log_err("uidna_nameToUnicodeUTF8() failed: %s\n", u_errorName(errorCode)); 94927f654740f2a26ad62a5c155af9199af9e69b889claireho } 95027f654740f2a26ad62a5c155af9199af9e69b889claireho 95127f654740f2a26ad62a5c155af9199af9e69b889claireho errorCode = U_ZERO_ERROR; 95227f654740f2a26ad62a5c155af9199af9e69b889claireho length = uidna_nameToASCII(uts46, NULL, 0, 95327f654740f2a26ad62a5c155af9199af9e69b889claireho dest16, 0, &info, &errorCode); 95427f654740f2a26ad62a5c155af9199af9e69b889claireho if( errorCode != U_STRING_NOT_TERMINATED_WARNING || 95527f654740f2a26ad62a5c155af9199af9e69b889claireho length != 0 || 95627f654740f2a26ad62a5c155af9199af9e69b889claireho info.isTransitionalDifferent || info.errors != UIDNA_ERROR_EMPTY_LABEL 95727f654740f2a26ad62a5c155af9199af9e69b889claireho ) { 95827f654740f2a26ad62a5c155af9199af9e69b889claireho log_err("uidna_nameToASCII(empty) failed: %s\n", u_errorName(errorCode)); 95927f654740f2a26ad62a5c155af9199af9e69b889claireho } 96027f654740f2a26ad62a5c155af9199af9e69b889claireho errorCode = U_ZERO_ERROR; 96127f654740f2a26ad62a5c155af9199af9e69b889claireho length = uidna_nameToUnicode(uts46, fA_BEL, -1, 96227f654740f2a26ad62a5c155af9199af9e69b889claireho dest16, 3, &info, &errorCode); 96327f654740f2a26ad62a5c155af9199af9e69b889claireho if( errorCode != U_STRING_NOT_TERMINATED_WARNING || 96427f654740f2a26ad62a5c155af9199af9e69b889claireho length != 3 || 0 != u_memcmp(dest16, fa_FFFD, 3) || 96527f654740f2a26ad62a5c155af9199af9e69b889claireho info.isTransitionalDifferent || info.errors == 0 96627f654740f2a26ad62a5c155af9199af9e69b889claireho ) { 96727f654740f2a26ad62a5c155af9199af9e69b889claireho log_err("uidna_nameToUnicode(fa<BEL>) failed: %s\n", u_errorName(errorCode)); 96827f654740f2a26ad62a5c155af9199af9e69b889claireho } 96927f654740f2a26ad62a5c155af9199af9e69b889claireho 97027f654740f2a26ad62a5c155af9199af9e69b889claireho /* These calls should fail. */ 97127f654740f2a26ad62a5c155af9199af9e69b889claireho errorCode = U_USELESS_COLLATOR_ERROR; 97227f654740f2a26ad62a5c155af9199af9e69b889claireho length = uidna_labelToASCII(uts46, fA_sharps16, -1, 97327f654740f2a26ad62a5c155af9199af9e69b889claireho dest16, LENGTHOF(dest16), &info, &errorCode); 97427f654740f2a26ad62a5c155af9199af9e69b889claireho if(errorCode != U_USELESS_COLLATOR_ERROR) { 97527f654740f2a26ad62a5c155af9199af9e69b889claireho log_err("uidna_labelToASCII(failure) failed: %s\n", u_errorName(errorCode)); 97627f654740f2a26ad62a5c155af9199af9e69b889claireho } 97727f654740f2a26ad62a5c155af9199af9e69b889claireho errorCode = U_ZERO_ERROR; 97827f654740f2a26ad62a5c155af9199af9e69b889claireho length = uidna_labelToUnicode(uts46, fA_sharps16, u_strlen(fA_sharps16), 97927f654740f2a26ad62a5c155af9199af9e69b889claireho dest16, LENGTHOF(dest16), NULL, &errorCode); 98027f654740f2a26ad62a5c155af9199af9e69b889claireho if(errorCode != U_ILLEGAL_ARGUMENT_ERROR) { 98127f654740f2a26ad62a5c155af9199af9e69b889claireho log_err("uidna_labelToUnicode(UIDNAInfo=NULL) failed: %s\n", u_errorName(errorCode)); 98227f654740f2a26ad62a5c155af9199af9e69b889claireho } 98327f654740f2a26ad62a5c155af9199af9e69b889claireho errorCode = U_ZERO_ERROR; 98427f654740f2a26ad62a5c155af9199af9e69b889claireho length = uidna_nameToASCII(uts46, NULL, u_strlen(fA_sharps16), 98527f654740f2a26ad62a5c155af9199af9e69b889claireho dest16, 4, &info, &errorCode); 98627f654740f2a26ad62a5c155af9199af9e69b889claireho if(errorCode != U_ILLEGAL_ARGUMENT_ERROR) { 98727f654740f2a26ad62a5c155af9199af9e69b889claireho log_err("uidna_nameToASCII(src=NULL) failed: %s\n", u_errorName(errorCode)); 98827f654740f2a26ad62a5c155af9199af9e69b889claireho } 98927f654740f2a26ad62a5c155af9199af9e69b889claireho errorCode = U_ZERO_ERROR; 99027f654740f2a26ad62a5c155af9199af9e69b889claireho length = uidna_nameToUnicode(uts46, fA_sharps16, -2, 99127f654740f2a26ad62a5c155af9199af9e69b889claireho dest16, 3, &info, &errorCode); 99227f654740f2a26ad62a5c155af9199af9e69b889claireho if(errorCode != U_ILLEGAL_ARGUMENT_ERROR) { 99327f654740f2a26ad62a5c155af9199af9e69b889claireho log_err("uidna_nameToUnicode(length<-1) failed: %s\n", u_errorName(errorCode)); 99427f654740f2a26ad62a5c155af9199af9e69b889claireho } 99527f654740f2a26ad62a5c155af9199af9e69b889claireho 99627f654740f2a26ad62a5c155af9199af9e69b889claireho errorCode = U_ZERO_ERROR; 99727f654740f2a26ad62a5c155af9199af9e69b889claireho length = uidna_labelToASCII_UTF8(uts46, fA_sharps8, -1, 99827f654740f2a26ad62a5c155af9199af9e69b889claireho NULL, LENGTHOF(dest8), &info, &errorCode); 99927f654740f2a26ad62a5c155af9199af9e69b889claireho if(errorCode != U_ILLEGAL_ARGUMENT_ERROR) { 100027f654740f2a26ad62a5c155af9199af9e69b889claireho log_err("uidna_labelToASCII_UTF8(dest=NULL) failed: %s\n", u_errorName(errorCode)); 100127f654740f2a26ad62a5c155af9199af9e69b889claireho } 100227f654740f2a26ad62a5c155af9199af9e69b889claireho errorCode = U_ZERO_ERROR; 100327f654740f2a26ad62a5c155af9199af9e69b889claireho length = uidna_labelToUnicodeUTF8(uts46, fA_sharps8, strlen(fA_sharps8), 100427f654740f2a26ad62a5c155af9199af9e69b889claireho dest8, -1, &info, &errorCode); 100527f654740f2a26ad62a5c155af9199af9e69b889claireho if(errorCode != U_ILLEGAL_ARGUMENT_ERROR) { 100627f654740f2a26ad62a5c155af9199af9e69b889claireho log_err("uidna_labelToUnicodeUTF8(capacity<0) failed: %s\n", u_errorName(errorCode)); 100727f654740f2a26ad62a5c155af9199af9e69b889claireho } 100827f654740f2a26ad62a5c155af9199af9e69b889claireho errorCode = U_ZERO_ERROR; 100927f654740f2a26ad62a5c155af9199af9e69b889claireho length = uidna_nameToASCII_UTF8(uts46, dest8, strlen(fA_sharps8), 101027f654740f2a26ad62a5c155af9199af9e69b889claireho dest8, 4, &info, &errorCode); 101127f654740f2a26ad62a5c155af9199af9e69b889claireho if(errorCode != U_ILLEGAL_ARGUMENT_ERROR) { 101227f654740f2a26ad62a5c155af9199af9e69b889claireho log_err("uidna_nameToASCII_UTF8(src==dest!=NULL) failed: %s\n", u_errorName(errorCode)); 101327f654740f2a26ad62a5c155af9199af9e69b889claireho } 101427f654740f2a26ad62a5c155af9199af9e69b889claireho errorCode = U_ZERO_ERROR; 101527f654740f2a26ad62a5c155af9199af9e69b889claireho length = uidna_nameToUnicodeUTF8(uts46, fA_sharps8, -1, 101627f654740f2a26ad62a5c155af9199af9e69b889claireho dest8, 3, &info, &errorCode); 101727f654740f2a26ad62a5c155af9199af9e69b889claireho if(errorCode != U_BUFFER_OVERFLOW_ERROR || length != 4) { 101827f654740f2a26ad62a5c155af9199af9e69b889claireho log_err("uidna_nameToUnicodeUTF8() overflow failed: %s\n", u_errorName(errorCode)); 101927f654740f2a26ad62a5c155af9199af9e69b889claireho } 102027f654740f2a26ad62a5c155af9199af9e69b889claireho 102127f654740f2a26ad62a5c155af9199af9e69b889claireho uidna_close(uts46); 102227f654740f2a26ad62a5c155af9199af9e69b889claireho} 102327f654740f2a26ad62a5c155af9199af9e69b889claireho 1024b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#endif 1025b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 1026b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru/* 1027b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * Hey, Emacs, please set the following: 1028b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * 1029b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * Local Variables: 1030b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * indent-tabs-mode: nil 1031b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * End: 1032b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * 1033b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru */ 1034