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