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