1ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru/******************************************************************** 2ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru * COPYRIGHT: 385bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho * Copyright (c) 2000-2009, International Business Machines Corporation and 4ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru * others. All Rights Reserved. 5ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru ********************************************************************/ 6ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru/* 7ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru* File stdnmtst.c 8ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru* 9ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru* Modification History: 10ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru* 11ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru* Date Name Description 12ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru* 08/05/2000 Yves Creation 13ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru****************************************************************************** 14ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru*/ 15ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 16ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru#include "unicode/ucnv.h" 17ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru#include "unicode/ustring.h" 18ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru#include "cstring.h" 19ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru#include "cintltst.h" 20ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 21ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru#define ARRAY_SIZE(array) (int32_t)(sizeof array / sizeof array[0]) 22ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 23ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Querustatic void TestStandardName(void); 24ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Querustatic void TestStandardNames(void); 25ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Querustatic void TestCanonicalName(void); 26ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 27ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queruvoid addStandardNamesTest(TestNode** root); 28ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 29ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 30ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queruvoid 31ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste QueruaddStandardNamesTest(TestNode** root) 32ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru{ 33ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru addTest(root, &TestStandardName, "tsconv/stdnmtst/TestStandardName"); 34ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru addTest(root, &TestStandardNames, "tsconv/stdnmtst/TestStandardNames"); 35ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru addTest(root, &TestCanonicalName, "tsconv/stdnmtst/TestCanonicalName"); 36ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru} 37ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 38ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Querustatic int dotestname(const char *name, const char *standard, const char *expected) { 39ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru int res = 1; 40ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 41ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru UErrorCode error; 42ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru const char *tag; 43ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 44ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru error = U_ZERO_ERROR; 45ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru tag = ucnv_getStandardName(name, standard, &error); 46ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru if (!tag && expected) { 4785bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho log_err_status(error, "FAIL: could not find %s standard name for %s\n", standard, name); 48ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru res = 0; 49ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru } else if (expected && (name == tag || uprv_strcmp(expected, tag))) { 50ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru log_err("FAIL: expected %s for %s standard name for %s, got %s\n", expected, standard, name, tag); 51ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru res = 0; 52ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru } 53ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 54ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru return res; 55ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru} 56ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 57ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Querustatic void TestStandardName() 58ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru{ 59ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru int res = 1; 60ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 61ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru uint16_t i, count; 62ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru UErrorCode err; 63ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 64ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru /* Iterate over all standards. */ 65ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru for (i = 0, count = ucnv_countStandards(); i < count-1; ++i) { 66ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru const char *standard; 67ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 68ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru err = U_ZERO_ERROR; 69ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru standard = ucnv_getStandard(i, &err); 70ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru if (U_FAILURE(err)) { 71ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru log_err("FAIL: ucnv_getStandard(%d), error=%s\n", i, u_errorName(err)); 72ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru res = 0; 73ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru } else if (!standard || !*standard) { 74ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru log_err("FAIL: %s standard name at index %d\n", (standard ? "empty" : 75ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru "null"), i); 76ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru res = 0; 77ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru } 78ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru } 79ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru err = U_ZERO_ERROR; 80ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru /* "" must be last */ 81ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru if(!count) { 82ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru log_data_err("No standards. You probably have no data.\n"); 83ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru } else if (*ucnv_getStandard((uint16_t)(count-1), &err) != 0) { 84ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru log_err("FAIL: ucnv_getStandard(%d) should return ""\n", count-1); 85ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru res = 0; 86ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru } 87ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru err = U_ZERO_ERROR; 88ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru if (ucnv_getStandard(++i, &err)) { 89ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru log_err("FAIL: ucnv_getStandard(%d) should return NULL\n", i); 90ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru res = 0; 91ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru } 92ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 93ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru if (res) { 94ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru log_verbose("PASS: iterating over standard names works\n"); 95ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru } 96ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 97ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru /* Test for some expected results. */ 98ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 99ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru if (dotestname("ibm-1208", "MIME", "UTF-8") && 100ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru /*dotestname("cp1252", "MIME", "windows-1252") &&*/ 101ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru dotestname("ascii", "MIME", "US-ASCII") && 102ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru dotestname("csiso2022jp2", "MIME", "ISO-2022-JP-2") && 103ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru dotestname("Iso20-22__cN", "IANA", "ISO-2022-CN") && 104ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru dotestname("ascii", "IANA", "ANSI_X3.4-1968") && 105ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru dotestname("cp850", "IANA", "IBM850") && 106ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru dotestname("crazy", "MIME", NULL) && 107ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru dotestname("ASCII", "crazy", NULL) && 108ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru dotestname("LMBCS-1", "MIME", NULL)) 109ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru { 110ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru log_verbose("PASS: getting IANA and MIME standard names works\n"); 111ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru } 112ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru} 113ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 114ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Querustatic int dotestconv(const char *name, const char *standard, const char *expected) { 115ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru int res = 1; 116ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 117ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru UErrorCode error; 118ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru const char *tag; 119ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 120ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru error = U_ZERO_ERROR; 121ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru tag = ucnv_getCanonicalName(name, standard, &error); 122ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru if (tag && !expected) { 123ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru log_err("FAIL: Unexpectedly found %s canonical name for %s, got %s\n", standard, name, tag); 124ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru res = 0; 125ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru } 126ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru else if (!tag && expected) { 12785bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho log_err_status(error, "FAIL: could not find %s canonical name for %s\n", (standard ? "\"\"" : standard), name); 128ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru res = 0; 129ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru } 130ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru else if (expected && (name == tag || uprv_strcmp(expected, tag) != 0)) { 131ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru log_err("FAIL: expected %s for %s canonical name for %s, got %s\n", expected, standard, name, tag); 132ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru res = 0; 133ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru } 134ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru else { 135ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru log_verbose("PASS: (\"%s\", \"%s\") -> %s == %s \n", name, standard, tag, expected); 136ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru } 137ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 138ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru return res; 139ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru} 140ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 141ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Querustatic void TestCanonicalName() 142ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru{ 143ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru /* Test for some expected results. */ 144ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 145ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru if (dotestconv("UTF-8", "IANA", "UTF-8") && /* default name */ 146ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru dotestconv("UTF-8", "MIME", "UTF-8") && /* default name */ 147ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru dotestconv("ibm-1208", "IBM", "UTF-8") && /* default name */ 148ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru dotestconv("ibm-5305", "IBM", "UTF-8") && /* non-default name */ 149ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru dotestconv("ibm-5305", "MIME", NULL) && /* mapping does not exist */ 150ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru dotestconv("ascii", "MIME", NULL) && /* mapping does not exist */ 151ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru dotestconv("ibm-1208", "IANA", NULL) && /* mapping does not exist */ 152ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru dotestconv("ibm-5305", "IANA", NULL) && /* mapping does not exist */ 153ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru dotestconv("cp1208", "", "UTF-8") && /* default name due to ordering */ 154ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru dotestconv("UTF16_BigEndian", "", "UTF-16BE") && /* non-default name due to ordering */ 155ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru dotestconv("ISO-2022-CN", "IANA", "ISO_2022,locale=zh,version=0") &&/* default name */ 156ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru dotestconv("Shift_JIS", "MIME", "ibm-943_P15A-2003") &&/* ambiguous alias */ 157ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru dotestconv("Shift_JIS", "", "ibm-943_P130-1999") &&/* ambiguous alias */ 158ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru dotestconv("ibm-943", "", "ibm-943_P15A-2003") &&/* ambiguous alias */ 159ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru dotestconv("ibm-943", "IBM", "ibm-943_P130-1999") &&/* ambiguous alias */ 160ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru dotestconv("ibm-1363", "", "ibm-1363_P11B-1998") &&/* ambiguous alias */ 161ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru dotestconv("ibm-1363", "IBM", "ibm-1363_P110-1997") &&/* ambiguous alias */ 162ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru dotestconv("crazy", "MIME", NULL) && 163ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru dotestconv("ASCII", "crazy", NULL)) 164ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru { 165ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru log_verbose("PASS: getting IANA and MIME canonical names works\n"); 166ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru } 167ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru} 168ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 169ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 170ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Querustatic UBool doTestNames(const char *name, const char *standard, const char **expected, int32_t size) { 171ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru UErrorCode err = U_ZERO_ERROR; 172ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru UEnumeration *myEnum = ucnv_openStandardNames(name, standard, &err); 173ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru const char *enumName, *testName; 174ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru int32_t enumCount = uenum_count(myEnum, &err); 175ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru int32_t idx, len, repeatTimes = 3; 17685bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho 17785bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho if (err == U_FILE_ACCESS_ERROR) { 17885bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho log_data_err("Unable to open standard names for %s of standard: %s\n", name, standard); 17985bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho return 0; 18085bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho } 181ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru if (size != enumCount) { 182ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru log_err("FAIL: different size arrays for %s. Got %d. Expected %d\n", name, enumCount, size); 183ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru return 0; 184ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru } 185ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru if (size < 0 && myEnum) { 186ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru log_err("FAIL: size < 0, but recieved an actual object\n"); 187ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru return 0; 188ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru } 189ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru log_verbose("\n%s %s\n", name, standard); 190ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru while (repeatTimes-- > 0) { 191ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru for (idx = 0; idx < enumCount; idx++) { 192ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru enumName = uenum_next(myEnum, &len, &err); 193ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru testName = expected[idx]; 194ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru if (uprv_strcmp(enumName, testName) != 0 || U_FAILURE(err) 195ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru || len != (int32_t)uprv_strlen(expected[idx])) 196ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru { 197ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru log_err("FAIL: uenum_next(%d) == \"%s\". expected \"%s\", len=%d, error=%s\n", 198ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru idx, enumName, testName, len, u_errorName(err)); 199ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru } 200ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru log_verbose("%s\n", enumName); 201ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru err = U_ZERO_ERROR; 202ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru } 203ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru if (enumCount >= 0) { 204ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru /* one past the list of all names must return NULL */ 205ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru enumName = uenum_next(myEnum, &len, &err); 206ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru if (enumName != NULL || len != 0 || U_FAILURE(err)) { 207ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru log_err("FAIL: uenum_next(past the list) did not return NULL[0] with U_SUCCESS(). name=%s standard=%s len=%d err=%s\n", name, standard, len, u_errorName(err)); 208ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru } 209ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru } 210ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru log_verbose("\n reset\n"); 211ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru uenum_reset(myEnum, &err); 212ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru if (U_FAILURE(err)) { 213ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru log_err("FAIL: uenum_reset() for %s{%s} failed with %s\n", 214ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru name, standard, u_errorName(err)); 215ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru err = U_ZERO_ERROR; 216ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru } 217ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru } 218ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru uenum_close(myEnum); 219ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru return 1; 220ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru} 221ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 222ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Querustatic UBool doTestUCharNames(const char *name, const char *standard, const char **expected, int32_t size) { 223ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru UErrorCode err = U_ZERO_ERROR; 224ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru UEnumeration *myEnum = ucnv_openStandardNames(name, standard, &err); 225ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru int32_t enumCount = uenum_count(myEnum, &err); 226ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru int32_t idx, repeatTimes = 3; 22785bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho 22885bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho if (err == U_FILE_ACCESS_ERROR) { 22985bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho log_data_err("Unable to open standard names for %s of standard: %s\n", name, standard); 23085bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho return 0; 23185bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho } 23285bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho 233ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru if (size != enumCount) { 234ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru log_err("FAIL: different size arrays. Got %d. Expected %d\n", enumCount, size); 235ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru return 0; 236ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru } 237ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru if (size < 0 && myEnum) { 238ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru log_err("FAIL: size < 0, but recieved an actual object\n"); 239ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru return 0; 240ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru } 241ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru log_verbose("\n%s %s\n", name, standard); 242ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru while (repeatTimes-- > 0) { 243ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru for (idx = 0; idx < enumCount; idx++) { 244ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru UChar testName[256]; 245ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru int32_t len; 246ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru const UChar *enumName = uenum_unext(myEnum, &len, &err); 247ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru u_uastrncpy(testName, expected[idx], sizeof(testName)/sizeof(testName[0])); 248ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru if (u_strcmp(enumName, testName) != 0 || U_FAILURE(err) 249ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru || len != (int32_t)uprv_strlen(expected[idx])) 250ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru { 251ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru log_err("FAIL: uenum_next(%d) == \"%s\". expected \"%s\", len=%d, error=%s\n", 252ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru idx, enumName, testName, len, u_errorName(err)); 253ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru } 254ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru log_verbose("%s\n", expected[idx]); 255ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru err = U_ZERO_ERROR; 256ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru } 257ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru log_verbose("\n reset\n"); 258ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru uenum_reset(myEnum, &err); 259ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru if (U_FAILURE(err)) { 260ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru log_err("FAIL: uenum_reset() for %s{%s} failed with %s\n", 261ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru name, standard, u_errorName(err)); 262ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru err = U_ZERO_ERROR; 263ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru } 264ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru } 265ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru uenum_close(myEnum); 266ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru return 1; 267ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru} 268ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 269ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Querustatic void TestStandardNames() 270ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru{ 271ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru static const char *asciiIANA[] = { 272ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru "ANSI_X3.4-1968", 273ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru "US-ASCII", 274ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru "ASCII", 275ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru "ANSI_X3.4-1986", 276ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru "ISO_646.irv:1991", 277ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru "ISO646-US", 278ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru "us", 279ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru "csASCII", 280ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru "iso-ir-6", 281ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru "cp367", 282ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru "IBM367", 283ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru }; 284ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru static const char *asciiMIME[] = { 285ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru "US-ASCII" 286ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru }; 287ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 288ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru static const char *iso2022MIME[] = { 289ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru "ISO-2022-KR", 290ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru }; 291ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 292ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru doTestNames("ASCII", "IANA", asciiIANA, ARRAY_SIZE(asciiIANA)); 293ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru doTestNames("US-ASCII", "IANA", asciiIANA, ARRAY_SIZE(asciiIANA)); 294ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru doTestNames("ASCII", "MIME", asciiMIME, ARRAY_SIZE(asciiMIME)); 295ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru doTestNames("ascii", "mime", asciiMIME, ARRAY_SIZE(asciiMIME)); 296ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 297ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru doTestNames("ASCII", "crazy", asciiMIME, -1); 298ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru doTestNames("crazy", "MIME", asciiMIME, -1); 299ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 300ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru doTestNames("LMBCS-1", "MIME", asciiMIME, 0); 301ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 302ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru doTestNames("ISO_2022,locale=ko,version=0", "MIME", iso2022MIME, ARRAY_SIZE(iso2022MIME)); 303ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru doTestNames("csiso2022kr", "MIME", iso2022MIME, ARRAY_SIZE(iso2022MIME)); 304ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 305ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru log_verbose(" Testing unext()\n"); 306ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru doTestUCharNames("ASCII", "IANA", asciiIANA, ARRAY_SIZE(asciiIANA)); 307ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 308ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru} 309