sl@0: /* sl@0: * Copyright (c) 2000-2010 Nokia Corporation and/or its subsidiary(-ies). sl@0: * All rights reserved. sl@0: * This component and the accompanying materials are made available sl@0: * under the terms of "Eclipse Public License v1.0" sl@0: * which accompanies this distribution, and is available sl@0: * at the URL "http://www.eclipse.org/legal/epl-v10.html". sl@0: * sl@0: * Initial Contributors: sl@0: * Nokia Corporation - initial contribution. sl@0: * sl@0: * Contributors: sl@0: * sl@0: * Description: sl@0: * sl@0: */ sl@0: sl@0: sl@0: #include sl@0: #include sl@0: #include sl@0: #include sl@0: #include "t_jis.h" sl@0: sl@0: #define test(cond) \ sl@0: { \ sl@0: TBool __bb = (cond); \ sl@0: TEST(__bb); \ sl@0: if (!__bb) \ sl@0: { \ sl@0: ERR_PRINTF1(_L("ERROR: Test Failed")); \ sl@0: User::Leave(1); \ sl@0: } \ sl@0: } sl@0: sl@0: const TInt KBufferLength=100; sl@0: /** sl@0: @SYMTestCaseID SYSLIB-CHARCONV-CT-0529 sl@0: @SYMTestCaseDesc Tests for truncated conversion from Unicode to JIS sl@0: @SYMTestPriority Medium sl@0: @SYMTestActions Tests for truncated conversion from Unicode to JIS and back to Unicode sl@0: @SYMTestExpectedResults Test must not fail sl@0: @SYMREQ REQ0000 sl@0: */ sl@0: void CT_JIS::TestTruncatedConversionFromUnicodeToJis(CCnvCharacterSetConverter& aCharacterSetConverter, const TDesC16& aOriginalUnicode) sl@0: { sl@0: INFO_PRINTF1(_L(" @SYMTestCaseID:SYSLIB-CHARCONV-CT-0529 ")); sl@0: for (TInt i=aOriginalUnicode.Length(); i>=0; --i) sl@0: { sl@0: TBuf8 generatedJis; sl@0: test(aCharacterSetConverter.ConvertFromUnicode(generatedJis, aOriginalUnicode.Left(i))>=0); sl@0: TBuf8 generatedsecondPartOfJis; sl@0: test(aCharacterSetConverter.ConvertFromUnicode(generatedsecondPartOfJis, aOriginalUnicode.Mid(i))==0); sl@0: generatedJis.Append(generatedsecondPartOfJis); sl@0: TInt state=CCnvCharacterSetConverter::KStateDefault; sl@0: TBuf16 generatedUnicode; sl@0: test(aCharacterSetConverter.ConvertToUnicode(generatedUnicode, generatedJis, state)==0); sl@0: test(generatedUnicode==aOriginalUnicode); sl@0: } sl@0: } sl@0: /** sl@0: @SYMTestCaseID SYSLIB-CHARCONV-CT-0530 sl@0: @SYMTestCaseDesc Splitting and converting from Unicode to JIS test sl@0: @SYMTestPriority Medium sl@0: @SYMTestActions Tests for conversion after splitting, from Unicode to JIS and back to Unicode sl@0: @SYMTestExpectedResults Test must not fail sl@0: @SYMREQ REQ0000 sl@0: */ sl@0: void CT_JIS::TestSplittingConvertingFromUnicodeToJis(CCnvCharacterSetConverter& aCharacterSetConverter, TInt aMaximumLengthLowerLimit, TInt aMaximumLengthUpperLimit, TInt aExpectedNumberOfUnicodeCharactersNotConvertedAtSplit, const TDesC8& aExpectedFirstPartOfJis, const TDesC8& aExpectedSecondPartOfJis, const TDesC16& aOriginalUnicode) sl@0: { sl@0: INFO_PRINTF1(_L(" @SYMTestCaseID:SYSLIB-CHARCONV-CT-0530 ")); sl@0: test(aMaximumLengthLowerLimit<=aMaximumLengthUpperLimit); sl@0: test(aMaximumLengthUpperLimit<=KBufferLength); sl@0: TUint8 jisBuffer[KBufferLength]; sl@0: for (TInt i=aMaximumLengthLowerLimit; i<=aMaximumLengthUpperLimit; ++i) sl@0: { sl@0: TPtr8 generatedFirstPartOfJis(jisBuffer, i); sl@0: test(aCharacterSetConverter.ConvertFromUnicode(generatedFirstPartOfJis, aOriginalUnicode)==aExpectedNumberOfUnicodeCharactersNotConvertedAtSplit); sl@0: test(generatedFirstPartOfJis==aExpectedFirstPartOfJis); sl@0: TBuf8 generatedSecondPartOfJis; sl@0: test(aCharacterSetConverter.ConvertFromUnicode(generatedSecondPartOfJis, aOriginalUnicode.Right(aExpectedNumberOfUnicodeCharactersNotConvertedAtSplit))==0); sl@0: test(generatedSecondPartOfJis==aExpectedSecondPartOfJis); sl@0: TInt state=CCnvCharacterSetConverter::KStateDefault; sl@0: TBuf16 generatedUnicode; sl@0: test(aCharacterSetConverter.ConvertToUnicode(generatedUnicode, generatedFirstPartOfJis, state)==0); sl@0: TBuf16 generatedSecondPartOfUnicode; sl@0: test(aCharacterSetConverter.ConvertToUnicode(generatedSecondPartOfUnicode, generatedSecondPartOfJis, state)==0); sl@0: generatedUnicode.Append(generatedSecondPartOfUnicode); sl@0: test(generatedUnicode==aOriginalUnicode); sl@0: } sl@0: } sl@0: /** sl@0: @SYMTestCaseID SYSLIB-CHARCONV-CT-0531 sl@0: @SYMTestCaseDesc Tests for truncated conversion from JIS to Unicode sl@0: @SYMTestPriority Medium sl@0: @SYMTestActions Tests for truncated conversion from JIS to Unicode and back to JIS sl@0: @SYMTestExpectedResults Test must not fail sl@0: @SYMREQ REQ0000 sl@0: */ sl@0: void CT_JIS::TestTruncatedConversionToUnicodeFromJis(CCnvCharacterSetConverter& aCharacterSetConverter, const TDesC16& aExpectedUnicode, const TDesC8& aOriginalJis) sl@0: { sl@0: INFO_PRINTF1(_L(" @SYMTestCaseID:SYSLIB-CHARCONV-CT-0531 ")); sl@0: for (TInt i=aOriginalJis.Length(); i>=6; --i) // 6 is the length of JIS' longest escape sequence sl@0: { sl@0: TInt state=CCnvCharacterSetConverter::KStateDefault; sl@0: TBuf16 generatedUnicode; sl@0: const TInt returnValue=aCharacterSetConverter.ConvertToUnicode(generatedUnicode, aOriginalJis.Left(i), state); sl@0: test(returnValue>=0); sl@0: TBuf16 generatedsecondPartOfUnicode; sl@0: test(aCharacterSetConverter.ConvertToUnicode(generatedsecondPartOfUnicode, aOriginalJis.Mid(i-returnValue), state)==0); sl@0: generatedUnicode.Append(generatedsecondPartOfUnicode); sl@0: test(generatedUnicode==aExpectedUnicode); sl@0: } sl@0: } sl@0: /** sl@0: @SYMTestCaseID SYSLIB-CHARCONV-CT-0532 sl@0: @SYMTestCaseDesc Splitting and converting from JIS to Unicode test sl@0: @SYMTestPriority Medium sl@0: @SYMTestActions Tests for conversion after splitting, from JIS to Unicode and back to JIS sl@0: @SYMTestExpectedResults Test must not fail sl@0: @SYMREQ REQ0000 sl@0: */ sl@0: void CT_JIS::TestSplittingConvertingToUnicodeFromJis(CCnvCharacterSetConverter& aCharacterSetConverter, TInt aMaximumLengthLowerLimit, TInt aMaximumLengthUpperLimit, TInt aExpectedNumberOfJisBytesNotConvertedAtSplit, TInt aExpectedLengthOfFirstPartOfUnicode, const TDesC16& aExpectedUnicode, const TDesC8& aOriginalJis) sl@0: { sl@0: INFO_PRINTF1(_L(" @SYMTestCaseID:SYSLIB-CHARCONV-CT-0532 ")); sl@0: test(aMaximumLengthLowerLimit<=aMaximumLengthUpperLimit); sl@0: test(aMaximumLengthUpperLimit<=KBufferLength); sl@0: TUint16 unicodeBuffer[KBufferLength]; sl@0: for (TInt i=aMaximumLengthLowerLimit; i<=aMaximumLengthUpperLimit; ++i) sl@0: { sl@0: TPtr16 generatedFirstPartOfUnicode(unicodeBuffer, i); sl@0: TInt state=CCnvCharacterSetConverter::KStateDefault; sl@0: const TInt returnValue=aCharacterSetConverter.ConvertToUnicode(generatedFirstPartOfUnicode, aOriginalJis, state); sl@0: test(generatedFirstPartOfUnicode==aExpectedUnicode.Left(aExpectedLengthOfFirstPartOfUnicode)); sl@0: test(returnValue==aExpectedNumberOfJisBytesNotConvertedAtSplit); sl@0: TBuf16 generatedSecondPartOfUnicode; sl@0: test(aCharacterSetConverter.ConvertToUnicode(generatedSecondPartOfUnicode, aOriginalJis.Right(aExpectedNumberOfJisBytesNotConvertedAtSplit), state)==0); sl@0: test(generatedSecondPartOfUnicode==aExpectedUnicode.Mid(aExpectedLengthOfFirstPartOfUnicode)); sl@0: TBuf8 generatedJis; sl@0: test(aCharacterSetConverter.ConvertFromUnicode(generatedJis, generatedFirstPartOfUnicode)==0); sl@0: TBuf8 generatedSecondPartOfJis; sl@0: test(aCharacterSetConverter.ConvertFromUnicode(generatedSecondPartOfJis, generatedSecondPartOfUnicode)==0); sl@0: generatedJis.Append(generatedSecondPartOfJis); sl@0: TBuf16 regeneratedUnicode; sl@0: state=CCnvCharacterSetConverter::KStateDefault; sl@0: test(aCharacterSetConverter.ConvertToUnicode(regeneratedUnicode, generatedJis, state)==0); sl@0: test(regeneratedUnicode==aExpectedUnicode); sl@0: state=CCnvCharacterSetConverter::KStateDefault; sl@0: test(aCharacterSetConverter.ConvertToUnicode(regeneratedUnicode, aOriginalJis, state)==0); sl@0: test(regeneratedUnicode==aExpectedUnicode); sl@0: } sl@0: } sl@0: /** sl@0: @SYMTestCaseID SYSLIB-CHARCONV-CT-0533 sl@0: @SYMTestCaseDesc Conversion of bad JIS format to Unicode test sl@0: @SYMTestPriority Medium sl@0: @SYMTestActions Tests to convert bad formatted JIS input to Unicode. sl@0: @SYMTestExpectedResults Test must not fail sl@0: @SYMREQ REQ0000 sl@0: */ sl@0: void CT_JIS::TestIsIllFormedJis(CCnvCharacterSetConverter& aCharacterSetConverter, const TDesC8& aJis) sl@0: { sl@0: INFO_PRINTF1(_L(" @SYMTestCaseID:SYSLIB-CHARCONV-CT-0533 ")); sl@0: TBuf16<50> generatedUnicode; sl@0: TInt state=CCnvCharacterSetConverter::KStateDefault; sl@0: TPtrC8 remainderOfJis(aJis); sl@0: TInt lastReturnValue=KMaxTInt; sl@0: FOREVER sl@0: { sl@0: const TInt returnValue=aCharacterSetConverter.ConvertToUnicode(generatedUnicode, remainderOfJis, state); sl@0: if (returnValue==CCnvCharacterSetConverter::EErrorIllFormedInput) sl@0: { sl@0: break; sl@0: } sl@0: test(returnValue>0); sl@0: test(returnValue* arrayOfCharacterSetsAvailable=CCnvCharacterSetConverter::CreateArrayOfCharacterSetsAvailableLC(fileServerSession); sl@0: INFO_PRINTF1(_L("Available:\n")); sl@0: TInt i; sl@0: for (i=arrayOfCharacterSetsAvailable->Count()-1; i>=0; --i) sl@0: { sl@0: const CCnvCharacterSetConverter::SCharacterSet& charactersSet=(*arrayOfCharacterSetsAvailable)[i]; sl@0: characterSetConverter->PrepareToConvertToOrFromL(charactersSet.Identifier(), *arrayOfCharacterSetsAvailable, fileServerSession); sl@0: TPtrC charactersSetName(charactersSet.Name()); sl@0: if (charactersSet.NameIsFileName()) sl@0: { sl@0: charactersSetName.Set(TParsePtrC(charactersSetName).Name()); sl@0: } sl@0: INFO_PRINTF2(_L(" %S\n"), &charactersSetName); sl@0: } sl@0: INFO_PRINTF1(_L("Testing JIS conversions")); sl@0: characterSetConverter->PrepareToConvertToOrFromL(KCharacterSetIdentifierJis, *arrayOfCharacterSetsAvailable, fileServerSession); sl@0: // sl@0: INFO_PRINTF1(_L("Empty descriptor")); sl@0: TestSplittingConvertingFromUnicodeToJis(*characterSetConverter, 0, 10, 0, KNullDesC8, KNullDesC8, KNullDesC16); sl@0: TestSplittingConvertingToUnicodeFromJis(*characterSetConverter, 0, 10, 0, 0, KNullDesC16, KNullDesC8); sl@0: INFO_PRINTF1(_L("Testing converting to JIS")); sl@0: TBuf16<50> originalUnicode; sl@0: originalUnicode.Format(_L16("I %c%c%c%c%c%c%c%c"), 0x611b, 0x3059, 0x308b, 0xff74, 0xff9a, 0xff68, 0xff9d, 0x4e04); sl@0: TestTruncatedConversionFromUnicodeToJis(*characterSetConverter, originalUnicode); sl@0: TestSplittingConvertingFromUnicodeToJis(*characterSetConverter, 0, 3, 10, KNullDesC8, _L8("\x1b\x28\x4aI \x1b\x24\x42\x30\x26\x24\x39\x24\x6b\x1b\x28\x49\x34\x5a\x28\x5d\x1b\x24\x28\x44\x30\x22"), originalUnicode); sl@0: TestSplittingConvertingFromUnicodeToJis(*characterSetConverter, 4, 4, 9, _L8("\x1b\x28\x4aI"), _L8("\x1b\x28\x4a \x1b\x24\x42\x30\x26\x24\x39\x24\x6b\x1b\x28\x49\x34\x5a\x28\x5d\x1b\x24\x28\x44\x30\x22"), originalUnicode); sl@0: TestSplittingConvertingFromUnicodeToJis(*characterSetConverter, 5, 9, 8, _L8("\x1b\x28\x4aI "), _L8("\x1b\x24\x42\x30\x26\x24\x39\x24\x6b\x1b\x28\x49\x34\x5a\x28\x5d\x1b\x24\x28\x44\x30\x22"), originalUnicode); sl@0: TestSplittingConvertingFromUnicodeToJis(*characterSetConverter, 10, 11, 7, _L8("\x1b\x28\x4aI \x1b\x24\x42\x30\x26"), _L8("\x1b\x24\x42\x24\x39\x24\x6b\x1b\x28\x49\x34\x5a\x28\x5d\x1b\x24\x28\x44\x30\x22"), originalUnicode); sl@0: TestSplittingConvertingFromUnicodeToJis(*characterSetConverter, 12, 13, 6, _L8("\x1b\x28\x4aI \x1b\x24\x42\x30\x26\x24\x39"), _L8("\x1b\x24\x42\x24\x6b\x1b\x28\x49\x34\x5a\x28\x5d\x1b\x24\x28\x44\x30\x22"), originalUnicode); sl@0: TestSplittingConvertingFromUnicodeToJis(*characterSetConverter, 14, 17, 5, _L8("\x1b\x28\x4aI \x1b\x24\x42\x30\x26\x24\x39\x24\x6b"), _L8("\x1b\x28\x49\x34\x5a\x28\x5d\x1b\x24\x28\x44\x30\x22"), originalUnicode); sl@0: TestSplittingConvertingFromUnicodeToJis(*characterSetConverter, 18, 18, 4, _L8("\x1b\x28\x4aI \x1b\x24\x42\x30\x26\x24\x39\x24\x6b\x1b\x28\x49\x34"), _L8("\x1b\x28\x49\x5a\x28\x5d\x1b\x24\x28\x44\x30\x22"), originalUnicode); sl@0: TestSplittingConvertingFromUnicodeToJis(*characterSetConverter, 19, 19, 3, _L8("\x1b\x28\x4aI \x1b\x24\x42\x30\x26\x24\x39\x24\x6b\x1b\x28\x49\x34\x5a"), _L8("\x1b\x28\x49\x28\x5d\x1b\x24\x28\x44\x30\x22"), originalUnicode); sl@0: TestSplittingConvertingFromUnicodeToJis(*characterSetConverter, 20, 20, 2, _L8("\x1b\x28\x4aI \x1b\x24\x42\x30\x26\x24\x39\x24\x6b\x1b\x28\x49\x34\x5a\x28"), _L8("\x1b\x28\x49\x5d\x1b\x24\x28\x44\x30\x22"), originalUnicode); sl@0: TestSplittingConvertingFromUnicodeToJis(*characterSetConverter, 21, 26, 1, _L8("\x1b\x28\x4aI \x1b\x24\x42\x30\x26\x24\x39\x24\x6b\x1b\x28\x49\x34\x5a\x28\x5d"), _L8("\x1b\x24\x28\x44\x30\x22"), originalUnicode); sl@0: TestSplittingConvertingFromUnicodeToJis(*characterSetConverter, 27, 40, 0, _L8("\x1b\x28\x4aI \x1b\x24\x42\x30\x26\x24\x39\x24\x6b\x1b\x28\x49\x34\x5a\x28\x5d\x1b\x24\x28\x44\x30\x22"), KNullDesC8, originalUnicode); sl@0: INFO_PRINTF1(_L("Testing converting to Unicode")); sl@0: sl@0: /** sl@0: * Work around for DEF063276. sl@0: * This literal is now loaded from a z:\test\data\originalJis.dat sl@0: * Bullseye Coverage corrupts this literal to avoid this it is stored in a file as to not be touched by Bullseye Coverage. sl@0: */ sl@0: // const TPtrC8 originalJis(_S8("\\\x1b\x28\x42\\\xb4\\\x0e\x31\x0f\\\x0e\x4a\x5e\x1b\x26\x40\x1b\x24\x42\x30\x24\x1b\x24\x28\x44\x30\x24\x1b\x28\x49\x21\x0e\x22\x0f\x30\x24\x0e")); sl@0: sl@0: TBuf8<64> buf; sl@0: ReadDesc(buf, KOriginalJisFilename, fileServerSession); sl@0: sl@0: TBuf16<50> expectedUnicode; sl@0: expectedUnicode.Format(_L16("\xa5\\%c\xa5%c\xa5%c%c%c%c%c%c0$"), 0xff74, 0xff71, 0xff8a, 0xff9e, 0x963f, 0x4e0c, 0xff61, 0xff62); sl@0: TestTruncatedConversionToUnicodeFromJis(*characterSetConverter, expectedUnicode, buf); sl@0: TestTruncatedConversionToUnicodeFromJis(*characterSetConverter, _L16(" Hello"), _L8("\x1b\x24\x42\x1b\x28\x4a\x1b\x24\x42\x1b\x28\x4a\x1b\x26\x40\x1b\x24\x42\x1b\x28\x4a Hello")); sl@0: TestTruncatedConversionToUnicodeFromJis(*characterSetConverter, _L16(" Hello"), _L8("\x1b\x26\x40\x1b\x24\x42\x1b\x28\x4a Hello")); sl@0: TestSplittingConvertingToUnicodeFromJis(*characterSetConverter, 0, 0, 38, 0, expectedUnicode, buf); sl@0: TestSplittingConvertingToUnicodeFromJis(*characterSetConverter, 1, 1, 34, 1, expectedUnicode, buf); sl@0: TestSplittingConvertingToUnicodeFromJis(*characterSetConverter, 2, 2, 33, 2, expectedUnicode, buf); sl@0: TestSplittingConvertingToUnicodeFromJis(*characterSetConverter, 3, 3, 32, 3, expectedUnicode, buf); sl@0: TestSplittingConvertingToUnicodeFromJis(*characterSetConverter, 4, 4, 30, 4, expectedUnicode, buf); sl@0: TestSplittingConvertingToUnicodeFromJis(*characterSetConverter, 5, 5, 28, 5, expectedUnicode, buf); sl@0: TestSplittingConvertingToUnicodeFromJis(*characterSetConverter, 6, 6, 26, 6, expectedUnicode, buf); sl@0: TestSplittingConvertingToUnicodeFromJis(*characterSetConverter, 7, 7, 25, 7, expectedUnicode, buf); sl@0: TestSplittingConvertingToUnicodeFromJis(*characterSetConverter, 8, 8, 24, 8, expectedUnicode, buf); sl@0: TestSplittingConvertingToUnicodeFromJis(*characterSetConverter, 9, 9, 12, 9, expectedUnicode, buf); sl@0: TestSplittingConvertingToUnicodeFromJis(*characterSetConverter, 10, 10, 7, 10, expectedUnicode, buf); sl@0: TestSplittingConvertingToUnicodeFromJis(*characterSetConverter, 11, 11, 5, 11, expectedUnicode, buf); sl@0: TestSplittingConvertingToUnicodeFromJis(*characterSetConverter, 12, 12, 3, 12, expectedUnicode, buf); sl@0: TestSplittingConvertingToUnicodeFromJis(*characterSetConverter, 13, 13, 2, 13, expectedUnicode, buf); sl@0: TestSplittingConvertingToUnicodeFromJis(*characterSetConverter, 14, 30, 0, 14, expectedUnicode, buf); sl@0: sl@0: // End fix sl@0: INFO_PRINTF1(_L("Testing the default JIS state")); sl@0: for (i=0; i<=6; ++i) sl@0: { sl@0: TestSplittingConvertingToUnicodeFromJis(*characterSetConverter, i, i, 6-i, i, _L16("Hello\xa5"), _L8("Hello\\")); sl@0: } sl@0: INFO_PRINTF1(_L("Testing ill-formed JIS")); sl@0: TestIsIllFormedJis(*characterSetConverter, _L8("abc \x1b\x26\x40\x1b\x24\x42\x21\x1b\x28\x4a def")); sl@0: TestIsIllFormedJis(*characterSetConverter, _L8("abc \x1b\x26\x40\x1b\x24\x42\x21\x21\x21\x1b\x28\x4a def")); sl@0: TestIsIllFormedJis(*characterSetConverter, _L8("abc \x1b\x26\x40\x1b\x24\x42\x21\x21\x21\x21\x21\x1b\x28\x4a def")); sl@0: TestIsIllFormedJis(*characterSetConverter, _L8("abc \x1b")); sl@0: TestIsIllFormedJis(*characterSetConverter, _L8("abc \x1b\x24")); sl@0: TestIsIllFormedJis(*characterSetConverter, _L8("abc \x1b\x24\xff")); sl@0: CleanupStack::PopAndDestroy(3); // arrayOfCharacterSetsAvailable and characterSetConverter and fileServerSession sl@0: } sl@0: sl@0: CT_JIS::CT_JIS() sl@0: { sl@0: SetTestStepName(KTestStep_T_JIS); sl@0: } sl@0: sl@0: TVerdict CT_JIS::doTestStepL() sl@0: { sl@0: SetTestStepResult(EFail); sl@0: sl@0: __UHEAP_MARK; sl@0: TRAPD(error1, DoE32MainL()); sl@0: __UHEAP_MARKEND; sl@0: sl@0: if(error1 == KErrNone) sl@0: { sl@0: SetTestStepResult(EPass); sl@0: } sl@0: sl@0: return TestStepResult(); sl@0: }