Update contrib.
2 * Copyright (c) 1997-2010 Nokia Corporation and/or its subsidiary(-ies).
4 * This component and the accompanying materials are made available
5 * under the terms of "Eclipse Public License v1.0"
6 * which accompanies this distribution, and is available
7 * at the URL "http://www.eclipse.org/legal/epl-v10.html".
9 * Initial Contributors:
10 * Nokia Corporation - initial contribution.
23 #include "t_builtin.h"
26 * Work around for DEF063276.
27 * This literal is now loaded from a z:\test\data\KOriginalSms7Bit.dat
28 * Bullseye Coverage corrupts this literal at position \x1b\x30 to \x1b\x37
29 * to avoid this literal is stored in a file as to not be touched by Bullseye Coverage.
33 _LIT8(KOriginalSms7Bit, "\
34 \x00\x01\x02\x03\x04\x05\x06\x07\x08\x09\x0a\x0b\x0c\x0d\x0e\x0f\
35 \x10\x11\x12\x13\x14\x15\x16\x17\x18\x19\x1a \x1c\x1d\x1e\x1f\
36 \x20\x21\x22\x23\x24\x25\x26\x27\x28\x29\x2a\x2b\x2c\x2d\x2e\x2f\
37 \x30\x31\x32\x33\x34\x35\x36\x37\x38\x39\x3a\x3b\x3c\x3d\x3e\x3f\
38 \x40\x41\x42\x43\x44\x45\x46\x47\x48\x49\x4a\x4b\x4c\x4d\x4e\x4f\
39 \x50\x51\x52\x53\x54\x55\x56\x57\x58\x59\x5a\x5b\x5c\x5d\x5e\x5f\
40 \x60\x61\x62\x63\x64\x65\x66\x67\x68\x69\x6a\x6b\x6c\x6d\x6e\x6f\
41 \x70\x71\x72\x73\x74\x75\x76\x77\x78\x79\x7a\x7b\x7c\x7d\x7e\x7f\
42 \x1b\x00\x1b\x01\x1b\x02\x1b\x03\x1b\x04\x1b\x05\x1b\x06\x1b\x07\x1b\x08\x1b\x09\x1b\x0a\x1b\x0b\x1b\x0c\x1b\x0d\x1b\x0e\x1b\x0f\
43 \x1b\x10\x1b\x11\x1b\x12\x1b\x13\x1b\x14\x1b\x15\x1b\x16\x1b\x17\x1b\x18\x1b\x19\x1b\x1a\x1b\x1b\x1b\x1c\x1b\x1d\x1b\x1e\x1b\x1f\
44 \x1b\x20\x1b\x21\x1b\x22\x1b\x23\x1b\x24\x1b\x25\x1b\x26\x1b\x27\x1b\x28\x1b\x29\x1b\x2a\x1b\x2b\x1b\x2c\x1b\x2d\x1b\x2e\x1b\x2f\
45 \x1b\x30\x1b\x31\x1b\x32\x1b\x33\x1b\x34\x1b\x35\x1b\x36\x1b\x37\x1b\x38\x1b\x39\x1b\x3a\x1b\x3b\x1b\x3c\x1b\x3d\x1b\x3e\x1b\x3f\
46 \x1b\x40\x1b\x41\x1b\x42\x1b\x43\x1b\x44\x1b\x45\x1b\x46\x1b\x47\x1b\x48\x1b\x49\x1b\x4a\x1b\x4b\x1b\x4c\x1b\x4d\x1b\x4e\x1b\x4f\
47 \x1b\x50\x1b\x51\x1b\x52\x1b\x53\x1b\x54\x1b\x55\x1b\x56\x1b\x57\x1b\x58\x1b\x59\x1b\x5a\x1b\x5b\x1b\x5c\x1b\x5d\x1b\x5e\x1b\x5f\
48 \x1b\x60\x1b\x61\x1b\x62\x1b\x63\x1b\x64\x1b\x65\x1b\x67\x1b\x67\x1b\x68\x1b\x69\x1b\x6a\x1b\x6b\x1b\x6c\x1b\x6d\x1b\x6e\x1b\x6f\
49 \x1b\x70\x1b\x71\x1b\x72\x1b\x73\x1b\x74\x1b\x75\x1b\x76\x1b\x77\x1b\x78\x1b\x79\x1b\x7a\x1b\x7b\x1b\x7c\x1b\x7d\x1b\x7e\x1b\x7f");
53 _LIT8(KExpectedSms7Bit, "\
54 \x00\x01\x02\x03\x04\x05\x06\x07\x08\x09\x0a\x0b\x0c\x0d\x0e\x0f\
55 \x10\x11\x12\x13\x14\x15\x16\x17\x18\x19\x1a \x1c\x1d\x1e\x1f\
56 \x20\x21\x22\x23\x24\x25\x26\x27\x28\x29\x2a\x2b\x2c\x2d\x2e\x2f\
57 \x30\x31\x32\x33\x34\x35\x36\x37\x38\x39\x3a\x3b\x3c\x3d\x3e\x3f\
58 \x40\x41\x42\x43\x44\x45\x46\x47\x48\x49\x4a\x4b\x4c\x4d\x4e\x4f\
59 \x50\x51\x52\x53\x54\x55\x56\x57\x58\x59\x5a\x5b\x5c\x5d\x5e\x5f\
60 \x60\x61\x62\x63\x64\x65\x66\x67\x68\x69\x6a\x6b\x6c\x6d\x6e\x6f\
61 \x70\x71\x72\x73\x74\x75\x76\x77\x78\x79\x7a\x7b\x7c\x7d\x7e\x7f\
62 \x00\x01\x02\x03\x04\x05\x06\x07\x08\x09\x1b\x0a\x0b\x0c\x0d\x0e\x0f\
63 \x10\x11\x12\x13\x1b\x14\x15\x16\x17\x18\x19\x1a\x3f\x1c\x1d\x1e\x1f\
64 \x20\x21\x22\x23\x24\x25\x26\x27\x1b\x28\x1b\x29\x2a\x2b\x2c\x2d\x2e\x1b\x2f\
65 \x30\x31\x32\x33\x34\x35\x36\x37\x38\x39\x3a\x3b\x1b\x3c\x1b\x3d\x1b\x3e\x3f\
66 \x1b\x40\x41\x42\x43\x44\x45\x46\x47\x48\x49\x4a\x4b\x4c\x4d\x4e\x4f\
67 \x50\x51\x52\x53\x54\x55\x56\x57\x58\x59\x5a\x5b\x5c\x5d\x5e\x5f\
68 \x60\x61\x62\x63\x64\x1b\x65\x67\x67\x68\x69\x6a\x6b\x6c\x6d\x6e\x6f\
69 \x70\x71\x72\x73\x74\x75\x76\x77\x78\x79\x7a\x7b\x7c\x7d\x7e\x7f");
70 _LIT16(KExpectedUnicodeFromSms7Bit, "\
71 \x0040\x00a3$\x00a5\x00e8\x00e9\x00f9\x00ec\x00f2\x00e7\x000a\x00d8\x00f8\x000d\x00c5\x00e5\
72 \x0394\x005f\x03a6\x0393\x039b\x03a9\x03a0\x03a8\x03a3\x0398\x039e \x00c6\x00e6\x00df\x00c9\
73 \x0020!\"#\x00a4%&'()*+,-./0123456789:;<=>?\
74 \x00a1\x0041\x0042\x0043\x0044\x0045\x0046GHIJKLMNOPQRSTUVWXYZ\x00c4\x00d6\x00d1\x00dc\x00a7\
75 \x00bf\x0061\x0062\x0063\x0064\x0065\x0066ghijklmnopqrstuvwxyz\x00e4\x00f6\x00f1\x00fc\x00e0\
76 \x0040\x00a3$\x00a5\x00e8\x00e9\x00f9\x00ec\x00f2\x00c7\x000c\x00d8\x00f8\x000d\x00c5\x00e5\
77 \x0394\x005f\x03a6\x0393\x005e\x03a9\x03a0\x03a8\x03a3\x0398\x039e\xfffd\x00c6\x00e6\x00df\x00c9\
78 \x0020!\"#\x00a4%&'{}*+,-.\\0123456789:;[~]?\
79 |\x0041\x0042\x0043\x0044\x0045\x0046GHIJKLMNOPQRSTUVWXYZ\x00c4\x00d6\x00d1\x00dc\x00a7\
80 \x00bf\x0061\x0062\x0063\x0064\x20ac\x0067ghijklmnopqrstuvwxyz\x00e4\x00f6\x00f1\x00fc\x00e0");
84 // 1 line of the original defect data from email in unicode
85 _LIT16(KEmailToConvert, "\
86 \x006C\x0069\x006E\x0065\x0020\x0065\x006E\x0064\x0073\x0020\x0069\
87 \x006E\x0020\x006A\x0061\x0070\x0061\x006E\x0065\x0073\x0065\x0020\
88 \x3075\x3064\x3059\x3057\x306B\x3072\x3080\x000d\x000a");
92 // the expected result when converted to ISO2022JP
93 _LIT8(KExpectedIso2022jp, "\
94 \x6C\x69\x6E\x65\x20\x65\x6E\x64\x73\x20\x69\x6E\x20\
95 \x6A\x61\x70\x61\x6E\x65\x73\x65\x20\x1B\x24\x42\x24\x55\x24\x44\
96 \x24\x39\x24\x37\x24\x4B\x24\x52\x24\x60\x1B\x28\x42\x0D\x0A");
99 // 1 line of the original defect data from email in unicode
100 _LIT16(KEmailEndingInJapanese, "\
101 \x006C\x0069\x006E\x0065\x0020\x0065\x006E\x0064\x0073\x0020\x0069\
102 \x006E\x0020\x006A\x0061\x0070\x0061\x006E\x0065\x0073\x0065\x0020\
103 \x3075\x3064\x3059\x3057\x306B\x3072\x3080");
105 // the expected result when converted to ISO2022JP
106 _LIT8(KExpectedEmailEndingInJapanese, "\
107 \x6C\x69\x6E\x65\x20\x65\x6E\x64\x73\x20\x69\x6E\x20\
108 \x6A\x61\x70\x61\x6E\x65\x73\x65\x20\x1B\x24\x42\x24\x55\x24\x44\
109 \x24\x39\x24\x37\x24\x4B\x24\x52\x24\x60\x1B\x28\x42");
111 _LIT(KOriginalSms7BitFile, "z:\\test\\data\\KOriginalSms7Bit.dat");
115 TBool __bb = (cond); \
119 ERR_PRINTF1(_L("ERROR: Test Failed")); \
125 // this is the test plugin implementation ID in rather than KCharacterSetIdentifierShiftJis
126 const TUint KCharacterSetTestShiftJisKddiau=0x01000001;
129 * Utility for DEF063276 fix.
132 void CT_BUILTIN::ReadDesc(TDes8& aDes, const TDesC& aFilename, RFs& aFs)
135 TInt err = file.Open(aFs, aFilename, EFileRead);
136 test(err == KErrNone);
137 CleanupClosePushL(file);
139 err = file.Read(aDes);
140 test(err == KErrNone);
141 CleanupStack::PopAndDestroy(&file);
144 ///////////////////////////////////////////////////////////////////////////////////////
145 ///////////////////////////////////////////////////////////////////////////////////////
147 @SYMTestCaseID SYSLIB-CHARCONV-CT-0499
148 @SYMTestCaseDesc Tests for conversion of SMS 7 bit data to Unicode, and from Unicode to original data
149 @SYMTestPriority Medium
150 @SYMTestActions Tests for CCnvCharacterSetConverter::ConvertToUnicode(),CCnvCharacterSetConverter::ConvertFromUnicode()
151 @SYMTestExpectedResults Test must not fail
154 void CT_BUILTIN::TestFix_EDNJJUN_4RWH2A(CCnvCharacterSetConverter& aCharacterSetConverter, RFs& aFileServerSession, CArrayFix<CCnvCharacterSetConverter::SCharacterSet>& aArrayOfCharacterSetsAvailable)
156 INFO_PRINTF1(_L(" @SYMTestCaseID:SYSLIB-CHARCONV-CT-0499 "));
157 TBuf16<300> generatedUnicode;
158 TBuf8<300> generatedSms7Bit;
159 TRAPD(errCode, aCharacterSetConverter.PrepareToConvertToOrFromL(KCharacterSetIdentifierSms7Bit, aArrayOfCharacterSetsAvailable, aFileServerSession));
160 test(errCode == KErrNone);
161 TInt state=CCnvCharacterSetConverter::KStateDefault;
163 // Fix for DEF063276.
166 ReadDesc(buf, KOriginalSms7BitFile, aFileServerSession);
168 test(aCharacterSetConverter.ConvertToUnicode(generatedUnicode, buf, state)==0);
171 test(generatedUnicode.Length()==259);
172 test(generatedUnicode==KExpectedUnicodeFromSms7Bit);
173 test(state==CCnvCharacterSetConverter::KStateDefault);
174 test(aCharacterSetConverter.ConvertFromUnicode(generatedSms7Bit, generatedUnicode)==0);
175 test(generatedSms7Bit.Length()==269);
176 test(generatedSms7Bit==KExpectedSms7Bit);
180 Test_DEF049749 test code for DEF049749 - Char convs don t handle correcly Shift JIS emoji
182 @SYMTestCaseID SYSLIB-CHARCONV-CT-0500
183 @SYMTestCaseDesc Tests for defect number DEF049749
184 @SYMTestPriority Medium
185 @SYMTestActions Tests for conversion from Shift JIS Emoji character set to Unicode
186 Tests for CCnvCharacterSetConverter::EErrorIllFormedInput error flag
187 @SYMTestExpectedResults Test must not fail
190 void CT_BUILTIN::Test_DEF049749(CCnvCharacterSetConverter& aCharacterSetConverter, RFs& aFileServerSession, CArrayFix<CCnvCharacterSetConverter::SCharacterSet>& aArrayOfCharacterSetsAvailable)
192 // original defect data
193 _LIT8(KCodeToConvert, "\xF8\x9F\xF8\x9F\x81\x40\x3B\x3B\x3B\x3B");
194 _LIT16(KExpectedUnicode, "\xFFFD\xFFFD\x3000\x003b\x003b\x003b\x003b");
195 TBuf16<300> generatedUnicode;
197 // check now able to convert the original defect data
198 TRAPD(errCode, aCharacterSetConverter.PrepareToConvertToOrFromL(KCharacterSetTestShiftJisKddiau, aArrayOfCharacterSetsAvailable, aFileServerSession));
199 test(errCode == KErrNone);
200 TInt state=CCnvCharacterSetConverter::KStateDefault;
201 TInt ret = aCharacterSetConverter.ConvertToUnicode(generatedUnicode, KCodeToConvert, state);
203 // in DEF049749 CCnvCharacterSetConverter::EErrorIllFormedInput was incorrectly returned.
204 // rather than the number of unconverted bytes left, which should be 0
206 test(generatedUnicode==KExpectedUnicode);
208 INFO_PRINTF1(_L(" @SYMTestCaseID:SYSLIB-CHARCONV-CT-0500 User-defined ShiftJIS region->FFFD "));
209 /* check the user defined region (ref CJKV Ken Lunde page206)
210 F040-F97E and F080-F9FC */
211 TBuf8<300> sampleUserDefined;
212 for (TInt leadByte = 0xF0; leadByte != 0xF9; leadByte++)
214 // a leadbyte missing the trail byte then another character
215 sampleUserDefined.Format(_L8("%c\x3F"), leadByte);
216 _LIT16(KExpectedUnicode4, "\xFFFD\x3F");
217 TRAP(errCode, aCharacterSetConverter.PrepareToConvertToOrFromL(KCharacterSetTestShiftJisKddiau, aArrayOfCharacterSetsAvailable, aFileServerSession));
218 test(errCode == KErrNone);
219 ret = aCharacterSetConverter.ConvertToUnicode(generatedUnicode, sampleUserDefined, state);
221 test(generatedUnicode==KExpectedUnicode4);
223 // a single leadbyte missing the trail byte
224 sampleUserDefined.Format(_L8("%c"), leadByte);
225 TRAP(errCode, aCharacterSetConverter.PrepareToConvertToOrFromL(KCharacterSetTestShiftJisKddiau, aArrayOfCharacterSetsAvailable, aFileServerSession));
226 test(errCode == KErrNone);
227 ret = aCharacterSetConverter.ConvertToUnicode(generatedUnicode, sampleUserDefined, state);
228 test(ret == CCnvCharacterSetConverter::EErrorIllFormedInput);
230 // Default version of Shift-JIS converter now contains mappings for ezweb private use
231 // in range 0xF7BC to 0xF7FC so following tests would fail in this area - JG 30/06/2005
232 if ((leadByte < 0xF3) || (leadByte > 0xF7))
234 for (TInt trailbyte = 0x40; trailbyte != 0xFD;
235 trailbyte += (trailbyte == 0x7E? 2 : 1))
237 TInt errCode = KErrNone;
239 // emoji character on its own
240 sampleUserDefined.Format(_L8("%c%c"), leadByte, trailbyte);
241 _LIT16(KExpectedUnicode1, "\xFFFD");
242 TRAP(errCode, aCharacterSetConverter.PrepareToConvertToOrFromL(KCharacterSetTestShiftJisKddiau, aArrayOfCharacterSetsAvailable, aFileServerSession));
243 test(errCode == KErrNone);
244 ret = aCharacterSetConverter.ConvertToUnicode(generatedUnicode, sampleUserDefined, state);
246 test(generatedUnicode==KExpectedUnicode1);
248 // followed by a single character
249 sampleUserDefined.Format(_L8("%c%cx"), leadByte, trailbyte);
250 _LIT16(KExpectedUnicode2, "\xFFFDx");
251 TRAP(errCode, aCharacterSetConverter.PrepareToConvertToOrFromL(KCharacterSetTestShiftJisKddiau, aArrayOfCharacterSetsAvailable, aFileServerSession));
252 test(errCode == KErrNone);
253 ret = aCharacterSetConverter.ConvertToUnicode(generatedUnicode, sampleUserDefined, state);
255 test(generatedUnicode==KExpectedUnicode2);
257 // preceeded by a single character
258 sampleUserDefined.Format(_L8("x%c%c"), leadByte, trailbyte);
259 _LIT16(KExpectedUnicode3, "x\xFFFD");
260 TRAP(errCode, aCharacterSetConverter.PrepareToConvertToOrFromL(KCharacterSetTestShiftJisKddiau, aArrayOfCharacterSetsAvailable, aFileServerSession));
261 test(errCode == KErrNone);
262 ret = aCharacterSetConverter.ConvertToUnicode(generatedUnicode, sampleUserDefined, state);
264 test(generatedUnicode==KExpectedUnicode3);
269 INFO_PRINTF1(_L("All double-byte characters convert to single Unicode"));
270 TText8 LeadBytes[] = { 0x81, 0x9F, 0xE0, 0xEA, 0xEB, 0xF9, 0xFA, 0xFC };
271 TText8 TrailBytes[] = { 0x40, 0x7E, 0x80, 0xFC };
273 for (leadp = LeadBytes;
274 leadp != LeadBytes + sizeof(LeadBytes)/sizeof(LeadBytes[0]);
277 // a single leadbyte missing the trail byte
278 sampleUserDefined.Format(_L8("%c"), *leadp);
279 TRAP(errCode, aCharacterSetConverter.PrepareToConvertToOrFromL(KCharacterSetTestShiftJisKddiau, aArrayOfCharacterSetsAvailable, aFileServerSession));
280 test(errCode == KErrNone);
281 ret = aCharacterSetConverter.ConvertToUnicode(generatedUnicode, sampleUserDefined, state);
282 test(ret == CCnvCharacterSetConverter::EErrorIllFormedInput);
284 // lead byte then illegal trail byte, which is a legal byte on its own
285 sampleUserDefined.Format(_L8("%c%c"), *leadp, 0x3F);
286 TRAP(errCode, aCharacterSetConverter.PrepareToConvertToOrFromL(KCharacterSetTestShiftJisKddiau, aArrayOfCharacterSetsAvailable, aFileServerSession));
287 test(errCode == KErrNone);
288 ret = aCharacterSetConverter.ConvertToUnicode(generatedUnicode, sampleUserDefined, state);
290 test(generatedUnicode == _L16("\xFFFD\x3F"));
292 for (TText8* trailp = TrailBytes;
293 trailp != TrailBytes + sizeof(TrailBytes)/sizeof(TrailBytes[0]);
296 sampleUserDefined.Format(_L8("%c%c"), *leadp, *trailp);
297 TRAP(errCode, aCharacterSetConverter.PrepareToConvertToOrFromL(KCharacterSetTestShiftJisKddiau, aArrayOfCharacterSetsAvailable, aFileServerSession));
298 test(errCode == KErrNone);
299 ret = aCharacterSetConverter.ConvertToUnicode(generatedUnicode, sampleUserDefined, state);
301 test(generatedUnicode.Length() == 1);
305 INFO_PRINTF1(_L("All single-byte characters convert to single Unicode"));
306 TText8 SingleBytes[] = { 0, 0x7F, 0x80, 0xA0, 0xA1, 0xFD, 0xFE, 0xFF };
307 for (TText8* singlep = SingleBytes;
308 singlep != SingleBytes + sizeof(SingleBytes)/sizeof(SingleBytes[0]);
311 // a single leadbyte missing the trail byte
312 sampleUserDefined.Format(_L8("%c"), *singlep);
313 TRAP(errCode, aCharacterSetConverter.PrepareToConvertToOrFromL(KCharacterSetTestShiftJisKddiau, aArrayOfCharacterSetsAvailable, aFileServerSession));
314 test(errCode == KErrNone);
315 ret = aCharacterSetConverter.ConvertToUnicode(generatedUnicode, sampleUserDefined, state);
317 test(generatedUnicode.Length() == 1);
320 INFO_PRINTF1(_L("Valid lead byte + invalid trail byte -> FFFD + something"));
321 TText8 NotTrailBytes[] = { 0x3F, 0x7F, 0xFD, 0xFE, 0xFF };
322 for (leadp = LeadBytes;
323 leadp != LeadBytes + sizeof(LeadBytes)/sizeof(LeadBytes[0]);
326 for (TText8* trailp = NotTrailBytes;
327 trailp != NotTrailBytes + sizeof(NotTrailBytes)/sizeof(NotTrailBytes[0]);
330 sampleUserDefined.Format(_L8("%c%c"), *leadp, *trailp);
331 TRAP(errCode, aCharacterSetConverter.PrepareToConvertToOrFromL(KCharacterSetTestShiftJisKddiau, aArrayOfCharacterSetsAvailable, aFileServerSession));
332 test(errCode == KErrNone);
333 ret = aCharacterSetConverter.ConvertToUnicode(generatedUnicode, sampleUserDefined, state);
335 test(generatedUnicode.Length() == 2);
336 test(generatedUnicode[0] == 0xFFFD);
342 Test_DEF053900 test code for DEF053900 - Problems encoding Japanese emails to ISO-2022-JP
344 @SYMTestCaseID SYSLIB-CHARCONV-CT-1306
345 @SYMTestCaseDesc Tests for defect number DEF053900
346 @SYMTestPriority Medium
347 @SYMTestActions Attempt for converting from Japanese character set email to Unicode.
348 @SYMTestExpectedResults Test must not fail
351 void CT_BUILTIN::Test_DEF053900(CCnvCharacterSetConverter& aCharacterSetConverter, RFs& aFileServerSession, CArrayFix<CCnvCharacterSetConverter::SCharacterSet>& aArrayOfCharacterSetsAvailable)
353 // check now able to convert the original defect data
354 INFO_PRINTF1(_L(" @SYMTestCaseID:SYSLIB-CHARCONV-CT-1306 "));
355 TBuf8<300> generatedIso2022;
356 TRAPD(errCode, aCharacterSetConverter.PrepareToConvertToOrFromL(KCharacterSetIdentifierIso2022Jp, aArrayOfCharacterSetsAvailable, aFileServerSession));
357 test(errCode == KErrNone);
358 TInt state=CCnvCharacterSetConverter::KStateDefault;
359 TInt ret = aCharacterSetConverter.ConvertFromUnicode(generatedIso2022, KEmailToConvert, state);
360 // check the converted data is as expected
362 test(generatedIso2022==KExpectedIso2022jp);
363 ret = aCharacterSetConverter.ConvertFromUnicode(generatedIso2022, KEmailEndingInJapanese, state);
365 test(generatedIso2022==KExpectedEmailEndingInJapanese);
369 @SYMTestCaseID SYSLIB-CHARCONV-CT-0501
370 @SYMTestCaseDesc Tests for CCnvCharacterSetConverter class
371 @SYMTestPriority Medium
372 @SYMTestActions Tests for conversion from empty descriptors to different character sets
373 @SYMTestExpectedResults Test must not fail
376 void CT_BUILTIN::DoE32MainL()
378 RFs fileServerSession;
379 CleanupClosePushL(fileServerSession);
380 User::LeaveIfError(fileServerSession.Connect());
381 CCnvCharacterSetConverter* characterSetConverter=CCnvCharacterSetConverter::NewLC();
382 CArrayFix<CCnvCharacterSetConverter::SCharacterSet>* arrayOfCharacterSetsAvailable=CCnvCharacterSetConverter::CreateArrayOfCharacterSetsAvailableLC(fileServerSession);
383 INFO_PRINTF1(_L("Available:\n"));
384 for (TInt i=arrayOfCharacterSetsAvailable->Count()-1; i>=0; --i)
386 const CCnvCharacterSetConverter::SCharacterSet& charactersSet=(*arrayOfCharacterSetsAvailable)[i];
387 characterSetConverter->PrepareToConvertToOrFromL(charactersSet.Identifier(), *arrayOfCharacterSetsAvailable, fileServerSession);
388 TPtrC charactersSetName(charactersSet.Name());
389 if (charactersSet.NameIsFileName())
391 charactersSetName.Set(TParsePtrC(charactersSetName).Name());
393 INFO_PRINTF2(_L(" %S\n"), &charactersSetName);
395 TBuf16<128> originalUnicode;
396 TBuf8<128> generatedForeign;
397 TBuf16<128> generatedUnicode;
398 TInt state=CCnvCharacterSetConverter::KStateDefault;
400 INFO_PRINTF1(_L(" @SYMTestCaseID:SYSLIB-CHARCONV-CT-0501 Testing empty descriptors (Code Page 1252) "));
401 characterSetConverter->PrepareToConvertToOrFromL(KCharacterSetIdentifierCodePage1252, *arrayOfCharacterSetsAvailable, fileServerSession);
402 originalUnicode=KNullDesC16;
403 test(characterSetConverter->ConvertFromUnicode(generatedForeign, originalUnicode)==0);
404 test(generatedForeign==KNullDesC8);
405 test(characterSetConverter->ConvertToUnicode(generatedUnicode, generatedForeign, state)==0);
406 test(state==CCnvCharacterSetConverter::KStateDefault);
407 test(generatedUnicode==originalUnicode);
408 INFO_PRINTF1(_L("Testing empty descriptors (ISO-8859-1)"));
409 characterSetConverter->PrepareToConvertToOrFromL(KCharacterSetIdentifierIso88591, *arrayOfCharacterSetsAvailable, fileServerSession);
410 originalUnicode=KNullDesC16;
411 test(characterSetConverter->ConvertFromUnicode(generatedForeign, originalUnicode)==0);
412 test(generatedForeign==KNullDesC8);
413 test(characterSetConverter->ConvertToUnicode(generatedUnicode, generatedForeign, state)==0);
414 test(state==CCnvCharacterSetConverter::KStateDefault);
415 test(generatedUnicode==originalUnicode);
416 INFO_PRINTF1(_L("Testing empty descriptors (ASCII)"));
417 characterSetConverter->PrepareToConvertToOrFromL(KCharacterSetIdentifierAscii, *arrayOfCharacterSetsAvailable, fileServerSession);
418 originalUnicode=KNullDesC16;
419 test(characterSetConverter->ConvertFromUnicode(generatedForeign, originalUnicode)==0);
420 test(generatedForeign==KNullDesC8);
421 test(characterSetConverter->ConvertToUnicode(generatedUnicode, generatedForeign, state)==0);
422 test(state==CCnvCharacterSetConverter::KStateDefault);
423 test(generatedUnicode==originalUnicode);
424 INFO_PRINTF1(_L("Testing empty descriptors (SMS 7-bit)"));
425 characterSetConverter->PrepareToConvertToOrFromL(KCharacterSetIdentifierSms7Bit, *arrayOfCharacterSetsAvailable, fileServerSession);
426 originalUnicode=KNullDesC16;
427 test(characterSetConverter->ConvertFromUnicode(generatedForeign, originalUnicode)==0);
428 test(generatedForeign==KNullDesC8);
429 test(characterSetConverter->ConvertToUnicode(generatedUnicode, generatedForeign, state)==0);
430 test(state==CCnvCharacterSetConverter::KStateDefault);
431 test(generatedUnicode==originalUnicode);
432 INFO_PRINTF1(_L("Testing exhaustive single-character Code Page 1252 round trips"));
433 characterSetConverter->PrepareToConvertToOrFromL(KCharacterSetIdentifierCodePage1252, *arrayOfCharacterSetsAvailable, fileServerSession);
434 for (characterCode=0x00; characterCode<=0x7f; ++characterCode)
436 originalUnicode.Format(_L16("%c"), characterCode);
437 test(characterSetConverter->ConvertFromUnicode(generatedForeign, originalUnicode)==0);
438 TBuf8<1> expectedForeign;
439 expectedForeign.Format(_L8("%c"), characterCode);
440 test(generatedForeign==expectedForeign);
441 test(characterSetConverter->ConvertToUnicode(generatedUnicode, generatedForeign, state)==0);
442 test(state==CCnvCharacterSetConverter::KStateDefault);
443 test(generatedUnicode==originalUnicode);
445 originalUnicode.Format(_L16("%c"), 0x20ac);
446 test(characterSetConverter->ConvertFromUnicode(generatedForeign, originalUnicode)==0);
447 test(generatedForeign==_L8("\x80"));
448 test(characterSetConverter->ConvertToUnicode(generatedUnicode, generatedForeign, state)==0);
449 test(state==CCnvCharacterSetConverter::KStateDefault);
450 test(generatedUnicode==originalUnicode);
451 originalUnicode.Format(_L16("%c"), 0x201a);
452 test(characterSetConverter->ConvertFromUnicode(generatedForeign, originalUnicode)==0);
453 test(generatedForeign==_L8("\x82"));
454 test(characterSetConverter->ConvertToUnicode(generatedUnicode, generatedForeign, state)==0);
455 test(state==CCnvCharacterSetConverter::KStateDefault);
456 test(generatedUnicode==originalUnicode);
457 originalUnicode.Format(_L16("%c"), 0x0192);
458 test(characterSetConverter->ConvertFromUnicode(generatedForeign, originalUnicode)==0);
459 test(generatedForeign==_L8("\x83"));
460 test(characterSetConverter->ConvertToUnicode(generatedUnicode, generatedForeign, state)==0);
461 test(state==CCnvCharacterSetConverter::KStateDefault);
462 test(generatedUnicode==originalUnicode);
463 originalUnicode.Format(_L16("%c"), 0x201e);
464 test(characterSetConverter->ConvertFromUnicode(generatedForeign, originalUnicode)==0);
465 test(generatedForeign==_L8("\x84"));
466 test(characterSetConverter->ConvertToUnicode(generatedUnicode, generatedForeign, state)==0);
467 test(state==CCnvCharacterSetConverter::KStateDefault);
468 test(generatedUnicode==originalUnicode);
469 originalUnicode.Format(_L16("%c"), 0x2026);
470 test(characterSetConverter->ConvertFromUnicode(generatedForeign, originalUnicode)==0);
471 test(generatedForeign==_L8("\x85"));
472 test(characterSetConverter->ConvertToUnicode(generatedUnicode, generatedForeign, state)==0);
473 test(state==CCnvCharacterSetConverter::KStateDefault);
474 test(generatedUnicode==originalUnicode);
475 originalUnicode.Format(_L16("%c"), 0x2020);
476 test(characterSetConverter->ConvertFromUnicode(generatedForeign, originalUnicode)==0);
477 test(generatedForeign==_L8("\x86"));
478 test(characterSetConverter->ConvertToUnicode(generatedUnicode, generatedForeign, state)==0);
479 test(state==CCnvCharacterSetConverter::KStateDefault);
480 test(generatedUnicode==originalUnicode);
481 originalUnicode.Format(_L16("%c"), 0x2021);
482 test(characterSetConverter->ConvertFromUnicode(generatedForeign, originalUnicode)==0);
483 test(generatedForeign==_L8("\x87"));
484 test(characterSetConverter->ConvertToUnicode(generatedUnicode, generatedForeign, state)==0);
485 test(state==CCnvCharacterSetConverter::KStateDefault);
486 test(generatedUnicode==originalUnicode);
487 originalUnicode.Format(_L16("%c"), 0x02c6);
488 test(characterSetConverter->ConvertFromUnicode(generatedForeign, originalUnicode)==0);
489 test(generatedForeign==_L8("\x88"));
490 test(characterSetConverter->ConvertToUnicode(generatedUnicode, generatedForeign, state)==0);
491 test(state==CCnvCharacterSetConverter::KStateDefault);
492 test(generatedUnicode==originalUnicode);
493 originalUnicode.Format(_L16("%c"), 0x2030);
494 test(characterSetConverter->ConvertFromUnicode(generatedForeign, originalUnicode)==0);
495 test(generatedForeign==_L8("\x89"));
496 test(characterSetConverter->ConvertToUnicode(generatedUnicode, generatedForeign, state)==0);
497 test(state==CCnvCharacterSetConverter::KStateDefault);
498 test(generatedUnicode==originalUnicode);
499 originalUnicode.Format(_L16("%c"), 0x0160);
500 test(characterSetConverter->ConvertFromUnicode(generatedForeign, originalUnicode)==0);
501 test(generatedForeign==_L8("\x8a"));
502 test(characterSetConverter->ConvertToUnicode(generatedUnicode, generatedForeign, state)==0);
503 test(state==CCnvCharacterSetConverter::KStateDefault);
504 test(generatedUnicode==originalUnicode);
505 originalUnicode.Format(_L16("%c"), 0x2039);
506 test(characterSetConverter->ConvertFromUnicode(generatedForeign, originalUnicode)==0);
507 test(generatedForeign==_L8("\x8b"));
508 test(characterSetConverter->ConvertToUnicode(generatedUnicode, generatedForeign, state)==0);
509 test(state==CCnvCharacterSetConverter::KStateDefault);
510 test(generatedUnicode==originalUnicode);
511 originalUnicode.Format(_L16("%c"), 0x0152);
512 test(characterSetConverter->ConvertFromUnicode(generatedForeign, originalUnicode)==0);
513 test(generatedForeign==_L8("\x8c"));
514 test(characterSetConverter->ConvertToUnicode(generatedUnicode, generatedForeign, state)==0);
515 test(state==CCnvCharacterSetConverter::KStateDefault);
516 test(generatedUnicode==originalUnicode);
517 originalUnicode.Format(_L16("%c"), 0x017d);
518 test(characterSetConverter->ConvertFromUnicode(generatedForeign, originalUnicode)==0);
519 test(generatedForeign==_L8("\x8e"));
520 test(characterSetConverter->ConvertToUnicode(generatedUnicode, generatedForeign, state)==0);
521 test(state==CCnvCharacterSetConverter::KStateDefault);
522 test(generatedUnicode==originalUnicode);
523 originalUnicode.Format(_L16("%c"), 0x017e);
524 test(characterSetConverter->ConvertFromUnicode(generatedForeign, originalUnicode)==0);
525 test(generatedForeign==_L8("\x9e"));
526 test(characterSetConverter->ConvertToUnicode(generatedUnicode, generatedForeign, state)==0);
527 test(state==CCnvCharacterSetConverter::KStateDefault);
528 test(generatedUnicode==originalUnicode);
529 originalUnicode.Format(_L16("%c"), 0x2018);
530 test(characterSetConverter->ConvertFromUnicode(generatedForeign, originalUnicode)==0);
531 test(generatedForeign==_L8("\x91"));
532 test(characterSetConverter->ConvertToUnicode(generatedUnicode, generatedForeign, state)==0);
533 test(state==CCnvCharacterSetConverter::KStateDefault);
534 test(generatedUnicode==originalUnicode);
535 originalUnicode.Format(_L16("%c"), 0x2019);
536 test(characterSetConverter->ConvertFromUnicode(generatedForeign, originalUnicode)==0);
537 test(generatedForeign==_L8("\x92"));
538 test(characterSetConverter->ConvertToUnicode(generatedUnicode, generatedForeign, state)==0);
539 test(state==CCnvCharacterSetConverter::KStateDefault);
540 test(generatedUnicode==originalUnicode);
541 originalUnicode.Format(_L16("%c"), 0x201c);
542 test(characterSetConverter->ConvertFromUnicode(generatedForeign, originalUnicode)==0);
543 test(generatedForeign==_L8("\x93"));
544 test(characterSetConverter->ConvertToUnicode(generatedUnicode, generatedForeign, state)==0);
545 test(state==CCnvCharacterSetConverter::KStateDefault);
546 test(generatedUnicode==originalUnicode);
547 originalUnicode.Format(_L16("%c"), 0x201d);
548 test(characterSetConverter->ConvertFromUnicode(generatedForeign, originalUnicode)==0);
549 test(generatedForeign==_L8("\x94"));
550 test(characterSetConverter->ConvertToUnicode(generatedUnicode, generatedForeign, state)==0);
551 test(state==CCnvCharacterSetConverter::KStateDefault);
552 test(generatedUnicode==originalUnicode);
553 originalUnicode.Format(_L16("%c"), 0x2022);
554 test(characterSetConverter->ConvertFromUnicode(generatedForeign, originalUnicode)==0);
555 test(generatedForeign==_L8("\x95"));
556 test(characterSetConverter->ConvertToUnicode(generatedUnicode, generatedForeign, state)==0);
557 test(state==CCnvCharacterSetConverter::KStateDefault);
558 test(generatedUnicode==originalUnicode);
559 originalUnicode.Format(_L16("%c"), 0x2013);
560 test(characterSetConverter->ConvertFromUnicode(generatedForeign, originalUnicode)==0);
561 test(generatedForeign==_L8("\x96"));
562 test(characterSetConverter->ConvertToUnicode(generatedUnicode, generatedForeign, state)==0);
563 test(state==CCnvCharacterSetConverter::KStateDefault);
564 test(generatedUnicode==originalUnicode);
565 originalUnicode.Format(_L16("%c"), 0x2014);
566 test(characterSetConverter->ConvertFromUnicode(generatedForeign, originalUnicode)==0);
567 test(generatedForeign==_L8("\x97"));
568 test(characterSetConverter->ConvertToUnicode(generatedUnicode, generatedForeign, state)==0);
569 test(state==CCnvCharacterSetConverter::KStateDefault);
570 test(generatedUnicode==originalUnicode);
571 originalUnicode.Format(_L16("%c"), 0x02dc);
572 test(characterSetConverter->ConvertFromUnicode(generatedForeign, originalUnicode)==0);
573 test(generatedForeign==_L8("\x98"));
574 test(characterSetConverter->ConvertToUnicode(generatedUnicode, generatedForeign, state)==0);
575 test(state==CCnvCharacterSetConverter::KStateDefault);
576 test(generatedUnicode==originalUnicode);
577 originalUnicode.Format(_L16("%c"), 0x2122);
578 test(characterSetConverter->ConvertFromUnicode(generatedForeign, originalUnicode)==0);
579 test(generatedForeign==_L8("\x99"));
580 test(characterSetConverter->ConvertToUnicode(generatedUnicode, generatedForeign, state)==0);
581 test(state==CCnvCharacterSetConverter::KStateDefault);
582 test(generatedUnicode==originalUnicode);
583 originalUnicode.Format(_L16("%c"), 0x0161);
584 test(characterSetConverter->ConvertFromUnicode(generatedForeign, originalUnicode)==0);
585 test(generatedForeign==_L8("\x9a"));
586 test(characterSetConverter->ConvertToUnicode(generatedUnicode, generatedForeign, state)==0);
587 test(state==CCnvCharacterSetConverter::KStateDefault);
588 test(generatedUnicode==originalUnicode);
589 originalUnicode.Format(_L16("%c"), 0x203a);
590 test(characterSetConverter->ConvertFromUnicode(generatedForeign, originalUnicode)==0);
591 test(generatedForeign==_L8("\x9b"));
592 test(characterSetConverter->ConvertToUnicode(generatedUnicode, generatedForeign, state)==0);
593 test(state==CCnvCharacterSetConverter::KStateDefault);
594 test(generatedUnicode==originalUnicode);
595 originalUnicode.Format(_L16("%c"), 0x0153);
596 test(characterSetConverter->ConvertFromUnicode(generatedForeign, originalUnicode)==0);
597 test(generatedForeign==_L8("\x9c"));
598 test(characterSetConverter->ConvertToUnicode(generatedUnicode, generatedForeign, state)==0);
599 test(state==CCnvCharacterSetConverter::KStateDefault);
600 test(generatedUnicode==originalUnicode);
601 originalUnicode.Format(_L16("%c"), 0x0178);
602 test(characterSetConverter->ConvertFromUnicode(generatedForeign, originalUnicode)==0);
603 test(generatedForeign==_L8("\x9f"));
604 test(characterSetConverter->ConvertToUnicode(generatedUnicode, generatedForeign, state)==0);
605 test(state==CCnvCharacterSetConverter::KStateDefault);
606 test(generatedUnicode==originalUnicode);
607 for (characterCode=0xa0; characterCode<0xff; ++characterCode)
609 originalUnicode.Format(_L16("%c"), characterCode);
610 test(characterSetConverter->ConvertFromUnicode(generatedForeign, originalUnicode)==0);
611 TBuf8<1> expectedForeign;
612 expectedForeign.Format(_L8("%c"), characterCode);
613 test(generatedForeign==expectedForeign);
614 test(characterSetConverter->ConvertToUnicode(generatedUnicode, generatedForeign, state)==0);
615 test(state==CCnvCharacterSetConverter::KStateDefault);
616 test(generatedUnicode==originalUnicode);
618 INFO_PRINTF1(_L("Testing exhaustive single-character ISO-8859-1 round trips"));
619 characterSetConverter->PrepareToConvertToOrFromL(KCharacterSetIdentifierIso88591, *arrayOfCharacterSetsAvailable, fileServerSession);
620 for (characterCode=0x00; characterCode<=0xff; ++characterCode)
622 const TBool unconvertibleCharacter=(characterCode==0x80);
623 TInt numberOfUnconvertibleCharacters;
624 TInt indexOfFirstUnconvertibleCharacter;
625 originalUnicode.Format(_L16("%c"), characterCode);
626 test(characterSetConverter->ConvertFromUnicode(generatedForeign, originalUnicode, numberOfUnconvertibleCharacters, indexOfFirstUnconvertibleCharacter)==0);
627 if (characterCode != 0x80)
628 test(numberOfUnconvertibleCharacters==(unconvertibleCharacter? 1: 0));
629 if (numberOfUnconvertibleCharacters>0)
631 test(indexOfFirstUnconvertibleCharacter==0);
633 TBuf8<1> expectedForeign;
634 expectedForeign.Format(_L8("%c"), unconvertibleCharacter? 0x1a: characterCode);
635 test(generatedForeign==expectedForeign);
636 TBuf8<1> originalForeign;
637 originalForeign.Format(_L8("%c"), characterCode);
638 test(characterSetConverter->ConvertToUnicode(generatedUnicode, originalForeign, state, numberOfUnconvertibleCharacters, indexOfFirstUnconvertibleCharacter)==0);
639 test(state==CCnvCharacterSetConverter::KStateDefault);
640 if (characterCode != 0x80)
641 test(numberOfUnconvertibleCharacters==(unconvertibleCharacter? 1: 0));
642 if (numberOfUnconvertibleCharacters>0)
644 test(indexOfFirstUnconvertibleCharacter==0);
646 if (unconvertibleCharacter)
648 test(generatedUnicode.Length()==1);
649 if (characterCode==0x80)
651 test(generatedUnicode[0]==0x20ac);
655 test(generatedUnicode[0]==0xfffd);
660 test(generatedUnicode==originalUnicode);
663 INFO_PRINTF1(_L("Testing exhaustive single-character ASCII round trips"));
664 characterSetConverter->PrepareToConvertToOrFromL(KCharacterSetIdentifierAscii, *arrayOfCharacterSetsAvailable, fileServerSession);
665 for (characterCode=0x00; characterCode<=0xff; ++characterCode)
667 const TBool unconvertibleCharacter=(characterCode>=0x80);
668 TInt numberOfUnconvertibleCharacters;
669 originalUnicode.Format(_L16("%c"), characterCode);
670 test(characterSetConverter->ConvertFromUnicode(generatedForeign, originalUnicode, numberOfUnconvertibleCharacters)==0);
671 test(numberOfUnconvertibleCharacters==(unconvertibleCharacter? 1: 0));
672 TBuf8<1> expectedForeign;
673 expectedForeign.Format(_L8("%c"), unconvertibleCharacter? 0x1a: characterCode);
674 test(generatedForeign==expectedForeign);
675 TBuf8<1> originalForeign;
676 originalForeign.Format(_L8("%c"), characterCode);
677 test(characterSetConverter->ConvertToUnicode(generatedUnicode, originalForeign, state, numberOfUnconvertibleCharacters)==0);
678 test(state==CCnvCharacterSetConverter::KStateDefault);
679 test(numberOfUnconvertibleCharacters==(unconvertibleCharacter? 1: 0));
680 if (unconvertibleCharacter)
682 test(generatedUnicode.Length()==1);
683 test(generatedUnicode[0]==0xfffd);
687 test(generatedUnicode==originalUnicode);
690 INFO_PRINTF1(_L("Testing exhaustive SMS 7-bit round trip (default table)"));
691 characterSetConverter->PrepareToConvertToOrFromL(KCharacterSetIdentifierSms7Bit, fileServerSession);
692 originalUnicode.SetLength(0);
693 const TPtrC16 formatOfSixteenCharacters=_L16("%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c");
694 originalUnicode.AppendFormat(formatOfSixteenCharacters, 0x0040, 0x00a3, 0x0024, 0x00a5, 0x00e8, 0x00e9, 0x00f9, 0x00ec, 0x00f2, 0x00e7, 0x000a, 0x00d8, 0x00f8, 0x000d, 0x00c5, 0x00e5);
695 originalUnicode.AppendFormat(formatOfSixteenCharacters, 0x0394, 0x005f, 0x03a6, 0x0393, 0x039b, 0x03a9, 0x03a0, 0x03a8, 0x03a3, 0x0398, 0x039e, '!', 0x00c6, 0x00e6, 0x00df, 0x00c9);
696 originalUnicode.AppendFormat(formatOfSixteenCharacters, 0x0020, 0x0021, 0x0022, 0x0023, 0x00a4, 0x0025, 0x0026, 0x0027, 0x0028, 0x0029, 0x002a, 0x002b, 0x002c, 0x002d, 0x002e, 0x002f);
697 originalUnicode.AppendFormat(formatOfSixteenCharacters, 0x0030, 0x0031, 0x0032, 0x0033, 0x0034, 0x0035, 0x0036, 0x0037, 0x0038, 0x0039, 0x003a, 0x003b, 0x003c, 0x003d, 0x003e, 0x003f);
698 originalUnicode.AppendFormat(formatOfSixteenCharacters, 0x00a1, 0x0041, 0x0042, 0x0043, 0x0044, 0x0045, 0x0046, 0x0047, 0x0048, 0x0049, 0x004a, 0x004b, 0x004c, 0x004d, 0x004e, 0x004f);
699 originalUnicode.AppendFormat(formatOfSixteenCharacters, 0x0050, 0x0051, 0x0052, 0x0053, 0x0054, 0x0055, 0x0056, 0x0057, 0x0058, 0x0059, 0x005a, 0x00c4, 0x00d6, 0x00d1, 0x00dc, 0x00a7);
700 originalUnicode.AppendFormat(formatOfSixteenCharacters, 0x00bf, 0x0061, 0x0062, 0x0063, 0x0064, 0x0065, 0x0066, 0x0067, 0x0068, 0x0069, 0x006a, 0x006b, 0x006c, 0x006d, 0x006e, 0x006f);
701 originalUnicode.AppendFormat(formatOfSixteenCharacters, 0x0070, 0x0071, 0x0072, 0x0073, 0x0074, 0x0075, 0x0076, 0x0077, 0x0078, 0x0079, 0x007a, 0x00e4, 0x00f6, 0x00f1, 0x00fc, 0x00e0);
702 test(characterSetConverter->ConvertFromUnicode(generatedForeign, originalUnicode)==0);
703 test(generatedForeign.Length()==0x80);
704 for (characterCode=0x00; characterCode<0x80; ++characterCode)
706 test(generatedForeign[characterCode]==(characterCode==0x1b)? '!': characterCode);
708 test(characterSetConverter->ConvertToUnicode(generatedUnicode, generatedForeign, state)==0);
709 test(state==CCnvCharacterSetConverter::KStateDefault);
710 test(generatedUnicode==originalUnicode);
711 INFO_PRINTF1(_L("Testing Greek range of SMS 7-bit"));
712 characterSetConverter->PrepareToConvertToOrFromL(KCharacterSetIdentifierSms7Bit, *arrayOfCharacterSetsAvailable, fileServerSession);
713 TBuf16<16> expectedUnicode;
714 originalUnicode.Format(formatOfSixteenCharacters.Left(7*2), 0x0386, 0x0388, 0x0389, 0x038a, 0x038c, 0x038e, 0x038f);
715 expectedUnicode.Format(formatOfSixteenCharacters.Left(7*2), 0x0041, 0x0045, 0x0048, 0x0049, 0x004f, 0x0059, 0x03a9);
716 test(characterSetConverter->ConvertFromUnicode(generatedForeign, originalUnicode)==0);
717 test(generatedForeign==_L8("\x41\x45\x48\x49\x4f\x59\x15"));
718 test(characterSetConverter->ConvertToUnicode(generatedUnicode, generatedForeign, state)==0);
719 test(state==CCnvCharacterSetConverter::KStateDefault);
720 test(generatedUnicode==expectedUnicode);
721 originalUnicode.Format(formatOfSixteenCharacters, 0x0390, 0x0391, 0x0392, 0x0393, 0x0394, 0x0395, 0x0396, 0x0397, 0x0398, 0x0399, 0x039a, 0x039b, 0x039c, 0x039d, 0x039e, 0x039f);
722 expectedUnicode.Format(formatOfSixteenCharacters, 0x0049, 0x0041, 0x0042, 0x0393, 0x0394, 0x0045, 0x005a, 0x0048, 0x0398, 0x0049, 0x004b, 0x039b, 0x004d, 0x004e, 0x039e, 0x004f);
723 test(characterSetConverter->ConvertFromUnicode(generatedForeign, originalUnicode)==0);
724 test(generatedForeign==_L8("\x49\x41\x42\x13\x10\x45\x5a\x48\x19\x49\x4b\x14\x4d\x4e\x1a\x4f"));
725 test(characterSetConverter->ConvertToUnicode(generatedUnicode, generatedForeign, state)==0);
726 test(state==CCnvCharacterSetConverter::KStateDefault);
727 test(generatedUnicode==expectedUnicode);
728 originalUnicode.Format(formatOfSixteenCharacters.Left(15*2), 0x03a0, 0x03a1, 0x03a3, 0x03a4, 0x03a5, 0x03a6, 0x03a7, 0x03a8, 0x03a9, 0x03aa, 0x03ab, 0x03ac, 0x03ad, 0x03ae, 0x03af);
729 expectedUnicode.Format(formatOfSixteenCharacters.Left(15*2), 0x03a0, 0x0050, 0x03a3, 0x0054, 0x0059, 0x03a6, 0x0058, 0x03a8, 0x03a9, 0x0049, 0x0059, 0x0041, 0x0045, 0x0048, 0x0049);
730 test(characterSetConverter->ConvertFromUnicode(generatedForeign, originalUnicode)==0);
731 test(generatedForeign==_L8("\x16\x50\x18\x54\x59\x12\x58\x17\x15\x49\x59\x41\x45\x48\x49"));
732 test(characterSetConverter->ConvertToUnicode(generatedUnicode, generatedForeign, state)==0);
733 test(state==CCnvCharacterSetConverter::KStateDefault);
734 test(generatedUnicode==expectedUnicode);
735 originalUnicode.Format(formatOfSixteenCharacters, 0x03b0, 0x03b1, 0x03b2, 0x03b3, 0x03b4, 0x03b5, 0x03b6, 0x03b7, 0x03b8, 0x03b9, 0x03ba, 0x03bb, 0x03bc, 0x03bd, 0x03be, 0x03bf);
736 expectedUnicode.Format(formatOfSixteenCharacters, 0x0059, 0x0041, 0x0042, 0x0393, 0x0394, 0x0045, 0x005a, 0x0048, 0x0398, 0x0049, 0x004b, 0x039b, 0x004d, 0x004e, 0x039e, 0x004f);
737 test(characterSetConverter->ConvertFromUnicode(generatedForeign, originalUnicode)==0);
738 test(generatedForeign==_L8("\x59\x41\x42\x13\x10\x45\x5a\x48\x19\x49\x4b\x14\x4d\x4e\x1a\x4f"));
739 test(characterSetConverter->ConvertToUnicode(generatedUnicode, generatedForeign, state)==0);
740 test(state==CCnvCharacterSetConverter::KStateDefault);
741 test(generatedUnicode==expectedUnicode);
742 originalUnicode.Format(formatOfSixteenCharacters.Left(15*2), 0x03c0, 0x03c1, 0x03c2, 0x03c3, 0x03c4, 0x03c5, 0x03c6, 0x03c7, 0x03c8, 0x03c9, 0x03ca, 0x03cb, 0x03cc, 0x03cd, 0x03ce);
743 expectedUnicode.Format(formatOfSixteenCharacters.Left(15*2), 0x03a0, 0x0050, 0x03a3, 0x03a3, 0x0054, 0x0059, 0x03a6, 0x0058, 0x03a8, 0x03a9, 0x0049, 0x0059, 0x004f, 0x0059, 0x03a9);
744 test(characterSetConverter->ConvertFromUnicode(generatedForeign, originalUnicode)==0);
745 test(generatedForeign==_L8("\x16\x50\x18\x18\x54\x59\x12\x58\x17\x15\x49\x59\x4f\x59\x15"));
746 test(characterSetConverter->ConvertToUnicode(generatedUnicode, generatedForeign, state)==0);
747 test(state==CCnvCharacterSetConverter::KStateDefault);
748 test(generatedUnicode==expectedUnicode);
749 originalUnicode.Format(formatOfSixteenCharacters.Left(6*2), 0x03d0, 0x03d1, 0x03d2, 0x03d3, 0x03d4, 0x03d5);
750 expectedUnicode.Format(formatOfSixteenCharacters.Left(6*2), 0x0042, 0x0398, 0x0059, 0x0059, 0x0059, 0x03a6);
751 test(characterSetConverter->ConvertFromUnicode(generatedForeign, originalUnicode)==0);
752 test(generatedForeign==_L8("\x42\x19\x59\x59\x59\x12"));
753 test(characterSetConverter->ConvertToUnicode(generatedUnicode, generatedForeign, state)==0);
754 test(state==CCnvCharacterSetConverter::KStateDefault);
755 test(generatedUnicode==expectedUnicode);
757 INFO_PRINTF1(_L("Testing converting from Internet-standard names to UIDs"));
758 test(characterSetConverter->ConvertStandardNameOfCharacterSetToIdentifierL(_L8("US-ASCII"), fileServerSession)==KCharacterSetIdentifierAscii);
759 HBufC8* standardName=characterSetConverter->ConvertCharacterSetIdentifierToStandardNameL(KCharacterSetIdentifierAscii, fileServerSession);
760 test(*standardName==_L8("US-ASCII"));
764 INFO_PRINTF1(_L("Testing fix for defect EDNEMUA-4KGFEY in \"Symbian Defect Tracking v3.0\""));
765 CCnvCharacterSetConverter* characterSetConverter2=CCnvCharacterSetConverter::NewLC();
766 characterSetConverter->PrepareToConvertToOrFromL(KCharacterSetIdentifierSms7Bit, *arrayOfCharacterSetsAvailable, fileServerSession);
767 characterSetConverter2->PrepareToConvertToOrFromL(KCharacterSetIdentifierSms7Bit, *arrayOfCharacterSetsAvailable, fileServerSession);
768 characterSetConverter2->SetDowngradeForExoticLineTerminatingCharacters(CCnvCharacterSetConverter::EDowngradeExoticLineTerminatingCharactersToJustLineFeed);
769 originalUnicode.Format(_L16("Line1%cLine2%cLine3\x0aLine4\x0d\x0a"), 0x2029, 0x2028);
770 test(characterSetConverter->ConvertFromUnicode(generatedForeign, originalUnicode)==0);
771 test(generatedForeign==_L8("Line1\x0d\x0aLine2\x0d\x0aLine3\x0aLine4\x0d\x0a"));
772 test(characterSetConverter->ConvertToUnicode(generatedUnicode, generatedForeign, state)==0);
773 test(state==CCnvCharacterSetConverter::KStateDefault);
774 test(generatedUnicode==_L16("Line1\x0d\x0aLine2\x0d\x0aLine3\x0aLine4\x0d\x0a"));
775 test(characterSetConverter2->ConvertToUnicode(generatedUnicode, generatedForeign, state)==0);
776 test(state==CCnvCharacterSetConverter::KStateDefault);
777 test(generatedUnicode==_L16("Line1\x0d\x0aLine2\x0d\x0aLine3\x0aLine4\x0d\x0a"));
778 test(characterSetConverter2->ConvertFromUnicode(generatedForeign, originalUnicode)==0);
779 test(generatedForeign==_L8("Line1\x0aLine2\x0aLine3\x0aLine4\x0d\x0a"));
780 test(characterSetConverter2->ConvertToUnicode(generatedUnicode, generatedForeign, state)==0);
781 test(state==CCnvCharacterSetConverter::KStateDefault);
782 test(generatedUnicode==_L16("Line1\x0aLine2\x0aLine3\x0aLine4\x0d\x0a"));
783 test(characterSetConverter->ConvertToUnicode(generatedUnicode, generatedForeign, state)==0);
784 test(state==CCnvCharacterSetConverter::KStateDefault);
785 test(generatedUnicode==_L16("Line1\x0aLine2\x0aLine3\x0aLine4\x0d\x0a"));
786 CleanupStack::PopAndDestroy(); // characterSetConverter2
789 INFO_PRINTF1(_L("Testing fix for defect EDNPSTN-4L5K2G in \"Symbian Defect Tracking v3.0\" (i.e. the extension table)"));
790 characterSetConverter->PrepareToConvertToOrFromL(KCharacterSetIdentifierSms7Bit, *arrayOfCharacterSetsAvailable, fileServerSession);
791 originalUnicode.Format(_L16("%c^{}\\abc[~]|%c"), 0x000c, 0x20ac);
792 test(characterSetConverter->ConvertFromUnicode(generatedForeign, originalUnicode)==0);
793 test(generatedForeign==_L8("\x1b\x0a\x1b\x14\x1b\x28\x1b\x29\x1b\x2f""abc\x1b\x3c\x1b\x3d\x1b\x3e\x1b\x40\x1b\x65"));
794 test(characterSetConverter->ConvertToUnicode(generatedUnicode, generatedForeign, state)==0);
795 test(state==CCnvCharacterSetConverter::KStateDefault);
796 test(generatedUnicode==originalUnicode);
799 INFO_PRINTF1(_L("Testing fix for defect EDNJJUN-4RWH2A in \"Symbian Defect Tracking v3.0\" (SMS 7-bit [0x1b, 0x41] should be converted to 0x0041, etc.)"));
800 TestFix_EDNJJUN_4RWH2A(*characterSetConverter, fileServerSession, *arrayOfCharacterSetsAvailable);
804 INFO_PRINTF1(_L("Testing fix for defect DEF049749"));
805 Test_DEF049749(*characterSetConverter, fileServerSession, *arrayOfCharacterSetsAvailable);
807 INFO_PRINTF1(_L("Testing fix for defect DEF053900"));
808 Test_DEF053900(*characterSetConverter, fileServerSession, *arrayOfCharacterSetsAvailable);
810 CleanupStack::PopAndDestroy(3); // arrayOfCharacterSetsAvailable and characterSetConverter and fileServerSession
813 CT_BUILTIN::CT_BUILTIN()
815 SetTestStepName(KTestStep_T_BUILTIN);
818 TVerdict CT_BUILTIN::doTestStepL()
820 SetTestStepResult(EFail);
823 TRAPD(error1, DoE32MainL());
826 if(error1 == KErrNone)
828 SetTestStepResult(EPass);
831 return TestStepResult();