sl@0: // Copyright (c) 2002-2009 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: // Implementation of test CWSPEncodeTest. sl@0: // sl@0: // sl@0: sl@0: sl@0: #include "cwspencodetest.h" sl@0: #include sl@0: sl@0: sl@0: CWSPEncodeTest* CWSPEncodeTest::NewLC(CIpuTestHarness* aTestHarness) sl@0: { sl@0: CWSPEncodeTest* self = new(ELeave)CWSPEncodeTest(aTestHarness); sl@0: CleanupStack::PushL(self); sl@0: return self; sl@0: } sl@0: sl@0: sl@0: CWSPEncodeTest::CWSPEncodeTest(CIpuTestHarness* aTestHarness): sl@0: iTestHarness(aTestHarness) sl@0: {} sl@0: sl@0: CWSPEncodeTest::~CWSPEncodeTest() sl@0: {} sl@0: sl@0: void CWSPEncodeTest::DoTestsL() sl@0: { sl@0: HeaderEncoderTestL(); sl@0: ShortIntTestL(); sl@0: LongIntTestL(); sl@0: UintVarTestL(); sl@0: StringTestL(); sl@0: DateTestL(); sl@0: } sl@0: sl@0: sl@0: void CWSPEncodeTest::HeaderEncoderTestL() sl@0: { sl@0: _LIT(KTestText, "WSP Encode: Header"); sl@0: iTestHarness->StartTestL(KTestText); sl@0: TRAPD(error, TestHeaderEncoderL()); sl@0: iTestHarness->EndTest(error); sl@0: User::LeaveIfError(error); sl@0: } sl@0: sl@0: void CWSPEncodeTest::TestHeaderEncoderL() sl@0: { sl@0: TInt err=0; sl@0: sl@0: CWspHeaderEncoder* primEncoder = CWspHeaderEncoder::NewLC(); sl@0: sl@0: primEncoder->StartHeaderL(0x27); sl@0: primEncoder->StartValueLengthL(); sl@0: primEncoder->AddUintVarL(0xff); sl@0: primEncoder->AddLongIntL(999999); sl@0: primEncoder->AddIntegerL(0x7F); sl@0: primEncoder->EndValueLengthL(); sl@0: HBufC8* buf = primEncoder->EndHeaderL(); sl@0: CleanupStack::PushL(buf); sl@0: CleanupStack::PopAndDestroy(2); //primEncoder, buf sl@0: sl@0: User::LeaveIfError(err); sl@0: } sl@0: sl@0: sl@0: void CWSPEncodeTest::ShortIntTestL() sl@0: { sl@0: _LIT(KTestText, "WSP Encode: ShortInt"); sl@0: iTestHarness->StartTestL(KTestText); sl@0: TInt error = TestShortInt(); sl@0: iTestHarness->EndTest(error); sl@0: User::LeaveIfError(error); sl@0: } sl@0: sl@0: sl@0: TInt CWSPEncodeTest::TestShortInt() sl@0: { sl@0: TUint8 input; sl@0: TUint8 output; sl@0: sl@0: // TWspPrimitiveEncoder::ShortInt sl@0: // Check 7 and 8 bit values. If 8bit notinh happens sl@0: input=0; // MIN input value sl@0: output = TWspPrimitiveEncoder::ShortInt(input); sl@0: if (output !=128) sl@0: return KErrGeneral; sl@0: sl@0: input=35; // MAX input value sl@0: output = TWspPrimitiveEncoder::ShortInt(input); sl@0: if (output !=163) sl@0: return KErrGeneral; sl@0: sl@0: input=0x7F; // MAX input value sl@0: output = TWspPrimitiveEncoder::ShortInt(input); sl@0: if (output !=255) sl@0: return KErrGeneral; sl@0: sl@0: input=0x80; // invalid value sl@0: output = TWspPrimitiveEncoder::ShortInt(input); sl@0: if (output !=0) sl@0: return KErrGeneral; sl@0: sl@0: return KErrNone; sl@0: } sl@0: sl@0: sl@0: void CWSPEncodeTest::LongIntTestL() sl@0: { sl@0: _LIT(KTestText, "WSP Encode: LongInt"); sl@0: iTestHarness->StartTestL(KTestText); sl@0: TRAPD(error,TestLongIntL()); sl@0: iTestHarness->EndTest(error); sl@0: User::LeaveIfError(error); sl@0: } sl@0: sl@0: void CWSPEncodeTest::TestLongIntL() sl@0: { sl@0: HBufC8* output=NULL; sl@0: TBuf8<255> buf; sl@0: TUint32 input; sl@0: sl@0: const TUint8 KZeroValueLongInt[] = {0x01, 0x00}; sl@0: const TUint8 K127LongInt[] = {0x01, 0x7F}; sl@0: const TUint8 K255LongInt[] = {0x01, 0xFF}; sl@0: const TUint8 K256LongInt[] = {0x02, 0x01, 0x00}; sl@0: const TUint8 KFFFFLongInt[] = {0x02, 0xFF, 0xFF}; sl@0: const TUint8 K10000LongInt[] = {0x03, 0x01, 0x00, 0x00}; sl@0: const TUint8 KFFFFFFLongInt[] = {0x03, 0xFF, 0xFF, 0xFF}; sl@0: const TUint8 K1000000LongInt[] = {0x04, 0x01, 0x00, 0x00, 0x00}; sl@0: const TUint8 KFFFFFFFFLongInt[] = {0x04, 0xFF, 0xFF, 0xFF, 0xFF}; sl@0: sl@0: input=0; sl@0: output = TWspPrimitiveEncoder::LongIntL(input); sl@0: CleanupStack::PushL(output); sl@0: buf.Copy(KZeroValueLongInt, sizeof(KZeroValueLongInt)); sl@0: if ((*output).CompareF(buf)!=0) sl@0: User::Leave(KErrGeneral); sl@0: CleanupStack::PopAndDestroy(output); sl@0: sl@0: input=127; sl@0: output = TWspPrimitiveEncoder::LongIntL(input); sl@0: CleanupStack::PushL(output); sl@0: buf.Copy(K127LongInt, sizeof(K127LongInt)); sl@0: if ((*output).CompareF(buf)!=0) sl@0: User::Leave(KErrGeneral); sl@0: CleanupStack::PopAndDestroy(output); sl@0: sl@0: input=255; sl@0: output = TWspPrimitiveEncoder::LongIntL(input); sl@0: CleanupStack::PushL(output); sl@0: buf.Copy(K255LongInt, sizeof(K255LongInt)); sl@0: if ((*output).CompareF(buf)!=0) sl@0: User::Leave(KErrGeneral); sl@0: CleanupStack::PopAndDestroy(output); sl@0: sl@0: input=256; sl@0: output = TWspPrimitiveEncoder::LongIntL(input); sl@0: CleanupStack::PushL(output); sl@0: buf.Copy(K256LongInt, sizeof(K256LongInt)); sl@0: if ((*output).CompareF(buf)!=0) sl@0: User::Leave(KErrGeneral); sl@0: CleanupStack::PopAndDestroy(output); sl@0: sl@0: input=0xFFFF; sl@0: output = TWspPrimitiveEncoder::LongIntL(input); sl@0: CleanupStack::PushL(output); sl@0: buf.Copy(KFFFFLongInt, sizeof(KFFFFLongInt)); sl@0: if ((*output).CompareF(buf)!=0) sl@0: User::Leave(KErrGeneral); sl@0: CleanupStack::PopAndDestroy(output); sl@0: sl@0: input=0x10000; sl@0: output = TWspPrimitiveEncoder::LongIntL(input); sl@0: CleanupStack::PushL(output); sl@0: buf.Copy(K10000LongInt, sizeof(K10000LongInt)); sl@0: if ((*output).CompareF(buf)!=0) sl@0: User::Leave(KErrGeneral); sl@0: CleanupStack::PopAndDestroy(output); sl@0: sl@0: input=0xFFFFFF; sl@0: output = TWspPrimitiveEncoder::LongIntL(input); sl@0: CleanupStack::PushL(output); sl@0: buf.Copy(KFFFFFFLongInt, sizeof(KFFFFFFLongInt)); sl@0: if ((*output).CompareF(buf)!=0) sl@0: User::Leave(KErrGeneral); sl@0: CleanupStack::PopAndDestroy(output); sl@0: sl@0: input=0x1000000; sl@0: output = TWspPrimitiveEncoder::LongIntL(input); sl@0: CleanupStack::PushL(output); sl@0: buf.Copy(K1000000LongInt, sizeof(K1000000LongInt)); sl@0: if ((*output).CompareF(buf)!=0) sl@0: User::Leave(KErrGeneral); sl@0: CleanupStack::PopAndDestroy(output); sl@0: sl@0: input=0xFFFFFFFF; sl@0: output = TWspPrimitiveEncoder::LongIntL(input); sl@0: CleanupStack::PushL(output); sl@0: buf.Copy(KFFFFFFFFLongInt, sizeof(KFFFFFFFFLongInt)); sl@0: if ((*output).CompareF(buf)!=0) sl@0: User::Leave(KErrGeneral); sl@0: CleanupStack::PopAndDestroy(output); sl@0: } sl@0: sl@0: sl@0: void CWSPEncodeTest::UintVarTestL() sl@0: { sl@0: _LIT(KTestText, "WSP Encode: UintVar"); sl@0: iTestHarness->StartTestL(KTestText); sl@0: TRAPD(error,TestUintVarL()); sl@0: iTestHarness->EndTest(error); sl@0: User::LeaveIfError(error); sl@0: } sl@0: sl@0: void CWSPEncodeTest::TestUintVarL() sl@0: { sl@0: sl@0: HBufC8* output=NULL; sl@0: TBuf8<255> buf; sl@0: TUint32 input; sl@0: sl@0: const TUint8 KMinValue[] = {0x00}; sl@0: const TUint8 KMaxValue[] = {0x8F, 0xFF, 0xFF, 0xFF, 0x7F}; sl@0: sl@0: const TUint8 K7bitBoundaryLower[] = {0x7F}; sl@0: const TUint8 K7bitBoundaryUpper[] = {0x81, 0x00}; sl@0: sl@0: const TUint8 K14bitBoundaryLower[] = {0xFF, 0x7F}; sl@0: const TUint8 K14bitBoundaryUpper[] = {0x81, 0x80, 0x00}; sl@0: sl@0: const TUint8 K21bitBoundaryLower[] = {0xFF, 0xFF, 0x7F}; sl@0: const TUint8 K21bitBoundaryUpper[] = {0x81, 0x80, 0x80, 0x00}; sl@0: const TUint8 K28bitBoundaryLower[] = {0xFF, 0xFF, 0xFF, 0x7F}; sl@0: const TUint8 K28bitBoundaryUpper[] = {0x81, 0x80, 0x80, 0x80, 0x00}; sl@0: sl@0: input=0; sl@0: output = TWspPrimitiveEncoder::UintVarL(input); sl@0: CleanupStack::PushL(output); sl@0: buf.Copy(KMinValue, sizeof(KMinValue)); sl@0: if ((*output).CompareF(buf)!=0) sl@0: User::Leave(KErrGeneral); sl@0: CleanupStack::PopAndDestroy(output); sl@0: sl@0: input=0xFFFFFFFF; sl@0: output = TWspPrimitiveEncoder::UintVarL(input); sl@0: CleanupStack::PushL(output); sl@0: buf.Copy(KMaxValue, sizeof(KMaxValue)); sl@0: if ((*output).CompareF(buf)!=0) sl@0: User::Leave(KErrGeneral); sl@0: CleanupStack::PopAndDestroy(output); sl@0: sl@0: input=0x7F; sl@0: output = TWspPrimitiveEncoder::UintVarL(input); sl@0: CleanupStack::PushL(output); sl@0: buf.Copy(K7bitBoundaryLower, sizeof(K7bitBoundaryLower)); sl@0: if ((*output).CompareF(buf)!=0) sl@0: User::Leave(KErrGeneral); sl@0: CleanupStack::PopAndDestroy(output); sl@0: sl@0: input=0x80; sl@0: output = TWspPrimitiveEncoder::UintVarL(input); sl@0: CleanupStack::PushL(output); sl@0: buf.Copy(K7bitBoundaryUpper, sizeof(K7bitBoundaryUpper)); sl@0: if ((*output).CompareF(buf)!=0) sl@0: User::Leave(KErrGeneral); sl@0: CleanupStack::PopAndDestroy(output); sl@0: sl@0: input=0x3FFF; sl@0: output = TWspPrimitiveEncoder::UintVarL(input); sl@0: CleanupStack::PushL(output); sl@0: buf.Copy(K14bitBoundaryLower, sizeof(K14bitBoundaryLower)); sl@0: if ((*output).CompareF(buf)!=0) sl@0: User::Leave(KErrGeneral); sl@0: CleanupStack::PopAndDestroy(output); sl@0: sl@0: input=0x4000; sl@0: output = TWspPrimitiveEncoder::UintVarL(input); sl@0: CleanupStack::PushL(output); sl@0: buf.Copy(K14bitBoundaryUpper, sizeof(K14bitBoundaryUpper)); sl@0: if ((*output).CompareF(buf)!=0) sl@0: User::Leave(KErrGeneral); sl@0: CleanupStack::PopAndDestroy(output); sl@0: sl@0: input=0x1FFFFF; sl@0: output = TWspPrimitiveEncoder::UintVarL(input); sl@0: CleanupStack::PushL(output); sl@0: buf.Copy(K21bitBoundaryLower, sizeof(K21bitBoundaryLower)); sl@0: if ((*output).CompareF(buf)!=0) sl@0: User::Leave(KErrGeneral); sl@0: CleanupStack::PopAndDestroy(output); sl@0: sl@0: input=0x200000; sl@0: output = TWspPrimitiveEncoder::UintVarL(input); sl@0: CleanupStack::PushL(output); sl@0: buf.Copy(K21bitBoundaryUpper, sizeof(K21bitBoundaryUpper)); sl@0: if ((*output).CompareF(buf)!=0) sl@0: User::Leave(KErrGeneral); sl@0: CleanupStack::PopAndDestroy(output); sl@0: sl@0: input=0xFFFFFFF; sl@0: output = TWspPrimitiveEncoder::UintVarL(input); sl@0: CleanupStack::PushL(output); sl@0: buf.Copy(K28bitBoundaryLower, sizeof(K28bitBoundaryLower)); sl@0: if ((*output).CompareF(buf)!=0) sl@0: User::Leave(KErrGeneral); sl@0: CleanupStack::PopAndDestroy(output); sl@0: sl@0: input=0x10000000; sl@0: output = TWspPrimitiveEncoder::UintVarL(input); sl@0: CleanupStack::PushL(output); sl@0: buf.Copy(K28bitBoundaryUpper, sizeof(K28bitBoundaryUpper)); sl@0: if ((*output).CompareF(buf)!=0) sl@0: User::Leave(KErrGeneral); sl@0: CleanupStack::PopAndDestroy(output); sl@0: sl@0: } sl@0: sl@0: sl@0: void CWSPEncodeTest::StringTestL() sl@0: { sl@0: _LIT(KTestText, "WSP Encode: String"); sl@0: iTestHarness->StartTestL(KTestText); sl@0: TRAPD(error,TestStringL()); sl@0: iTestHarness->EndTest(error); sl@0: User::LeaveIfError(error); sl@0: } sl@0: sl@0: void CWSPEncodeTest::TestStringL() sl@0: { sl@0: TBuf8<255> buf; sl@0: sl@0: // Test 1. A regular string sl@0: const TUint8 KTestStringResult1[] = {'X','-','n','e','w','-','H','e','a','d','e','r','F','o','o',0x00}; sl@0: _LIT8(KTestString1,"X-new-HeaderFoo"); sl@0: sl@0: // Test 2. A quoted string sl@0: const TUint8 KTestStringResult2[] = {'\"','X','-','n','e','w','-','H','e','a','d','e','r','F','o','o',0x00}; sl@0: _LIT8(KTestString2,"\"X-new-HeaderFoo\""); sl@0: sl@0: // Test 3. A string beginning with an Upper-Ascii character sl@0: const TUint8 KTestStringResult3[] = {0x7F,0x80,'X','-','n','e','w','-','H','e','a','d','e','r','F','o','o',0x00}; sl@0: const TUint8 KTestString3[] = {0x80,'X','-','n','e','w','-','H','e','a','d','e','r','F','o','o'}; sl@0: sl@0: HBufC8* output = TWspPrimitiveEncoder::TextStringL(KTestString1); sl@0: CleanupStack::PushL(output); sl@0: buf.Copy(KTestStringResult1, sizeof(KTestStringResult1)); sl@0: if ((*output).CompareF(buf)!=0) sl@0: User::Leave(KErrGeneral); sl@0: CleanupStack::PopAndDestroy(output); sl@0: sl@0: sl@0: output = TWspPrimitiveEncoder::TextStringL(KTestString2); sl@0: CleanupStack::PushL(output); sl@0: buf.Copy(KTestStringResult2, sizeof(KTestStringResult2)); sl@0: if ((*output).CompareF(buf)!=0) sl@0: User::Leave(KErrGeneral); sl@0: CleanupStack::PopAndDestroy(output); sl@0: sl@0: buf.Copy(KTestString3, sizeof(KTestString3)); sl@0: output = TWspPrimitiveEncoder::TextStringL(buf); sl@0: CleanupStack::PushL(output); sl@0: buf.Copy(KTestStringResult3, sizeof(KTestStringResult3)); sl@0: if ((*output).CompareF(buf)!=0) sl@0: User::Leave(KErrGeneral); sl@0: CleanupStack::PopAndDestroy(output); sl@0: } sl@0: sl@0: sl@0: void CWSPEncodeTest::DateTestL() sl@0: { sl@0: _LIT(KTestText, "WSP Encode: Date"); sl@0: iTestHarness->StartTestL(KTestText); sl@0: TRAPD(error,TestDateL()); sl@0: iTestHarness->EndTest(error); sl@0: User::LeaveIfError(error); sl@0: } sl@0: sl@0: sl@0: void CWSPEncodeTest::TestDateL() sl@0: { sl@0: TBuf8<255> buf; sl@0: sl@0: const TUint8 KDate0[] = {0x01, 0x00}; sl@0: sl@0: TDateTime date(1970,EJanuary,0,0,0,0,0); sl@0: sl@0: HBufC8* output = TWspPrimitiveEncoder::DateL(date); sl@0: CleanupStack::PushL(output); sl@0: buf.Copy(KDate0, sizeof(KDate0)); sl@0: if((*output).CompareF(buf)!=0) sl@0: User::Leave(KErrGeneral); sl@0: CleanupStack::PopAndDestroy(output); sl@0: } sl@0: sl@0: