os/textandloc/charconvfw/charconvplugins/test/rtest/tsrc/main/t_builtin.cpp
changeset 0 bde4ae8d615e
     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 +    }