1.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000
1.2 +++ b/os/textandloc/charconvfw/charconvplugins/test/rtest/tsrc/main/t_builtin.cpp Fri Jun 15 03:10:57 2012 +0200
1.3 @@ -0,0 +1,832 @@
1.4 +/*
1.5 +* Copyright (c) 1997-2010 Nokia Corporation and/or its subsidiary(-ies).
1.6 +* All rights reserved.
1.7 +* This component and the accompanying materials are made available
1.8 +* under the terms of "Eclipse Public License v1.0"
1.9 +* which accompanies this distribution, and is available
1.10 +* at the URL "http://www.eclipse.org/legal/epl-v10.html".
1.11 +*
1.12 +* Initial Contributors:
1.13 +* Nokia Corporation - initial contribution.
1.14 +*
1.15 +* Contributors:
1.16 +*
1.17 +* Description:
1.18 +*
1.19 +*/
1.20 +
1.21 +
1.22 +#include <e32std.h>
1.23 +#include <e32base.h>
1.24 +#include <f32file.h>
1.25 +#include <charconv.h>
1.26 +#include "t_builtin.h"
1.27 +
1.28 +/**
1.29 +* Work around for DEF063276.
1.30 +* This literal is now loaded from a z:\test\data\KOriginalSms7Bit.dat
1.31 +* Bullseye Coverage corrupts this literal at position \x1b\x30 to \x1b\x37
1.32 +* to avoid this literal is stored in a file as to not be touched by Bullseye Coverage.
1.33 +*/
1.34 +
1.35 +/*
1.36 +_LIT8(KOriginalSms7Bit, "\
1.37 +\x00\x01\x02\x03\x04\x05\x06\x07\x08\x09\x0a\x0b\x0c\x0d\x0e\x0f\
1.38 +\x10\x11\x12\x13\x14\x15\x16\x17\x18\x19\x1a \x1c\x1d\x1e\x1f\
1.39 +\x20\x21\x22\x23\x24\x25\x26\x27\x28\x29\x2a\x2b\x2c\x2d\x2e\x2f\
1.40 +\x30\x31\x32\x33\x34\x35\x36\x37\x38\x39\x3a\x3b\x3c\x3d\x3e\x3f\
1.41 +\x40\x41\x42\x43\x44\x45\x46\x47\x48\x49\x4a\x4b\x4c\x4d\x4e\x4f\
1.42 +\x50\x51\x52\x53\x54\x55\x56\x57\x58\x59\x5a\x5b\x5c\x5d\x5e\x5f\
1.43 +\x60\x61\x62\x63\x64\x65\x66\x67\x68\x69\x6a\x6b\x6c\x6d\x6e\x6f\
1.44 +\x70\x71\x72\x73\x74\x75\x76\x77\x78\x79\x7a\x7b\x7c\x7d\x7e\x7f\
1.45 +\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\
1.46 +\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\
1.47 +\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\
1.48 +\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\
1.49 +\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\
1.50 +\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\
1.51 +\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\
1.52 +\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");
1.53 +*/
1.54 +
1.55 +
1.56 +_LIT8(KExpectedSms7Bit, "\
1.57 +\x00\x01\x02\x03\x04\x05\x06\x07\x08\x09\x0a\x0b\x0c\x0d\x0e\x0f\
1.58 +\x10\x11\x12\x13\x14\x15\x16\x17\x18\x19\x1a \x1c\x1d\x1e\x1f\
1.59 +\x20\x21\x22\x23\x24\x25\x26\x27\x28\x29\x2a\x2b\x2c\x2d\x2e\x2f\
1.60 +\x30\x31\x32\x33\x34\x35\x36\x37\x38\x39\x3a\x3b\x3c\x3d\x3e\x3f\
1.61 +\x40\x41\x42\x43\x44\x45\x46\x47\x48\x49\x4a\x4b\x4c\x4d\x4e\x4f\
1.62 +\x50\x51\x52\x53\x54\x55\x56\x57\x58\x59\x5a\x5b\x5c\x5d\x5e\x5f\
1.63 +\x60\x61\x62\x63\x64\x65\x66\x67\x68\x69\x6a\x6b\x6c\x6d\x6e\x6f\
1.64 +\x70\x71\x72\x73\x74\x75\x76\x77\x78\x79\x7a\x7b\x7c\x7d\x7e\x7f\
1.65 +\x00\x01\x02\x03\x04\x05\x06\x07\x08\x09\x1b\x0a\x0b\x0c\x0d\x0e\x0f\
1.66 +\x10\x11\x12\x13\x1b\x14\x15\x16\x17\x18\x19\x1a\x3f\x1c\x1d\x1e\x1f\
1.67 +\x20\x21\x22\x23\x24\x25\x26\x27\x1b\x28\x1b\x29\x2a\x2b\x2c\x2d\x2e\x1b\x2f\
1.68 +\x30\x31\x32\x33\x34\x35\x36\x37\x38\x39\x3a\x3b\x1b\x3c\x1b\x3d\x1b\x3e\x3f\
1.69 +\x1b\x40\x41\x42\x43\x44\x45\x46\x47\x48\x49\x4a\x4b\x4c\x4d\x4e\x4f\
1.70 +\x50\x51\x52\x53\x54\x55\x56\x57\x58\x59\x5a\x5b\x5c\x5d\x5e\x5f\
1.71 +\x60\x61\x62\x63\x64\x1b\x65\x67\x67\x68\x69\x6a\x6b\x6c\x6d\x6e\x6f\
1.72 +\x70\x71\x72\x73\x74\x75\x76\x77\x78\x79\x7a\x7b\x7c\x7d\x7e\x7f");
1.73 +_LIT16(KExpectedUnicodeFromSms7Bit, "\
1.74 +\x0040\x00a3$\x00a5\x00e8\x00e9\x00f9\x00ec\x00f2\x00e7\x000a\x00d8\x00f8\x000d\x00c5\x00e5\
1.75 +\x0394\x005f\x03a6\x0393\x039b\x03a9\x03a0\x03a8\x03a3\x0398\x039e \x00c6\x00e6\x00df\x00c9\
1.76 +\x0020!\"#\x00a4%&'()*+,-./0123456789:;<=>?\
1.77 +\x00a1\x0041\x0042\x0043\x0044\x0045\x0046GHIJKLMNOPQRSTUVWXYZ\x00c4\x00d6\x00d1\x00dc\x00a7\
1.78 +\x00bf\x0061\x0062\x0063\x0064\x0065\x0066ghijklmnopqrstuvwxyz\x00e4\x00f6\x00f1\x00fc\x00e0\
1.79 +\x0040\x00a3$\x00a5\x00e8\x00e9\x00f9\x00ec\x00f2\x00c7\x000c\x00d8\x00f8\x000d\x00c5\x00e5\
1.80 +\x0394\x005f\x03a6\x0393\x005e\x03a9\x03a0\x03a8\x03a3\x0398\x039e\xfffd\x00c6\x00e6\x00df\x00c9\
1.81 +\x0020!\"#\x00a4%&'{}*+,-.\\0123456789:;[~]?\
1.82 +|\x0041\x0042\x0043\x0044\x0045\x0046GHIJKLMNOPQRSTUVWXYZ\x00c4\x00d6\x00d1\x00dc\x00a7\
1.83 +\x00bf\x0061\x0062\x0063\x0064\x20ac\x0067ghijklmnopqrstuvwxyz\x00e4\x00f6\x00f1\x00fc\x00e0");
1.84 +
1.85 +
1.86 +
1.87 +// 1 line of the original defect data from email in unicode
1.88 + _LIT16(KEmailToConvert, "\
1.89 +\x006C\x0069\x006E\x0065\x0020\x0065\x006E\x0064\x0073\x0020\x0069\
1.90 +\x006E\x0020\x006A\x0061\x0070\x0061\x006E\x0065\x0073\x0065\x0020\
1.91 +\x3075\x3064\x3059\x3057\x306B\x3072\x3080\x000d\x000a");
1.92 +
1.93 +
1.94 +
1.95 + // the expected result when converted to ISO2022JP
1.96 +_LIT8(KExpectedIso2022jp, "\
1.97 +\x6C\x69\x6E\x65\x20\x65\x6E\x64\x73\x20\x69\x6E\x20\
1.98 +\x6A\x61\x70\x61\x6E\x65\x73\x65\x20\x1B\x24\x42\x24\x55\x24\x44\
1.99 +\x24\x39\x24\x37\x24\x4B\x24\x52\x24\x60\x1B\x28\x42\x0D\x0A");
1.100 +//\x1B\x28\x4A");
1.101 +
1.102 +// 1 line of the original defect data from email in unicode
1.103 + _LIT16(KEmailEndingInJapanese, "\
1.104 +\x006C\x0069\x006E\x0065\x0020\x0065\x006E\x0064\x0073\x0020\x0069\
1.105 +\x006E\x0020\x006A\x0061\x0070\x0061\x006E\x0065\x0073\x0065\x0020\
1.106 +\x3075\x3064\x3059\x3057\x306B\x3072\x3080");
1.107 +
1.108 + // the expected result when converted to ISO2022JP
1.109 +_LIT8(KExpectedEmailEndingInJapanese, "\
1.110 +\x6C\x69\x6E\x65\x20\x65\x6E\x64\x73\x20\x69\x6E\x20\
1.111 +\x6A\x61\x70\x61\x6E\x65\x73\x65\x20\x1B\x24\x42\x24\x55\x24\x44\
1.112 +\x24\x39\x24\x37\x24\x4B\x24\x52\x24\x60\x1B\x28\x42");
1.113 +
1.114 +_LIT(KOriginalSms7BitFile, "z:\\test\\data\\KOriginalSms7Bit.dat");
1.115 +
1.116 +#define test(cond) \
1.117 + { \
1.118 + TBool __bb = (cond); \
1.119 + TEST(__bb); \
1.120 + if (!__bb) \
1.121 + { \
1.122 + ERR_PRINTF1(_L("ERROR: Test Failed")); \
1.123 + User::Leave(1); \
1.124 + } \
1.125 + }
1.126 +
1.127 +
1.128 +// this is the test plugin implementation ID in rather than KCharacterSetIdentifierShiftJis
1.129 +const TUint KCharacterSetTestShiftJisKddiau=0x01000001;
1.130 +
1.131 +/**
1.132 +* Utility for DEF063276 fix.
1.133 +*/
1.134 +
1.135 +void CT_BUILTIN::ReadDesc(TDes8& aDes, const TDesC& aFilename, RFs& aFs)
1.136 + {
1.137 + RFile file;
1.138 + TInt err = file.Open(aFs, aFilename, EFileRead);
1.139 + test(err == KErrNone);
1.140 + CleanupClosePushL(file);
1.141 +
1.142 + err = file.Read(aDes);
1.143 + test(err == KErrNone);
1.144 + CleanupStack::PopAndDestroy(&file);
1.145 + }
1.146 +
1.147 +///////////////////////////////////////////////////////////////////////////////////////
1.148 +///////////////////////////////////////////////////////////////////////////////////////
1.149 +/**
1.150 +@SYMTestCaseID SYSLIB-CHARCONV-CT-0499
1.151 +@SYMTestCaseDesc Tests for conversion of SMS 7 bit data to Unicode, and from Unicode to original data
1.152 +@SYMTestPriority Medium
1.153 +@SYMTestActions Tests for CCnvCharacterSetConverter::ConvertToUnicode(),CCnvCharacterSetConverter::ConvertFromUnicode()
1.154 +@SYMTestExpectedResults Test must not fail
1.155 +@SYMREQ REQ0000
1.156 +*/
1.157 +void CT_BUILTIN::TestFix_EDNJJUN_4RWH2A(CCnvCharacterSetConverter& aCharacterSetConverter, RFs& aFileServerSession, CArrayFix<CCnvCharacterSetConverter::SCharacterSet>& aArrayOfCharacterSetsAvailable)
1.158 + {
1.159 + INFO_PRINTF1(_L(" @SYMTestCaseID:SYSLIB-CHARCONV-CT-0499 "));
1.160 + TBuf16<300> generatedUnicode;
1.161 + TBuf8<300> generatedSms7Bit;
1.162 + TRAPD(errCode, aCharacterSetConverter.PrepareToConvertToOrFromL(KCharacterSetIdentifierSms7Bit, aArrayOfCharacterSetsAvailable, aFileServerSession));
1.163 + test(errCode == KErrNone);
1.164 + TInt state=CCnvCharacterSetConverter::KStateDefault;
1.165 +
1.166 + // Fix for DEF063276.
1.167 +
1.168 + TBuf8<400> buf;
1.169 + ReadDesc(buf, KOriginalSms7BitFile, aFileServerSession);
1.170 +
1.171 + test(aCharacterSetConverter.ConvertToUnicode(generatedUnicode, buf, state)==0);
1.172 + // End fix.
1.173 +
1.174 + test(generatedUnicode.Length()==259);
1.175 + test(generatedUnicode==KExpectedUnicodeFromSms7Bit);
1.176 + test(state==CCnvCharacterSetConverter::KStateDefault);
1.177 + test(aCharacterSetConverter.ConvertFromUnicode(generatedSms7Bit, generatedUnicode)==0);
1.178 + test(generatedSms7Bit.Length()==269);
1.179 + test(generatedSms7Bit==KExpectedSms7Bit);
1.180 + }
1.181 +
1.182 +/**
1.183 +Test_DEF049749 test code for DEF049749 - Char convs don t handle correcly Shift JIS emoji
1.184 +
1.185 +@SYMTestCaseID SYSLIB-CHARCONV-CT-0500
1.186 +@SYMTestCaseDesc Tests for defect number DEF049749
1.187 +@SYMTestPriority Medium
1.188 +@SYMTestActions Tests for conversion from Shift JIS Emoji character set to Unicode
1.189 + Tests for CCnvCharacterSetConverter::EErrorIllFormedInput error flag
1.190 +@SYMTestExpectedResults Test must not fail
1.191 +@SYMREQ REQ0000
1.192 +*/
1.193 +void CT_BUILTIN::Test_DEF049749(CCnvCharacterSetConverter& aCharacterSetConverter, RFs& aFileServerSession, CArrayFix<CCnvCharacterSetConverter::SCharacterSet>& aArrayOfCharacterSetsAvailable)
1.194 + {
1.195 + // original defect data
1.196 + _LIT8(KCodeToConvert, "\xF8\x9F\xF8\x9F\x81\x40\x3B\x3B\x3B\x3B");
1.197 + _LIT16(KExpectedUnicode, "\xFFFD\xFFFD\x3000\x003b\x003b\x003b\x003b");
1.198 + TBuf16<300> generatedUnicode;
1.199 +
1.200 + // check now able to convert the original defect data
1.201 + TRAPD(errCode, aCharacterSetConverter.PrepareToConvertToOrFromL(KCharacterSetTestShiftJisKddiau, aArrayOfCharacterSetsAvailable, aFileServerSession));
1.202 + test(errCode == KErrNone);
1.203 + TInt state=CCnvCharacterSetConverter::KStateDefault;
1.204 + TInt ret = aCharacterSetConverter.ConvertToUnicode(generatedUnicode, KCodeToConvert, state);
1.205 +
1.206 + // in DEF049749 CCnvCharacterSetConverter::EErrorIllFormedInput was incorrectly returned.
1.207 + // rather than the number of unconverted bytes left, which should be 0
1.208 + test(ret ==0);
1.209 + test(generatedUnicode==KExpectedUnicode);
1.210 +
1.211 + INFO_PRINTF1(_L(" @SYMTestCaseID:SYSLIB-CHARCONV-CT-0500 User-defined ShiftJIS region->FFFD "));
1.212 + /* check the user defined region (ref CJKV Ken Lunde page206)
1.213 + F040-F97E and F080-F9FC */
1.214 + TBuf8<300> sampleUserDefined;
1.215 + for (TInt leadByte = 0xF0; leadByte != 0xF9; leadByte++)
1.216 + {
1.217 + // a leadbyte missing the trail byte then another character
1.218 + sampleUserDefined.Format(_L8("%c\x3F"), leadByte);
1.219 + _LIT16(KExpectedUnicode4, "\xFFFD\x3F");
1.220 + TRAP(errCode, aCharacterSetConverter.PrepareToConvertToOrFromL(KCharacterSetTestShiftJisKddiau, aArrayOfCharacterSetsAvailable, aFileServerSession));
1.221 + test(errCode == KErrNone);
1.222 + ret = aCharacterSetConverter.ConvertToUnicode(generatedUnicode, sampleUserDefined, state);
1.223 + test(ret ==0);
1.224 + test(generatedUnicode==KExpectedUnicode4);
1.225 +
1.226 + // a single leadbyte missing the trail byte
1.227 + sampleUserDefined.Format(_L8("%c"), leadByte);
1.228 + TRAP(errCode, aCharacterSetConverter.PrepareToConvertToOrFromL(KCharacterSetTestShiftJisKddiau, aArrayOfCharacterSetsAvailable, aFileServerSession));
1.229 + test(errCode == KErrNone);
1.230 + ret = aCharacterSetConverter.ConvertToUnicode(generatedUnicode, sampleUserDefined, state);
1.231 + test(ret == CCnvCharacterSetConverter::EErrorIllFormedInput);
1.232 +
1.233 + // Default version of Shift-JIS converter now contains mappings for ezweb private use
1.234 + // in range 0xF7BC to 0xF7FC so following tests would fail in this area - JG 30/06/2005
1.235 + if ((leadByte < 0xF3) || (leadByte > 0xF7))
1.236 + {
1.237 + for (TInt trailbyte = 0x40; trailbyte != 0xFD;
1.238 + trailbyte += (trailbyte == 0x7E? 2 : 1))
1.239 + {
1.240 + TInt errCode = KErrNone;
1.241 +
1.242 + // emoji character on its own
1.243 + sampleUserDefined.Format(_L8("%c%c"), leadByte, trailbyte);
1.244 + _LIT16(KExpectedUnicode1, "\xFFFD");
1.245 + TRAP(errCode, aCharacterSetConverter.PrepareToConvertToOrFromL(KCharacterSetTestShiftJisKddiau, aArrayOfCharacterSetsAvailable, aFileServerSession));
1.246 + test(errCode == KErrNone);
1.247 + ret = aCharacterSetConverter.ConvertToUnicode(generatedUnicode, sampleUserDefined, state);
1.248 + test(ret ==0);
1.249 + test(generatedUnicode==KExpectedUnicode1);
1.250 +
1.251 + // followed by a single character
1.252 + sampleUserDefined.Format(_L8("%c%cx"), leadByte, trailbyte);
1.253 + _LIT16(KExpectedUnicode2, "\xFFFDx");
1.254 + TRAP(errCode, aCharacterSetConverter.PrepareToConvertToOrFromL(KCharacterSetTestShiftJisKddiau, aArrayOfCharacterSetsAvailable, aFileServerSession));
1.255 + test(errCode == KErrNone);
1.256 + ret = aCharacterSetConverter.ConvertToUnicode(generatedUnicode, sampleUserDefined, state);
1.257 + test(ret ==0);
1.258 + test(generatedUnicode==KExpectedUnicode2);
1.259 +
1.260 + // preceeded by a single character
1.261 + sampleUserDefined.Format(_L8("x%c%c"), leadByte, trailbyte);
1.262 + _LIT16(KExpectedUnicode3, "x\xFFFD");
1.263 + TRAP(errCode, aCharacterSetConverter.PrepareToConvertToOrFromL(KCharacterSetTestShiftJisKddiau, aArrayOfCharacterSetsAvailable, aFileServerSession));
1.264 + test(errCode == KErrNone);
1.265 + ret = aCharacterSetConverter.ConvertToUnicode(generatedUnicode, sampleUserDefined, state);
1.266 + test(ret ==0);
1.267 + test(generatedUnicode==KExpectedUnicode3);
1.268 + }
1.269 + }
1.270 + }
1.271 +
1.272 + INFO_PRINTF1(_L("All double-byte characters convert to single Unicode"));
1.273 + TText8 LeadBytes[] = { 0x81, 0x9F, 0xE0, 0xEA, 0xEB, 0xF9, 0xFA, 0xFC };
1.274 + TText8 TrailBytes[] = { 0x40, 0x7E, 0x80, 0xFC };
1.275 + TText8* leadp;
1.276 + for (leadp = LeadBytes;
1.277 + leadp != LeadBytes + sizeof(LeadBytes)/sizeof(LeadBytes[0]);
1.278 + ++leadp)
1.279 + {
1.280 + // a single leadbyte missing the trail byte
1.281 + sampleUserDefined.Format(_L8("%c"), *leadp);
1.282 + TRAP(errCode, aCharacterSetConverter.PrepareToConvertToOrFromL(KCharacterSetTestShiftJisKddiau, aArrayOfCharacterSetsAvailable, aFileServerSession));
1.283 + test(errCode == KErrNone);
1.284 + ret = aCharacterSetConverter.ConvertToUnicode(generatedUnicode, sampleUserDefined, state);
1.285 + test(ret == CCnvCharacterSetConverter::EErrorIllFormedInput);
1.286 +
1.287 + // lead byte then illegal trail byte, which is a legal byte on its own
1.288 + sampleUserDefined.Format(_L8("%c%c"), *leadp, 0x3F);
1.289 + TRAP(errCode, aCharacterSetConverter.PrepareToConvertToOrFromL(KCharacterSetTestShiftJisKddiau, aArrayOfCharacterSetsAvailable, aFileServerSession));
1.290 + test(errCode == KErrNone);
1.291 + ret = aCharacterSetConverter.ConvertToUnicode(generatedUnicode, sampleUserDefined, state);
1.292 + test(ret == 0);
1.293 + test(generatedUnicode == _L16("\xFFFD\x3F"));
1.294 +
1.295 + for (TText8* trailp = TrailBytes;
1.296 + trailp != TrailBytes + sizeof(TrailBytes)/sizeof(TrailBytes[0]);
1.297 + ++trailp)
1.298 + {
1.299 + sampleUserDefined.Format(_L8("%c%c"), *leadp, *trailp);
1.300 + TRAP(errCode, aCharacterSetConverter.PrepareToConvertToOrFromL(KCharacterSetTestShiftJisKddiau, aArrayOfCharacterSetsAvailable, aFileServerSession));
1.301 + test(errCode == KErrNone);
1.302 + ret = aCharacterSetConverter.ConvertToUnicode(generatedUnicode, sampleUserDefined, state);
1.303 + test(ret == 0);
1.304 + test(generatedUnicode.Length() == 1);
1.305 + }
1.306 + }
1.307 +
1.308 + INFO_PRINTF1(_L("All single-byte characters convert to single Unicode"));
1.309 + TText8 SingleBytes[] = { 0, 0x7F, 0x80, 0xA0, 0xA1, 0xFD, 0xFE, 0xFF };
1.310 + for (TText8* singlep = SingleBytes;
1.311 + singlep != SingleBytes + sizeof(SingleBytes)/sizeof(SingleBytes[0]);
1.312 + ++singlep)
1.313 + {
1.314 + // a single leadbyte missing the trail byte
1.315 + sampleUserDefined.Format(_L8("%c"), *singlep);
1.316 + TRAP(errCode, aCharacterSetConverter.PrepareToConvertToOrFromL(KCharacterSetTestShiftJisKddiau, aArrayOfCharacterSetsAvailable, aFileServerSession));
1.317 + test(errCode == KErrNone);
1.318 + ret = aCharacterSetConverter.ConvertToUnicode(generatedUnicode, sampleUserDefined, state);
1.319 + test(ret == 0);
1.320 + test(generatedUnicode.Length() == 1);
1.321 + }
1.322 +
1.323 + INFO_PRINTF1(_L("Valid lead byte + invalid trail byte -> FFFD + something"));
1.324 + TText8 NotTrailBytes[] = { 0x3F, 0x7F, 0xFD, 0xFE, 0xFF };
1.325 + for (leadp = LeadBytes;
1.326 + leadp != LeadBytes + sizeof(LeadBytes)/sizeof(LeadBytes[0]);
1.327 + ++leadp)
1.328 + {
1.329 + for (TText8* trailp = NotTrailBytes;
1.330 + trailp != NotTrailBytes + sizeof(NotTrailBytes)/sizeof(NotTrailBytes[0]);
1.331 + ++trailp)
1.332 + {
1.333 + sampleUserDefined.Format(_L8("%c%c"), *leadp, *trailp);
1.334 + TRAP(errCode, aCharacterSetConverter.PrepareToConvertToOrFromL(KCharacterSetTestShiftJisKddiau, aArrayOfCharacterSetsAvailable, aFileServerSession));
1.335 + test(errCode == KErrNone);
1.336 + ret = aCharacterSetConverter.ConvertToUnicode(generatedUnicode, sampleUserDefined, state);
1.337 + test(ret == 0);
1.338 + test(generatedUnicode.Length() == 2);
1.339 + test(generatedUnicode[0] == 0xFFFD);
1.340 + }
1.341 + }
1.342 + }
1.343 +
1.344 +/**
1.345 +Test_DEF053900 test code for DEF053900 - Problems encoding Japanese emails to ISO-2022-JP
1.346 +
1.347 +@SYMTestCaseID SYSLIB-CHARCONV-CT-1306
1.348 +@SYMTestCaseDesc Tests for defect number DEF053900
1.349 +@SYMTestPriority Medium
1.350 +@SYMTestActions Attempt for converting from Japanese character set email to Unicode.
1.351 +@SYMTestExpectedResults Test must not fail
1.352 +@SYMREQ REQ0000
1.353 +*/
1.354 +void CT_BUILTIN::Test_DEF053900(CCnvCharacterSetConverter& aCharacterSetConverter, RFs& aFileServerSession, CArrayFix<CCnvCharacterSetConverter::SCharacterSet>& aArrayOfCharacterSetsAvailable)
1.355 + {
1.356 + // check now able to convert the original defect data
1.357 + INFO_PRINTF1(_L(" @SYMTestCaseID:SYSLIB-CHARCONV-CT-1306 "));
1.358 + TBuf8<300> generatedIso2022;
1.359 + TRAPD(errCode, aCharacterSetConverter.PrepareToConvertToOrFromL(KCharacterSetIdentifierIso2022Jp, aArrayOfCharacterSetsAvailable, aFileServerSession));
1.360 + test(errCode == KErrNone);
1.361 + TInt state=CCnvCharacterSetConverter::KStateDefault;
1.362 + TInt ret = aCharacterSetConverter.ConvertFromUnicode(generatedIso2022, KEmailToConvert, state);
1.363 + // check the converted data is as expected
1.364 + test(ret ==0);
1.365 + test(generatedIso2022==KExpectedIso2022jp);
1.366 + ret = aCharacterSetConverter.ConvertFromUnicode(generatedIso2022, KEmailEndingInJapanese, state);
1.367 + test(ret ==0);
1.368 + test(generatedIso2022==KExpectedEmailEndingInJapanese);
1.369 +}
1.370 +
1.371 +/**
1.372 +@SYMTestCaseID SYSLIB-CHARCONV-CT-0501
1.373 +@SYMTestCaseDesc Tests for CCnvCharacterSetConverter class
1.374 +@SYMTestPriority Medium
1.375 +@SYMTestActions Tests for conversion from empty descriptors to different character sets
1.376 +@SYMTestExpectedResults Test must not fail
1.377 +@SYMREQ REQ0000
1.378 +*/
1.379 +void CT_BUILTIN::DoE32MainL()
1.380 + {
1.381 + RFs fileServerSession;
1.382 + CleanupClosePushL(fileServerSession);
1.383 + User::LeaveIfError(fileServerSession.Connect());
1.384 + CCnvCharacterSetConverter* characterSetConverter=CCnvCharacterSetConverter::NewLC();
1.385 + CArrayFix<CCnvCharacterSetConverter::SCharacterSet>* arrayOfCharacterSetsAvailable=CCnvCharacterSetConverter::CreateArrayOfCharacterSetsAvailableLC(fileServerSession);
1.386 + INFO_PRINTF1(_L("Available:\n"));
1.387 + for (TInt i=arrayOfCharacterSetsAvailable->Count()-1; i>=0; --i)
1.388 + {
1.389 + const CCnvCharacterSetConverter::SCharacterSet& charactersSet=(*arrayOfCharacterSetsAvailable)[i];
1.390 + characterSetConverter->PrepareToConvertToOrFromL(charactersSet.Identifier(), *arrayOfCharacterSetsAvailable, fileServerSession);
1.391 + TPtrC charactersSetName(charactersSet.Name());
1.392 + if (charactersSet.NameIsFileName())
1.393 + {
1.394 + charactersSetName.Set(TParsePtrC(charactersSetName).Name());
1.395 + }
1.396 + INFO_PRINTF2(_L(" %S\n"), &charactersSetName);
1.397 + }
1.398 + TBuf16<128> originalUnicode;
1.399 + TBuf8<128> generatedForeign;
1.400 + TBuf16<128> generatedUnicode;
1.401 + TInt state=CCnvCharacterSetConverter::KStateDefault;
1.402 + TUint characterCode;
1.403 + INFO_PRINTF1(_L(" @SYMTestCaseID:SYSLIB-CHARCONV-CT-0501 Testing empty descriptors (Code Page 1252) "));
1.404 + characterSetConverter->PrepareToConvertToOrFromL(KCharacterSetIdentifierCodePage1252, *arrayOfCharacterSetsAvailable, fileServerSession);
1.405 + originalUnicode=KNullDesC16;
1.406 + test(characterSetConverter->ConvertFromUnicode(generatedForeign, originalUnicode)==0);
1.407 + test(generatedForeign==KNullDesC8);
1.408 + test(characterSetConverter->ConvertToUnicode(generatedUnicode, generatedForeign, state)==0);
1.409 + test(state==CCnvCharacterSetConverter::KStateDefault);
1.410 + test(generatedUnicode==originalUnicode);
1.411 + INFO_PRINTF1(_L("Testing empty descriptors (ISO-8859-1)"));
1.412 + characterSetConverter->PrepareToConvertToOrFromL(KCharacterSetIdentifierIso88591, *arrayOfCharacterSetsAvailable, fileServerSession);
1.413 + originalUnicode=KNullDesC16;
1.414 + test(characterSetConverter->ConvertFromUnicode(generatedForeign, originalUnicode)==0);
1.415 + test(generatedForeign==KNullDesC8);
1.416 + test(characterSetConverter->ConvertToUnicode(generatedUnicode, generatedForeign, state)==0);
1.417 + test(state==CCnvCharacterSetConverter::KStateDefault);
1.418 + test(generatedUnicode==originalUnicode);
1.419 + INFO_PRINTF1(_L("Testing empty descriptors (ASCII)"));
1.420 + characterSetConverter->PrepareToConvertToOrFromL(KCharacterSetIdentifierAscii, *arrayOfCharacterSetsAvailable, fileServerSession);
1.421 + originalUnicode=KNullDesC16;
1.422 + test(characterSetConverter->ConvertFromUnicode(generatedForeign, originalUnicode)==0);
1.423 + test(generatedForeign==KNullDesC8);
1.424 + test(characterSetConverter->ConvertToUnicode(generatedUnicode, generatedForeign, state)==0);
1.425 + test(state==CCnvCharacterSetConverter::KStateDefault);
1.426 + test(generatedUnicode==originalUnicode);
1.427 + INFO_PRINTF1(_L("Testing empty descriptors (SMS 7-bit)"));
1.428 + characterSetConverter->PrepareToConvertToOrFromL(KCharacterSetIdentifierSms7Bit, *arrayOfCharacterSetsAvailable, fileServerSession);
1.429 + originalUnicode=KNullDesC16;
1.430 + test(characterSetConverter->ConvertFromUnicode(generatedForeign, originalUnicode)==0);
1.431 + test(generatedForeign==KNullDesC8);
1.432 + test(characterSetConverter->ConvertToUnicode(generatedUnicode, generatedForeign, state)==0);
1.433 + test(state==CCnvCharacterSetConverter::KStateDefault);
1.434 + test(generatedUnicode==originalUnicode);
1.435 + INFO_PRINTF1(_L("Testing exhaustive single-character Code Page 1252 round trips"));
1.436 + characterSetConverter->PrepareToConvertToOrFromL(KCharacterSetIdentifierCodePage1252, *arrayOfCharacterSetsAvailable, fileServerSession);
1.437 + for (characterCode=0x00; characterCode<=0x7f; ++characterCode)
1.438 + {
1.439 + originalUnicode.Format(_L16("%c"), characterCode);
1.440 + test(characterSetConverter->ConvertFromUnicode(generatedForeign, originalUnicode)==0);
1.441 + TBuf8<1> expectedForeign;
1.442 + expectedForeign.Format(_L8("%c"), characterCode);
1.443 + test(generatedForeign==expectedForeign);
1.444 + test(characterSetConverter->ConvertToUnicode(generatedUnicode, generatedForeign, state)==0);
1.445 + test(state==CCnvCharacterSetConverter::KStateDefault);
1.446 + test(generatedUnicode==originalUnicode);
1.447 + }
1.448 + originalUnicode.Format(_L16("%c"), 0x20ac);
1.449 + test(characterSetConverter->ConvertFromUnicode(generatedForeign, originalUnicode)==0);
1.450 + test(generatedForeign==_L8("\x80"));
1.451 + test(characterSetConverter->ConvertToUnicode(generatedUnicode, generatedForeign, state)==0);
1.452 + test(state==CCnvCharacterSetConverter::KStateDefault);
1.453 + test(generatedUnicode==originalUnicode);
1.454 + originalUnicode.Format(_L16("%c"), 0x201a);
1.455 + test(characterSetConverter->ConvertFromUnicode(generatedForeign, originalUnicode)==0);
1.456 + test(generatedForeign==_L8("\x82"));
1.457 + test(characterSetConverter->ConvertToUnicode(generatedUnicode, generatedForeign, state)==0);
1.458 + test(state==CCnvCharacterSetConverter::KStateDefault);
1.459 + test(generatedUnicode==originalUnicode);
1.460 + originalUnicode.Format(_L16("%c"), 0x0192);
1.461 + test(characterSetConverter->ConvertFromUnicode(generatedForeign, originalUnicode)==0);
1.462 + test(generatedForeign==_L8("\x83"));
1.463 + test(characterSetConverter->ConvertToUnicode(generatedUnicode, generatedForeign, state)==0);
1.464 + test(state==CCnvCharacterSetConverter::KStateDefault);
1.465 + test(generatedUnicode==originalUnicode);
1.466 + originalUnicode.Format(_L16("%c"), 0x201e);
1.467 + test(characterSetConverter->ConvertFromUnicode(generatedForeign, originalUnicode)==0);
1.468 + test(generatedForeign==_L8("\x84"));
1.469 + test(characterSetConverter->ConvertToUnicode(generatedUnicode, generatedForeign, state)==0);
1.470 + test(state==CCnvCharacterSetConverter::KStateDefault);
1.471 + test(generatedUnicode==originalUnicode);
1.472 + originalUnicode.Format(_L16("%c"), 0x2026);
1.473 + test(characterSetConverter->ConvertFromUnicode(generatedForeign, originalUnicode)==0);
1.474 + test(generatedForeign==_L8("\x85"));
1.475 + test(characterSetConverter->ConvertToUnicode(generatedUnicode, generatedForeign, state)==0);
1.476 + test(state==CCnvCharacterSetConverter::KStateDefault);
1.477 + test(generatedUnicode==originalUnicode);
1.478 + originalUnicode.Format(_L16("%c"), 0x2020);
1.479 + test(characterSetConverter->ConvertFromUnicode(generatedForeign, originalUnicode)==0);
1.480 + test(generatedForeign==_L8("\x86"));
1.481 + test(characterSetConverter->ConvertToUnicode(generatedUnicode, generatedForeign, state)==0);
1.482 + test(state==CCnvCharacterSetConverter::KStateDefault);
1.483 + test(generatedUnicode==originalUnicode);
1.484 + originalUnicode.Format(_L16("%c"), 0x2021);
1.485 + test(characterSetConverter->ConvertFromUnicode(generatedForeign, originalUnicode)==0);
1.486 + test(generatedForeign==_L8("\x87"));
1.487 + test(characterSetConverter->ConvertToUnicode(generatedUnicode, generatedForeign, state)==0);
1.488 + test(state==CCnvCharacterSetConverter::KStateDefault);
1.489 + test(generatedUnicode==originalUnicode);
1.490 + originalUnicode.Format(_L16("%c"), 0x02c6);
1.491 + test(characterSetConverter->ConvertFromUnicode(generatedForeign, originalUnicode)==0);
1.492 + test(generatedForeign==_L8("\x88"));
1.493 + test(characterSetConverter->ConvertToUnicode(generatedUnicode, generatedForeign, state)==0);
1.494 + test(state==CCnvCharacterSetConverter::KStateDefault);
1.495 + test(generatedUnicode==originalUnicode);
1.496 + originalUnicode.Format(_L16("%c"), 0x2030);
1.497 + test(characterSetConverter->ConvertFromUnicode(generatedForeign, originalUnicode)==0);
1.498 + test(generatedForeign==_L8("\x89"));
1.499 + test(characterSetConverter->ConvertToUnicode(generatedUnicode, generatedForeign, state)==0);
1.500 + test(state==CCnvCharacterSetConverter::KStateDefault);
1.501 + test(generatedUnicode==originalUnicode);
1.502 + originalUnicode.Format(_L16("%c"), 0x0160);
1.503 + test(characterSetConverter->ConvertFromUnicode(generatedForeign, originalUnicode)==0);
1.504 + test(generatedForeign==_L8("\x8a"));
1.505 + test(characterSetConverter->ConvertToUnicode(generatedUnicode, generatedForeign, state)==0);
1.506 + test(state==CCnvCharacterSetConverter::KStateDefault);
1.507 + test(generatedUnicode==originalUnicode);
1.508 + originalUnicode.Format(_L16("%c"), 0x2039);
1.509 + test(characterSetConverter->ConvertFromUnicode(generatedForeign, originalUnicode)==0);
1.510 + test(generatedForeign==_L8("\x8b"));
1.511 + test(characterSetConverter->ConvertToUnicode(generatedUnicode, generatedForeign, state)==0);
1.512 + test(state==CCnvCharacterSetConverter::KStateDefault);
1.513 + test(generatedUnicode==originalUnicode);
1.514 + originalUnicode.Format(_L16("%c"), 0x0152);
1.515 + test(characterSetConverter->ConvertFromUnicode(generatedForeign, originalUnicode)==0);
1.516 + test(generatedForeign==_L8("\x8c"));
1.517 + test(characterSetConverter->ConvertToUnicode(generatedUnicode, generatedForeign, state)==0);
1.518 + test(state==CCnvCharacterSetConverter::KStateDefault);
1.519 + test(generatedUnicode==originalUnicode);
1.520 + originalUnicode.Format(_L16("%c"), 0x017d);
1.521 + test(characterSetConverter->ConvertFromUnicode(generatedForeign, originalUnicode)==0);
1.522 + test(generatedForeign==_L8("\x8e"));
1.523 + test(characterSetConverter->ConvertToUnicode(generatedUnicode, generatedForeign, state)==0);
1.524 + test(state==CCnvCharacterSetConverter::KStateDefault);
1.525 + test(generatedUnicode==originalUnicode);
1.526 + originalUnicode.Format(_L16("%c"), 0x017e);
1.527 + test(characterSetConverter->ConvertFromUnicode(generatedForeign, originalUnicode)==0);
1.528 + test(generatedForeign==_L8("\x9e"));
1.529 + test(characterSetConverter->ConvertToUnicode(generatedUnicode, generatedForeign, state)==0);
1.530 + test(state==CCnvCharacterSetConverter::KStateDefault);
1.531 + test(generatedUnicode==originalUnicode);
1.532 + originalUnicode.Format(_L16("%c"), 0x2018);
1.533 + test(characterSetConverter->ConvertFromUnicode(generatedForeign, originalUnicode)==0);
1.534 + test(generatedForeign==_L8("\x91"));
1.535 + test(characterSetConverter->ConvertToUnicode(generatedUnicode, generatedForeign, state)==0);
1.536 + test(state==CCnvCharacterSetConverter::KStateDefault);
1.537 + test(generatedUnicode==originalUnicode);
1.538 + originalUnicode.Format(_L16("%c"), 0x2019);
1.539 + test(characterSetConverter->ConvertFromUnicode(generatedForeign, originalUnicode)==0);
1.540 + test(generatedForeign==_L8("\x92"));
1.541 + test(characterSetConverter->ConvertToUnicode(generatedUnicode, generatedForeign, state)==0);
1.542 + test(state==CCnvCharacterSetConverter::KStateDefault);
1.543 + test(generatedUnicode==originalUnicode);
1.544 + originalUnicode.Format(_L16("%c"), 0x201c);
1.545 + test(characterSetConverter->ConvertFromUnicode(generatedForeign, originalUnicode)==0);
1.546 + test(generatedForeign==_L8("\x93"));
1.547 + test(characterSetConverter->ConvertToUnicode(generatedUnicode, generatedForeign, state)==0);
1.548 + test(state==CCnvCharacterSetConverter::KStateDefault);
1.549 + test(generatedUnicode==originalUnicode);
1.550 + originalUnicode.Format(_L16("%c"), 0x201d);
1.551 + test(characterSetConverter->ConvertFromUnicode(generatedForeign, originalUnicode)==0);
1.552 + test(generatedForeign==_L8("\x94"));
1.553 + test(characterSetConverter->ConvertToUnicode(generatedUnicode, generatedForeign, state)==0);
1.554 + test(state==CCnvCharacterSetConverter::KStateDefault);
1.555 + test(generatedUnicode==originalUnicode);
1.556 + originalUnicode.Format(_L16("%c"), 0x2022);
1.557 + test(characterSetConverter->ConvertFromUnicode(generatedForeign, originalUnicode)==0);
1.558 + test(generatedForeign==_L8("\x95"));
1.559 + test(characterSetConverter->ConvertToUnicode(generatedUnicode, generatedForeign, state)==0);
1.560 + test(state==CCnvCharacterSetConverter::KStateDefault);
1.561 + test(generatedUnicode==originalUnicode);
1.562 + originalUnicode.Format(_L16("%c"), 0x2013);
1.563 + test(characterSetConverter->ConvertFromUnicode(generatedForeign, originalUnicode)==0);
1.564 + test(generatedForeign==_L8("\x96"));
1.565 + test(characterSetConverter->ConvertToUnicode(generatedUnicode, generatedForeign, state)==0);
1.566 + test(state==CCnvCharacterSetConverter::KStateDefault);
1.567 + test(generatedUnicode==originalUnicode);
1.568 + originalUnicode.Format(_L16("%c"), 0x2014);
1.569 + test(characterSetConverter->ConvertFromUnicode(generatedForeign, originalUnicode)==0);
1.570 + test(generatedForeign==_L8("\x97"));
1.571 + test(characterSetConverter->ConvertToUnicode(generatedUnicode, generatedForeign, state)==0);
1.572 + test(state==CCnvCharacterSetConverter::KStateDefault);
1.573 + test(generatedUnicode==originalUnicode);
1.574 + originalUnicode.Format(_L16("%c"), 0x02dc);
1.575 + test(characterSetConverter->ConvertFromUnicode(generatedForeign, originalUnicode)==0);
1.576 + test(generatedForeign==_L8("\x98"));
1.577 + test(characterSetConverter->ConvertToUnicode(generatedUnicode, generatedForeign, state)==0);
1.578 + test(state==CCnvCharacterSetConverter::KStateDefault);
1.579 + test(generatedUnicode==originalUnicode);
1.580 + originalUnicode.Format(_L16("%c"), 0x2122);
1.581 + test(characterSetConverter->ConvertFromUnicode(generatedForeign, originalUnicode)==0);
1.582 + test(generatedForeign==_L8("\x99"));
1.583 + test(characterSetConverter->ConvertToUnicode(generatedUnicode, generatedForeign, state)==0);
1.584 + test(state==CCnvCharacterSetConverter::KStateDefault);
1.585 + test(generatedUnicode==originalUnicode);
1.586 + originalUnicode.Format(_L16("%c"), 0x0161);
1.587 + test(characterSetConverter->ConvertFromUnicode(generatedForeign, originalUnicode)==0);
1.588 + test(generatedForeign==_L8("\x9a"));
1.589 + test(characterSetConverter->ConvertToUnicode(generatedUnicode, generatedForeign, state)==0);
1.590 + test(state==CCnvCharacterSetConverter::KStateDefault);
1.591 + test(generatedUnicode==originalUnicode);
1.592 + originalUnicode.Format(_L16("%c"), 0x203a);
1.593 + test(characterSetConverter->ConvertFromUnicode(generatedForeign, originalUnicode)==0);
1.594 + test(generatedForeign==_L8("\x9b"));
1.595 + test(characterSetConverter->ConvertToUnicode(generatedUnicode, generatedForeign, state)==0);
1.596 + test(state==CCnvCharacterSetConverter::KStateDefault);
1.597 + test(generatedUnicode==originalUnicode);
1.598 + originalUnicode.Format(_L16("%c"), 0x0153);
1.599 + test(characterSetConverter->ConvertFromUnicode(generatedForeign, originalUnicode)==0);
1.600 + test(generatedForeign==_L8("\x9c"));
1.601 + test(characterSetConverter->ConvertToUnicode(generatedUnicode, generatedForeign, state)==0);
1.602 + test(state==CCnvCharacterSetConverter::KStateDefault);
1.603 + test(generatedUnicode==originalUnicode);
1.604 + originalUnicode.Format(_L16("%c"), 0x0178);
1.605 + test(characterSetConverter->ConvertFromUnicode(generatedForeign, originalUnicode)==0);
1.606 + test(generatedForeign==_L8("\x9f"));
1.607 + test(characterSetConverter->ConvertToUnicode(generatedUnicode, generatedForeign, state)==0);
1.608 + test(state==CCnvCharacterSetConverter::KStateDefault);
1.609 + test(generatedUnicode==originalUnicode);
1.610 + for (characterCode=0xa0; characterCode<0xff; ++characterCode)
1.611 + {
1.612 + originalUnicode.Format(_L16("%c"), characterCode);
1.613 + test(characterSetConverter->ConvertFromUnicode(generatedForeign, originalUnicode)==0);
1.614 + TBuf8<1> expectedForeign;
1.615 + expectedForeign.Format(_L8("%c"), characterCode);
1.616 + test(generatedForeign==expectedForeign);
1.617 + test(characterSetConverter->ConvertToUnicode(generatedUnicode, generatedForeign, state)==0);
1.618 + test(state==CCnvCharacterSetConverter::KStateDefault);
1.619 + test(generatedUnicode==originalUnicode);
1.620 + }
1.621 + INFO_PRINTF1(_L("Testing exhaustive single-character ISO-8859-1 round trips"));
1.622 + characterSetConverter->PrepareToConvertToOrFromL(KCharacterSetIdentifierIso88591, *arrayOfCharacterSetsAvailable, fileServerSession);
1.623 + for (characterCode=0x00; characterCode<=0xff; ++characterCode)
1.624 + {
1.625 + const TBool unconvertibleCharacter=(characterCode==0x80);
1.626 + TInt numberOfUnconvertibleCharacters;
1.627 + TInt indexOfFirstUnconvertibleCharacter;
1.628 + originalUnicode.Format(_L16("%c"), characterCode);
1.629 + test(characterSetConverter->ConvertFromUnicode(generatedForeign, originalUnicode, numberOfUnconvertibleCharacters, indexOfFirstUnconvertibleCharacter)==0);
1.630 + if (characterCode != 0x80)
1.631 + test(numberOfUnconvertibleCharacters==(unconvertibleCharacter? 1: 0));
1.632 + if (numberOfUnconvertibleCharacters>0)
1.633 + {
1.634 + test(indexOfFirstUnconvertibleCharacter==0);
1.635 + }
1.636 + TBuf8<1> expectedForeign;
1.637 + expectedForeign.Format(_L8("%c"), unconvertibleCharacter? 0x1a: characterCode);
1.638 + test(generatedForeign==expectedForeign);
1.639 + TBuf8<1> originalForeign;
1.640 + originalForeign.Format(_L8("%c"), characterCode);
1.641 + test(characterSetConverter->ConvertToUnicode(generatedUnicode, originalForeign, state, numberOfUnconvertibleCharacters, indexOfFirstUnconvertibleCharacter)==0);
1.642 + test(state==CCnvCharacterSetConverter::KStateDefault);
1.643 + if (characterCode != 0x80)
1.644 + test(numberOfUnconvertibleCharacters==(unconvertibleCharacter? 1: 0));
1.645 + if (numberOfUnconvertibleCharacters>0)
1.646 + {
1.647 + test(indexOfFirstUnconvertibleCharacter==0);
1.648 + }
1.649 + if (unconvertibleCharacter)
1.650 + {
1.651 + test(generatedUnicode.Length()==1);
1.652 + if (characterCode==0x80)
1.653 + {
1.654 + test(generatedUnicode[0]==0x20ac);
1.655 + }
1.656 + else
1.657 + {
1.658 + test(generatedUnicode[0]==0xfffd);
1.659 + }
1.660 + }
1.661 + else
1.662 + {
1.663 + test(generatedUnicode==originalUnicode);
1.664 + }
1.665 + }
1.666 + INFO_PRINTF1(_L("Testing exhaustive single-character ASCII round trips"));
1.667 + characterSetConverter->PrepareToConvertToOrFromL(KCharacterSetIdentifierAscii, *arrayOfCharacterSetsAvailable, fileServerSession);
1.668 + for (characterCode=0x00; characterCode<=0xff; ++characterCode)
1.669 + {
1.670 + const TBool unconvertibleCharacter=(characterCode>=0x80);
1.671 + TInt numberOfUnconvertibleCharacters;
1.672 + originalUnicode.Format(_L16("%c"), characterCode);
1.673 + test(characterSetConverter->ConvertFromUnicode(generatedForeign, originalUnicode, numberOfUnconvertibleCharacters)==0);
1.674 + test(numberOfUnconvertibleCharacters==(unconvertibleCharacter? 1: 0));
1.675 + TBuf8<1> expectedForeign;
1.676 + expectedForeign.Format(_L8("%c"), unconvertibleCharacter? 0x1a: characterCode);
1.677 + test(generatedForeign==expectedForeign);
1.678 + TBuf8<1> originalForeign;
1.679 + originalForeign.Format(_L8("%c"), characterCode);
1.680 + test(characterSetConverter->ConvertToUnicode(generatedUnicode, originalForeign, state, numberOfUnconvertibleCharacters)==0);
1.681 + test(state==CCnvCharacterSetConverter::KStateDefault);
1.682 + test(numberOfUnconvertibleCharacters==(unconvertibleCharacter? 1: 0));
1.683 + if (unconvertibleCharacter)
1.684 + {
1.685 + test(generatedUnicode.Length()==1);
1.686 + test(generatedUnicode[0]==0xfffd);
1.687 + }
1.688 + else
1.689 + {
1.690 + test(generatedUnicode==originalUnicode);
1.691 + }
1.692 + }
1.693 + INFO_PRINTF1(_L("Testing exhaustive SMS 7-bit round trip (default table)"));
1.694 + characterSetConverter->PrepareToConvertToOrFromL(KCharacterSetIdentifierSms7Bit, fileServerSession);
1.695 + originalUnicode.SetLength(0);
1.696 + const TPtrC16 formatOfSixteenCharacters=_L16("%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c");
1.697 + originalUnicode.AppendFormat(formatOfSixteenCharacters, 0x0040, 0x00a3, 0x0024, 0x00a5, 0x00e8, 0x00e9, 0x00f9, 0x00ec, 0x00f2, 0x00e7, 0x000a, 0x00d8, 0x00f8, 0x000d, 0x00c5, 0x00e5);
1.698 + originalUnicode.AppendFormat(formatOfSixteenCharacters, 0x0394, 0x005f, 0x03a6, 0x0393, 0x039b, 0x03a9, 0x03a0, 0x03a8, 0x03a3, 0x0398, 0x039e, '!', 0x00c6, 0x00e6, 0x00df, 0x00c9);
1.699 + originalUnicode.AppendFormat(formatOfSixteenCharacters, 0x0020, 0x0021, 0x0022, 0x0023, 0x00a4, 0x0025, 0x0026, 0x0027, 0x0028, 0x0029, 0x002a, 0x002b, 0x002c, 0x002d, 0x002e, 0x002f);
1.700 + originalUnicode.AppendFormat(formatOfSixteenCharacters, 0x0030, 0x0031, 0x0032, 0x0033, 0x0034, 0x0035, 0x0036, 0x0037, 0x0038, 0x0039, 0x003a, 0x003b, 0x003c, 0x003d, 0x003e, 0x003f);
1.701 + originalUnicode.AppendFormat(formatOfSixteenCharacters, 0x00a1, 0x0041, 0x0042, 0x0043, 0x0044, 0x0045, 0x0046, 0x0047, 0x0048, 0x0049, 0x004a, 0x004b, 0x004c, 0x004d, 0x004e, 0x004f);
1.702 + originalUnicode.AppendFormat(formatOfSixteenCharacters, 0x0050, 0x0051, 0x0052, 0x0053, 0x0054, 0x0055, 0x0056, 0x0057, 0x0058, 0x0059, 0x005a, 0x00c4, 0x00d6, 0x00d1, 0x00dc, 0x00a7);
1.703 + originalUnicode.AppendFormat(formatOfSixteenCharacters, 0x00bf, 0x0061, 0x0062, 0x0063, 0x0064, 0x0065, 0x0066, 0x0067, 0x0068, 0x0069, 0x006a, 0x006b, 0x006c, 0x006d, 0x006e, 0x006f);
1.704 + originalUnicode.AppendFormat(formatOfSixteenCharacters, 0x0070, 0x0071, 0x0072, 0x0073, 0x0074, 0x0075, 0x0076, 0x0077, 0x0078, 0x0079, 0x007a, 0x00e4, 0x00f6, 0x00f1, 0x00fc, 0x00e0);
1.705 + test(characterSetConverter->ConvertFromUnicode(generatedForeign, originalUnicode)==0);
1.706 + test(generatedForeign.Length()==0x80);
1.707 + for (characterCode=0x00; characterCode<0x80; ++characterCode)
1.708 + {
1.709 + test(generatedForeign[characterCode]==(characterCode==0x1b)? '!': characterCode);
1.710 + }
1.711 + test(characterSetConverter->ConvertToUnicode(generatedUnicode, generatedForeign, state)==0);
1.712 + test(state==CCnvCharacterSetConverter::KStateDefault);
1.713 + test(generatedUnicode==originalUnicode);
1.714 + INFO_PRINTF1(_L("Testing Greek range of SMS 7-bit"));
1.715 + characterSetConverter->PrepareToConvertToOrFromL(KCharacterSetIdentifierSms7Bit, *arrayOfCharacterSetsAvailable, fileServerSession);
1.716 + TBuf16<16> expectedUnicode;
1.717 + originalUnicode.Format(formatOfSixteenCharacters.Left(7*2), 0x0386, 0x0388, 0x0389, 0x038a, 0x038c, 0x038e, 0x038f);
1.718 + expectedUnicode.Format(formatOfSixteenCharacters.Left(7*2), 0x0041, 0x0045, 0x0048, 0x0049, 0x004f, 0x0059, 0x03a9);
1.719 + test(characterSetConverter->ConvertFromUnicode(generatedForeign, originalUnicode)==0);
1.720 + test(generatedForeign==_L8("\x41\x45\x48\x49\x4f\x59\x15"));
1.721 + test(characterSetConverter->ConvertToUnicode(generatedUnicode, generatedForeign, state)==0);
1.722 + test(state==CCnvCharacterSetConverter::KStateDefault);
1.723 + test(generatedUnicode==expectedUnicode);
1.724 + originalUnicode.Format(formatOfSixteenCharacters, 0x0390, 0x0391, 0x0392, 0x0393, 0x0394, 0x0395, 0x0396, 0x0397, 0x0398, 0x0399, 0x039a, 0x039b, 0x039c, 0x039d, 0x039e, 0x039f);
1.725 + expectedUnicode.Format(formatOfSixteenCharacters, 0x0049, 0x0041, 0x0042, 0x0393, 0x0394, 0x0045, 0x005a, 0x0048, 0x0398, 0x0049, 0x004b, 0x039b, 0x004d, 0x004e, 0x039e, 0x004f);
1.726 + test(characterSetConverter->ConvertFromUnicode(generatedForeign, originalUnicode)==0);
1.727 + test(generatedForeign==_L8("\x49\x41\x42\x13\x10\x45\x5a\x48\x19\x49\x4b\x14\x4d\x4e\x1a\x4f"));
1.728 + test(characterSetConverter->ConvertToUnicode(generatedUnicode, generatedForeign, state)==0);
1.729 + test(state==CCnvCharacterSetConverter::KStateDefault);
1.730 + test(generatedUnicode==expectedUnicode);
1.731 + originalUnicode.Format(formatOfSixteenCharacters.Left(15*2), 0x03a0, 0x03a1, 0x03a3, 0x03a4, 0x03a5, 0x03a6, 0x03a7, 0x03a8, 0x03a9, 0x03aa, 0x03ab, 0x03ac, 0x03ad, 0x03ae, 0x03af);
1.732 + expectedUnicode.Format(formatOfSixteenCharacters.Left(15*2), 0x03a0, 0x0050, 0x03a3, 0x0054, 0x0059, 0x03a6, 0x0058, 0x03a8, 0x03a9, 0x0049, 0x0059, 0x0041, 0x0045, 0x0048, 0x0049);
1.733 + test(characterSetConverter->ConvertFromUnicode(generatedForeign, originalUnicode)==0);
1.734 + test(generatedForeign==_L8("\x16\x50\x18\x54\x59\x12\x58\x17\x15\x49\x59\x41\x45\x48\x49"));
1.735 + test(characterSetConverter->ConvertToUnicode(generatedUnicode, generatedForeign, state)==0);
1.736 + test(state==CCnvCharacterSetConverter::KStateDefault);
1.737 + test(generatedUnicode==expectedUnicode);
1.738 + originalUnicode.Format(formatOfSixteenCharacters, 0x03b0, 0x03b1, 0x03b2, 0x03b3, 0x03b4, 0x03b5, 0x03b6, 0x03b7, 0x03b8, 0x03b9, 0x03ba, 0x03bb, 0x03bc, 0x03bd, 0x03be, 0x03bf);
1.739 + expectedUnicode.Format(formatOfSixteenCharacters, 0x0059, 0x0041, 0x0042, 0x0393, 0x0394, 0x0045, 0x005a, 0x0048, 0x0398, 0x0049, 0x004b, 0x039b, 0x004d, 0x004e, 0x039e, 0x004f);
1.740 + test(characterSetConverter->ConvertFromUnicode(generatedForeign, originalUnicode)==0);
1.741 + test(generatedForeign==_L8("\x59\x41\x42\x13\x10\x45\x5a\x48\x19\x49\x4b\x14\x4d\x4e\x1a\x4f"));
1.742 + test(characterSetConverter->ConvertToUnicode(generatedUnicode, generatedForeign, state)==0);
1.743 + test(state==CCnvCharacterSetConverter::KStateDefault);
1.744 + test(generatedUnicode==expectedUnicode);
1.745 + originalUnicode.Format(formatOfSixteenCharacters.Left(15*2), 0x03c0, 0x03c1, 0x03c2, 0x03c3, 0x03c4, 0x03c5, 0x03c6, 0x03c7, 0x03c8, 0x03c9, 0x03ca, 0x03cb, 0x03cc, 0x03cd, 0x03ce);
1.746 + expectedUnicode.Format(formatOfSixteenCharacters.Left(15*2), 0x03a0, 0x0050, 0x03a3, 0x03a3, 0x0054, 0x0059, 0x03a6, 0x0058, 0x03a8, 0x03a9, 0x0049, 0x0059, 0x004f, 0x0059, 0x03a9);
1.747 + test(characterSetConverter->ConvertFromUnicode(generatedForeign, originalUnicode)==0);
1.748 + test(generatedForeign==_L8("\x16\x50\x18\x18\x54\x59\x12\x58\x17\x15\x49\x59\x4f\x59\x15"));
1.749 + test(characterSetConverter->ConvertToUnicode(generatedUnicode, generatedForeign, state)==0);
1.750 + test(state==CCnvCharacterSetConverter::KStateDefault);
1.751 + test(generatedUnicode==expectedUnicode);
1.752 + originalUnicode.Format(formatOfSixteenCharacters.Left(6*2), 0x03d0, 0x03d1, 0x03d2, 0x03d3, 0x03d4, 0x03d5);
1.753 + expectedUnicode.Format(formatOfSixteenCharacters.Left(6*2), 0x0042, 0x0398, 0x0059, 0x0059, 0x0059, 0x03a6);
1.754 + test(characterSetConverter->ConvertFromUnicode(generatedForeign, originalUnicode)==0);
1.755 + test(generatedForeign==_L8("\x42\x19\x59\x59\x59\x12"));
1.756 + test(characterSetConverter->ConvertToUnicode(generatedUnicode, generatedForeign, state)==0);
1.757 + test(state==CCnvCharacterSetConverter::KStateDefault);
1.758 + test(generatedUnicode==expectedUnicode);
1.759 + {
1.760 + INFO_PRINTF1(_L("Testing converting from Internet-standard names to UIDs"));
1.761 + test(characterSetConverter->ConvertStandardNameOfCharacterSetToIdentifierL(_L8("US-ASCII"), fileServerSession)==KCharacterSetIdentifierAscii);
1.762 + HBufC8* standardName=characterSetConverter->ConvertCharacterSetIdentifierToStandardNameL(KCharacterSetIdentifierAscii, fileServerSession);
1.763 + test(*standardName==_L8("US-ASCII"));
1.764 + delete standardName;
1.765 + }
1.766 + {
1.767 + INFO_PRINTF1(_L("Testing fix for defect EDNEMUA-4KGFEY in \"Symbian Defect Tracking v3.0\""));
1.768 + CCnvCharacterSetConverter* characterSetConverter2=CCnvCharacterSetConverter::NewLC();
1.769 + characterSetConverter->PrepareToConvertToOrFromL(KCharacterSetIdentifierSms7Bit, *arrayOfCharacterSetsAvailable, fileServerSession);
1.770 + characterSetConverter2->PrepareToConvertToOrFromL(KCharacterSetIdentifierSms7Bit, *arrayOfCharacterSetsAvailable, fileServerSession);
1.771 + characterSetConverter2->SetDowngradeForExoticLineTerminatingCharacters(CCnvCharacterSetConverter::EDowngradeExoticLineTerminatingCharactersToJustLineFeed);
1.772 + originalUnicode.Format(_L16("Line1%cLine2%cLine3\x0aLine4\x0d\x0a"), 0x2029, 0x2028);
1.773 + test(characterSetConverter->ConvertFromUnicode(generatedForeign, originalUnicode)==0);
1.774 + test(generatedForeign==_L8("Line1\x0d\x0aLine2\x0d\x0aLine3\x0aLine4\x0d\x0a"));
1.775 + test(characterSetConverter->ConvertToUnicode(generatedUnicode, generatedForeign, state)==0);
1.776 + test(state==CCnvCharacterSetConverter::KStateDefault);
1.777 + test(generatedUnicode==_L16("Line1\x0d\x0aLine2\x0d\x0aLine3\x0aLine4\x0d\x0a"));
1.778 + test(characterSetConverter2->ConvertToUnicode(generatedUnicode, generatedForeign, state)==0);
1.779 + test(state==CCnvCharacterSetConverter::KStateDefault);
1.780 + test(generatedUnicode==_L16("Line1\x0d\x0aLine2\x0d\x0aLine3\x0aLine4\x0d\x0a"));
1.781 + test(characterSetConverter2->ConvertFromUnicode(generatedForeign, originalUnicode)==0);
1.782 + test(generatedForeign==_L8("Line1\x0aLine2\x0aLine3\x0aLine4\x0d\x0a"));
1.783 + test(characterSetConverter2->ConvertToUnicode(generatedUnicode, generatedForeign, state)==0);
1.784 + test(state==CCnvCharacterSetConverter::KStateDefault);
1.785 + test(generatedUnicode==_L16("Line1\x0aLine2\x0aLine3\x0aLine4\x0d\x0a"));
1.786 + test(characterSetConverter->ConvertToUnicode(generatedUnicode, generatedForeign, state)==0);
1.787 + test(state==CCnvCharacterSetConverter::KStateDefault);
1.788 + test(generatedUnicode==_L16("Line1\x0aLine2\x0aLine3\x0aLine4\x0d\x0a"));
1.789 + CleanupStack::PopAndDestroy(); // characterSetConverter2
1.790 + }
1.791 + {
1.792 + INFO_PRINTF1(_L("Testing fix for defect EDNPSTN-4L5K2G in \"Symbian Defect Tracking v3.0\" (i.e. the extension table)"));
1.793 + characterSetConverter->PrepareToConvertToOrFromL(KCharacterSetIdentifierSms7Bit, *arrayOfCharacterSetsAvailable, fileServerSession);
1.794 + originalUnicode.Format(_L16("%c^{}\\abc[~]|%c"), 0x000c, 0x20ac);
1.795 + test(characterSetConverter->ConvertFromUnicode(generatedForeign, originalUnicode)==0);
1.796 + test(generatedForeign==_L8("\x1b\x0a\x1b\x14\x1b\x28\x1b\x29\x1b\x2f""abc\x1b\x3c\x1b\x3d\x1b\x3e\x1b\x40\x1b\x65"));
1.797 + test(characterSetConverter->ConvertToUnicode(generatedUnicode, generatedForeign, state)==0);
1.798 + test(state==CCnvCharacterSetConverter::KStateDefault);
1.799 + test(generatedUnicode==originalUnicode);
1.800 + }
1.801 + {
1.802 + 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.)"));
1.803 + TestFix_EDNJJUN_4RWH2A(*characterSetConverter, fileServerSession, *arrayOfCharacterSetsAvailable);
1.804 + }
1.805 +
1.806 + //
1.807 + INFO_PRINTF1(_L("Testing fix for defect DEF049749"));
1.808 + Test_DEF049749(*characterSetConverter, fileServerSession, *arrayOfCharacterSetsAvailable);
1.809 +
1.810 + INFO_PRINTF1(_L("Testing fix for defect DEF053900"));
1.811 + Test_DEF053900(*characterSetConverter, fileServerSession, *arrayOfCharacterSetsAvailable);
1.812 +
1.813 + CleanupStack::PopAndDestroy(3); // arrayOfCharacterSetsAvailable and characterSetConverter and fileServerSession
1.814 + }
1.815 +
1.816 +CT_BUILTIN::CT_BUILTIN()
1.817 + {
1.818 + SetTestStepName(KTestStep_T_BUILTIN);
1.819 + }
1.820 +
1.821 +TVerdict CT_BUILTIN::doTestStepL()
1.822 + {
1.823 + SetTestStepResult(EFail);
1.824 +
1.825 + __UHEAP_MARK;
1.826 + TRAPD(error1, DoE32MainL());
1.827 + __UHEAP_MARKEND;
1.828 +
1.829 + if(error1 == KErrNone)
1.830 + {
1.831 + SetTestStepResult(EPass);
1.832 + }
1.833 +
1.834 + return TestStepResult();
1.835 + }