1b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru/* 2b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru ******************************************************************************* 3b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * 4b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru * Copyright (C) 2003-2009, International Business Machines 5b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * Corporation and others. All Rights Reserved. 6b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * 7b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru ******************************************************************************* 8b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * file name: testidna.cpp 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: 2003feb1 14b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * created by: Ram Viswanadha 15b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru */ 16b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 17b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#include "unicode/utypes.h" 18b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 19b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#if !UCONFIG_NO_IDNA && !UCONFIG_NO_TRANSLITERATION 20b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 21b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#include <time.h> 22b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#include <limits.h> 23b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#include <stdlib.h> 24b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#include <string.h> 25b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#include "unicode/ustring.h" 26b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#include "unicode/usprep.h" 27b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#include "unicode/uniset.h" 28b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#include "testidna.h" 29b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#include "idnaref.h" 30b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#include "nptrans.h" 31b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#include "unicode/putil.h" 32b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#include "idnaconf.h" 33b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 34b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Querustatic const UChar unicodeIn[][41] ={ 35b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru { 36b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 0x0644, 0x064A, 0x0647, 0x0645, 0x0627, 0x0628, 0x062A, 0x0643, 0x0644, 37b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 0x0645, 0x0648, 0x0634, 0x0639, 0x0631, 0x0628, 0x064A, 0x061F, 0x0000 38b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru }, 39b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru { 40b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 0x4ED6, 0x4EEC, 0x4E3A, 0x4EC0, 0x4E48, 0x4E0D, 0x8BF4, 0x4E2D, 0x6587, 41b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 0x0000 42b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru }, 43b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru { 44b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 0x0050, 0x0072, 0x006F, 0x010D, 0x0070, 0x0072, 0x006F, 0x0073, 0x0074, 45b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 0x011B, 0x006E, 0x0065, 0x006D, 0x006C, 0x0075, 0x0076, 0x00ED, 0x010D, 46b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 0x0065, 0x0073, 0x006B, 0x0079, 0x0000 47b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru }, 48b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru { 49b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 0x05DC, 0x05DE, 0x05D4, 0x05D4, 0x05DD, 0x05E4, 0x05E9, 0x05D5, 0x05D8, 50b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 0x05DC, 0x05D0, 0x05DE, 0x05D3, 0x05D1, 0x05E8, 0x05D9, 0x05DD, 0x05E2, 51b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 0x05D1, 0x05E8, 0x05D9, 0x05EA, 0x0000 52b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru }, 53b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru { 54b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 0x092F, 0x0939, 0x0932, 0x094B, 0x0917, 0x0939, 0x093F, 0x0928, 0x094D, 55b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 0x0926, 0x0940, 0x0915, 0x094D, 0x092F, 0x094B, 0x0902, 0x0928, 0x0939, 56b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 0x0940, 0x0902, 0x092C, 0x094B, 0x0932, 0x0938, 0x0915, 0x0924, 0x0947, 57b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 0x0939, 0x0948, 0x0902, 0x0000 58b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru }, 59b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru { 60b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 0x306A, 0x305C, 0x307F, 0x3093, 0x306A, 0x65E5, 0x672C, 0x8A9E, 0x3092, 61b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 0x8A71, 0x3057, 0x3066, 0x304F, 0x308C, 0x306A, 0x3044, 0x306E, 0x304B, 62b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 0x0000 63b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru }, 64b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru/* 65b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru { 66b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 0xC138, 0xACC4, 0xC758, 0xBAA8, 0xB4E0, 0xC0AC, 0xB78C, 0xB4E4, 0xC774, 67b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 0xD55C, 0xAD6D, 0xC5B4, 0xB97C, 0xC774, 0xD574, 0xD55C, 0xB2E4, 0xBA74, 68b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 0xC5BC, 0xB9C8, 0xB098, 0xC88B, 0xC744, 0xAE4C, 0x0000 69b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru }, 70b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru*/ 71b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru { 72b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 0x043F, 0x043E, 0x0447, 0x0435, 0x043C, 0x0443, 0x0436, 0x0435, 0x043E, 73b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 0x043D, 0x0438, 0x043D, 0x0435, 0x0433, 0x043E, 0x0432, 0x043E, 0x0440, 74b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 0x044F, 0x0442, 0x043F, 0x043E, 0x0440, 0x0443, 0x0441, 0x0441, 0x043A, 75b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 0x0438, 0x0000 76b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru }, 77b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru { 78b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 0x0050, 0x006F, 0x0072, 0x0071, 0x0075, 0x00E9, 0x006E, 0x006F, 0x0070, 79b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 0x0075, 0x0065, 0x0064, 0x0065, 0x006E, 0x0073, 0x0069, 0x006D, 0x0070, 80b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 0x006C, 0x0065, 0x006D, 0x0065, 0x006E, 0x0074, 0x0065, 0x0068, 0x0061, 81b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 0x0062, 0x006C, 0x0061, 0x0072, 0x0065, 0x006E, 0x0045, 0x0073, 0x0070, 82b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 0x0061, 0x00F1, 0x006F, 0x006C, 0x0000 83b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru }, 84b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru { 85b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 0x4ED6, 0x5011, 0x7232, 0x4EC0, 0x9EBD, 0x4E0D, 0x8AAA, 0x4E2D, 0x6587, 86b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 0x0000 87b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru }, 88b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru { 89b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 0x0054, 0x1EA1, 0x0069, 0x0073, 0x0061, 0x006F, 0x0068, 0x1ECD, 0x006B, 90b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 0x0068, 0x00F4, 0x006E, 0x0067, 0x0074, 0x0068, 0x1EC3, 0x0063, 0x0068, 91b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 0x1EC9, 0x006E, 0x00F3, 0x0069, 0x0074, 0x0069, 0x1EBF, 0x006E, 0x0067, 92b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 0x0056, 0x0069, 0x1EC7, 0x0074, 0x0000 93b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru }, 94b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru { 95b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 0x0033, 0x5E74, 0x0042, 0x7D44, 0x91D1, 0x516B, 0x5148, 0x751F, 0x0000 96b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru }, 97b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru { 98b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 0x5B89, 0x5BA4, 0x5948, 0x7F8E, 0x6075, 0x002D, 0x0077, 0x0069, 0x0074, 99b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 0x0068, 0x002D, 0x0053, 0x0055, 0x0050, 0x0045, 0x0052, 0x002D, 0x004D, 100b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 0x004F, 0x004E, 0x004B, 0x0045, 0x0059, 0x0053, 0x0000 101b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru }, 102b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru { 103b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 0x0048, 0x0065, 0x006C, 0x006C, 0x006F, 0x002D, 0x0041, 0x006E, 0x006F, 104b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 0x0074, 0x0068, 0x0065, 0x0072, 0x002D, 0x0057, 0x0061, 0x0079, 0x002D, 105b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 0x305D, 0x308C, 0x305E, 0x308C, 0x306E, 0x5834, 0x6240, 0x0000 106b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru }, 107b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru { 108b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 0x3072, 0x3068, 0x3064, 0x5C4B, 0x6839, 0x306E, 0x4E0B, 0x0032, 0x0000 109b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru }, 110b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru { 111b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 0x004D, 0x0061, 0x006A, 0x0069, 0x3067, 0x004B, 0x006F, 0x0069, 0x3059, 112b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 0x308B, 0x0035, 0x79D2, 0x524D, 0x0000 113b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru }, 114b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru { 115b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 0x30D1, 0x30D5, 0x30A3, 0x30FC, 0x0064, 0x0065, 0x30EB, 0x30F3, 0x30D0, 116b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 0x0000 117b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru }, 118b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru { 119b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 0x305D, 0x306E, 0x30B9, 0x30D4, 0x30FC, 0x30C9, 0x3067, 0x0000 120b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru }, 121b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru // test non-BMP code points 122b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru { 123b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 0xD800, 0xDF00, 0xD800, 0xDF01, 0xD800, 0xDF02, 0xD800, 0xDF03, 0xD800, 0xDF05, 124b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 0xD800, 0xDF06, 0xD800, 0xDF07, 0xD800, 0xDF09, 0xD800, 0xDF0A, 0xD800, 0xDF0B, 125b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 0x0000 126b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru }, 127b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru { 128b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 0xD800, 0xDF0D, 0xD800, 0xDF0C, 0xD800, 0xDF1E, 0xD800, 0xDF0F, 0xD800, 0xDF16, 129b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 0xD800, 0xDF15, 0xD800, 0xDF14, 0xD800, 0xDF12, 0xD800, 0xDF10, 0xD800, 0xDF20, 130b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 0xD800, 0xDF21, 131b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 0x0000 132b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru }, 133b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru // Greek 134b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru { 135b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 0x03b5, 0x03bb, 0x03bb, 0x03b7, 0x03bd, 0x03b9, 0x03ba, 0x03ac 136b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru }, 137b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru // Maltese 138b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru { 139b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 0x0062, 0x006f, 0x006e, 0x0121, 0x0075, 0x0073, 0x0061, 0x0127, 140b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 0x0127, 0x0061 141b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru }, 142b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru // Russian 143b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru { 144b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 0x043f, 0x043e, 0x0447, 0x0435, 0x043c, 0x0443, 0x0436, 0x0435, 145b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 0x043e, 0x043d, 0x0438, 0x043d, 0x0435, 0x0433, 0x043e, 0x0432, 146b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 0x043e, 0x0440, 0x044f, 0x0442, 0x043f, 0x043e, 0x0440, 0x0443, 147b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 0x0441, 0x0441, 0x043a, 0x0438 148b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru }, 149b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru { 150b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 0xFB00, 0xFB01 151b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 152b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 153b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru}; 154b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 155b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Querustatic const char *asciiIn[] = { 156b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru "xn--egbpdaj6bu4bxfgehfvwxn", 157b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru "xn--ihqwcrb4cv8a8dqg056pqjye", 158b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru "xn--Proprostnemluvesky-uyb24dma41a", 159b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru "xn--4dbcagdahymbxekheh6e0a7fei0b", 160b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru "xn--i1baa7eci9glrd9b2ae1bj0hfcgg6iyaf8o0a1dig0cd", 161b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru "xn--n8jok5ay5dzabd5bym9f0cm5685rrjetr6pdxa", 162b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru/* "xn--989aomsvi5e83db1d2a355cv1e0vak1dwrv93d5xbh15a0dt30a5jpsd879ccm6fea98c",*/ 163b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru "xn--b1abfaaepdrnnbgefbaDotcwatmq2g4l", 164b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru "xn--PorqunopuedensimplementehablarenEspaol-fmd56a", 165b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru "xn--ihqwctvzc91f659drss3x8bo0yb", 166b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru "xn--TisaohkhngthchnitingVit-kjcr8268qyxafd2f1b9g", 167b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru "xn--3B-ww4c5e180e575a65lsy2b", 168b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru "xn---with-SUPER-MONKEYS-pc58ag80a8qai00g7n9n", 169b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru "xn--Hello-Another-Way--fc4qua05auwb3674vfr0b", 170b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru "xn--2-u9tlzr9756bt3uc0v", 171b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru "xn--MajiKoi5-783gue6qz075azm5e", 172b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru "xn--de-jg4avhby1noc0d", 173b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru "xn--d9juau41awczczp", 174b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru "XN--097CCDEKGHQJK", 175b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru "XN--db8CBHEJLGH4E0AL", 176b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru "xn--hxargifdar", // Greek 177b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru "xn--bonusaa-5bb1da", // Maltese 178b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru "xn--b1abfaaepdrnnbgefbadotcwatmq2g4l", // Russian (Cyrillic) 179b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru "fffi" 180b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru}; 181b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 182b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Querustatic const char *domainNames[] = { 183b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru "slip129-37-118-146.nc.us.ibm.net", 184b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru "saratoga.pe.utexas.edu", 185b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru "dial-120-45.ots.utexas.edu", 186b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru "woo-085.dorms.waller.net", 187b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru "hd30-049.hil.compuserve.com", 188b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru "pem203-31.pe.ttu.edu", 189b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru "56K-227.MaxTNT3.pdq.net", 190b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru "dial-36-2.ots.utexas.edu", 191b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru "slip129-37-23-152.ga.us.ibm.net", 192b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru "ts45ip119.cadvision.com", 193b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru "sdn-ts-004txaustP05.dialsprint.net", 194b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru "bar-tnt1s66.erols.com", 195b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru "101.st-louis-15.mo.dial-access.att.net", 196b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru "h92-245.Arco.COM", 197b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru "dial-13-2.ots.utexas.edu", 198b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru "net-redynet29.datamarkets.com.ar", 199b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru "ccs-shiva28.reacciun.net.ve", 200b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru "7.houston-11.tx.dial-access.att.net", 201b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru "ingw129-37-120-26.mo.us.ibm.net", 202b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru "dialup6.austintx.com", 203b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru "dns2.tpao.gov.tr", 204b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru "slip129-37-119-194.nc.us.ibm.net", 205b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru "cs7.dillons.co.uk.203.119.193.in-addr.arpa", 206b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru "swprd1.innovplace.saskatoon.sk.ca", 207b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru "bikini.bologna.maraut.it", 208b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru "node91.subnet159-198-79.baxter.com", 209b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru "cust19.max5.new-york.ny.ms.uu.net", 210b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru "balexander.slip.andrew.cmu.edu", 211b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru "pool029.max2.denver.co.dynip.alter.net", 212b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru "cust49.max9.new-york.ny.ms.uu.net", 213b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru "s61.abq-dialin2.hollyberry.com", 214b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru "\\u0917\\u0928\\u0947\\u0936.sanjose.ibm.com", //':'(0x003a) produces U_IDNA_STD3_ASCII_RULES_ERROR 215b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru "www.xn--vea.com", 216b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru // "www.\\u00E0\\u00B3\\u00AF.com",//' ' (0x0020) produces U_IDNA_STD3_ASCII_RULES_ERROR 217b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru "www.\\u00C2\\u00A4.com", 218b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru "www.\\u00C2\\u00A3.com", 219b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru // "\\u0025", //'%' (0x0025) produces U_IDNA_STD3_ASCII_RULES_ERROR 220b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru // "\\u005C\\u005C", //'\' (0x005C) produces U_IDNA_STD3_ASCII_RULES_ERROR 221b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru //"@", 222b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru //"\\u002F", 223b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru //"www.\\u0021.com", 224b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru //"www.\\u0024.com", 225b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru //"\\u003f", 226b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru // These yeild U_IDNA_PROHIBITED_ERROR 227b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru //"\\u00CF\\u0082.com", 228b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru //"\\u00CE\\u00B2\\u00C3\\u009Fss.com", 229b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru //"\\u00E2\\u0098\\u00BA.com", 230b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru "\\u00C3\\u00BC.com", 231b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 232b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru}; 233b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 234b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Querutypedef struct ErrorCases ErrorCases; 235b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 236b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Querustatic const struct ErrorCases{ 237b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 238b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UChar unicode[100]; 239b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru const char *ascii; 240b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UErrorCode expected; 241b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UBool useSTD3ASCIIRules; 242b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UBool testToUnicode; 243b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UBool testLabel; 244b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru} errorCases[] = { 245b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru { 246b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 247b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru { 248b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 0x0077, 0x0077, 0x0077, 0x002e, /* www. */ 249b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 0xC138, 0xACC4, 0xC758, 0xBAA8, 0xB4E0, 0xC0AC, 0xB78C, 0xB4E4, 0xC774, 250b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 0x070F,/*prohibited*/ 251b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 0xD55C, 0xAD6D, 0xC5B4, 0xB97C, 0xC774, 0xD574, 0xD55C, 0xB2E4, 0xBA74, 252b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 0x002e, 0x0063, 0x006f, 0x006d, /* com. */ 253b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 0x0000 254b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru }, 255b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru "www.XN--8mb5595fsoa28orucya378bqre2tcwop06c5qbw82a1rffmae0361dea96b.com", 256b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru U_IDNA_PROHIBITED_ERROR, 257b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru FALSE, FALSE, TRUE 258b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru }, 259b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 260b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru { 261b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru { 262b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 0x0077, 0x0077, 0x0077, 0x002e, /* www. */ 263b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 0xC138, 0xACC4, 0xC758, 0xBAA8, 0xB4E0, 0xC0AC, 0xB78C, 0xB4E4, 0xC774, 264b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 0x0221, 0x0234/*Unassigned code points*/, 265b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 0x002e, 0x0063, 0x006f, 0x006d, /* com. */ 266b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 0x0000 267b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru }, 268b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru "www.XN--6lA2Bz548Fj1GuA391Bf1Gb1N59Ab29A7iA.com", 269b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 270b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru U_IDNA_UNASSIGNED_ERROR, 271b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru FALSE, FALSE, TRUE 272b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru }, 273b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru { 274b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru { 275b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 0x0077, 0x0077, 0x0077, 0x002e, /* www. */ 276b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 0xC138, 0xACC4, 0xC758, 0xBAA8, 0xB4E0, 0xC0AC, 0xB78C, 0xB4E4, 0xC774, 277b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 0x0644, 0x064A, 0x0647,/*Arabic code points. Cannot mix RTL with LTR*/ 278b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 0xD55C, 0xAD6D, 0xC5B4, 0xB97C, 0xC774, 0xD574, 0xD55C, 0xB2E4, 0xBA74, 279b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 0x002e, 0x0063, 0x006f, 0x006d, /* com. */ 280b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 0x0000 281b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru }, 282b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru "www.xn--ghBGI4851OiyA33VqrD6Az86C4qF83CtRv93D5xBk15AzfG0nAgA0578DeA71C.com", 283b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru U_IDNA_CHECK_BIDI_ERROR, 284b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru FALSE, FALSE, TRUE 285b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru }, 286b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru { 287b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru { 288b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 0x0077, 0x0077, 0x0077, 0x002e, /* www. */ 289b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru /* labels cannot begin with an HYPHEN */ 290b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 0x002D, 0xACC4, 0xC758, 0xBAA8, 0xB4E0, 0xC0AC, 0xB78C, 0xB4E4, 0xC774, 291b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 0x002E, 292b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 0xD55C, 0xAD6D, 0xC5B4, 0xB97C, 0xC774, 0xD574, 0xD55C, 0xB2E4, 0xBA74, 293b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 0x002e, 0x0063, 0x006f, 0x006d, /* com. */ 294b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 0x0000 295b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 296b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru }, 297b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru "www.xn----b95Ew8SqA315Ao5FbuMlnNmhA.com", 298b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru U_IDNA_STD3_ASCII_RULES_ERROR, 299b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru TRUE, FALSE, FALSE 300b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru }, 301b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru { 302b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru { 303b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru /* correct ACE-prefix followed by unicode */ 304b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 0x0077, 0x0077, 0x0077, 0x002e, /* www. */ 305b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 0x0078, 0x006e, 0x002d,0x002d, /* ACE Prefix */ 306b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 0x002D, 0xACC4, 0xC758, 0xBAA8, 0xB4E0, 0xC0AC, 0xB78C, 0xB4E4, 0xC774, 307b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 0x002D, 308b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 0xD55C, 0xAD6D, 0xC5B4, 0xB97C, 0xC774, 0xD574, 0xD55C, 0xB2E4, 0xBA74, 309b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 0x002e, 0x0063, 0x006f, 0x006d, /* com. */ 310b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 0x0000 311b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 312b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru }, 313b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru /* wrong ACE-prefix followed by valid ACE-encoded ASCII */ 314b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru "www.XY-----b91I0V65S96C2A355Cw1E5yCeQr19CsnP1mFfmAE0361DeA96B.com", 315b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru U_IDNA_ACE_PREFIX_ERROR, 316b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru FALSE, FALSE, FALSE 317b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru }, 318b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru /* cannot verify U_IDNA_VERIFICATION_ERROR */ 319b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 320b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru { 321b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru { 322b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 0x0077, 0x0077, 0x0077, 0x002e, /* www. */ 323b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 0xC138, 0xACC4, 0xC758, 0xBAA8, 0xB4E0, 0xC0AC, 0xB78C, 0xB4E4, 0xC774, 324b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 0xD55C, 0xAD6D, 0xC5B4, 0xB97C, 0xC774, 0xD574, 0xD55C, 0xB2E4, 0xBA74, 325b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 0xC5BC, 0xB9C8, 0xB098, 0xC88B, 0xC744, 0xAE4C, 326b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 0x002e, 0x0063, 0x006f, 0x006d, /* com. */ 327b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 0x0000 328b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru }, 329b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru "www.xn--989AoMsVi5E83Db1D2A355Cv1E0vAk1DwRv93D5xBh15A0Dt30A5JpSD879Ccm6FeA98C.com", 330b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru U_IDNA_LABEL_TOO_LONG_ERROR, 331b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru FALSE, FALSE, TRUE 332b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru }, 333b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 334b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru { 335b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru { 336b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 0x0077, 0x0077, 0x0077, 0x002e, /* www. */ 337b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 0x0030, 0x0644, 0x064A, 0x0647, 0x0031, /* Arabic code points squashed between EN codepoints */ 338b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 0x002e, 0x0063, 0x006f, 0x006d, /* com. */ 339b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 0x0000 340b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru }, 341b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru "www.xn--01-tvdmo.com", 342b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru U_IDNA_CHECK_BIDI_ERROR, 343b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru FALSE, FALSE, TRUE 344b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru }, 345b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 346b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru { 347b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru { 348b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 0x0077, 0x0077, 0x0077, 0x002e, // www. 349b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 0x206C, 0x0644, 0x064A, 0x0647, 0x206D, // Arabic code points squashed between BN codepoints 350b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 0x002e, 0x0063, 0x006f, 0x006d, // com. 351b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 0x0000 352b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru }, 353b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru "www.XN--ghbgi278xia.com", 354b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru U_IDNA_PROHIBITED_ERROR, 355b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru FALSE, FALSE, TRUE 356b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru }, 357b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru { 358b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru { 359b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 0x0077, 0x0077, 0x0077, 0x002e, // www. 360b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 0x002D, 0x0041, 0x0042, 0x0043, 0x0044, 0x0045, // HYPHEN at the start of label 361b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 0x002e, 0x0063, 0x006f, 0x006d, // com. 362b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 0x0000 363b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru }, 364b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru "www.-abcde.com", 365b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru U_IDNA_STD3_ASCII_RULES_ERROR, 366b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru TRUE, FALSE, FALSE 367b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru }, 368b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru { 369b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru { 370b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 0x0077, 0x0077, 0x0077, 0x002e, // www. 371b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 0x0041, 0x0042, 0x0043, 0x0044, 0x0045,0x002D, // HYPHEN at the end of the label 372b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 0x002e, 0x0063, 0x006f, 0x006d, // com. 373b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 0x0000 374b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru }, 375b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru "www.abcde-.com", 376b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru U_IDNA_STD3_ASCII_RULES_ERROR, 377b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru TRUE, FALSE, FALSE 378b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru }, 379b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru { 380b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru { 381b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 0x0077, 0x0077, 0x0077, 0x002e, // www. 382b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 0x0041, 0x0042, 0x0043, 0x0044, 0x0045,0x0040, // Containing non LDH code point 383b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 0x002e, 0x0063, 0x006f, 0x006d, // com. 384b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 0x0000 385b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru }, 386b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru "www.abcde@.com", 387b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru U_IDNA_STD3_ASCII_RULES_ERROR, 388b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru TRUE, FALSE, FALSE 389b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru }, 390b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru { 391b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru { 392b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 0x0077, 0x0077, 0x0077, 0x002e, // www. 393b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru // zero length label 394b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 0x002e, 0x0063, 0x006f, 0x006d, // com. 395b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 0x0000 396b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru }, 397b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru "www..com", 398b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru U_IDNA_ZERO_LENGTH_LABEL_ERROR, 399b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru TRUE, FALSE, FALSE 400b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru }, 401b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru { 402b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru {0}, 403b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru NULL, 404b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru U_ILLEGAL_ARGUMENT_ERROR, 405b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru TRUE, TRUE, FALSE 406b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 407b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru}; 408b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 409b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 410b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 411b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 412b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#define MAX_DEST_SIZE 300 413b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 414b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruvoid TestIDNA::debug(const UChar* src, int32_t srcLength, int32_t options){ 415b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UParseError parseError; 416b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UErrorCode transStatus = U_ZERO_ERROR; 417b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UErrorCode prepStatus = U_ZERO_ERROR; 418b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru NamePrepTransform* trans = NamePrepTransform::createInstance(parseError,transStatus); 419b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru int32_t prepOptions = (((options & UIDNA_ALLOW_UNASSIGNED) != 0) ? USPREP_ALLOW_UNASSIGNED: 0); 42050294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho LocalUStringPrepProfilePointer prep(usprep_openByType(USPREP_RFC3491_NAMEPREP,&prepStatus)); 421b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UChar *transOut=NULL, *prepOut=NULL; 422b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru int32_t transOutLength=0, prepOutLength=0; 423b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 424b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 425b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru transOutLength = trans->process(src,srcLength,transOut, 0, prepOptions>0, &parseError, transStatus); 426b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if( transStatus == U_BUFFER_OVERFLOW_ERROR){ 427b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru transStatus = U_ZERO_ERROR; 428b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru transOut = (UChar*) malloc(U_SIZEOF_UCHAR * transOutLength); 429b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru transOutLength = trans->process(src,srcLength,transOut, transOutLength, prepOptions>0, &parseError, transStatus); 430b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 431b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 43250294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho prepOutLength = usprep_prepare(prep.getAlias(), src, srcLength, prepOut, 0, prepOptions, &parseError, &prepStatus); 433b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 434b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if( prepStatus == U_BUFFER_OVERFLOW_ERROR){ 435b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru prepStatus = U_ZERO_ERROR; 436b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru prepOut = (UChar*) malloc(U_SIZEOF_UCHAR * prepOutLength); 43750294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho prepOutLength = usprep_prepare(prep.getAlias(), src, srcLength, prepOut, prepOutLength, prepOptions, &parseError, &prepStatus); 438b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 439b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 440b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if(UnicodeString(transOut,transOutLength)!= UnicodeString(prepOut, prepOutLength)){ 441b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errln("Failed. Expected: " + prettify(UnicodeString(transOut, transOutLength)) 442b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru + " Got: " + prettify(UnicodeString(prepOut,prepOutLength))); 443b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 444b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru free(transOut); 445b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru free(prepOut); 446b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru delete trans; 447b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru} 448b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 449b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruvoid TestIDNA::testAPI(const UChar* src, const UChar* expected, const char* testName, 450b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UBool useSTD3ASCIIRules,UErrorCode expectedStatus, 451b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UBool doCompare, UBool testUnassigned, TestFunc func, UBool testSTD3ASCIIRules){ 452b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 453b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UErrorCode status = U_ZERO_ERROR; 454b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UChar destStack[MAX_DEST_SIZE]; 455b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru int32_t destLen = 0; 456b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UChar* dest = NULL; 457b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru int32_t expectedLen = (expected != NULL) ? u_strlen(expected) : 0; 458b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru int32_t options = (useSTD3ASCIIRules == TRUE) ? UIDNA_USE_STD3_RULES : UIDNA_DEFAULT; 459b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UParseError parseError; 460b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru int32_t tSrcLen = 0; 461b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UChar* tSrc = NULL; 462b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 463b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if(src != NULL){ 464b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru tSrcLen = u_strlen(src); 465b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru tSrc =(UChar*) malloc( U_SIZEOF_UCHAR * tSrcLen ); 466b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru memcpy(tSrc,src,tSrcLen * U_SIZEOF_UCHAR); 467b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 468b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 469b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru // test null-terminated source and return value of number of UChars required 470b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru destLen = func(src,-1,NULL,0,options, &parseError , &status); 471b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if(status == U_BUFFER_OVERFLOW_ERROR){ 472b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru status = U_ZERO_ERROR; // reset error code 473b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if(destLen+1 < MAX_DEST_SIZE){ 474b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru dest = destStack; 475b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru destLen = func(src,-1,dest,destLen+1,options, &parseError, &status); 476b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru // TODO : compare output with expected 477b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if(U_SUCCESS(status) && expectedStatus != U_IDNA_STD3_ASCII_RULES_ERROR&& (doCompare==TRUE) && u_strCaseCompare(dest,destLen, expected,expectedLen,0,&status)!=0){ 478b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errln("Did not get the expected result for "+UnicodeString(testName) +" null terminated source. Expected : " 479b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru + prettify(UnicodeString(expected,expectedLen)) 480b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru + " Got: " + prettify(UnicodeString(dest,destLen)) 481b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru ); 482b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 483b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru }else{ 484b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errln( "%s null terminated source failed. Requires destCapacity > 300\n",testName); 485b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 486b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 487b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 488b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if(status != expectedStatus){ 4896d5deb12725f146643d443090dfa11b206df528aJean-Baptiste Queru errcheckln(status, "Did not get the expected error for "+ 490b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UnicodeString(testName)+ 491b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru " null terminated source. Expected: " +UnicodeString(u_errorName(expectedStatus)) 492b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru + " Got: "+ UnicodeString(u_errorName(status)) 493b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru + " Source: " + prettify(UnicodeString(src)) 494b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru ); 495b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru free(tSrc); 496b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru return; 497b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 498b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if(testUnassigned ){ 499b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru status = U_ZERO_ERROR; 500b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru destLen = func(src,-1,NULL,0,options | UIDNA_ALLOW_UNASSIGNED, &parseError, &status); 501b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if(status == U_BUFFER_OVERFLOW_ERROR){ 502b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru status = U_ZERO_ERROR; // reset error code 503b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if(destLen+1 < MAX_DEST_SIZE){ 504b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru dest = destStack; 505b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru destLen = func(src,-1,dest,destLen+1,options | UIDNA_ALLOW_UNASSIGNED, &parseError, &status); 506b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru // TODO : compare output with expected 507b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if(U_SUCCESS(status) && (doCompare==TRUE) && u_strCaseCompare(dest,destLen, expected,expectedLen,0,&status)!=0){ 508b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru //errln("Did not get the expected result for %s null terminated source with both options set.\n",testName); 509b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errln("Did not get the expected result for "+UnicodeString(testName) + 510b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru " null terminated source "+ prettify(src) + 511b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru " with both options set. Expected: "+ prettify(UnicodeString(expected,expectedLen))+ 512b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru "Got: " + prettify(UnicodeString(dest,destLen))); 513b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 514b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru debug(src,-1,options | UIDNA_ALLOW_UNASSIGNED); 515b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 516b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 517b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru }else{ 518b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errln( "%s null terminated source failed. Requires destCapacity > 300\n",testName); 519b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 520b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 521b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru //testing query string 522b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if(status != expectedStatus && expectedStatus != U_IDNA_UNASSIGNED_ERROR){ 523b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errln( "Did not get the expected error for "+ 524b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UnicodeString(testName)+ 525b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru " null terminated source with options set. Expected: " +UnicodeString(u_errorName(expectedStatus)) 526b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru + " Got: "+ UnicodeString(u_errorName(status)) 527b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru + " Source: " + prettify(UnicodeString(src)) 528b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru ); 529b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 530b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 531b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 532b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru status = U_ZERO_ERROR; 533b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 534b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru // test source with lengthand return value of number of UChars required 535b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru destLen = func(tSrc, tSrcLen, NULL,0,options, &parseError, &status); 536b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if(status == U_BUFFER_OVERFLOW_ERROR){ 537b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru status = U_ZERO_ERROR; // reset error code 538b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if(destLen+1 < MAX_DEST_SIZE){ 539b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru dest = destStack; 540b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru destLen = func(src,u_strlen(src),dest,destLen+1,options, &parseError, &status); 541b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru // TODO : compare output with expected 542b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if(U_SUCCESS(status) && (doCompare==TRUE) && u_strCaseCompare(dest,destLen, expected,expectedLen,0,&status)!=0){ 543b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errln("Did not get the expected result for %s with source length.\n",testName); 544b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 545b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru }else{ 546b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errln( "%s with source length failed. Requires destCapacity > 300\n",testName); 547b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 548b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 549b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 550b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if(status != expectedStatus){ 551b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errln( "Did not get the expected error for "+ 552b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UnicodeString(testName)+ 553b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru " with source length. Expected: " +UnicodeString(u_errorName(expectedStatus)) 554b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru + " Got: "+ UnicodeString(u_errorName(status)) 555b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru + " Source: " + prettify(UnicodeString(src)) 556b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru ); 557b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 558b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if(testUnassigned){ 559b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru status = U_ZERO_ERROR; 560b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 561b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru destLen = func(tSrc,tSrcLen,NULL,0,options | UIDNA_ALLOW_UNASSIGNED, &parseError, &status); 562b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 563b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if(status == U_BUFFER_OVERFLOW_ERROR){ 564b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru status = U_ZERO_ERROR; // reset error code 565b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if(destLen+1 < MAX_DEST_SIZE){ 566b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru dest = destStack; 567b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru destLen = func(src,u_strlen(src),dest,destLen+1,options | UIDNA_ALLOW_UNASSIGNED, &parseError, &status); 568b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru // TODO : compare output with expected 569b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if(U_SUCCESS(status) && (doCompare==TRUE) && u_strCaseCompare(dest,destLen, expected,expectedLen,0,&status)!=0){ 570b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errln("Did not get the expected result for %s with source length and both options set.\n",testName); 571b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 572b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru }else{ 573b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errln( "%s with source length failed. Requires destCapacity > 300\n",testName); 574b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 575b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 576b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru //testing query string 577b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if(status != expectedStatus && expectedStatus != U_IDNA_UNASSIGNED_ERROR){ 578b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errln( "Did not get the expected error for "+ 579b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UnicodeString(testName)+ 580b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru " with source length and options set. Expected: " +UnicodeString(u_errorName(expectedStatus)) 581b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru + " Got: "+ UnicodeString(u_errorName(status)) 582b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru + " Source: " + prettify(UnicodeString(src)) 583b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru ); 584b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 585b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 586b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 587b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru status = U_ZERO_ERROR; 588b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if(testSTD3ASCIIRules==TRUE){ 589b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru destLen = func(src,-1,NULL,0,options | UIDNA_USE_STD3_RULES, &parseError, &status); 590b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if(status == U_BUFFER_OVERFLOW_ERROR){ 591b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru status = U_ZERO_ERROR; // reset error code 592b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if(destLen+1 < MAX_DEST_SIZE){ 593b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru dest = destStack; 594b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru destLen = func(src,-1,dest,destLen+1,options | UIDNA_USE_STD3_RULES, &parseError, &status); 595b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru // TODO : compare output with expected 596b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if(U_SUCCESS(status) && (doCompare==TRUE) && u_strCaseCompare(dest,destLen, expected,expectedLen,0,&status)!=0){ 597b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru //errln("Did not get the expected result for %s null terminated source with both options set.\n",testName); 598b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errln("Did not get the expected result for "+UnicodeString(testName) +" null terminated source with both options set. Expected: "+ prettify(UnicodeString(expected,expectedLen))); 599b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 600b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 601b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru }else{ 602b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errln( "%s null terminated source failed. Requires destCapacity > 300\n",testName); 603b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 604b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 605b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru //testing query string 606b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if(status != expectedStatus){ 607b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errln( "Did not get the expected error for "+ 608b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UnicodeString(testName)+ 609b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru " null terminated source with options set. Expected: " +UnicodeString(u_errorName(expectedStatus)) 610b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru + " Got: "+ UnicodeString(u_errorName(status)) 611b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru + " Source: " + prettify(UnicodeString(src)) 612b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru ); 613b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 614b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 615b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru status = U_ZERO_ERROR; 616b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 617b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru destLen = func(tSrc,tSrcLen,NULL,0,options | UIDNA_USE_STD3_RULES, &parseError, &status); 618b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 619b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if(status == U_BUFFER_OVERFLOW_ERROR){ 620b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru status = U_ZERO_ERROR; // reset error code 621b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if(destLen+1 < MAX_DEST_SIZE){ 622b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru dest = destStack; 623b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru destLen = func(src,u_strlen(src),dest,destLen+1,options | UIDNA_USE_STD3_RULES, &parseError, &status); 624b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru // TODO : compare output with expected 625b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if(U_SUCCESS(status) && (doCompare==TRUE) && u_strCaseCompare(dest,destLen, expected,expectedLen,0,&status)!=0){ 626b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errln("Did not get the expected result for %s with source length and both options set.\n",testName); 627b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 628b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru }else{ 629b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errln( "%s with source length failed. Requires destCapacity > 300\n",testName); 630b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 631b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 632b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru //testing query string 633b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if(status != expectedStatus && expectedStatus != U_IDNA_UNASSIGNED_ERROR){ 634b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errln( "Did not get the expected error for "+ 635b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UnicodeString(testName)+ 636b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru " with source length and options set. Expected: " +UnicodeString(u_errorName(expectedStatus)) 637b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru + " Got: "+ UnicodeString(u_errorName(status)) 638b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru + " Source: " + prettify(UnicodeString(src)) 639b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru ); 640b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 641b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 642b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru free(tSrc); 643b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru} 644b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 645b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruvoid TestIDNA::testCompare(const UChar* s1, int32_t s1Len, 646b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru const UChar* s2, int32_t s2Len, 647b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru const char* testName, CompareFunc func, 648b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UBool isEqual){ 649b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 650b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UErrorCode status = U_ZERO_ERROR; 651b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru int32_t retVal = func(s1,-1,s2,-1,UIDNA_DEFAULT,&status); 652b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 653b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if(isEqual==TRUE && retVal !=0){ 654b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errln("Did not get the expected result for %s with null termniated strings.\n",testName); 655b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 656b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if(U_FAILURE(status)){ 6576d5deb12725f146643d443090dfa11b206df528aJean-Baptiste Queru errcheckln(status, "%s null terminated source failed. Error: %s", testName,u_errorName(status)); 658b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 659b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 660b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru status = U_ZERO_ERROR; 661b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru retVal = func(s1,-1,s2,-1,UIDNA_ALLOW_UNASSIGNED,&status); 662b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 663b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if(isEqual==TRUE && retVal !=0){ 664b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errln("Did not get the expected result for %s with null termniated strings with options set.\n", testName); 665b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 666b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if(U_FAILURE(status)){ 6676d5deb12725f146643d443090dfa11b206df528aJean-Baptiste Queru errcheckln(status, "%s null terminated source and options set failed. Error: %s",testName, u_errorName(status)); 668b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 669b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 670b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru status = U_ZERO_ERROR; 671b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru retVal = func(s1,s1Len,s2,s2Len,UIDNA_DEFAULT,&status); 672b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 673b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if(isEqual==TRUE && retVal !=0){ 674b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errln("Did not get the expected result for %s with string length.\n",testName); 675b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 676b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if(U_FAILURE(status)){ 6776d5deb12725f146643d443090dfa11b206df528aJean-Baptiste Queru errcheckln(status, "%s with string length. Error: %s",testName, u_errorName(status)); 678b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 679b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 680b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru status = U_ZERO_ERROR; 681b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru retVal = func(s1,s1Len,s2,s2Len,UIDNA_ALLOW_UNASSIGNED,&status); 682b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 683b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if(isEqual==TRUE && retVal !=0){ 684b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errln("Did not get the expected result for %s with string length and options set.\n",testName); 685b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 686b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if(U_FAILURE(status)){ 6876d5deb12725f146643d443090dfa11b206df528aJean-Baptiste Queru errcheckln(status, "%s with string length and options set. Error: %s", u_errorName(status), testName); 688b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 689b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru} 690b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 691b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruvoid TestIDNA::testToASCII(const char* testName, TestFunc func){ 692b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 693b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru int32_t i; 694b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UChar buf[MAX_DEST_SIZE]; 695b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 696b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru for(i=0;i< (int32_t)(sizeof(unicodeIn)/sizeof(unicodeIn[0])); i++){ 697b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru u_charsToUChars(asciiIn[i],buf, (int32_t)(strlen(asciiIn[i])+1)); 698b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru testAPI(unicodeIn[i], buf,testName, FALSE,U_ZERO_ERROR, TRUE, TRUE, func); 699b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 700b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 701b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru} 702b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 703b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruvoid TestIDNA::testToUnicode(const char* testName, TestFunc func){ 704b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 705b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru int32_t i; 706b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UChar buf[MAX_DEST_SIZE]; 707b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 708b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru for(i=0;i< (int32_t)(sizeof(asciiIn)/sizeof(asciiIn[0])); i++){ 709b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru u_charsToUChars(asciiIn[i],buf, (int32_t)(strlen(asciiIn[i])+1)); 710b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru testAPI(buf,unicodeIn[i],testName,FALSE,U_ZERO_ERROR, TRUE, TRUE, func); 711b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 712b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru} 713b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 714b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 715b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruvoid TestIDNA::testIDNToUnicode(const char* testName, TestFunc func){ 716b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru int32_t i; 717b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UChar buf[MAX_DEST_SIZE]; 718b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UChar expected[MAX_DEST_SIZE]; 719b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UErrorCode status = U_ZERO_ERROR; 720b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru int32_t bufLen = 0; 721b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UParseError parseError; 722b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru for(i=0;i< (int32_t)(sizeof(domainNames)/sizeof(domainNames[0])); i++){ 723b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru bufLen = (int32_t)strlen(domainNames[i]); 724b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru bufLen = u_unescape(domainNames[i],buf, bufLen+1); 725b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru func(buf,bufLen,expected,MAX_DEST_SIZE, UIDNA_ALLOW_UNASSIGNED, &parseError,&status); 726b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if(U_FAILURE(status)){ 7276d5deb12725f146643d443090dfa11b206df528aJean-Baptiste Queru errcheckln(status, "%s failed to convert domainNames[%i].Error: %s",testName, i, u_errorName(status)); 728b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru break; 729b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 730b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru testAPI(buf,expected,testName,FALSE,U_ZERO_ERROR, TRUE, TRUE, func); 731b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru //test toUnicode with all labels in the string 732b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru testAPI(buf,expected,testName, FALSE,U_ZERO_ERROR, TRUE, TRUE, func); 733b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if(U_FAILURE(status)){ 734b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errln( "%s failed to convert domainNames[%i].Error: %s \n",testName,i, u_errorName(status)); 735b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru break; 736b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 737b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 738b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 739b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru} 740b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 741b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruvoid TestIDNA::testIDNToASCII(const char* testName, TestFunc func){ 742b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru int32_t i; 743b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UChar buf[MAX_DEST_SIZE]; 744b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UChar expected[MAX_DEST_SIZE]; 745b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UErrorCode status = U_ZERO_ERROR; 746b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru int32_t bufLen = 0; 747b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UParseError parseError; 748b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru for(i=0;i< (int32_t)(sizeof(domainNames)/sizeof(domainNames[0])); i++){ 749b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru bufLen = (int32_t)strlen(domainNames[i]); 750b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru bufLen = u_unescape(domainNames[i],buf, bufLen+1); 751b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru func(buf,bufLen,expected,MAX_DEST_SIZE, UIDNA_ALLOW_UNASSIGNED, &parseError,&status); 752b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if(U_FAILURE(status)){ 7536d5deb12725f146643d443090dfa11b206df528aJean-Baptiste Queru errcheckln(status, "%s failed to convert domainNames[%i].Error: %s",testName,i, u_errorName(status)); 754b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru break; 755b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 756b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru testAPI(buf,expected,testName, FALSE,U_ZERO_ERROR, TRUE, TRUE, func); 757b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru //test toASCII with all labels in the string 758b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru testAPI(buf,expected,testName, FALSE,U_ZERO_ERROR, FALSE, TRUE, func); 759b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if(U_FAILURE(status)){ 760b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errln( "%s failed to convert domainNames[%i].Error: %s \n",testName,i, u_errorName(status)); 761b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru break; 762b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 763b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 764b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 765b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru} 766b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 767b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruvoid TestIDNA::testCompare(const char* testName, CompareFunc func){ 768b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru int32_t i; 769b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 770b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 771b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UChar www[] = {0x0057, 0x0057, 0x0057, 0x002E, 0x0000}; 772b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UChar com[] = {0x002E, 0x0043, 0x004F, 0x004D, 0x0000}; 773b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UChar buf[MAX_DEST_SIZE]={0x0057, 0x0057, 0x0057, 0x002E, 0x0000}; 774b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 775b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UnicodeString source(www), uni0(www),uni1(www), ascii0(www), ascii1(www); 776b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 777b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru uni0.append(unicodeIn[0]); 778b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru uni0.append(com); 779b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru uni0.append((UChar)0x0000); 780b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 781b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru uni1.append(unicodeIn[1]); 782b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru uni1.append(com); 783b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru uni1.append((UChar)0x0000); 784b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 785b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru ascii0.append(asciiIn[0]); 786b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru ascii0.append(com); 787b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru ascii0.append((UChar)0x0000); 788b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 789b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru ascii1.append(asciiIn[1]); 790b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru ascii1.append(com); 791b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru ascii1.append((UChar)0x0000); 792b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 793b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru for(i=0;i< (int32_t)(sizeof(unicodeIn)/sizeof(unicodeIn[0])); i++){ 794b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 795b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru u_charsToUChars(asciiIn[i],buf+4, (int32_t)(strlen(asciiIn[i])+1)); 796b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru u_strcat(buf,com); 797b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 798b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru // for every entry in unicodeIn array 799b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru // prepend www. and append .com 800b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru source.truncate(4); 801b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru source.append(unicodeIn[i]); 802b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru source.append(com); 803b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru source.append((UChar)0x0000); 804b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru // a) compare it with itself 805b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru const UChar* src = source.getBuffer(); 806b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru int32_t srcLen = u_strlen(src); //subtract null 807b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 808b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru testCompare(src,srcLen,src,srcLen,testName, func, TRUE); 809b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 810b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru // b) compare it with asciiIn equivalent 811b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru testCompare(src,srcLen,buf,u_strlen(buf),testName, func,TRUE); 812b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 813b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru // c) compare it with unicodeIn not equivalent 814b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if(i==0){ 815b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru testCompare(src,srcLen,uni1.getBuffer(),uni1.length()-1,testName, func,FALSE); 816b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru }else{ 817b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru testCompare(src,srcLen,uni0.getBuffer(),uni0.length()-1,testName, func,FALSE); 818b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 819b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru // d) compare it with asciiIn not equivalent 820b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if(i==0){ 821b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru testCompare(src,srcLen,ascii1.getBuffer(),ascii1.length()-1,testName, func,FALSE); 822b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru }else{ 823b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru testCompare(src,srcLen,ascii0.getBuffer(),ascii0.length()-1,testName, func,FALSE); 824b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 825b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 826b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 827b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru} 828b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 829b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#if 0 830b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 831b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Querustatic int32_t 832b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste QuerugetNextSeperator(UChar *src,int32_t srcLength, 833b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UChar **limit){ 834b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if(srcLength == -1){ 835b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru int32_t i; 836b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru for(i=0 ; ;i++){ 837b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if(src[i] == 0){ 838b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru *limit = src + i; // point to null 839b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru return i; 840b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 841b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if(src[i]==0x002e){ 842b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru *limit = src + (i+1); // go past the delimiter 843b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru return i; 844b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 845b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 846b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru // we have not found the delimiter 847b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if(i==srcLength){ 848b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru *limit = src+srcLength; 849b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 850b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru return i; 851b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru }else{ 852b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru int32_t i; 853b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru for(i=0;i<srcLength;i++){ 854b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if(src[i]==0x002e){ 855b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru *limit = src + (i+1); // go past the delimiter 856b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru return i; 857b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 858b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 859b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru // we have not found the delimiter 860b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if(i==srcLength){ 861b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru *limit = src+srcLength; 862b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 863b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru return i; 864b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 865b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru} 866b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 867b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruvoid printPunycodeOutput(){ 868b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 869b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UChar dest[MAX_DEST_SIZE]; 870b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru int32_t destCapacity=MAX_DEST_SIZE; 871b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UChar* start; 872b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UChar* limit; 873b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru int32_t labelLen=0; 874b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UBool caseFlags[MAX_DEST_SIZE]; 875b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 876b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru for(int32_t i=0;i< sizeof(errorCases)/sizeof(errorCases[0]);i++){ 877b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru ErrorCases errorCase = errorCases[i]; 878b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UErrorCode status = U_ZERO_ERROR; 879b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru start = errorCase.unicode; 880b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru int32_t srcLen = u_strlen(start); 881b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru labelLen = getNextSeperator(start,srcLen,&limit); 882b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru start = limit; 883b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru labelLen=getNextSeperator(start,srcLen-labelLen,&limit); 884b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru int32_t destLen = u_strToPunycode(dest,destCapacity,start,labelLen,caseFlags, &status); 885b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if(U_FAILURE(status)){ 886b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru printf("u_strToPunycode failed for index %i\n",i); 887b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru continue; 888b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 889b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru for(int32_t j=0; j<destLen; j++){ 890b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru printf("%c",(char)dest[j]); 891b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 892b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru printf("\n"); 893b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 894b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru} 895b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#endif 896b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 897b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruvoid TestIDNA::testErrorCases(const char* IDNToASCIIName, TestFunc IDNToASCII, 898b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru const char* IDNToUnicodeName, TestFunc IDNToUnicode){ 899b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UChar buf[MAX_DEST_SIZE]; 900b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru int32_t bufLen=0; 901b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 902b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru for(int32_t i=0;i< (int32_t)(sizeof(errorCases)/sizeof(errorCases[0]));i++){ 903b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru ErrorCases errorCase = errorCases[i]; 904b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UChar* src =NULL; 905b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if(errorCase.ascii != NULL){ 906b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru bufLen = (int32_t)strlen(errorCase.ascii); 907b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru u_charsToUChars(errorCase.ascii,buf, bufLen+1); 908b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru }else{ 909b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru bufLen = 1 ; 910b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru memset(buf,0,U_SIZEOF_UCHAR*MAX_DEST_SIZE); 911b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 912b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 913b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if(errorCase.unicode[0]!=0){ 914b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru src = errorCase.unicode; 915b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 916b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru // test toASCII 917b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru testAPI(src,buf, 918b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru IDNToASCIIName, errorCase.useSTD3ASCIIRules, 919b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errorCase.expected, TRUE, TRUE, IDNToASCII); 920b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if(errorCase.testLabel ==TRUE){ 921b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru testAPI(src,buf, 922b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru IDNToASCIIName, errorCase.useSTD3ASCIIRules, 923b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errorCase.expected, FALSE,TRUE, IDNToASCII); 924b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 925b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if(errorCase.testToUnicode ==TRUE){ 926b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru testAPI((src==NULL)? NULL : buf,src, 927b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru IDNToUnicodeName, errorCase.useSTD3ASCIIRules, 928b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errorCase.expected, TRUE, TRUE, IDNToUnicode); 929b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 930b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 931b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 932b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 933b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru} 934b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru/* 935b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruvoid TestIDNA::testConformance(const char* toASCIIName, TestFunc toASCII, 936b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru const char* IDNToASCIIName, TestFunc IDNToASCII, 937b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru const char* IDNToUnicodeName, TestFunc IDNToUnicode, 938b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru const char* toUnicodeName, TestFunc toUnicode){ 939b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UChar src[MAX_DEST_SIZE]; 940b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru int32_t srcLen=0; 941b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UChar expected[MAX_DEST_SIZE]; 942b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru int32_t expectedLen = 0; 943b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru for(int32_t i=0;i< (int32_t)(sizeof(conformanceTestCases)/sizeof(conformanceTestCases[0]));i++){ 944b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru const char* utf8Chars1 = conformanceTestCases[i].in; 945b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru int32_t utf8Chars1Len = (int32_t)strlen(utf8Chars1); 946b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru const char* utf8Chars2 = conformanceTestCases[i].out; 947b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru int32_t utf8Chars2Len = (utf8Chars2 == NULL) ? 0 : (int32_t)strlen(utf8Chars2); 948b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 949b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UErrorCode status = U_ZERO_ERROR; 950b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru u_strFromUTF8(src,MAX_DEST_SIZE,&srcLen,utf8Chars1,utf8Chars1Len,&status); 951b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if(U_FAILURE(status)){ 952b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errln(UnicodeString("Conversion of UTF8 source in conformanceTestCases[") + i +UnicodeString( "].in ( ")+prettify(utf8Chars1) +UnicodeString(" ) failed. Error: ")+ UnicodeString(u_errorName(status))); 953b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru continue; 954b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 955b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if(utf8Chars2 != NULL){ 956b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru u_strFromUTF8(expected,MAX_DEST_SIZE,&expectedLen,utf8Chars2,utf8Chars2Len, &status); 957b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if(U_FAILURE(status)){ 958b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errln(UnicodeString("Conversion of UTF8 source in conformanceTestCases[") + i +UnicodeString( "].in ( ")+prettify(utf8Chars1) +UnicodeString(" ) failed. Error: ")+ UnicodeString(u_errorName(status))); 959b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru continue; 960b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 961b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 962b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 963b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if(conformanceTestCases[i].expectedStatus != U_ZERO_ERROR){ 964b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru // test toASCII 965b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru testAPI(src,expected, 966b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru IDNToASCIIName, FALSE, 967b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru conformanceTestCases[i].expectedStatus, 968b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru TRUE, 969b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru (conformanceTestCases[i].expectedStatus != U_IDNA_UNASSIGNED_ERROR), 970b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru IDNToASCII); 971b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 972b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru testAPI(src,expected, 973b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru toASCIIName, FALSE, 974b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru conformanceTestCases[i].expectedStatus, TRUE, 975b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru (conformanceTestCases[i].expectedStatus != U_IDNA_UNASSIGNED_ERROR), 976b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru toASCII); 977b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 978b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 979b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru testAPI(src,src, 980b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru IDNToUnicodeName, FALSE, 981b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru conformanceTestCases[i].expectedStatus, TRUE, TRUE, IDNToUnicode); 982b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru testAPI(src,src, 983b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru toUnicodeName, FALSE, 984b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru conformanceTestCases[i].expectedStatus, TRUE, TRUE, toUnicode); 985b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 986b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 987b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 988b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru} 989b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru*/ 990b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru// test and ascertain 991b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru// func(func(func(src))) == func(src) 992b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruvoid TestIDNA::testChaining(const UChar* src,int32_t numIterations,const char* testName, 993b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UBool useSTD3ASCIIRules, UBool caseInsensitive, TestFunc func){ 994b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UChar even[MAX_DEST_SIZE]; 995b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UChar odd[MAX_DEST_SIZE]; 996b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UChar expected[MAX_DEST_SIZE]; 997b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru int32_t i=0,evenLen=0,oddLen=0,expectedLen=0; 998b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UErrorCode status = U_ZERO_ERROR; 999b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru int32_t srcLen = u_strlen(src); 1000b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru int32_t options = (useSTD3ASCIIRules == TRUE) ? UIDNA_USE_STD3_RULES : UIDNA_DEFAULT; 1001b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UParseError parseError; 1002b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 1003b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru // test null-terminated source 1004b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru expectedLen = func(src,-1,expected,MAX_DEST_SIZE, options, &parseError, &status); 1005b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if(U_FAILURE(status)){ 10066d5deb12725f146643d443090dfa11b206df528aJean-Baptiste Queru errcheckln(status, "%s null terminated source failed. Error: %s",testName, u_errorName(status)); 1007b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 1008b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru memcpy(odd,expected,(expectedLen+1) * U_SIZEOF_UCHAR); 1009b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru memcpy(even,expected,(expectedLen+1) * U_SIZEOF_UCHAR); 1010b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru for(;i<=numIterations; i++){ 1011b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if((i%2) ==0){ 1012b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru evenLen = func(odd,-1,even,MAX_DEST_SIZE,options, &parseError, &status); 1013b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if(U_FAILURE(status)){ 10146d5deb12725f146643d443090dfa11b206df528aJean-Baptiste Queru errcheckln(status, "%s null terminated source failed - %s",testName, u_errorName(status)); 1015b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru break; 1016b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 1017b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru }else{ 1018b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru oddLen = func(even,-1,odd,MAX_DEST_SIZE,options, &parseError, &status); 1019b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if(U_FAILURE(status)){ 1020b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errln("%s null terminated source failed\n",testName); 1021b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru break; 1022b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 1023b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 1024b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 1025b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if(caseInsensitive ==TRUE){ 1026b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if( u_strCaseCompare(even,evenLen, expected,expectedLen, 0, &status) !=0 || 1027b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru u_strCaseCompare(odd,oddLen, expected,expectedLen, 0, &status) !=0 ){ 1028b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 1029b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errln("Chaining for %s null terminated source failed\n",testName); 1030b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 1031b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru }else{ 1032b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if( u_strncmp(even,expected,expectedLen) != 0 || 1033b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru u_strncmp(odd,expected,expectedLen) !=0 ){ 1034b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 1035b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errln("Chaining for %s null terminated source failed\n",testName); 1036b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 1037b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 1038b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 1039b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru // test null-terminated source 1040b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru status = U_ZERO_ERROR; 1041b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru expectedLen = func(src,-1,expected,MAX_DEST_SIZE,options|UIDNA_ALLOW_UNASSIGNED, &parseError, &status); 1042b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if(U_FAILURE(status)){ 10436d5deb12725f146643d443090dfa11b206df528aJean-Baptiste Queru errcheckln(status, "%s null terminated source with options set failed. Error: %s",testName, u_errorName(status)); 1044b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 1045b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru memcpy(odd,expected,(expectedLen+1) * U_SIZEOF_UCHAR); 1046b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru memcpy(even,expected,(expectedLen+1) * U_SIZEOF_UCHAR); 1047b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru for(;i<=numIterations; i++){ 1048b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if((i%2) ==0){ 1049b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru evenLen = func(odd,-1,even,MAX_DEST_SIZE,options|UIDNA_ALLOW_UNASSIGNED, &parseError, &status); 1050b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if(U_FAILURE(status)){ 10516d5deb12725f146643d443090dfa11b206df528aJean-Baptiste Queru errcheckln(status, "%s null terminated source with options set failed - %s",testName, u_errorName(status)); 1052b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru break; 1053b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 1054b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru }else{ 1055b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru oddLen = func(even,-1,odd,MAX_DEST_SIZE,options|UIDNA_ALLOW_UNASSIGNED, &parseError, &status); 1056b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if(U_FAILURE(status)){ 1057b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errln("%s null terminated source with options set failed\n",testName); 1058b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru break; 1059b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 1060b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 1061b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 1062b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if(caseInsensitive ==TRUE){ 1063b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if( u_strCaseCompare(even,evenLen, expected,expectedLen, 0, &status) !=0 || 1064b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru u_strCaseCompare(odd,oddLen, expected,expectedLen, 0, &status) !=0 ){ 1065b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 1066b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errln("Chaining for %s null terminated source with options set failed\n",testName); 1067b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 1068b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru }else{ 1069b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if( u_strncmp(even,expected,expectedLen) != 0 || 1070b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru u_strncmp(odd,expected,expectedLen) !=0 ){ 1071b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 1072b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errln("Chaining for %s null terminated source with options set failed\n",testName); 1073b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 1074b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 1075b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 1076b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 1077b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru // test source with length 1078b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru status = U_ZERO_ERROR; 1079b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru expectedLen = func(src,srcLen,expected,MAX_DEST_SIZE,options, &parseError, &status); 1080b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if(U_FAILURE(status)){ 10816d5deb12725f146643d443090dfa11b206df528aJean-Baptiste Queru errcheckln(status, "%s null terminated source failed. Error: %s",testName, u_errorName(status)); 1082b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 1083b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru memcpy(odd,expected,(expectedLen+1) * U_SIZEOF_UCHAR); 1084b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru memcpy(even,expected,(expectedLen+1) * U_SIZEOF_UCHAR); 1085b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru for(;i<=numIterations; i++){ 1086b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if((i%2) ==0){ 1087b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru evenLen = func(odd,oddLen,even,MAX_DEST_SIZE,options, &parseError, &status); 1088b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if(U_FAILURE(status)){ 10896d5deb12725f146643d443090dfa11b206df528aJean-Baptiste Queru errcheckln(status, "%s source with source length failed - %s",testName, u_errorName(status)); 1090b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru break; 1091b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 1092b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru }else{ 1093b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru oddLen = func(even,evenLen,odd,MAX_DEST_SIZE,options, &parseError, &status); 1094b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if(U_FAILURE(status)){ 10956d5deb12725f146643d443090dfa11b206df528aJean-Baptiste Queru errcheckln(status, "%s source with source length failed - %s",testName, u_errorName(status)); 1096b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru break; 1097b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 1098b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 1099b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 1100b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if(caseInsensitive ==TRUE){ 1101b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if( u_strCaseCompare(even,evenLen, expected,expectedLen, 0, &status) !=0 || 1102b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru u_strCaseCompare(odd,oddLen, expected,expectedLen, 0, &status) !=0 ){ 1103b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 1104b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errln("Chaining for %s source with source length failed\n",testName); 1105b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 1106b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru }else{ 1107b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if( u_strncmp(even,expected,expectedLen) != 0 || 1108b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru u_strncmp(odd,expected,expectedLen) !=0 ){ 1109b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 1110b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errln("Chaining for %s source with source length failed\n",testName); 1111b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 1112b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 1113b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru status = U_ZERO_ERROR; 1114b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru expectedLen = func(src,srcLen,expected,MAX_DEST_SIZE,options|UIDNA_ALLOW_UNASSIGNED, &parseError, &status); 1115b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if(U_FAILURE(status)){ 11166d5deb12725f146643d443090dfa11b206df528aJean-Baptiste Queru errcheckln(status, "%s null terminated source with options set failed. Error: %s",testName, u_errorName(status)); 1117b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 1118b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru memcpy(odd,expected,(expectedLen+1) * U_SIZEOF_UCHAR); 1119b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru memcpy(even,expected,(expectedLen+1) * U_SIZEOF_UCHAR); 1120b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru for(;i<=numIterations; i++){ 1121b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if((i%2) ==0){ 1122b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru evenLen = func(odd,oddLen,even,MAX_DEST_SIZE,options|UIDNA_ALLOW_UNASSIGNED, &parseError, &status); 1123b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if(U_FAILURE(status)){ 11246d5deb12725f146643d443090dfa11b206df528aJean-Baptiste Queru errcheckln(status, "%s source with source length and options set failed - %s",testName, u_errorName(status)); 1125b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru break; 1126b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 1127b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru }else{ 1128b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru oddLen = func(even,evenLen,odd,MAX_DEST_SIZE,options|UIDNA_ALLOW_UNASSIGNED, &parseError, &status); 1129b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if(U_FAILURE(status)){ 11306d5deb12725f146643d443090dfa11b206df528aJean-Baptiste Queru errcheckln(status, "%s source with source length and options set failed - %s",testName, u_errorName(status)); 1131b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru break; 1132b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 1133b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 1134b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 1135b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if(caseInsensitive ==TRUE){ 1136b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if( u_strCaseCompare(even,evenLen, expected,expectedLen, 0, &status) !=0 || 1137b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru u_strCaseCompare(odd,oddLen, expected,expectedLen, 0, &status) !=0 ){ 1138b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 1139b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errln("Chaining for %s source with source length and options set failed\n",testName); 1140b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 1141b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru }else{ 1142b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if( u_strncmp(even,expected,expectedLen) != 0 || 1143b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru u_strncmp(odd,expected,expectedLen) !=0 ){ 1144b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 1145b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errln("Chaining for %s source with source length and options set failed\n",testName); 1146b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 1147b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 1148b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru} 1149b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruvoid TestIDNA::testChaining(const char* toASCIIName, TestFunc toASCII, 1150b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru const char* toUnicodeName, TestFunc toUnicode){ 1151b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru int32_t i; 1152b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UChar buf[MAX_DEST_SIZE]; 1153b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 1154b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru for(i=0;i< (int32_t)(sizeof(asciiIn)/sizeof(asciiIn[0])); i++){ 1155b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru u_charsToUChars(asciiIn[i],buf, (int32_t)(strlen(asciiIn[i])+1)); 1156b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru testChaining(buf,5,toUnicodeName, FALSE, FALSE, toUnicode); 1157b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 1158b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru for(i=0;i< (int32_t)(sizeof(unicodeIn)/sizeof(unicodeIn[0])); i++){ 1159b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru testChaining(unicodeIn[i], 5,toASCIIName, FALSE, TRUE, toASCII); 1160b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 1161b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru} 1162b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 1163b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 1164b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruvoid TestIDNA::testRootLabelSeparator(const char* testName, CompareFunc func, 1165b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru const char* IDNToASCIIName, TestFunc IDNToASCII, 1166b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru const char* IDNToUnicodeName, TestFunc IDNToUnicode){ 1167b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru int32_t i; 1168b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 1169b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 1170b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UChar www[] = {0x0057, 0x0057, 0x0057, 0x002E, 0x0000}; 1171b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UChar com[] = {0x002E, 0x0043, 0x004F, 0x004D, 0x002E, /* root label separator */0x0000}; 1172b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UChar buf[MAX_DEST_SIZE]={0x0057, 0x0057, 0x0057, 0x002E, 0x0000}; 1173b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 1174b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UnicodeString source(www), uni0(www),uni1(www), ascii0(www), ascii1(www); 1175b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 1176b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru uni0.append(unicodeIn[0]); 1177b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru uni0.append(com); 1178b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru uni0.append((UChar)0x0000); 1179b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 1180b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru uni1.append(unicodeIn[1]); 1181b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru uni1.append(com); 1182b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru uni1.append((UChar)0x0000); 1183b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 1184b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru ascii0.append(asciiIn[0]); 1185b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru ascii0.append(com); 1186b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru ascii0.append((UChar)0x0000); 1187b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 1188b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru ascii1.append(asciiIn[1]); 1189b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru ascii1.append(com); 1190b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru ascii1.append((UChar)0x0000); 1191b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 1192b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru for(i=0;i< (int32_t)(sizeof(unicodeIn)/sizeof(unicodeIn[0])); i++){ 1193b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 1194b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru u_charsToUChars(asciiIn[i],buf+4, (int32_t)(strlen(asciiIn[i])+1)); 1195b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru u_strcat(buf,com); 1196b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 1197b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru // for every entry in unicodeIn array 1198b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru // prepend www. and append .com 1199b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru source.truncate(4); 1200b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru source.append(unicodeIn[i]); 1201b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru source.append(com); 1202b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru source.append((UChar)0x0000); 1203b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 1204b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru const UChar* src = source.getBuffer(); 1205b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru int32_t srcLen = u_strlen(src); //subtract null 1206b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 1207b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru // b) compare it with asciiIn equivalent 1208b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru testCompare(src,srcLen,buf,u_strlen(buf),testName, func,TRUE); 1209b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 1210b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru // a) compare it with itself 1211b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru testCompare(src,srcLen,src,srcLen,testName, func,TRUE); 1212b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 1213b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 1214b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru // IDNToASCII comparison 1215b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru testAPI(src,buf,IDNToASCIIName,FALSE,U_ZERO_ERROR,TRUE, TRUE, IDNToASCII); 1216b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru // IDNToUnicode comparison 1217b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru testAPI(buf,src,IDNToUnicodeName, FALSE,U_ZERO_ERROR, TRUE, TRUE, IDNToUnicode); 1218b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 1219b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru // c) compare it with unicodeIn not equivalent 1220b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if(i==0){ 1221b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru testCompare(src,srcLen,uni1.getBuffer(),uni1.length()-1,testName, func,FALSE); 1222b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru }else{ 1223b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru testCompare(src,srcLen,uni0.getBuffer(),uni0.length()-1,testName, func,FALSE); 1224b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 1225b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru // d) compare it with asciiIn not equivalent 1226b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if(i==0){ 1227b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru testCompare(src,srcLen,ascii1.getBuffer(),ascii1.length()-1,testName, func,FALSE); 1228b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru }else{ 1229b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru testCompare(src,srcLen,ascii0.getBuffer(),ascii0.length()-1,testName, func,FALSE); 1230b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 1231b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 1232b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru} 1233b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 1234b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru//--------------------------------------------- 1235b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru// runIndexedTest 1236b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru//--------------------------------------------- 1237b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 1238b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruvoid TestIDNA::runIndexedTest( int32_t index, UBool exec, const char* &name, char* par) 1239b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru{ 1240b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (exec) logln((UnicodeString)"TestSuite IDNA API "); 1241b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru switch (index) { 1242b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 1243b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru case 0: name = "TestToASCII"; if (exec) TestToASCII(); break; 1244b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru case 1: name = "TestToUnicode"; if (exec) TestToUnicode(); break; 1245b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru case 2: name = "TestIDNToASCII"; if (exec) TestIDNToASCII(); break; 1246b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru case 3: name = "TestIDNToUnicode"; if (exec) TestIDNToUnicode(); break; 1247b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru case 4: name = "TestCompare"; if (exec) TestCompare(); break; 1248b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru case 5: name = "TestErrorCases"; if (exec) TestErrorCases(); break; 1249b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru case 6: name = "TestChaining"; if (exec) TestChaining(); break; 1250b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru case 7: name = "TestRootLabelSeparator"; if(exec) TestRootLabelSeparator(); break; 1251b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru case 8: name = "TestCompareReferenceImpl"; if(exec) TestCompareReferenceImpl(); break; 1252b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru case 9: name = "TestDataFile"; if(exec) TestDataFile(); break; 125350294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho#if !UCONFIG_NO_FILE_IO && !UCONFIG_NO_LEGACY_CONVERSION 1254b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru case 10: name = "TestRefIDNA"; if(exec) TestRefIDNA(); break; 1255b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru case 11: name = "TestIDNAMonkeyTest"; if(exec) TestIDNAMonkeyTest(); break; 125650294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho#else 125750294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho case 10: case 11: name = "skip"; break; 125850294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho#endif 1259b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru case 12: 1260b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru { 1261b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru name = "TestConformanceTestVectors"; 1262b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if(exec){ 1263b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru logln("TestSuite IDNA conf----"); logln(); 1264b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru IdnaConfTest test; 1265b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru callTest(test, par); 1266b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 1267b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru break; 1268b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 1269b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru default: name = ""; break; /*needed to end loop*/ 1270b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 1271b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru} 1272b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruvoid TestIDNA::TestToASCII(){ 1273b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru testToASCII("uidna_toASCII", uidna_toASCII); 1274b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru} 1275b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruvoid TestIDNA::TestToUnicode(){ 1276b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru testToUnicode("uidna_toUnicode", uidna_toUnicode); 1277b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru} 1278b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruvoid TestIDNA::TestIDNToASCII(){ 1279b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru testIDNToASCII("uidna_IDNToASCII", uidna_IDNToASCII); 1280b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru} 1281b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruvoid TestIDNA::TestIDNToUnicode(){ 1282b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru testIDNToUnicode("uidna_IDNToUnicode", uidna_IDNToUnicode); 1283b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru} 1284b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruvoid TestIDNA::TestCompare(){ 1285b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru testCompare("uidna_compare",uidna_compare); 1286b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru} 1287b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruvoid TestIDNA::TestErrorCases(){ 1288b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru testErrorCases( "uidna_IDNToASCII",uidna_IDNToASCII, 1289b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru "uidna_IDNToUnicode",uidna_IDNToUnicode); 1290b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru} 1291b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruvoid TestIDNA::TestRootLabelSeparator(){ 1292b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru testRootLabelSeparator( "uidna_compare",uidna_compare, 1293b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru "uidna_IDNToASCII", uidna_IDNToASCII, 1294b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru "uidna_IDNToUnicode",uidna_IDNToUnicode 1295b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru ); 1296b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru} 1297b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruvoid TestIDNA::TestChaining(){ 1298b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru testChaining("uidna_toASCII",uidna_toASCII, "uidna_toUnicode", uidna_toUnicode); 1299b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru} 1300b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 1301b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 1302b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Querustatic const int loopCount = 100; 1303b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Querustatic const int maxCharCount = 20; 1304b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Querustatic const int maxCodePoint = 0x10ffff; 1305b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Querustatic uint32_t 1306b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Querurandul() 1307b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru{ 1308b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru static UBool initialized = FALSE; 1309b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (!initialized) 1310b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru { 1311b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru srand((unsigned)time(NULL)); 1312b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru initialized = TRUE; 1313b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 1314b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru // Assume rand has at least 12 bits of precision 1315b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru uint32_t l = 0; 1316b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru for (uint32_t i=0; i<sizeof(l); ++i) 1317b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru ((char*)&l)[i] = (char)((rand() & 0x0FF0) >> 4); 1318b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru return l; 1319b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru} 1320b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 1321b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru/** 1322b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * Return a random integer i where 0 <= i < n. 1323b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * A special function that gets random codepoints from planes 0,1,2 and 14 1324b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru */ 1325b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Querustatic int32_t rand_uni() 1326b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru{ 1327b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru int32_t retVal = (int32_t)(randul()& 0x3FFFF); 1328b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if(retVal >= 0x30000){ 1329b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru retVal+=0xB0000; 1330b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 1331b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru return retVal; 1332b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru} 1333b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 1334b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Querustatic int32_t randi(int32_t n){ 1335b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru return (int32_t) (randul() % (n+1)); 1336b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru} 1337b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 1338b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruvoid getTestSource(UnicodeString& fillIn) { 1339b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru int32_t i = 0; 1340b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru int32_t charCount = (randi(maxCharCount) + 1); 1341b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru while (i <charCount ) { 1342b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru int32_t codepoint = rand_uni(); 1343b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if(codepoint == 0x0000){ 1344b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru continue; 1345b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 1346b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru fillIn.append((UChar32)codepoint); 1347b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru i++; 1348b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 1349b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 1350b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru} 1351b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 1352b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste QueruUnicodeString TestIDNA::testCompareReferenceImpl(UnicodeString& src, 1353b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru TestFunc refIDNA, const char* refIDNAName, 1354b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru TestFunc uIDNA, const char* uIDNAName, 1355b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru int32_t options){ 1356b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 1357b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru const UChar* srcUChars = src.getBuffer(); 1358b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UChar exp[MAX_DEST_SIZE]={0}; 1359b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru int32_t expCap = MAX_DEST_SIZE, expLen=0; 1360b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UErrorCode expStatus = U_ZERO_ERROR; 1361b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UParseError parseError; 1362b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 1363b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru logln("Comparing "+ UnicodeString(refIDNAName) 1364b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru + " with "+ UnicodeString(uIDNAName) 1365b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru +" for input: " + prettify(srcUChars)); 1366b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 1367b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru expLen = refIDNA(srcUChars, src.length()-1, exp, expCap, 1368b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru options, &parseError, &expStatus); 1369b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 1370b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UChar got[MAX_DEST_SIZE]={0}; 1371b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru int32_t gotCap = MAX_DEST_SIZE, gotLen=0; 1372b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UErrorCode gotStatus = U_ZERO_ERROR; 1373b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 1374b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru gotLen = uIDNA(srcUChars, src.length()-1, got, gotCap, 1375b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru options, &parseError, &gotStatus); 1376b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 1377b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if(expStatus != gotStatus){ 1378b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errln("Did not get the expected status while comparing " + UnicodeString(refIDNAName) 1379b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru + " with " + UnicodeString(uIDNAName) 1380b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru + " Expected: " + UnicodeString(u_errorName(expStatus)) 1381b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru + " Got: " + UnicodeString(u_errorName(gotStatus)) 1382b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru + " for Source: "+ prettify(srcUChars) 1383b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru + " Options: " + options); 1384b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru return UnicodeString(""); 1385b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 1386b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 1387b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru // now we know that both implementations yielded same error 1388b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if(U_SUCCESS(expStatus)){ 1389b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru // compare the outputs if status == U_ZERO_ERROR 1390b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if(u_strCompare(exp, expLen, got, gotLen, TRUE) != 0){ 1391b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errln("Did not get the expected output while comparing " + UnicodeString(refIDNAName) 1392b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru + " with " + UnicodeString(uIDNAName) 1393b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru + " Expected: " + prettify(UnicodeString(exp, expLen)) 1394b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru + " Got: " + prettify(UnicodeString(got, gotLen)) 1395b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru + " for Source: "+ prettify(srcUChars) 1396b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru + " Options: " + options); 1397b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 1398b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru return UnicodeString(exp, expLen); 1399b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 1400b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru }else{ 1401b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru logln("Got the same error while comparing " 1402b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru + UnicodeString(refIDNAName) 1403b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru + " with "+ UnicodeString(uIDNAName) 1404b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru +" for input: " + prettify(srcUChars)); 1405b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 1406b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru return UnicodeString(""); 1407b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru} 1408b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 1409b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruvoid TestIDNA::testCompareReferenceImpl(const UChar* src, int32_t srcLen){ 1410b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UnicodeString label(src,srcLen); 1411b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru label.append((UChar)0x0000); 1412b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 1413b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru //test idnaref_toASCII and idnare 1414b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UnicodeString asciiLabel = testCompareReferenceImpl(label, 1415b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru idnaref_toASCII, "idnaref_toASCII", 1416b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru uidna_toASCII, "uidna_toASCII", 1417b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UIDNA_ALLOW_UNASSIGNED); 1418b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru testCompareReferenceImpl(label, 1419b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru idnaref_toASCII, "idnaref_toASCII", 1420b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru uidna_toASCII, "uidna_toASCII", 1421b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UIDNA_DEFAULT); 1422b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru testCompareReferenceImpl(label, 1423b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru idnaref_toASCII, "idnaref_toASCII", 1424b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru uidna_toASCII, "uidna_toASCII", 1425b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UIDNA_USE_STD3_RULES); 1426b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru testCompareReferenceImpl(label, 1427b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru idnaref_toASCII, "idnaref_toASCII", 1428b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru uidna_toASCII, "uidna_toASCII", 1429b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UIDNA_USE_STD3_RULES | UIDNA_ALLOW_UNASSIGNED); 1430b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 1431b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if(asciiLabel.length()!=0){ 1432b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru asciiLabel.append((UChar)0x0000); 1433b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 1434b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru // test toUnciode 1435b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru testCompareReferenceImpl(asciiLabel, 1436b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru idnaref_toUnicode, "idnaref_toUnicode", 1437b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru uidna_toUnicode, "uidna_toUnicode", 1438b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UIDNA_ALLOW_UNASSIGNED); 1439b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru testCompareReferenceImpl(asciiLabel, 1440b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru idnaref_toUnicode, "idnaref_toUnicode", 1441b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru uidna_toUnicode, "uidna_toUnicode", 1442b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UIDNA_DEFAULT); 1443b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru testCompareReferenceImpl(asciiLabel, 1444b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru idnaref_toUnicode, "idnaref_toUnicode", 1445b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru uidna_toUnicode, "uidna_toUnicode", 1446b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UIDNA_USE_STD3_RULES); 1447b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru testCompareReferenceImpl(asciiLabel, 1448b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru idnaref_toUnicode, "idnaref_toUnicode", 1449b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru uidna_toUnicode, "uidna_toUnicode", 1450b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UIDNA_USE_STD3_RULES | UIDNA_ALLOW_UNASSIGNED); 1451b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 1452b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 1453b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru} 1454b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruconst char* failures[] ={ 1455b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru "\\uAA42\\U0001F8DD\\U00019D01\\U000149A3\\uD385\\U000EE0F5\\U00018B92\\U000179D1\\U00018624\\U0002227F\\U000E83C0\\U000E8DCD\\u5460\\U00017F34\\U0001570B\\u43D1\\U0002C9C9\\U000281EC\\u2105\\U000180AE\\uC5D4", 1456b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru "\\U0002F5A6\\uD638\\u0D0A\\u9E9C\\uFE5B\\U0001FCCB\\u66C4", 1457b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru}; 1458b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 1459b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruvoid TestIDNA::TestIDNAMonkeyTest(){ 1460b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UnicodeString source; 1461b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UErrorCode status = U_ZERO_ERROR; 1462b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru int i; 1463b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 1464b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru getInstance(status); // Init prep 1465b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (U_FAILURE(status)) { 14666d5deb12725f146643d443090dfa11b206df528aJean-Baptiste Queru dataerrln("Test could not initialize. Got %s", u_errorName(status)); 1467b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru return; 1468b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 1469b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 1470b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru for(i=0; i<loopCount; i++){ 1471b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru source.truncate(0); 1472b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru getTestSource(source); 1473b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru source.append((UChar)0x0000); 1474b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru const UChar* src = source.getBuffer(); 1475b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru testCompareReferenceImpl(src,source.length()-1); 1476b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru testCompareReferenceImpl(src,source.length()-1); 1477b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 1478b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 1479b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru /* for debugging */ 1480b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru for (i=0; i<(int)(sizeof(failures)/sizeof(failures[0])); i++){ 1481b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru source.truncate(0); 1482c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru source.append( UnicodeString(failures[i], -1, US_INV) ); 1483b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru source = source.unescape(); 1484b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru source.append((UChar)0x0000); 1485b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru const UChar *src = source.getBuffer(); 1486b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru testCompareReferenceImpl(src,source.length()-1); 1487b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru //debug(source.getBuffer(),source.length(),UIDNA_ALLOW_UNASSIGNED); 1488b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 1489b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 1490b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 1491b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru source.truncate(0); 1492c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru source.append(UNICODE_STRING_SIMPLE("\\uCF18\\U00021161\\U000EEF11\\U0002BB82\\U0001D63C")); 1493b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru debug(source.getBuffer(),source.length(),UIDNA_ALLOW_UNASSIGNED); 1494b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 1495b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru { // test deletion of code points 1496c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru UnicodeString source("\\u043f\\u00AD\\u034f\\u043e\\u0447\\u0435\\u043c\\u0443\\u0436\\u0435\\u043e\\u043d\\u0438\\u043d\\u0435\\u0433\\u043e\\u0432\\u043e\\u0440\\u044f\\u0442\\u043f\\u043e\\u0440\\u0443\\u0441\\u0441\\u043a\\u0438\\u0000", -1, US_INV); 1497b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru source = source.unescape(); 1498c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru UnicodeString expected("\\u043f\\u043e\\u0447\\u0435\\u043c\\u0443\\u0436\\u0435\\u043e\\u043d\\u0438\\u043d\\u0435\\u0433\\u043e\\u0432\\u043e\\u0440\\u044f\\u0442\\u043f\\u043e\\u0440\\u0443\\u0441\\u0441\\u043a\\u0438\\u0000", -1, US_INV); 1499b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru expected = expected.unescape(); 1500b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UnicodeString ascii("xn--b1abfaaepdrnnbgefbadotcwatmq2g4l"); 1501b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru ascii.append((UChar)0x0000); 1502b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru testAPI(source.getBuffer(),ascii.getBuffer(), "uidna_toASCII", FALSE, U_ZERO_ERROR, TRUE, TRUE, uidna_toASCII); 1503b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 1504b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru testAPI(source.getBuffer(),ascii.getBuffer(), "idnaref_toASCII", FALSE, U_ZERO_ERROR, TRUE, TRUE, idnaref_toASCII); 1505b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 1506b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru testCompareReferenceImpl(source.getBuffer(), source.length()-1); 1507b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 1508b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 1509b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru} 1510b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 1511b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruvoid TestIDNA::TestCompareReferenceImpl(){ 1512b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 1513b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UChar src [2] = {0,0}; 1514b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru int32_t srcLen = 0; 1515b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 1516b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 1517b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru for(int32_t i = 0x40000 ; i< 0x10ffff; i++){ 1518b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if(quick==TRUE && i> 0x1FFFF){ 1519b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru return; 1520b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 1521b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if(i >= 0x30000 && i <= 0xF0000){ 1522b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru i+=0xB0000; 1523b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 1524b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if(i>0xFFFF){ 1525b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru src[0] = U16_LEAD(i); 1526b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru src[1] = U16_TRAIL(i); 1527b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru srcLen =2; 1528b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru }else{ 1529b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru src[0] = (UChar)i; 1530b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru src[1] = 0; 1531b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru srcLen = 1; 1532b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 1533b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru testCompareReferenceImpl(src, srcLen); 1534b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 1535b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru} 1536b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 1537b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruvoid TestIDNA::TestRefIDNA(){ 1538b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UErrorCode status = U_ZERO_ERROR; 1539b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru getInstance(status); // Init prep 1540b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (U_FAILURE(status)) { 1541c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru if (status == U_FILE_ACCESS_ERROR) { 15426d5deb12725f146643d443090dfa11b206df528aJean-Baptiste Queru dataerrln("Test could not initialize. Got %s", u_errorName(status)); 1543c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru } 1544b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru return; 1545b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 1546b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 1547b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru testToASCII("idnaref_toASCII", idnaref_toASCII); 1548b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru testToUnicode("idnaref_toUnicode", idnaref_toUnicode); 1549b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru testIDNToASCII("idnaref_IDNToASCII", idnaref_IDNToASCII); 1550b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru testIDNToUnicode("idnaref_IDNToUnicode", idnaref_IDNToUnicode); 1551b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru testCompare("idnaref_compare",idnaref_compare); 1552b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru testErrorCases( "idnaref_IDNToASCII",idnaref_IDNToASCII, 1553b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru "idnaref_IDNToUnicode",idnaref_IDNToUnicode); 1554b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru testChaining("idnaref_toASCII",idnaref_toASCII, "idnaref_toUnicode", idnaref_toUnicode); 1555b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 1556b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru testRootLabelSeparator( "idnaref_compare",idnaref_compare, 1557b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru "idnaref_IDNToASCII", idnaref_IDNToASCII, 1558b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru "idnaref_IDNToUnicode",idnaref_IDNToUnicode 1559b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru ); 1560b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru testChaining("idnaref_toASCII",idnaref_toASCII, "idnaref_toUnicode", idnaref_toUnicode); 1561b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru} 1562b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 1563b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 1564b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruvoid TestIDNA::TestDataFile(){ 1565b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru testData(*this); 1566b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru} 1567b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste QueruTestIDNA::~TestIDNA(){ 1568b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if(gPrep!=NULL){ 1569b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru delete gPrep; 1570b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru gPrep = NULL; 1571b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 1572b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru} 1573b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 1574b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste QueruNamePrepTransform* TestIDNA::gPrep = NULL; 1575b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 1576b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste QueruNamePrepTransform* TestIDNA::getInstance(UErrorCode& status){ 1577b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if(TestIDNA::gPrep == NULL){ 1578b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UParseError parseError; 1579b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru TestIDNA::gPrep = NamePrepTransform::createInstance(parseError, status); 1580b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if(TestIDNA::gPrep ==NULL){ 1581b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru //status = U_MEMORY_ALLOCATION_ERROR; 1582b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru return NULL; 1583b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 1584b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 1585b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru return TestIDNA::gPrep; 1586b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 1587b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru} 1588b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#endif /* #if !UCONFIG_NO_IDNA */ 1589