]>
git.saurik.com Git - apple/icu.git/blob - icuSources/test/cintltst/eurocreg.c
05f24700faf8fe32499371c8fa7d5f77058c5b1d
1 // © 2016 and later: Unicode, Inc. and others.
2 // License & terms of use: http://www.unicode.org/copyright.html
3 /********************************************************************
5 * Copyright (c) 1999-2013, International Business Machines Corporation and
6 * others. All Rights Reserved.
7 ********************************************************************/
8 #include "unicode/utypes.h"
9 #include "unicode/ustring.h"
10 #include "unicode/ctest.h"
11 #include "unicode/ucnv.h"
13 void TestEuroRegression(void);
14 void addTestEuroRegression(TestNode
** root
);
16 #if !UCONFIG_NO_LEGACY_CONVERSION
17 void addTestEuroRegression(TestNode
** root
)
19 addTest(root
, &TestEuroRegression
, "tsconv/eurocreg/TestEuroRegression");
23 * The table below lists codepages that are supposed to have roundtrip mappings for
24 * the U+20AC Euro sign.
26 * Changes made 2000nov28 and marked as such are due to the following:
28 * After updating all ibm-*.ucm files with precise fallback indicators (|0, |1, |3),
29 * some of these codepages failed the Euro regression test.
30 * This means that the actuall mappings changed when only the preciseness of fallback
31 * mappings should have changed.
32 * My (Markus) suspicion is that some files got Euro sign mappings added manually,
33 * changing their contents compared to the NLTC (IBM Toronto codepage database) definition.
34 * Such changes are highly undesirable because they effectively define new codepages.
35 * Codepage mapping files with "ibm-*.ucm" should always exactly match the files
36 * from the IBM codepage database.
37 * (If there are several mappings with the same number, then we choose the
38 * default mappings with Private-Use Area assignments.)
40 * Also, in the past, some aliases were set such that e.g. cp850 became an alias for ibm-858.
41 * This followed the practice of OS/2 that uses the old codepage number 850 for the new
42 * codepage 858, with the main difference being the additional Euro sign.
43 * However, we have documented that the "cp" prefix should be used for Microsoft-compatible
44 * codepages, and Microsoft Windows 2000's codepage 850 does not contain a Euro sign mapping.
45 * Therefore, cp850 must not support the Euro sign.
46 * In these cases, I have changed the codepage name here to point to a newer codepage with the
47 * Euro sign, using its new name.
48 * I could not find such "updates" for codepages 1362 and 1363 - we might want to supply them later.
51 static const char convertersToCheck
[][15] = {
75 /*"ibm-1159",*/ /* removed 2003Apr17 */
82 "ibm-858", /* was "cp850" changed 2000nov28 */
83 /* duplicate "cp850" removed 2000nov28 */
84 /*"ibm-9049",*/ /* was "cp857" changed 2002nov25 */
85 "ibm-12712", /* was "cp424" changed 2000nov28 */
86 "ibm-4899", /* was "cp803" changed 2000nov28 */
87 "ibm-867", /* was "cp862" changed 2002nov25 */
94 /*"ibm-9061",*/ /* was "cp869" changed 2002nov25 */
96 /*"ibm-9044",*/ /* was "cp852" changed 2002nov25 */
97 /*"ibm-872",*/ /* was "cp855" changed 2002nov25 */
98 /*"ibm-808",*/ /* was "cp866" changed 2002nov25 */
101 "ibm-902", /* was "cp922" changed 2003jan08 */
102 "ibm-901", /* was "cp921" changed 2003jan09 */
103 /*"ibm-17248",*/ /* was "cp864" changed 2002nov25 */
108 "ibm-5123", /* was "cp1027" changed 2003jan08 */
112 /* "cp1362" removed 2000nov28 */
114 /* "cp1114", removed 2002jul3
115 "cp947", removed 2002jul3 */
119 UBool
isEuroAware(UConverter
*);
121 void TestEuroRegression()
127 UErrorCode err
= U_ZERO_ERROR
;
128 UConverter
* myConv
= ucnv_open(convertersToCheck
[i
], &err
);
129 if (U_FAILURE(err
)&&convertersToCheck
[i
][0])
130 log_data_err("%s \tMISSING [%s]\n", convertersToCheck
[i
], u_errorName(err
));
133 if (isEuroAware(myConv
))
134 log_verbose("%s \tsupports euro\n", convertersToCheck
[i
]);
136 log_err("%s \tDOES NOT support euro\n", convertersToCheck
[i
]);
139 } while (convertersToCheck
[++i
][0]);
142 UBool
isEuroAware(UConverter
* myConv
)
144 static const UChar euroString
[2] = { 0x20AC, 0x0000 };
147 int32_t targetSize
, euroBackSize
;
148 UErrorCode err
= U_ZERO_ERROR
;
149 /*const char* myName = ucnv_getName(myConv, &err);*/
151 targetSize
= ucnv_fromUChars(myConv
,
159 log_err("Failure Occured in ucnv_fromUChars euro roundtrip test\n");
162 euroBackSize
= ucnv_toUChars(myConv
,
168 (void)euroBackSize
; /* Suppress set but not used warning. */
171 log_err("Failure Occured in ucnv_toUChars euro roundtrip test\n");
174 if (u_strcmp(euroString
, euroBack
))
176 /* log_err("%s FAILED Euro rountrip\n", myName);*/
181 /* log_verbose("%s PASSED Euro rountrip\n", myName);*/
187 void addTestEuroRegression(TestNode
** root
)
189 /* test nothing... */