OLD | NEW |
(Empty) | |
| 1 /* |
| 2 ********************************************************************** |
| 3 * Copyright (C) 2005-2005, International Business Machines |
| 4 * Corporation and others. All Rights Reserved. |
| 5 ********************************************************************** |
| 6 * file name: strtst.c |
| 7 * created by: George Rhoten |
| 8 */ |
| 9 |
| 10 #include "iotest.h" |
| 11 #include "unicode/ustdio.h" |
| 12 #include "unicode/utrans.h" |
| 13 #include "unicode/ustring.h" |
| 14 |
| 15 static void TestTranslitOps(void) |
| 16 { |
| 17 #if !UCONFIG_NO_TRANSLITERATION |
| 18 UFILE *f; |
| 19 UErrorCode err = U_ZERO_ERROR; |
| 20 UTransliterator *a = NULL, *b = NULL, *c = NULL; |
| 21 |
| 22 log_verbose("opening a transliterator and UFILE for testing\n"); |
| 23 |
| 24 f = u_fopen(STANDARD_TEST_FILE, "w", "en_US_POSIX", NULL); |
| 25 if(f == NULL) |
| 26 { |
| 27 log_err("Couldn't open test file for writing\n"); |
| 28 return; |
| 29 } |
| 30 |
| 31 a = utrans_open("Latin-Greek", UTRANS_FORWARD, NULL, -1, NULL, &err); |
| 32 if(U_FAILURE(err)) |
| 33 { |
| 34 log_err("Error opening transliterator %s\n", u_errorName(err)); |
| 35 u_fclose(f); |
| 36 return; |
| 37 } |
| 38 |
| 39 |
| 40 log_verbose("setting a transliterator\n"); |
| 41 b = u_fsettransliterator(f, U_WRITE, a, &err); |
| 42 if(U_FAILURE(err)) |
| 43 { |
| 44 log_err("Error setting transliterator %s\n", u_errorName(err)); |
| 45 u_fclose(f); |
| 46 return; |
| 47 } |
| 48 |
| 49 if(b != NULL) |
| 50 { |
| 51 log_err("Error, a transliterator was already set!\n"); |
| 52 } |
| 53 |
| 54 b = u_fsettransliterator(NULL, U_WRITE, a, &err); |
| 55 if(err != U_ILLEGAL_ARGUMENT_ERROR) |
| 56 { |
| 57 log_err("Error setting transliterator on NULL file err=%s\n", u_errorNam
e(err)); |
| 58 } |
| 59 |
| 60 if(b != a) |
| 61 { |
| 62 log_err("Error getting the same transliterator was not returned on NULL
file\n"); |
| 63 } |
| 64 |
| 65 err = U_FILE_ACCESS_ERROR; |
| 66 b = u_fsettransliterator(f, U_WRITE, a, &err); |
| 67 if(err != U_FILE_ACCESS_ERROR) |
| 68 { |
| 69 log_err("Error setting transliterator on error status err=%s\n", u_error
Name(err)); |
| 70 } |
| 71 |
| 72 if(b != a) |
| 73 { |
| 74 log_err("Error getting the same transliterator on error status\n"); |
| 75 } |
| 76 err = U_ZERO_ERROR; |
| 77 |
| 78 |
| 79 log_verbose("un-setting transliterator (setting to null)\n"); |
| 80 c = u_fsettransliterator(f, U_WRITE, NULL, &err); |
| 81 if(U_FAILURE(err)) |
| 82 { |
| 83 log_err("Err setting transliterator %s\n", u_errorName(err)); |
| 84 u_fclose(f); |
| 85 return; |
| 86 } |
| 87 |
| 88 if(c != a) |
| 89 { |
| 90 log_err("Err, transliterator that came back was not the original one.\n"
); |
| 91 } |
| 92 |
| 93 log_verbose("Trying to set read transliterator (should fail)\n"); |
| 94 b = u_fsettransliterator(f, U_READ, NULL, &err); |
| 95 if(err != U_UNSUPPORTED_ERROR) |
| 96 { |
| 97 log_err("Should have U_UNSUPPORTED_ERROR setting Read transliterator bu
t got %s - REVISIT AND UPDATE TEST\n", u_errorName(err)); |
| 98 u_fclose(f); |
| 99 return; |
| 100 } |
| 101 else |
| 102 { |
| 103 log_verbose("Got %s error (expected) setting READ transliterator.\n", u_
errorName(err)); |
| 104 err = U_ZERO_ERROR; |
| 105 } |
| 106 |
| 107 |
| 108 utrans_close(c); |
| 109 u_fclose(f); |
| 110 #endif |
| 111 } |
| 112 |
| 113 static void TestTranslitFileOut(void) |
| 114 { |
| 115 #if !UCONFIG_NO_FORMATTING |
| 116 #if !UCONFIG_NO_TRANSLITERATION |
| 117 UFILE *f; |
| 118 UErrorCode err = U_ZERO_ERROR; |
| 119 UTransliterator *a = NULL, *b = NULL, *c = NULL; |
| 120 FILE *infile; |
| 121 UChar compare[] = { 0xfeff, 0x03a3, 0x03c4, 0x03b5, 0x03c6, 0x1f00, 0x03bd,
0x03bf, 0x03c2, 0x043C, 0x0000 }; |
| 122 UChar ubuf[256]; |
| 123 int len; |
| 124 |
| 125 log_verbose("opening a transliterator and UFILE for testing\n"); |
| 126 |
| 127 f = u_fopen(STANDARD_TEST_FILE, "w", "en_US_POSIX", "utf-16"); |
| 128 if(f == NULL) |
| 129 { |
| 130 log_err("Couldn't open test file for writing\n"); |
| 131 return; |
| 132 } |
| 133 |
| 134 a = utrans_open("Latin-Greek", UTRANS_FORWARD, NULL, -1, NULL, &err); |
| 135 if(U_FAILURE(err)) |
| 136 { |
| 137 log_err("Err opening transliterator %s\n", u_errorName(err)); |
| 138 u_fclose(f); |
| 139 return; |
| 140 } |
| 141 |
| 142 log_verbose("setting a transliterator\n"); |
| 143 b = u_fsettransliterator(f, U_WRITE, a, &err); |
| 144 if(U_FAILURE(err)) |
| 145 { |
| 146 log_err("Err setting transliterator %s\n", u_errorName(err)); |
| 147 u_fclose(f); |
| 148 return; |
| 149 } |
| 150 |
| 151 if(b != NULL) |
| 152 { |
| 153 log_err("Err, a transliterator was already set!\n"); |
| 154 } |
| 155 |
| 156 u_fprintf(f, "Stephanos"); |
| 157 |
| 158 c = utrans_open("Latin-Cyrillic", UTRANS_FORWARD, NULL, -1, NULL, &err); |
| 159 if(U_FAILURE(err)) |
| 160 { |
| 161 log_err("Err opening transliterator %s\n", u_errorName(err)); |
| 162 u_fclose(f); |
| 163 return; |
| 164 } |
| 165 |
| 166 log_verbose("setting a transliterator\n"); |
| 167 b = u_fsettransliterator(f, U_WRITE, c, &err); |
| 168 if(U_FAILURE(err)) |
| 169 { |
| 170 log_err("Err setting transliterator %s\n", u_errorName(err)); |
| 171 u_fclose(f); |
| 172 return; |
| 173 } |
| 174 |
| 175 if(b != a) |
| 176 { |
| 177 log_err("Error: a different transliterator was returned!\n"); |
| 178 } |
| 179 utrans_close(b); |
| 180 |
| 181 u_fprintf(f, "m"); |
| 182 |
| 183 u_fclose(f); |
| 184 |
| 185 log_verbose("Re reading test file to verify transliteration\n"); |
| 186 infile = fopen(STANDARD_TEST_FILE, "rb"); |
| 187 if(infile == NULL) |
| 188 { |
| 189 log_err("Couldn't reopen test file\n"); |
| 190 return; |
| 191 } |
| 192 |
| 193 len=fread(ubuf, sizeof(UChar), u_strlen(compare), infile); |
| 194 log_verbose("Read %d UChars\n", len); |
| 195 if(len != u_strlen(compare)) |
| 196 { |
| 197 log_err("Wanted %d UChars from file, got %d\n", u_strlen(compare), len); |
| 198 } |
| 199 ubuf[len]=0; |
| 200 |
| 201 if(u_strlen(compare) != u_strlen(ubuf)) |
| 202 { |
| 203 log_err("Wanted %d UChars from file, but u_strlen() returns %d\n", u_str
len(compare), len); |
| 204 } |
| 205 |
| 206 if(u_strcmp(compare, ubuf)) |
| 207 { |
| 208 log_err("Read string doesn't match expected.\n"); |
| 209 } |
| 210 else |
| 211 { |
| 212 log_verbose("Read string matches expected.\n"); |
| 213 } |
| 214 |
| 215 fclose(infile); |
| 216 #endif |
| 217 #endif |
| 218 } |
| 219 |
| 220 static void TestTranslitStringOut(void) |
| 221 { |
| 222 #if !UCONFIG_NO_FORMATTING |
| 223 #if !UCONFIG_NO_TRANSLITERATION |
| 224 UFILE *f; |
| 225 UErrorCode err = U_ZERO_ERROR; |
| 226 UTransliterator *a = NULL, *b = NULL, *c = NULL; |
| 227 UChar compare[] = { 0x03a3, 0x03c4, 0x03b5, 0x03c6, 0x1f00, 0x03bd, 0x03bf,
0x03c2, 0x043C, 0x0000 }; |
| 228 UChar ubuf[256]; |
| 229 |
| 230 log_verbose("opening a transliterator and UFILE for testing\n"); |
| 231 |
| 232 f = u_fstropen(ubuf, sizeof(ubuf)/sizeof(ubuf[0]), "en_US_POSIX"); |
| 233 if(f == NULL) |
| 234 { |
| 235 log_err("Couldn't open test file for writing\n"); |
| 236 return; |
| 237 } |
| 238 |
| 239 a = utrans_open("Latin-Greek", UTRANS_FORWARD, NULL, -1, NULL, &err); |
| 240 if(U_FAILURE(err)) |
| 241 { |
| 242 log_err("Err opening transliterator %s\n", u_errorName(err)); |
| 243 u_fclose(f); |
| 244 return; |
| 245 } |
| 246 |
| 247 log_verbose("setting a transliterator\n"); |
| 248 b = u_fsettransliterator(f, U_WRITE, a, &err); |
| 249 if(U_FAILURE(err)) |
| 250 { |
| 251 log_err("Err setting transliterator %s\n", u_errorName(err)); |
| 252 u_fclose(f); |
| 253 return; |
| 254 } |
| 255 |
| 256 if(b != NULL) |
| 257 { |
| 258 log_err("Err, a transliterator was already set!\n"); |
| 259 } |
| 260 |
| 261 u_fprintf(f, "Stephanos"); |
| 262 |
| 263 c = utrans_open("Latin-Cyrillic", UTRANS_FORWARD, NULL, -1, NULL, &err); |
| 264 if(U_FAILURE(err)) |
| 265 { |
| 266 log_err("Err opening transliterator %s\n", u_errorName(err)); |
| 267 u_fclose(f); |
| 268 return; |
| 269 } |
| 270 |
| 271 log_verbose("setting a transliterator\n"); |
| 272 b = u_fsettransliterator(f, U_WRITE, c, &err); |
| 273 if(U_FAILURE(err)) |
| 274 { |
| 275 log_err("Err setting transliterator %s\n", u_errorName(err)); |
| 276 u_fclose(f); |
| 277 return; |
| 278 } |
| 279 |
| 280 if(b != a) |
| 281 { |
| 282 log_err("Error: a different transliterator was returned!\n"); |
| 283 } |
| 284 utrans_close(b); |
| 285 |
| 286 u_fprintf(f, "m"); |
| 287 |
| 288 u_fclose(f); |
| 289 |
| 290 if(u_strlen(compare) != u_strlen(ubuf)) |
| 291 { |
| 292 log_err("Wanted %d UChars from file, but u_strlen() returns %d\n", u_str
len(compare), u_strlen(ubuf)); |
| 293 } |
| 294 |
| 295 if(u_strcmp(compare, ubuf)) |
| 296 { |
| 297 log_err("Read string doesn't match expected.\n"); |
| 298 } |
| 299 else |
| 300 { |
| 301 log_verbose("Read string matches expected.\n"); |
| 302 } |
| 303 #endif |
| 304 #endif |
| 305 } |
| 306 |
| 307 U_CFUNC void |
| 308 addTranslitTest(TestNode** root) { |
| 309 #if !UCONFIG_NO_TRANSLITERATION |
| 310 addTest(root, &TestTranslitOps, "translit/ops"); |
| 311 #if !UCONFIG_NO_FORMATTING |
| 312 addTest(root, &TestTranslitFileOut, "translit/fileOut"); |
| 313 addTest(root, &TestTranslitStringOut, "translit/stringOut"); |
| 314 #endif |
| 315 #endif |
| 316 } |
OLD | NEW |