| OLD | NEW |
| (Empty) |
| 1 /******************************************************************** | |
| 2 * COPYRIGHT: | |
| 3 * Copyright (c) 1999-2013, International Business Machines Corporation and | |
| 4 * others. All Rights Reserved. | |
| 5 ********************************************************************/ | |
| 6 #include "unicode/utypes.h" | |
| 7 #include "unicode/ustring.h" | |
| 8 #include "unicode/ctest.h" | |
| 9 #include "unicode/ucnv.h" | |
| 10 | |
| 11 void TestEuroRegression(void); | |
| 12 void addTestEuroRegression(TestNode** root); | |
| 13 | |
| 14 #if !UCONFIG_NO_LEGACY_CONVERSION | |
| 15 void addTestEuroRegression(TestNode** root) | |
| 16 { | |
| 17 addTest(root, &TestEuroRegression, "tsconv/eurocreg/TestEuroRegression"); | |
| 18 } | |
| 19 | |
| 20 /* | |
| 21 * The table below lists codepages that are supposed to have roundtrip mappings
for | |
| 22 * the U+20AC Euro sign. | |
| 23 * | |
| 24 * Changes made 2000nov28 and marked as such are due to the following: | |
| 25 * | |
| 26 * After updating all ibm-*.ucm files with precise fallback indicators (|0, |1,
|3), | |
| 27 * some of these codepages failed the Euro regression test. | |
| 28 * This means that the actuall mappings changed when only the preciseness of fal
lback | |
| 29 * mappings should have changed. | |
| 30 * My (Markus) suspicion is that some files got Euro sign mappings added manuall
y, | |
| 31 * changing their contents compared to the NLTC (IBM Toronto codepage database)
definition. | |
| 32 * Such changes are highly undesirable because they effectively define new codep
ages. | |
| 33 * Codepage mapping files with "ibm-*.ucm" should always exactly match the files | |
| 34 * from the IBM codepage database. | |
| 35 * (If there are several mappings with the same number, then we choose the | |
| 36 * default mappings with Private-Use Area assignments.) | |
| 37 * | |
| 38 * Also, in the past, some aliases were set such that e.g. cp850 became an alias
for ibm-858. | |
| 39 * This followed the practice of OS/2 that uses the old codepage number 850 for
the new | |
| 40 * codepage 858, with the main difference being the additional Euro sign. | |
| 41 * However, we have documented that the "cp" prefix should be used for Microsoft
-compatible | |
| 42 * codepages, and Microsoft Windows 2000's codepage 850 does not contain a Euro
sign mapping. | |
| 43 * Therefore, cp850 must not support the Euro sign. | |
| 44 * In these cases, I have changed the codepage name here to point to a newer cod
epage with the | |
| 45 * Euro sign, using its new name. | |
| 46 * I could not find such "updates" for codepages 1362 and 1363 - we might want t
o supply them later. | |
| 47 */ | |
| 48 | |
| 49 static const char convertersToCheck[][15] = { | |
| 50 "cp1250", | |
| 51 "cp1251", | |
| 52 "cp1252", | |
| 53 "cp1254", | |
| 54 "cp1255", | |
| 55 "cp1256", | |
| 56 "cp1257", | |
| 57 "cp1258", | |
| 58 "ibm1140", | |
| 59 "ibm1142", | |
| 60 "ibm1143", | |
| 61 "ibm1144", | |
| 62 "ibm1145", | |
| 63 "ibm1146", | |
| 64 "ibm1147", | |
| 65 "ibm1148", | |
| 66 "ibm1149", | |
| 67 "ibm1153", | |
| 68 "ibm1154", | |
| 69 "ibm1155", | |
| 70 "ibm1156", | |
| 71 "ibm1157", | |
| 72 "ibm1158", | |
| 73 /*"ibm-1159",*/ /* removed 2003Apr17 */ | |
| 74 "ibm12712", | |
| 75 "ibm16804", | |
| 76 "ibm-1160", | |
| 77 "ibm-1162", | |
| 78 "ibm-1164", | |
| 79 | |
| 80 "ibm-858", /* was "cp850" changed 2000nov28 */ | |
| 81 /* duplicate "cp850" removed 2000nov28 */ | |
| 82 /*"ibm-9049",*/ /* was "cp857" changed 2002nov25 */ | |
| 83 "ibm-12712", /* was "cp424" changed 2000nov28 */ | |
| 84 "ibm-4899", /* was "cp803" changed 2000nov28 */ | |
| 85 "ibm-867", /* was "cp862" changed 2002nov25 */ | |
| 86 "cp1258", | |
| 87 "windows-950", | |
| 88 "cp1253", | |
| 89 /* "cp819", | |
| 90 "cp13488",*/ | |
| 91 "ibm-4971", | |
| 92 /*"ibm-9061",*/ /* was "cp869" changed 2002nov25 */ | |
| 93 /* "cp813",*/ | |
| 94 /*"ibm-9044",*/ /* was "cp852" changed 2002nov25 */ | |
| 95 /*"ibm-872",*/ /* was "cp855" changed 2002nov25 */ | |
| 96 /*"ibm-808",*/ /* was "cp866" changed 2002nov25 */ | |
| 97 /* "cp1131", | |
| 98 "cp1125",*/ | |
| 99 "ibm-902", /* was "cp922" changed 2003jan08 */ | |
| 100 "ibm-901", /* was "cp921" changed 2003jan09 */ | |
| 101 /*"ibm-17248",*/ /* was "cp864" changed 2002nov25 */ | |
| 102 /*"cp1008", | |
| 103 "cp1046",*/ | |
| 104 /* "cp9066", | |
| 105 "cp1129",*/ | |
| 106 "ibm-5123", /* was "cp1027" changed 2003jan08 */ | |
| 107 /* "cp300",*/ | |
| 108 /* "cp4930",*/ | |
| 109 "ibm-1364", | |
| 110 /* "cp1362" removed 2000nov28 */ | |
| 111 "cp1363", | |
| 112 /* "cp1114", removed 2002jul3 | |
| 113 "cp947", removed 2002jul3 */ | |
| 114 "gb18030", | |
| 115 ""}; | |
| 116 | |
| 117 UBool isEuroAware(UConverter*); | |
| 118 | |
| 119 void TestEuroRegression() | |
| 120 { | |
| 121 int32_t i=0; | |
| 122 | |
| 123 do | |
| 124 { | |
| 125 UErrorCode err = U_ZERO_ERROR; | |
| 126 UConverter* myConv = ucnv_open(convertersToCheck[i], &err); | |
| 127 if (U_FAILURE(err)&&convertersToCheck[i][0]) | |
| 128 log_data_err("%s \tMISSING [%s]\n", convertersToCheck[i], u_errorNa
me(err)); | |
| 129 else | |
| 130 { | |
| 131 if (isEuroAware(myConv)) | |
| 132 log_verbose("%s \tsupports euro\n", convertersToCheck[i]); | |
| 133 else | |
| 134 log_err("%s \tDOES NOT support euro\n", convertersToCheck[i]); | |
| 135 ucnv_close(myConv); | |
| 136 } | |
| 137 } while (convertersToCheck[++i][0]); | |
| 138 } | |
| 139 | |
| 140 UBool isEuroAware(UConverter* myConv) | |
| 141 { | |
| 142 static const UChar euroString[2] = { 0x20AC, 0x0000 }; | |
| 143 char target[20]; | |
| 144 UChar euroBack[2]; | |
| 145 int32_t targetSize, euroBackSize; | |
| 146 UErrorCode err = U_ZERO_ERROR; | |
| 147 /*const char* myName = ucnv_getName(myConv, &err);*/ | |
| 148 | |
| 149 targetSize = ucnv_fromUChars(myConv, | |
| 150 target, | |
| 151 sizeof(target), | |
| 152 euroString, | |
| 153 -1, | |
| 154 &err); | |
| 155 if (U_FAILURE(err)) | |
| 156 { | |
| 157 log_err("Failure Occured in ucnv_fromUChars euro roundtrip test\n"); | |
| 158 return FALSE; | |
| 159 } | |
| 160 euroBackSize = ucnv_toUChars(myConv, | |
| 161 euroBack, | |
| 162 2, | |
| 163 target, | |
| 164 targetSize, | |
| 165 &err); | |
| 166 (void)euroBackSize; /* Suppress set but not used warning. */ | |
| 167 if (U_FAILURE(err)) | |
| 168 { | |
| 169 log_err("Failure Occured in ucnv_toUChars euro roundtrip test\n"); | |
| 170 return FALSE; | |
| 171 } | |
| 172 if (u_strcmp(euroString, euroBack)) | |
| 173 { | |
| 174 /* log_err("%s FAILED Euro rountrip\n", myName);*/ | |
| 175 return FALSE; | |
| 176 } | |
| 177 else | |
| 178 { | |
| 179 /* log_verbose("%s PASSED Euro rountrip\n", myName);*/ | |
| 180 return TRUE; | |
| 181 } | |
| 182 | |
| 183 } | |
| 184 #else | |
| 185 void addTestEuroRegression(TestNode** root) | |
| 186 { | |
| 187 /* test nothing... */ | |
| 188 } | |
| 189 #endif | |
| OLD | NEW |