]>
git.saurik.com Git - apple/icu.git/blob - icuSources/test/cintltst/stdnmtst.c
1 /********************************************************************
3 * Copyright (c) 2000-2016, International Business Machines Corporation and
4 * others. All Rights Reserved.
5 ********************************************************************/
9 * Modification History:
11 * Date Name Description
12 * 08/05/2000 Yves Creation
13 ******************************************************************************
16 #include "unicode/ucnv.h"
17 #include "unicode/ustring.h"
22 static void TestStandardName ( void );
23 static void TestStandardNames ( void );
24 static void TestCanonicalName ( void );
26 void addStandardNamesTest ( TestNode
** root
);
30 addStandardNamesTest ( TestNode
** root
)
32 addTest ( root
, & TestStandardName
, "tsconv/stdnmtst/TestStandardName" );
33 addTest ( root
, & TestStandardNames
, "tsconv/stdnmtst/TestStandardNames" );
34 addTest ( root
, & TestCanonicalName
, "tsconv/stdnmtst/TestCanonicalName" );
37 static int dotestname ( const char * name
, const char * standard
, const char * expected
) {
44 tag
= ucnv_getStandardName ( name
, standard
, & error
);
45 if (! tag
&& expected
) {
46 log_err_status ( error
, "FAIL: could not find %s standard name for %s \n " , standard
, name
);
48 } else if ( expected
&& ( name
== tag
|| uprv_strcmp ( expected
, tag
))) {
49 log_err ( "FAIL: expected %s for %s standard name for %s , got %s \n " , expected
, standard
, name
, tag
);
56 static void TestStandardName ()
63 /* Iterate over all standards. */
64 for ( i
= 0 , count
= ucnv_countStandards (); i
< count
- 1 ; ++ i
) {
68 standard
= ucnv_getStandard ( i
, & err
);
70 log_err ( "FAIL: ucnv_getStandard( %d ), error= %s \n " , i
, u_errorName ( err
));
72 } else if (! standard
|| !* standard
) {
73 log_err ( "FAIL: %s standard name at index %d \n " , ( standard
? "empty" :
81 log_data_err ( "No standards. You probably have no data. \n " );
82 } else if (* ucnv_getStandard (( uint16_t )( count
- 1 ), & err
) != 0 ) {
83 log_err ( "FAIL: ucnv_getStandard( %d ) should return " " \n " , count
- 1 );
87 if ( ucnv_getStandard (++ i
, & err
)) {
88 log_err ( "FAIL: ucnv_getStandard( %d ) should return NULL \n " , i
);
93 log_verbose ( "PASS: iterating over standard names works \n " );
96 /* Test for some expected results. */
98 if ( dotestname ( "ibm-1208" , "MIME" , "UTF-8" ) &&
99 /*dotestname("cp1252", "MIME", "windows-1252") &&*/
100 dotestname ( "ascii" , "MIME" , "US-ASCII" ) &&
101 dotestname ( "csiso2022jp2" , "MIME" , "ISO-2022-JP-2" ) &&
102 dotestname ( "Iso20-22__cN" , "IANA" , "ISO-2022-CN" ) &&
103 dotestname ( "ascii" , "IANA" , "ANSI_X3.4-1968" ) &&
104 dotestname ( "cp850" , "IANA" , "IBM850" ) &&
105 dotestname ( "crazy" , "MIME" , NULL
) &&
106 dotestname ( "ASCII" , "crazy" , NULL
) &&
107 dotestname ( "LMBCS-1" , "MIME" , NULL
))
109 log_verbose ( "PASS: getting IANA and MIME standard names works \n " );
113 static int dotestconv ( const char * name
, const char * standard
, const char * expected
) {
119 error
= U_ZERO_ERROR
;
120 tag
= ucnv_getCanonicalName ( name
, standard
, & error
);
121 if ( tag
&& ! expected
) {
122 log_err ( "FAIL: Unexpectedly found %s canonical name for %s , got %s \n " , standard
, name
, tag
);
125 else if (! tag
&& expected
) {
126 log_err_status ( error
, "FAIL: could not find %s canonical name for %s \n " , ( standard
? " \"\" " : standard
), name
);
129 else if ( expected
&& ( name
== tag
|| uprv_strcmp ( expected
, tag
) != 0 )) {
130 log_err ( "FAIL: expected %s for %s canonical name for %s , got %s \n " , expected
, standard
, name
, tag
);
134 log_verbose ( "PASS: ( \" %s \" , \" %s \" ) -> %s == %s \n " , name
, standard
, tag
, expected
);
140 static void TestCanonicalName ()
142 /* Test for some expected results. */
144 if ( dotestconv ( "UTF-8" , "IANA" , "UTF-8" ) && /* default name */
145 dotestconv ( "UTF-8" , "MIME" , "UTF-8" ) && /* default name */
146 dotestconv ( "ibm-1208" , "IBM" , "UTF-8" ) && /* default name */
147 dotestconv ( "ibm-5305" , "IBM" , "UTF-8" ) && /* non-default name */
148 dotestconv ( "ibm-5305" , "MIME" , NULL
) && /* mapping does not exist */
149 dotestconv ( "ascii" , "MIME" , NULL
) && /* mapping does not exist */
150 dotestconv ( "ibm-1208" , "IANA" , NULL
) && /* mapping does not exist */
151 dotestconv ( "ibm-5305" , "IANA" , NULL
) && /* mapping does not exist */
152 dotestconv ( "cp1208" , "" , "UTF-8" ) && /* default name due to ordering */
153 dotestconv ( "UTF16_BigEndian" , "" , "UTF-16BE" ) && /* non-default name due to ordering */
154 dotestconv ( "ISO-2022-CN" , "IANA" , "ISO_2022,locale=zh,version=0" ) && /* default name */
155 dotestconv ( "Shift_JIS" , "MIME" , "ibm-943_P15A-2003" ) && /* ambiguous alias */
156 dotestconv ( "Shift_JIS" , "" , "ibm-943_P130-1999" ) && /* ambiguous alias */
157 dotestconv ( "ibm-943" , "" , "ibm-943_P15A-2003" ) && /* ambiguous alias */
158 dotestconv ( "ibm-943" , "IBM" , "ibm-943_P130-1999" ) && /* ambiguous alias */
159 dotestconv ( "ibm-1363" , "" , "ibm-1363_P11B-1998" ) && /* ambiguous alias */
160 dotestconv ( "ibm-1363" , "IBM" , "ibm-1363_P110-1997" ) && /* ambiguous alias */
161 dotestconv ( "crazy" , "MIME" , NULL
) &&
162 dotestconv ( "ASCII" , "crazy" , NULL
))
164 log_verbose ( "PASS: getting IANA and MIME canonical names works \n " );
169 static UBool
doTestNames ( const char * name
, const char * standard
, const char ** expected
, int32_t size
) {
170 UErrorCode err
= U_ZERO_ERROR
;
171 UEnumeration
* myEnum
= ucnv_openStandardNames ( name
, standard
, & err
);
172 const char * enumName
, * testName
;
173 int32_t enumCount
= uenum_count ( myEnum
, & err
);
174 int32_t idx
, len
, repeatTimes
= 3 ;
176 if ( err
== U_FILE_ACCESS_ERROR
) {
177 log_data_err ( "Unable to open standard names for %s of standard: %s \n " , name
, standard
);
180 if ( size
!= enumCount
) {
181 log_err ( "FAIL: different size arrays for %s . Got %d . Expected %d \n " , name
, enumCount
, size
);
184 if ( size
< 0 && myEnum
) {
185 log_err ( "FAIL: size < 0, but recieved an actual object \n " );
188 log_verbose ( " \n %s %s \n " , name
, standard
);
189 while ( repeatTimes
-- > 0 ) {
190 for ( idx
= 0 ; idx
< enumCount
; idx
++) {
191 enumName
= uenum_next ( myEnum
, & len
, & err
);
192 testName
= expected
[ idx
];
193 if ( uprv_strcmp ( enumName
, testName
) != 0 || U_FAILURE ( err
)
194 || len
!= ( int32_t ) uprv_strlen ( expected
[ idx
]))
196 log_err ( "FAIL: uenum_next( %d ) == \" %s \" . expected \" %s \" , len= %d , error= %s \n " ,
197 idx
, enumName
, testName
, len
, u_errorName ( err
));
199 log_verbose ( " %s \n " , enumName
);
202 if ( enumCount
>= 0 ) {
203 /* one past the list of all names must return NULL */
204 enumName
= uenum_next ( myEnum
, & len
, & err
);
205 if ( enumName
!= NULL
|| len
!= 0 || U_FAILURE ( err
)) {
206 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 log_verbose ( " \n reset \n " );
210 uenum_reset ( myEnum
, & err
);
211 if ( U_FAILURE ( err
)) {
212 log_err ( "FAIL: uenum_reset() for %s { %s } failed with %s \n " ,
213 name
, standard
, u_errorName ( err
));
221 static UBool
doTestUCharNames ( const char * name
, const char * standard
, const char ** expected
, int32_t size
) {
222 UErrorCode err
= U_ZERO_ERROR
;
223 UEnumeration
* myEnum
= ucnv_openStandardNames ( name
, standard
, & err
);
224 int32_t enumCount
= uenum_count ( myEnum
, & err
);
225 int32_t idx
, repeatTimes
= 3 ;
227 if ( err
== U_FILE_ACCESS_ERROR
) {
228 log_data_err ( "Unable to open standard names for %s of standard: %s \n " , name
, standard
);
232 if ( size
!= enumCount
) {
233 log_err ( "FAIL: different size arrays. Got %d . Expected %d \n " , enumCount
, size
);
236 if ( size
< 0 && myEnum
) {
237 log_err ( "FAIL: size < 0, but recieved an actual object \n " );
240 log_verbose ( " \n %s %s \n " , name
, standard
);
241 while ( repeatTimes
-- > 0 ) {
242 for ( idx
= 0 ; idx
< enumCount
; idx
++) {
245 const UChar
* enumName
= uenum_unext ( myEnum
, & len
, & err
);
246 u_uastrncpy ( testName
, expected
[ idx
], UPRV_LENGTHOF ( testName
));
247 if ( u_strcmp ( enumName
, testName
) != 0 || U_FAILURE ( err
)
248 || len
!= ( int32_t ) uprv_strlen ( expected
[ idx
]))
250 log_err ( "FAIL: uenum_next( %d ) == \" %s \" . expected \" %s \" , len= %d , error= %s \n " ,
251 idx
, enumName
, testName
, len
, u_errorName ( err
));
253 log_verbose ( " %s \n " , expected
[ idx
]);
256 log_verbose ( " \n reset \n " );
257 uenum_reset ( myEnum
, & err
);
258 if ( U_FAILURE ( err
)) {
259 log_err ( "FAIL: uenum_reset() for %s { %s } failed with %s \n " ,
260 name
, standard
, u_errorName ( err
));
268 static void TestStandardNames ()
270 static const char * asciiIANA
[] = {
283 static const char * asciiMIME
[] = {
287 static const char * iso2022MIME
[] = {
291 doTestNames ( "ASCII" , "IANA" , asciiIANA
, UPRV_LENGTHOF ( asciiIANA
));
292 doTestNames ( "US-ASCII" , "IANA" , asciiIANA
, UPRV_LENGTHOF ( asciiIANA
));
293 doTestNames ( "ASCII" , "MIME" , asciiMIME
, UPRV_LENGTHOF ( asciiMIME
));
294 doTestNames ( "ascii" , "mime" , asciiMIME
, UPRV_LENGTHOF ( asciiMIME
));
296 doTestNames ( "ASCII" , "crazy" , asciiMIME
, - 1 );
297 doTestNames ( "crazy" , "MIME" , asciiMIME
, - 1 );
299 doTestNames ( "LMBCS-1" , "MIME" , asciiMIME
, 0 );
301 doTestNames ( "ISO_2022,locale=ko,version=0" , "MIME" , iso2022MIME
, UPRV_LENGTHOF ( iso2022MIME
));
302 doTestNames ( "csiso2022kr" , "MIME" , iso2022MIME
, UPRV_LENGTHOF ( iso2022MIME
));
304 log_verbose ( " Testing unext() \n " );
305 doTestUCharNames ( "ASCII" , "IANA" , asciiIANA
, UPRV_LENGTHOF ( asciiIANA
));