]> git.saurik.com Git - apple/icu.git/blame - icuSources/test/iotest/trnstst.c
ICU-8.11.tar.gz
[apple/icu.git] / icuSources / test / iotest / trnstst.c
CommitLineData
73c04bcf
A
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
15static 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_errorName(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_errorName(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 but 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
113static 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_strlen(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
220static 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_strlen(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
307U_CFUNC void
308addTranslitTest(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}