Update contrib.
2 * Copyright (c) 2000-2010 Nokia Corporation and/or its subsidiary(-ies).
4 * This component and the accompanying materials are made available
5 * under the terms of "Eclipse Public License v1.0"
6 * which accompanies this distribution, and is available
7 * at the URL "http://www.eclipse.org/legal/epl-v10.html".
9 * Initial Contributors:
10 * Nokia Corporation - initial contribution.
23 #include "t_replacement.h"
28 TBool __bb = (cond); \
32 ERR_PRINTF1(_L("ERROR: Test Failed")); \
38 @SYMTestCaseID SYSLIB-CHARCONV-CT-0546
39 @SYMTestCaseDesc Tests for the conversion of uncovertible Unicode characters
40 @SYMTestPriority Medium
41 @SYMTestActions Tests for the replacement of uncovertible Unicode characters
42 @SYMTestExpectedResults Test must not fail
45 void CT_REPLACEMENT::DoE32MainL()
47 INFO_PRINTF1(_L(" @SYMTestCaseID:SYSLIB-CHARCONV-CT-0546 "));
48 RFs fileServerSession;
49 CleanupClosePushL(fileServerSession);
50 User::LeaveIfError(fileServerSession.Connect());
51 CCnvCharacterSetConverter* characterSetConverter=CCnvCharacterSetConverter::NewLC();
52 CArrayFix<CCnvCharacterSetConverter::SCharacterSet>* arrayOfCharacterSetsAvailable=CCnvCharacterSetConverter::CreateArrayOfCharacterSetsAvailableLC(fileServerSession);
53 INFO_PRINTF1(_L("Available:\n"));
54 for (TInt i=arrayOfCharacterSetsAvailable->Count()-1; i>=0; --i)
56 const CCnvCharacterSetConverter::SCharacterSet& charactersSet=(*arrayOfCharacterSetsAvailable)[i];
57 characterSetConverter->PrepareToConvertToOrFromL(charactersSet.Identifier(), *arrayOfCharacterSetsAvailable, fileServerSession);
58 TPtrC charactersSetName(charactersSet.Name());
59 if (charactersSet.NameIsFileName())
61 charactersSetName.Set(TParsePtrC(charactersSetName).Name());
63 INFO_PRINTF2(_L(" %S\n"), &charactersSetName);
65 characterSetConverter->PrepareToConvertToOrFromL(KCharacterSetIdentifierGb2312, *arrayOfCharacterSetsAvailable, fileServerSession);
66 INFO_PRINTF1(_L("Testing various values for iReplacementForUnconvertibleUnicodeCharacters"));
68 INFO_PRINTF1(_L("Testing iReplacementForUnconvertibleUnicodeCharacters being long"));
70 TBuf16<50> originalUnicode;
71 originalUnicode.Format(_L16("Here is a Georgian character - %c"), 0x10da);
72 characterSetConverter->SetReplacementForUnconvertibleUnicodeCharactersL(_L8("[something quite long]"));
73 const TInt KLengthOfForeignBuffer=100;
74 TUint8 foreignBuffer[KLengthOfForeignBuffer];
75 for (TInt i=31; ; ++i)
77 test(i<=KLengthOfForeignBuffer);
78 TPtr8 generatedForeign(foreignBuffer, i);
79 TInt numberOfUnconvertibleCharacters;
80 TInt indexOfFirstUnconvertibleCharacter;
81 const TInt returnValue=characterSetConverter->ConvertFromUnicode(generatedForeign, originalUnicode, numberOfUnconvertibleCharacters, indexOfFirstUnconvertibleCharacter);
85 test(generatedForeign==_L8("Here is a Georgian character - [something quite long]"));
86 test(numberOfUnconvertibleCharacters==1);
87 test(indexOfFirstUnconvertibleCharacter==31);
91 test(generatedForeign==_L8("Here is a Georgian character - "));
92 test(numberOfUnconvertibleCharacters==0);
93 test(indexOfFirstUnconvertibleCharacter==-1); // not something that the API guarantees (it's undefined if numberOfUnconvertibleCharacters==0), but we'll check it any
96 INFO_PRINTF1(_L("Testing lots of unconvertible Unicode characters"));
98 characterSetConverter->SetReplacementForUnconvertibleUnicodeCharactersL(_L8("?Q"));
99 TInt numberOfUnconvertibleCharacters;
100 TInt indexOfFirstUnconvertibleCharacter;
102 TPtr16 originalUnicode(HBufC16::NewMaxLC(10+(sizeof(CCnvCharacterSetConverter::TArrayOfAscendingIndices)/sizeof(TUint16)))->Des());
103 TPtr8 generatedForeign(HBufC8::NewLC(originalUnicode.Length()*sizeof(TUint16))->Des());
104 originalUnicode.Fill(0x7535);
105 test(characterSetConverter->ConvertFromUnicode(generatedForeign, originalUnicode, numberOfUnconvertibleCharacters, indexOfFirstUnconvertibleCharacter)==0);
106 test(generatedForeign.Length()>0);
107 test(generatedForeign.Length()==originalUnicode.Length()*STATIC_CAST(TInt, sizeof(TUint16)));
108 test(numberOfUnconvertibleCharacters==0);
109 for (i=generatedForeign.Length()-1; i>=0; i-=2)
111 test(generatedForeign[i-1]==0xb5);
112 test(generatedForeign[i]==0xe7);
114 originalUnicode.Fill(0x0f0a); // a Tibetan character, not in GB 2312-80
115 const TInt returnValue=characterSetConverter->ConvertFromUnicode(generatedForeign, originalUnicode, numberOfUnconvertibleCharacters, indexOfFirstUnconvertibleCharacter);
116 test(returnValue==0);
117 test(generatedForeign.Length()>0);
118 test(generatedForeign.Length()==(originalUnicode.Length()-returnValue)*STATIC_CAST(TInt, sizeof(TUint16)));
119 test(numberOfUnconvertibleCharacters==25);
120 test(indexOfFirstUnconvertibleCharacter==0);
121 for (i=generatedForeign.Length()-1; i>=0; i-=2)
123 test(generatedForeign[i-1]=='?');
124 test(generatedForeign[i]=='Q');
126 CleanupStack::PopAndDestroy(2); // generatedForeign and originalUnicode
128 CleanupStack::PopAndDestroy(3); // arrayOfCharacterSetsAvailable and characterSetConverter and fileServerSession
131 CT_REPLACEMENT::CT_REPLACEMENT()
133 SetTestStepName(KTestStep_T_REPLACEMENT);
136 TVerdict CT_REPLACEMENT::doTestStepL()
138 SetTestStepResult(EFail);
141 TRAPD(error1, DoE32MainL());
144 if(error1 == KErrNone)
146 SetTestStepResult(EPass);
149 return TestStepResult();