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