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