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 CWSPDecodeTest sl@0: // sl@0: // sl@0: sl@0: #include "cwspdecodetest.h" sl@0: #include sl@0: sl@0: sl@0: sl@0: CWSPDecodeTest* CWSPDecodeTest::NewLC(CIpuTestHarness* aTestHarness) sl@0: { sl@0: CWSPDecodeTest* self = new(ELeave)CWSPDecodeTest(aTestHarness); sl@0: CleanupStack::PushL(self); sl@0: return self; sl@0: } sl@0: sl@0: sl@0: CWSPDecodeTest::CWSPDecodeTest(CIpuTestHarness* aTestHarness): sl@0: iTestHarness(aTestHarness) sl@0: {} sl@0: sl@0: CWSPDecodeTest::~CWSPDecodeTest() sl@0: {} sl@0: sl@0: void CWSPDecodeTest::DoTestsL() sl@0: { sl@0: VarTypesTestL(); sl@0: LengthValsTestL(); sl@0: StringTestL(); sl@0: TokensTestL(); sl@0: IntegersTestL(); sl@0: LongIntTestL(); sl@0: UintVarsTestL(); sl@0: VersionTestL(); sl@0: DateTestL(); sl@0: SegmenterTestL(); sl@0: } sl@0: sl@0: sl@0: //* VarTypes */ sl@0: sl@0: TBool CWSPDecodeTest::VarType(TPtrC8 aBuf, TWspPrimitiveDecoder::TWspHeaderType aShouldBeType) sl@0: { sl@0: TWspPrimitiveDecoder dec(aBuf); sl@0: TWspPrimitiveDecoder::TWspHeaderType type=dec.VarType(); sl@0: sl@0: TBool bSuccess = EFalse; sl@0: if (type == aShouldBeType) sl@0: bSuccess = ETrue; sl@0: sl@0: TBuf8<25> typeStr; sl@0: switch (aShouldBeType) sl@0: { sl@0: case TWspPrimitiveDecoder::ENotSet: sl@0: typeStr.Copy(_L("ENotSet")); sl@0: break; sl@0: case TWspPrimitiveDecoder::ELengthVal: sl@0: typeStr.Copy(_L("ELengthVal")); sl@0: break; sl@0: case TWspPrimitiveDecoder::EQuotedString: sl@0: typeStr.Copy(_L("EQuotedString")); sl@0: break; sl@0: case TWspPrimitiveDecoder::EString: sl@0: typeStr.Copy(_L("EString")); sl@0: break; sl@0: case TWspPrimitiveDecoder::E7BitVal: sl@0: typeStr.Copy(_L("E7BitVal")); sl@0: break; sl@0: } sl@0: return bSuccess; sl@0: } sl@0: sl@0: sl@0: void CWSPDecodeTest::VarTypesTestL() sl@0: { sl@0: _LIT(KTestText, "WSP Decode: VarTypes"); sl@0: iTestHarness->StartTestL(KTestText); sl@0: TRAPD(error, TestVarTypesL()); sl@0: iTestHarness->EndTest(error); sl@0: User::LeaveIfError(error); sl@0: } sl@0: sl@0: void CWSPDecodeTest::TestVarTypesL() sl@0: { sl@0: const TUint8 KToken[] = {0x81}; sl@0: const TUint8 KString1[] = {'a', 'b', 'c', 0x00}; sl@0: const TUint8 KString2[] = {0x33}; sl@0: const TUint8 KLen0[] = {0x00}; sl@0: const TUint8 KLen1[] = {0x01}; sl@0: const TUint8 KLen2[] = {0x1F}; sl@0: sl@0: TBuf8<255> buf; sl@0: buf.Copy(KToken, sizeof(KToken)); sl@0: if (!VarType(buf, TWspPrimitiveDecoder::E7BitVal)) sl@0: User::Leave(KErrGeneral); sl@0: sl@0: buf.Copy(KString1, sizeof(KString1)); sl@0: if (!VarType(buf, TWspPrimitiveDecoder::EString)) sl@0: User::Leave(KErrGeneral); sl@0: sl@0: buf.Copy(KString2, sizeof(KString2)); sl@0: if (!VarType(buf, TWspPrimitiveDecoder::EString)) sl@0: User::Leave(KErrGeneral); sl@0: sl@0: buf.Copy(KLen0, sizeof(KLen0)); sl@0: if (!VarType(buf, TWspPrimitiveDecoder::ELengthVal)) sl@0: User::Leave(KErrGeneral); sl@0: sl@0: buf.Copy(KLen1, sizeof(KLen1)); sl@0: if (!VarType(buf, TWspPrimitiveDecoder::ELengthVal)) sl@0: User::Leave(KErrGeneral); sl@0: sl@0: buf.Copy(KLen2, sizeof(KLen2)); sl@0: if (!VarType(buf, TWspPrimitiveDecoder::ELengthVal)) sl@0: User::Leave(KErrGeneral); sl@0: } sl@0: sl@0: sl@0: sl@0: sl@0: //* LenVal */ sl@0: sl@0: TBool CWSPDecodeTest::LenVal(TPtrC8 aBuf, TInt aShouldBeVal) sl@0: { sl@0: TBool success = EFalse; sl@0: TWspPrimitiveDecoder dec(aBuf); sl@0: TInt len; sl@0: success = dec.LengthVal(len); sl@0: if (success == KErrCorrupt) sl@0: return ETrue; sl@0: sl@0: return len == aShouldBeVal && !(success < KErrNone); sl@0: } sl@0: sl@0: sl@0: void CWSPDecodeTest::LengthValsTestL() sl@0: { sl@0: _LIT(KTestText, "WSP Decode: LengthVals"); sl@0: iTestHarness->StartTestL(KTestText); sl@0: TRAPD(error, TestLengthValsL()); sl@0: iTestHarness->EndTest(error); sl@0: User::LeaveIfError(error); sl@0: } sl@0: sl@0: void CWSPDecodeTest::TestLengthValsL() sl@0: { sl@0: const TUint8 KLen0[] = {0x00}; sl@0: const TUint8 KLen1[] = {0x01}; sl@0: const TUint8 KLen26[] = {0x1A}; sl@0: const TUint8 KLenUintVAR17680[] = {0x1F, 0x81,0x8A,0x10}; sl@0: const TUint8 KLenUintVARCorrupt[] = {0x1F, 0x81,0x8A,0x80}; sl@0: sl@0: sl@0: TBuf8<255> buf; sl@0: buf.Copy(KLen0, sizeof(KLen0)); sl@0: if (!LenVal(buf, 0)) sl@0: User::Leave(KErrGeneral); sl@0: sl@0: buf.Copy(KLen1, sizeof(KLen1)); sl@0: if (!LenVal(buf, 1)) sl@0: User::Leave(KErrGeneral); sl@0: sl@0: buf.Copy(KLen26, sizeof(KLen26)); sl@0: if (!LenVal(buf, 0x1A)) sl@0: User::Leave(KErrGeneral); sl@0: sl@0: buf.Copy(KLenUintVAR17680, sizeof(KLenUintVAR17680)); sl@0: if (!LenVal(buf, 17680)) sl@0: User::Leave(KErrGeneral); sl@0: sl@0: buf.Copy(KLenUintVARCorrupt, sizeof(KLenUintVARCorrupt)); sl@0: if (!LenVal(buf, -1)) sl@0: User::Leave(KErrGeneral); sl@0: sl@0: } sl@0: sl@0: sl@0: sl@0: //* String */ sl@0: sl@0: TBool CWSPDecodeTest::String(TPtrC8 aBuf, TPtrC8 aShouldBe, TInt /*aErr*/) sl@0: { sl@0: TBool success = EFalse; sl@0: TWspPrimitiveDecoder dec(aBuf); sl@0: sl@0: TPtrC8 str; sl@0: success = dec.String(str); sl@0: if (success < KErrNone) sl@0: return success; sl@0: sl@0: sl@0: if (str != aShouldBe) sl@0: success = EFalse; sl@0: sl@0: // Copy to 16 bits sl@0: return success; sl@0: } sl@0: sl@0: sl@0: sl@0: void CWSPDecodeTest::StringTestL() sl@0: { sl@0: _LIT(KTestText, "WSP Decode: 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: sl@0: void CWSPDecodeTest::TestStringL() sl@0: { sl@0: const TUint8 KStringHello[] = {'H','e','l','l','o',0x00}; sl@0: const TUint8 KStringEmpty[] = {0x00}; sl@0: const TUint8 KStringNotAString[] = {0x1A}; sl@0: const TUint8 KStringCorruptNoZero[] = {'H','e','l','l','o'}; sl@0: const TUint8 KStringbye[] = {'b','y','e',0x00}; sl@0: sl@0: TBuf8<255> buf; sl@0: sl@0: buf.Copy(KStringHello, sizeof(KStringHello)); sl@0: if (!String(buf, _L8("Hello"))) sl@0: User::Leave(KErrGeneral); sl@0: sl@0: buf.Copy(KStringEmpty, sizeof(KStringEmpty)); sl@0: if (!String(buf, _L8(""),KErrCorrupt)) sl@0: User::Leave(KErrGeneral); sl@0: sl@0: buf.Copy(KStringNotAString, sizeof(KStringNotAString)); sl@0: if (!String(buf, _L8(""), KErrCorrupt)) sl@0: User::Leave(KErrGeneral); sl@0: sl@0: buf.Copy(KStringCorruptNoZero, sizeof(KStringCorruptNoZero)); sl@0: if (!String(buf, _L8(""), KErrCorrupt)) sl@0: User::Leave(KErrGeneral); sl@0: sl@0: buf.Copy(KStringbye, sizeof(KStringbye)); sl@0: if (!String(buf, _L8("bye"))) sl@0: User::Leave(KErrGeneral); sl@0: } sl@0: sl@0: //* Tokens */ sl@0: sl@0: TBool CWSPDecodeTest::Token(TPtrC8 aBuf, TUint8 aShouldBe, TInt aErr) sl@0: { sl@0: TInt success; sl@0: TWspPrimitiveDecoder dec(aBuf); sl@0: sl@0: TUint8 val; sl@0: success = dec.Val7Bit(val); sl@0: if (success < KErrNone && success == aErr) sl@0: return ETrue; sl@0: sl@0: return val == aShouldBe; sl@0: } sl@0: sl@0: void CWSPDecodeTest::TokensTestL() sl@0: { sl@0: _LIT(KTestText, "WSP Decode: Tokens"); sl@0: iTestHarness->StartTestL(KTestText); sl@0: TRAPD(error, TestTokensL()); sl@0: iTestHarness->EndTest(error); sl@0: User::LeaveIfError(error); sl@0: } sl@0: sl@0: sl@0: void CWSPDecodeTest::TestTokensL() sl@0: { sl@0: const TUint8 KToken0[] = {0x80}; sl@0: const TUint8 KToken1[] = {0x81}; sl@0: const TUint8 KToken1A[] = {0x9A}; sl@0: const TUint8 KToken38[] = {0xB8}; sl@0: const TUint8 KTokenCorruptLen[] = {0x01}; sl@0: TBuf8<255> buf; sl@0: sl@0: buf.Copy(KToken0, sizeof(KToken0)); sl@0: if (!Token(buf, 0)) sl@0: User::Leave(KErrGeneral); sl@0: sl@0: buf.Copy(KToken1, sizeof(KToken1)); sl@0: if (!Token(buf, 1)) sl@0: User::Leave(KErrGeneral); sl@0: sl@0: buf.Copy(KToken1A, sizeof(KToken1A)); sl@0: if (!Token(buf, 0x1A)) sl@0: User::Leave(KErrGeneral); sl@0: sl@0: buf.Copy(KToken38, sizeof(KToken38)); sl@0: if (!Token(buf, 0x38)) sl@0: User::Leave(KErrGeneral); sl@0: sl@0: buf.Copy(KTokenCorruptLen, sizeof(KTokenCorruptLen)); sl@0: if (!Token(buf, 1)) sl@0: User::Leave(KErrGeneral); sl@0: } sl@0: sl@0: sl@0: //* Integers */ sl@0: sl@0: TBool CWSPDecodeTest::Integer(TPtrC8 aBuf, TUint32 aShouldBe, TInt aErr) sl@0: { sl@0: TInt success; sl@0: TWspPrimitiveDecoder dec(aBuf); sl@0: TUint32 val; sl@0: success = dec.Integer(val); sl@0: if (success < KErrNone && success == aErr) sl@0: return success; sl@0: return val == aShouldBe; sl@0: } sl@0: sl@0: sl@0: sl@0: void CWSPDecodeTest::IntegersTestL() sl@0: { sl@0: _LIT(KTestText, "WSP Decode: Integers"); sl@0: iTestHarness->StartTestL(KTestText); sl@0: TRAPD(error, TestIntegersL()); sl@0: iTestHarness->EndTest(error); sl@0: User::LeaveIfError(error); sl@0: } sl@0: sl@0: sl@0: void CWSPDecodeTest::TestIntegersL() sl@0: { sl@0: const TUint8 KInt0[] = {0x80}; sl@0: const TUint8 KInt1[] = {0x81}; sl@0: const TUint8 KIntA[] = {0x8A}; sl@0: const TUint8 KInt38[] = {0xB8}; sl@0: const TUint8 KIntLong4321[] = {0x02, 0x43,0x21}; sl@0: const TUint8 KIntLongABCDEF[] = {0x03, 0xAB,0xCD,0xEF}; sl@0: const TUint8 KIntCorrupt[] = {0x01}; sl@0: TBuf8<255> buf; sl@0: sl@0: buf.Copy(KInt0, sizeof(KInt0)); sl@0: if (!Integer(buf, 0)) sl@0: User::Leave(KErrGeneral); sl@0: sl@0: buf.Copy(KInt1, sizeof(KIntA)); sl@0: if (!Integer(buf, 1)) sl@0: User::Leave(KErrGeneral); sl@0: sl@0: buf.Copy(KIntA, sizeof(KIntA)); sl@0: if (!Integer(buf, 0x0A)) sl@0: User::Leave(KErrGeneral); sl@0: sl@0: buf.Copy(KInt38, sizeof(KInt38)); sl@0: if (!Integer(buf, 0x38)) sl@0: User::Leave(KErrGeneral); sl@0: sl@0: buf.Copy(KIntLong4321, sizeof(KIntLong4321)); sl@0: if (!Integer(buf, 0x4321)) sl@0: User::Leave(KErrGeneral); sl@0: sl@0: buf.Copy(KIntLongABCDEF, sizeof(KIntLongABCDEF)); sl@0: if (!Integer(buf, 0xABCDEF)) sl@0: User::Leave(KErrGeneral); sl@0: sl@0: buf.Copy(KIntCorrupt, sizeof(KIntCorrupt)); sl@0: if (!Integer(buf,0, KErrCorrupt)) sl@0: User::Leave(KErrGeneral); sl@0: } sl@0: sl@0: //* LongInt */ sl@0: sl@0: TBool CWSPDecodeTest::LongInt(TPtrC8 aBuf, TUint32 aShouldBe, TInt aErr) sl@0: { sl@0: TInt success; sl@0: TWspPrimitiveDecoder dec(aBuf); sl@0: sl@0: TUint32 val; sl@0: success = dec.LongInt(val); sl@0: if (success < KErrNone && success == aErr) sl@0: return ETrue; sl@0: return val == aShouldBe; sl@0: } sl@0: sl@0: sl@0: sl@0: void CWSPDecodeTest::LongIntTestL() sl@0: { sl@0: _LIT(KTestText, "WSP Decode: 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: sl@0: sl@0: void CWSPDecodeTest::TestLongIntL() sl@0: { sl@0: const TUint8 KIntLong0[] = {0x01, 0x00}; sl@0: const TUint8 KIntLong4321[] = {0x02, 0x43,0x21}; sl@0: const TUint8 KIntLongABCDEF[] = {0x03, 0xAB,0xCD,0xEF}; sl@0: const TUint8 KIntLongABCDEF112233[] = {0x06, 0xAB,0xCD,0xEF, 0x11,0x22,0x33}; sl@0: const TUint8 KIntTooLong110009ABCDEF112233[] = {0x0A, 0x11,0x00, 0x09, 0xAB,0xCD,0xEF, 0x11,0x22,0x33}; sl@0: const TUint8 KIntCorrupt[] = {0x01}; sl@0: TBuf8<255> buf; sl@0: buf.Copy(KIntLong0, sizeof(KIntLong0)); sl@0: if (!LongInt(buf, 0)) sl@0: User::Leave(KErrGeneral); sl@0: sl@0: buf.Copy(KIntLong4321, sizeof(KIntLong4321)); sl@0: if (!LongInt(buf, 0x4321)) sl@0: User::Leave(KErrGeneral); sl@0: sl@0: buf.Copy(KIntLongABCDEF, sizeof(KIntLongABCDEF)); sl@0: if (!LongInt(buf, 0xABCDEF)) sl@0: User::Leave(KErrGeneral); sl@0: sl@0: buf.Copy(KIntLongABCDEF112233, sizeof(KIntLongABCDEF112233)); sl@0: if (!LongInt(buf, 0xEF112233)) sl@0: User::Leave(KErrGeneral); sl@0: sl@0: buf.Copy(KIntTooLong110009ABCDEF112233, sizeof(KIntTooLong110009ABCDEF112233)); sl@0: if (!LongInt(buf, 0x09ABCDEF, KErrCorrupt)) sl@0: User::Leave(KErrGeneral); sl@0: sl@0: buf.Copy(KIntCorrupt, sizeof(KIntCorrupt)); sl@0: if (!LongInt(buf, 0, KErrCorrupt)) sl@0: User::Leave(KErrGeneral); sl@0: } sl@0: sl@0: sl@0: sl@0: //* UintVar */ sl@0: sl@0: TBool CWSPDecodeTest::UintVar(TPtrC8 aBuf, TUint32 aShouldBe, TInt aErr) sl@0: { sl@0: TInt success; sl@0: TWspPrimitiveDecoder dec(aBuf); sl@0: TUint32 val; sl@0: success = dec.UintVar(val); sl@0: if (success < KErrNone && success == aErr) sl@0: return ETrue; sl@0: return val == aShouldBe; sl@0: } sl@0: sl@0: sl@0: void CWSPDecodeTest::UintVarsTestL() sl@0: { sl@0: _LIT(KTestText, "WSP Decode: UintVars"); sl@0: iTestHarness->StartTestL(KTestText); sl@0: TRAPD(error, TestUintVarsL()); sl@0: iTestHarness->EndTest(error); sl@0: User::LeaveIfError(error); sl@0: } sl@0: sl@0: sl@0: void CWSPDecodeTest::TestUintVarsL() sl@0: { sl@0: const TUint8 KUint0[] = {0x00}; sl@0: const TUint8 KUint1[] = {0x01}; sl@0: const TUint8 KUintA[] = {0x80,0x0A}; sl@0: const TUint8 KUintFA[] = {0x81,0x7A}; sl@0: const TUint8 KLenUintVAR4510[] = {0x81, 0x8A, 0x10}; sl@0: const TUint8 KLenUintVARCorrupt[] = {0x8F, 0x81,0x8A,0x80,0x88}; sl@0: const TUint8 KIntLongACorrupt[] = {0xF3, 0xAB,0xCD,0xEF}; sl@0: sl@0: sl@0: TBuf8<255> buf; sl@0: sl@0: buf.Copy(KUint0, sizeof(KUint0)); sl@0: if (!UintVar(buf, 0)) sl@0: User::Leave(KErrGeneral); sl@0: sl@0: buf.Copy(KUint1, sizeof(KUint1)); sl@0: if (!UintVar(buf, 1)) sl@0: User::Leave(KErrGeneral); sl@0: sl@0: buf.Copy(KUintA, sizeof(KUintA)); sl@0: if (!UintVar(buf, 0x0A)) sl@0: User::Leave(KErrGeneral); sl@0: sl@0: buf.Copy(KUintFA, sizeof(KUintFA)); sl@0: if (!UintVar(buf, 0xFA)) sl@0: User::Leave(KErrGeneral); sl@0: sl@0: buf.Copy(KLenUintVAR4510, sizeof(KLenUintVAR4510)); sl@0: if (!UintVar(buf, 0x4510)) sl@0: User::Leave(KErrGeneral); sl@0: sl@0: buf.Copy(KLenUintVARCorrupt, sizeof(KLenUintVARCorrupt)); sl@0: if (!UintVar(buf, 0, KErrCorrupt)) sl@0: User::Leave(KErrGeneral); sl@0: sl@0: buf.Copy(KIntLongACorrupt, sizeof(KIntLongACorrupt)); sl@0: if (!UintVar(buf, 0, KErrCorrupt)) sl@0: User::Leave(KErrGeneral); sl@0: } sl@0: sl@0: sl@0: sl@0: sl@0: //* VersionL */ sl@0: sl@0: TBool CWSPDecodeTest::VersionL(RStringPool aPool, TPtrC8 aBuf, TPtrC8 aShouldBe, TInt aErr) sl@0: { sl@0: TInt success; sl@0: TWspPrimitiveDecoder dec(aBuf); sl@0: TBool retVal = EFalse; sl@0: RStringF val; sl@0: success = dec.VersionL(aPool,val); sl@0: CleanupClosePushL(val); sl@0: if (success < KErrNone && success == aErr) sl@0: retVal = ETrue; sl@0: else sl@0: { sl@0: RStringF should = aPool.OpenFStringL(aShouldBe); sl@0: retVal = val == should; sl@0: should.Close(); sl@0: } sl@0: CleanupStack::PopAndDestroy(&val); sl@0: return retVal; sl@0: } sl@0: sl@0: void CWSPDecodeTest::VersionTestL() sl@0: { sl@0: _LIT(KTestText, "WSP Decode: Version"); sl@0: iTestHarness->StartTestL(KTestText); sl@0: TRAPD(error, TestVersionL()); sl@0: iTestHarness->EndTest(error); sl@0: User::LeaveIfError(error); sl@0: } sl@0: sl@0: void CWSPDecodeTest::TestVersionL() sl@0: { sl@0: RStringPool pool; sl@0: pool.OpenL(); sl@0: CleanupClosePushL(pool); sl@0: const TUint8 KVersion1[] = {0x9F}; sl@0: const TUint8 KVersion11[] = {0x91}; sl@0: const TUint8 KVersion610[] = {0xEA}; sl@0: const TUint8 KVersion73[] = {0xF3}; sl@0: const TUint8 KVersion00[] = {0x80}; sl@0: const TUint8 KVersionStr[] = {'1','.','9','9',0x00}; sl@0: TBuf8<255> buf; sl@0: sl@0: buf.Copy(KVersion1, sizeof(KVersion1)); sl@0: if (!VersionL(pool, buf, _L8("1"))) sl@0: User::Leave(KErrGeneral); sl@0: sl@0: buf.Copy(KVersion11, sizeof(KVersion11)); sl@0: if (!VersionL(pool, buf, _L8("1.1"))) sl@0: User::Leave(KErrGeneral); sl@0: sl@0: buf.Copy(KVersion610, sizeof(KVersion610)); sl@0: if (!VersionL(pool, buf, _L8("6.10"))) sl@0: User::Leave(KErrGeneral); sl@0: sl@0: buf.Copy(KVersion73, sizeof(KVersion73)); sl@0: if (!VersionL(pool, buf, _L8("7.3"))) sl@0: User::Leave(KErrGeneral); sl@0: sl@0: buf.Copy(KVersion00, sizeof(KVersion00)); sl@0: if (!VersionL(pool, buf, _L8("0.0"))) sl@0: User::Leave(KErrGeneral); sl@0: sl@0: buf.Copy(KVersionStr, sizeof(KVersionStr)); sl@0: if (!VersionL(pool, buf, _L8("1.99"))) sl@0: User::Leave(KErrGeneral); sl@0: sl@0: CleanupStack::PopAndDestroy(&pool); sl@0: } sl@0: sl@0: sl@0: //* Date */ sl@0: sl@0: TBool CWSPDecodeTest::Date(TPtrC8 aBuf, TTime aShouldBe, TInt aErr) sl@0: { sl@0: TInt success; sl@0: TWspPrimitiveDecoder dec(aBuf); sl@0: TDateTime val; sl@0: success = dec.Date(val); sl@0: if (success < KErrNone && success == aErr) sl@0: return ETrue; sl@0: sl@0: TTime time(val); sl@0: return time == aShouldBe; sl@0: } sl@0: sl@0: sl@0: void CWSPDecodeTest::DateTestL() sl@0: { sl@0: _LIT(KTestText, "WSP Decode: 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 CWSPDecodeTest::TestDateL() sl@0: { sl@0: // 1 long, value 0 sl@0: const TUint8 KDate0[] = {0x01, 0x00}; sl@0: const TUint8 KDateAprl132001[] = {0x04,0x3A,0xD6,0x41,0x80}; sl@0: const TUint8 KDateDec132003[] = {0x04,0x3F,0xE2,0x8D,0x84}; sl@0: TBuf8<255> buf; sl@0: TDateTime dt(1970,EJanuary,0,0,0,0,0); sl@0: TTime time1(dt); sl@0: buf.Copy(KDate0, sizeof(KDate0)); sl@0: if (!Date(buf, time1)) sl@0: User::Leave(KErrGeneral); sl@0: sl@0: TTime time2(dt); sl@0: time2 += TTimeIntervalSeconds(0x3AD64180); sl@0: buf.Copy(KDateAprl132001, sizeof(KDateAprl132001)); sl@0: if (!Date(buf, time2)) sl@0: User::Leave(KErrGeneral); sl@0: sl@0: TTime time3(dt); sl@0: time3 += TTimeIntervalSeconds(0x3FE28D84); sl@0: buf.Copy(KDateDec132003, sizeof(KDateDec132003)); sl@0: if (!Date(buf, time3)) sl@0: User::Leave(KErrGeneral); sl@0: } sl@0: sl@0: sl@0: TInt CWSPDecodeTest::SegmenterCommonL(RStringPool aPool, TPtrC8 aHdr) sl@0: { sl@0: TInt err; sl@0: TWspField fld; sl@0: sl@0: // Pre-condition to create WSP header segment: Open the string pool sl@0: // with the string table. Else program will raise a panic stringtable:4 sl@0: // ( EStringTableNotFound ) sl@0: aPool.OpenL ( WSPDummy::Table ); sl@0: TWspHeaderSegmenter segger(aPool, WSPDummy::Table, aHdr); sl@0: sl@0: while ((err = segger.NextL(fld)) == KErrNone) sl@0: { sl@0: fld.iHdrName.Close(); sl@0: } sl@0: return err; sl@0: } sl@0: sl@0: TBool CWSPDecodeTest::SegmenterL(RStringPool aPool, TPtrC8 aHdr) sl@0: { sl@0: TInt err = SegmenterCommonL(aPool,aHdr); sl@0: if (err != KErrNotFound) sl@0: return EFalse; sl@0: return ETrue; sl@0: } sl@0: sl@0: TBool CWSPDecodeTest::SegmenterExpectCorruptL(RStringPool aPool, TPtrC8 aHdr) sl@0: { sl@0: TInt err = SegmenterCommonL(aPool,aHdr); sl@0: if (err != KErrCorrupt) sl@0: return EFalse; sl@0: return ETrue; sl@0: } sl@0: sl@0: void CWSPDecodeTest::SegmenterTestL() sl@0: { sl@0: _LIT(KTestText, "WSP Decode: Segmenter"); sl@0: iTestHarness->StartTestL(KTestText); sl@0: TRAPD(error, TestSegmenterL()); sl@0: iTestHarness->EndTest(error); sl@0: User::LeaveIfError(error); sl@0: } sl@0: sl@0: sl@0: void CWSPDecodeTest::TestSegmenterL() sl@0: { sl@0: TBuf8<255> buf; sl@0: RStringPool pool; sl@0: pool.OpenL(); sl@0: CleanupClosePushL(pool); sl@0: sl@0: // Test Headers sl@0: const TUint8 KAcceptAppVndWMLC[] = {0x80, 0x94}; sl@0: const TUint8 KAcceptLanEngQ07[] = {0x82, 0x02, 0x99, 0x47}; sl@0: const TUint8 KAcceptLanENSV[] = {0x82, 0x02, 0x83, 0xF0}; sl@0: const TUint8 KDateThu23Apr1998134127GMT[] = {0x92, 0x04, 0x35, 0x3f, 0x45, 0x11}; sl@0: const TUint8 KContentRangeBytes0499[] = {0x90, 0x03, 0x00, 0x88, 0x01}; sl@0: const TUint8 KAcceptRangeNewRangeUnit[] = {0x84, 'n','e','w','-','r','a','n','g','e','-','u','n','i','t',0x00}; sl@0: const TUint8 KXNewHdrFoo[] = {'X','-','n','e','w','-','H','e','a','d','e','r',0x00,'F','o','o',0x00}; sl@0: const TUint8 KTwo[] = {0x80, 0x94, 0x81, 0x93}; sl@0: sl@0: const TUint8 KCorrupt1[] = {0x82}; sl@0: buf.Copy(KCorrupt1, sizeof(KCorrupt1)); sl@0: if (!SegmenterExpectCorruptL(pool, buf)) sl@0: User::Leave(KErrGeneral); sl@0: sl@0: const TUint8 KCorrupt2[] = {0x82, 0x02}; sl@0: buf.Copy(KCorrupt2, sizeof(KCorrupt2)); sl@0: if (!SegmenterExpectCorruptL(pool, buf)) sl@0: User::Leave(KErrGeneral); sl@0: sl@0: buf.Copy(KAcceptAppVndWMLC, sizeof(KAcceptAppVndWMLC)); sl@0: if (!SegmenterL(pool, buf)) sl@0: User::Leave(KErrGeneral); sl@0: sl@0: buf.Copy(KAcceptLanEngQ07, sizeof(KAcceptLanEngQ07)); sl@0: if (!SegmenterL(pool, buf)) sl@0: User::Leave(KErrGeneral); sl@0: sl@0: buf.Copy(KAcceptLanENSV, sizeof(KAcceptLanENSV)); sl@0: if (!SegmenterL(pool, buf)) sl@0: User::Leave(KErrGeneral); sl@0: sl@0: buf.Copy(KDateThu23Apr1998134127GMT, sizeof(KDateThu23Apr1998134127GMT)); sl@0: if (!SegmenterL(pool, buf)) sl@0: User::Leave(KErrGeneral); sl@0: sl@0: buf.Copy(KContentRangeBytes0499, sizeof(KContentRangeBytes0499)); sl@0: if (!SegmenterL(pool, buf)) sl@0: User::Leave(KErrGeneral); sl@0: sl@0: buf.Copy(KAcceptRangeNewRangeUnit, sizeof(KAcceptRangeNewRangeUnit)); sl@0: if (!SegmenterL(pool, buf)) sl@0: User::Leave(KErrGeneral); sl@0: sl@0: buf.Copy(KXNewHdrFoo, sizeof(KXNewHdrFoo)); sl@0: if (!SegmenterL(pool, buf)) sl@0: User::Leave(KErrGeneral); sl@0: sl@0: buf.Copy(KTwo, sizeof(KTwo)); sl@0: if (!SegmenterL(pool, buf)) sl@0: User::Leave(KErrGeneral); sl@0: sl@0: CleanupStack::PopAndDestroy(&pool); sl@0: } sl@0: sl@0: /* sl@0: sl@0: void CWSPDecodeTest::XXXTestL() sl@0: { sl@0: _LIT(KTestText, "WSP Decode: XXX"); sl@0: iTestHarness->StartTestL(KTestText); sl@0: TRAPD(error, TestXXXL()); sl@0: iTestHarness->EndTest(error); sl@0: User::LeaveIfError(error); sl@0: } sl@0: sl@0: sl@0: */