First public contribution.
1 // Copyright (c) 2002-2009 Nokia Corporation and/or its subsidiary(-ies).
2 // All rights reserved.
3 // This component and the accompanying materials are made available
4 // under the terms of "Eclipse Public License v1.0"
5 // which accompanies this distribution, and is available
6 // at the URL "http://www.eclipse.org/legal/epl-v10.html".
8 // Initial Contributors:
9 // Nokia Corporation - initial contribution.
14 // Implementation of test CWSPDecodeTest
18 #include "cwspdecodetest.h"
19 #include <wspdummyconstants.h>
23 CWSPDecodeTest* CWSPDecodeTest::NewLC(CIpuTestHarness* aTestHarness)
25 CWSPDecodeTest* self = new(ELeave)CWSPDecodeTest(aTestHarness);
26 CleanupStack::PushL(self);
31 CWSPDecodeTest::CWSPDecodeTest(CIpuTestHarness* aTestHarness):
32 iTestHarness(aTestHarness)
35 CWSPDecodeTest::~CWSPDecodeTest()
38 void CWSPDecodeTest::DoTestsL()
55 TBool CWSPDecodeTest::VarType(TPtrC8 aBuf, TWspPrimitiveDecoder::TWspHeaderType aShouldBeType)
57 TWspPrimitiveDecoder dec(aBuf);
58 TWspPrimitiveDecoder::TWspHeaderType type=dec.VarType();
60 TBool bSuccess = EFalse;
61 if (type == aShouldBeType)
65 switch (aShouldBeType)
67 case TWspPrimitiveDecoder::ENotSet:
68 typeStr.Copy(_L("ENotSet"));
70 case TWspPrimitiveDecoder::ELengthVal:
71 typeStr.Copy(_L("ELengthVal"));
73 case TWspPrimitiveDecoder::EQuotedString:
74 typeStr.Copy(_L("EQuotedString"));
76 case TWspPrimitiveDecoder::EString:
77 typeStr.Copy(_L("EString"));
79 case TWspPrimitiveDecoder::E7BitVal:
80 typeStr.Copy(_L("E7BitVal"));
87 void CWSPDecodeTest::VarTypesTestL()
89 _LIT(KTestText, "WSP Decode: VarTypes");
90 iTestHarness->StartTestL(KTestText);
91 TRAPD(error, TestVarTypesL());
92 iTestHarness->EndTest(error);
93 User::LeaveIfError(error);
96 void CWSPDecodeTest::TestVarTypesL()
98 const TUint8 KToken[] = {0x81};
99 const TUint8 KString1[] = {'a', 'b', 'c', 0x00};
100 const TUint8 KString2[] = {0x33};
101 const TUint8 KLen0[] = {0x00};
102 const TUint8 KLen1[] = {0x01};
103 const TUint8 KLen2[] = {0x1F};
106 buf.Copy(KToken, sizeof(KToken));
107 if (!VarType(buf, TWspPrimitiveDecoder::E7BitVal))
108 User::Leave(KErrGeneral);
110 buf.Copy(KString1, sizeof(KString1));
111 if (!VarType(buf, TWspPrimitiveDecoder::EString))
112 User::Leave(KErrGeneral);
114 buf.Copy(KString2, sizeof(KString2));
115 if (!VarType(buf, TWspPrimitiveDecoder::EString))
116 User::Leave(KErrGeneral);
118 buf.Copy(KLen0, sizeof(KLen0));
119 if (!VarType(buf, TWspPrimitiveDecoder::ELengthVal))
120 User::Leave(KErrGeneral);
122 buf.Copy(KLen1, sizeof(KLen1));
123 if (!VarType(buf, TWspPrimitiveDecoder::ELengthVal))
124 User::Leave(KErrGeneral);
126 buf.Copy(KLen2, sizeof(KLen2));
127 if (!VarType(buf, TWspPrimitiveDecoder::ELengthVal))
128 User::Leave(KErrGeneral);
136 TBool CWSPDecodeTest::LenVal(TPtrC8 aBuf, TInt aShouldBeVal)
138 TBool success = EFalse;
139 TWspPrimitiveDecoder dec(aBuf);
141 success = dec.LengthVal(len);
142 if (success == KErrCorrupt)
145 return len == aShouldBeVal && !(success < KErrNone);
149 void CWSPDecodeTest::LengthValsTestL()
151 _LIT(KTestText, "WSP Decode: LengthVals");
152 iTestHarness->StartTestL(KTestText);
153 TRAPD(error, TestLengthValsL());
154 iTestHarness->EndTest(error);
155 User::LeaveIfError(error);
158 void CWSPDecodeTest::TestLengthValsL()
160 const TUint8 KLen0[] = {0x00};
161 const TUint8 KLen1[] = {0x01};
162 const TUint8 KLen26[] = {0x1A};
163 const TUint8 KLenUintVAR17680[] = {0x1F, 0x81,0x8A,0x10};
164 const TUint8 KLenUintVARCorrupt[] = {0x1F, 0x81,0x8A,0x80};
168 buf.Copy(KLen0, sizeof(KLen0));
170 User::Leave(KErrGeneral);
172 buf.Copy(KLen1, sizeof(KLen1));
174 User::Leave(KErrGeneral);
176 buf.Copy(KLen26, sizeof(KLen26));
177 if (!LenVal(buf, 0x1A))
178 User::Leave(KErrGeneral);
180 buf.Copy(KLenUintVAR17680, sizeof(KLenUintVAR17680));
181 if (!LenVal(buf, 17680))
182 User::Leave(KErrGeneral);
184 buf.Copy(KLenUintVARCorrupt, sizeof(KLenUintVARCorrupt));
185 if (!LenVal(buf, -1))
186 User::Leave(KErrGeneral);
194 TBool CWSPDecodeTest::String(TPtrC8 aBuf, TPtrC8 aShouldBe, TInt /*aErr*/)
196 TBool success = EFalse;
197 TWspPrimitiveDecoder dec(aBuf);
200 success = dec.String(str);
201 if (success < KErrNone)
205 if (str != aShouldBe)
214 void CWSPDecodeTest::StringTestL()
216 _LIT(KTestText, "WSP Decode: String");
217 iTestHarness->StartTestL(KTestText);
218 TRAPD(error, TestStringL());
219 iTestHarness->EndTest(error);
220 User::LeaveIfError(error);
224 void CWSPDecodeTest::TestStringL()
226 const TUint8 KStringHello[] = {'H','e','l','l','o',0x00};
227 const TUint8 KStringEmpty[] = {0x00};
228 const TUint8 KStringNotAString[] = {0x1A};
229 const TUint8 KStringCorruptNoZero[] = {'H','e','l','l','o'};
230 const TUint8 KStringbye[] = {'b','y','e',0x00};
234 buf.Copy(KStringHello, sizeof(KStringHello));
235 if (!String(buf, _L8("Hello")))
236 User::Leave(KErrGeneral);
238 buf.Copy(KStringEmpty, sizeof(KStringEmpty));
239 if (!String(buf, _L8(""),KErrCorrupt))
240 User::Leave(KErrGeneral);
242 buf.Copy(KStringNotAString, sizeof(KStringNotAString));
243 if (!String(buf, _L8(""), KErrCorrupt))
244 User::Leave(KErrGeneral);
246 buf.Copy(KStringCorruptNoZero, sizeof(KStringCorruptNoZero));
247 if (!String(buf, _L8(""), KErrCorrupt))
248 User::Leave(KErrGeneral);
250 buf.Copy(KStringbye, sizeof(KStringbye));
251 if (!String(buf, _L8("bye")))
252 User::Leave(KErrGeneral);
257 TBool CWSPDecodeTest::Token(TPtrC8 aBuf, TUint8 aShouldBe, TInt aErr)
260 TWspPrimitiveDecoder dec(aBuf);
263 success = dec.Val7Bit(val);
264 if (success < KErrNone && success == aErr)
267 return val == aShouldBe;
270 void CWSPDecodeTest::TokensTestL()
272 _LIT(KTestText, "WSP Decode: Tokens");
273 iTestHarness->StartTestL(KTestText);
274 TRAPD(error, TestTokensL());
275 iTestHarness->EndTest(error);
276 User::LeaveIfError(error);
280 void CWSPDecodeTest::TestTokensL()
282 const TUint8 KToken0[] = {0x80};
283 const TUint8 KToken1[] = {0x81};
284 const TUint8 KToken1A[] = {0x9A};
285 const TUint8 KToken38[] = {0xB8};
286 const TUint8 KTokenCorruptLen[] = {0x01};
289 buf.Copy(KToken0, sizeof(KToken0));
291 User::Leave(KErrGeneral);
293 buf.Copy(KToken1, sizeof(KToken1));
295 User::Leave(KErrGeneral);
297 buf.Copy(KToken1A, sizeof(KToken1A));
298 if (!Token(buf, 0x1A))
299 User::Leave(KErrGeneral);
301 buf.Copy(KToken38, sizeof(KToken38));
302 if (!Token(buf, 0x38))
303 User::Leave(KErrGeneral);
305 buf.Copy(KTokenCorruptLen, sizeof(KTokenCorruptLen));
307 User::Leave(KErrGeneral);
313 TBool CWSPDecodeTest::Integer(TPtrC8 aBuf, TUint32 aShouldBe, TInt aErr)
316 TWspPrimitiveDecoder dec(aBuf);
318 success = dec.Integer(val);
319 if (success < KErrNone && success == aErr)
321 return val == aShouldBe;
326 void CWSPDecodeTest::IntegersTestL()
328 _LIT(KTestText, "WSP Decode: Integers");
329 iTestHarness->StartTestL(KTestText);
330 TRAPD(error, TestIntegersL());
331 iTestHarness->EndTest(error);
332 User::LeaveIfError(error);
336 void CWSPDecodeTest::TestIntegersL()
338 const TUint8 KInt0[] = {0x80};
339 const TUint8 KInt1[] = {0x81};
340 const TUint8 KIntA[] = {0x8A};
341 const TUint8 KInt38[] = {0xB8};
342 const TUint8 KIntLong4321[] = {0x02, 0x43,0x21};
343 const TUint8 KIntLongABCDEF[] = {0x03, 0xAB,0xCD,0xEF};
344 const TUint8 KIntCorrupt[] = {0x01};
347 buf.Copy(KInt0, sizeof(KInt0));
348 if (!Integer(buf, 0))
349 User::Leave(KErrGeneral);
351 buf.Copy(KInt1, sizeof(KIntA));
352 if (!Integer(buf, 1))
353 User::Leave(KErrGeneral);
355 buf.Copy(KIntA, sizeof(KIntA));
356 if (!Integer(buf, 0x0A))
357 User::Leave(KErrGeneral);
359 buf.Copy(KInt38, sizeof(KInt38));
360 if (!Integer(buf, 0x38))
361 User::Leave(KErrGeneral);
363 buf.Copy(KIntLong4321, sizeof(KIntLong4321));
364 if (!Integer(buf, 0x4321))
365 User::Leave(KErrGeneral);
367 buf.Copy(KIntLongABCDEF, sizeof(KIntLongABCDEF));
368 if (!Integer(buf, 0xABCDEF))
369 User::Leave(KErrGeneral);
371 buf.Copy(KIntCorrupt, sizeof(KIntCorrupt));
372 if (!Integer(buf,0, KErrCorrupt))
373 User::Leave(KErrGeneral);
378 TBool CWSPDecodeTest::LongInt(TPtrC8 aBuf, TUint32 aShouldBe, TInt aErr)
381 TWspPrimitiveDecoder dec(aBuf);
384 success = dec.LongInt(val);
385 if (success < KErrNone && success == aErr)
387 return val == aShouldBe;
392 void CWSPDecodeTest::LongIntTestL()
394 _LIT(KTestText, "WSP Decode: LongInt");
395 iTestHarness->StartTestL(KTestText);
396 TRAPD(error, TestLongIntL());
397 iTestHarness->EndTest(error);
398 User::LeaveIfError(error);
403 void CWSPDecodeTest::TestLongIntL()
405 const TUint8 KIntLong0[] = {0x01, 0x00};
406 const TUint8 KIntLong4321[] = {0x02, 0x43,0x21};
407 const TUint8 KIntLongABCDEF[] = {0x03, 0xAB,0xCD,0xEF};
408 const TUint8 KIntLongABCDEF112233[] = {0x06, 0xAB,0xCD,0xEF, 0x11,0x22,0x33};
409 const TUint8 KIntTooLong110009ABCDEF112233[] = {0x0A, 0x11,0x00, 0x09, 0xAB,0xCD,0xEF, 0x11,0x22,0x33};
410 const TUint8 KIntCorrupt[] = {0x01};
412 buf.Copy(KIntLong0, sizeof(KIntLong0));
413 if (!LongInt(buf, 0))
414 User::Leave(KErrGeneral);
416 buf.Copy(KIntLong4321, sizeof(KIntLong4321));
417 if (!LongInt(buf, 0x4321))
418 User::Leave(KErrGeneral);
420 buf.Copy(KIntLongABCDEF, sizeof(KIntLongABCDEF));
421 if (!LongInt(buf, 0xABCDEF))
422 User::Leave(KErrGeneral);
424 buf.Copy(KIntLongABCDEF112233, sizeof(KIntLongABCDEF112233));
425 if (!LongInt(buf, 0xEF112233))
426 User::Leave(KErrGeneral);
428 buf.Copy(KIntTooLong110009ABCDEF112233, sizeof(KIntTooLong110009ABCDEF112233));
429 if (!LongInt(buf, 0x09ABCDEF, KErrCorrupt))
430 User::Leave(KErrGeneral);
432 buf.Copy(KIntCorrupt, sizeof(KIntCorrupt));
433 if (!LongInt(buf, 0, KErrCorrupt))
434 User::Leave(KErrGeneral);
441 TBool CWSPDecodeTest::UintVar(TPtrC8 aBuf, TUint32 aShouldBe, TInt aErr)
444 TWspPrimitiveDecoder dec(aBuf);
446 success = dec.UintVar(val);
447 if (success < KErrNone && success == aErr)
449 return val == aShouldBe;
453 void CWSPDecodeTest::UintVarsTestL()
455 _LIT(KTestText, "WSP Decode: UintVars");
456 iTestHarness->StartTestL(KTestText);
457 TRAPD(error, TestUintVarsL());
458 iTestHarness->EndTest(error);
459 User::LeaveIfError(error);
463 void CWSPDecodeTest::TestUintVarsL()
465 const TUint8 KUint0[] = {0x00};
466 const TUint8 KUint1[] = {0x01};
467 const TUint8 KUintA[] = {0x80,0x0A};
468 const TUint8 KUintFA[] = {0x81,0x7A};
469 const TUint8 KLenUintVAR4510[] = {0x81, 0x8A, 0x10};
470 const TUint8 KLenUintVARCorrupt[] = {0x8F, 0x81,0x8A,0x80,0x88};
471 const TUint8 KIntLongACorrupt[] = {0xF3, 0xAB,0xCD,0xEF};
476 buf.Copy(KUint0, sizeof(KUint0));
477 if (!UintVar(buf, 0))
478 User::Leave(KErrGeneral);
480 buf.Copy(KUint1, sizeof(KUint1));
481 if (!UintVar(buf, 1))
482 User::Leave(KErrGeneral);
484 buf.Copy(KUintA, sizeof(KUintA));
485 if (!UintVar(buf, 0x0A))
486 User::Leave(KErrGeneral);
488 buf.Copy(KUintFA, sizeof(KUintFA));
489 if (!UintVar(buf, 0xFA))
490 User::Leave(KErrGeneral);
492 buf.Copy(KLenUintVAR4510, sizeof(KLenUintVAR4510));
493 if (!UintVar(buf, 0x4510))
494 User::Leave(KErrGeneral);
496 buf.Copy(KLenUintVARCorrupt, sizeof(KLenUintVARCorrupt));
497 if (!UintVar(buf, 0, KErrCorrupt))
498 User::Leave(KErrGeneral);
500 buf.Copy(KIntLongACorrupt, sizeof(KIntLongACorrupt));
501 if (!UintVar(buf, 0, KErrCorrupt))
502 User::Leave(KErrGeneral);
510 TBool CWSPDecodeTest::VersionL(RStringPool aPool, TPtrC8 aBuf, TPtrC8 aShouldBe, TInt aErr)
513 TWspPrimitiveDecoder dec(aBuf);
514 TBool retVal = EFalse;
516 success = dec.VersionL(aPool,val);
517 CleanupClosePushL(val);
518 if (success < KErrNone && success == aErr)
522 RStringF should = aPool.OpenFStringL(aShouldBe);
523 retVal = val == should;
526 CleanupStack::PopAndDestroy(&val);
530 void CWSPDecodeTest::VersionTestL()
532 _LIT(KTestText, "WSP Decode: Version");
533 iTestHarness->StartTestL(KTestText);
534 TRAPD(error, TestVersionL());
535 iTestHarness->EndTest(error);
536 User::LeaveIfError(error);
539 void CWSPDecodeTest::TestVersionL()
543 CleanupClosePushL(pool);
544 const TUint8 KVersion1[] = {0x9F};
545 const TUint8 KVersion11[] = {0x91};
546 const TUint8 KVersion610[] = {0xEA};
547 const TUint8 KVersion73[] = {0xF3};
548 const TUint8 KVersion00[] = {0x80};
549 const TUint8 KVersionStr[] = {'1','.','9','9',0x00};
552 buf.Copy(KVersion1, sizeof(KVersion1));
553 if (!VersionL(pool, buf, _L8("1")))
554 User::Leave(KErrGeneral);
556 buf.Copy(KVersion11, sizeof(KVersion11));
557 if (!VersionL(pool, buf, _L8("1.1")))
558 User::Leave(KErrGeneral);
560 buf.Copy(KVersion610, sizeof(KVersion610));
561 if (!VersionL(pool, buf, _L8("6.10")))
562 User::Leave(KErrGeneral);
564 buf.Copy(KVersion73, sizeof(KVersion73));
565 if (!VersionL(pool, buf, _L8("7.3")))
566 User::Leave(KErrGeneral);
568 buf.Copy(KVersion00, sizeof(KVersion00));
569 if (!VersionL(pool, buf, _L8("0.0")))
570 User::Leave(KErrGeneral);
572 buf.Copy(KVersionStr, sizeof(KVersionStr));
573 if (!VersionL(pool, buf, _L8("1.99")))
574 User::Leave(KErrGeneral);
576 CleanupStack::PopAndDestroy(&pool);
582 TBool CWSPDecodeTest::Date(TPtrC8 aBuf, TTime aShouldBe, TInt aErr)
585 TWspPrimitiveDecoder dec(aBuf);
587 success = dec.Date(val);
588 if (success < KErrNone && success == aErr)
592 return time == aShouldBe;
596 void CWSPDecodeTest::DateTestL()
598 _LIT(KTestText, "WSP Decode: Date");
599 iTestHarness->StartTestL(KTestText);
600 TRAPD(error, TestDateL());
601 iTestHarness->EndTest(error);
602 User::LeaveIfError(error);
606 void CWSPDecodeTest::TestDateL()
609 const TUint8 KDate0[] = {0x01, 0x00};
610 const TUint8 KDateAprl132001[] = {0x04,0x3A,0xD6,0x41,0x80};
611 const TUint8 KDateDec132003[] = {0x04,0x3F,0xE2,0x8D,0x84};
613 TDateTime dt(1970,EJanuary,0,0,0,0,0);
615 buf.Copy(KDate0, sizeof(KDate0));
616 if (!Date(buf, time1))
617 User::Leave(KErrGeneral);
620 time2 += TTimeIntervalSeconds(0x3AD64180);
621 buf.Copy(KDateAprl132001, sizeof(KDateAprl132001));
622 if (!Date(buf, time2))
623 User::Leave(KErrGeneral);
626 time3 += TTimeIntervalSeconds(0x3FE28D84);
627 buf.Copy(KDateDec132003, sizeof(KDateDec132003));
628 if (!Date(buf, time3))
629 User::Leave(KErrGeneral);
633 TInt CWSPDecodeTest::SegmenterCommonL(RStringPool aPool, TPtrC8 aHdr)
638 // Pre-condition to create WSP header segment: Open the string pool
639 // with the string table. Else program will raise a panic stringtable:4
640 // ( EStringTableNotFound )
641 aPool.OpenL ( WSPDummy::Table );
642 TWspHeaderSegmenter segger(aPool, WSPDummy::Table, aHdr);
644 while ((err = segger.NextL(fld)) == KErrNone)
646 fld.iHdrName.Close();
651 TBool CWSPDecodeTest::SegmenterL(RStringPool aPool, TPtrC8 aHdr)
653 TInt err = SegmenterCommonL(aPool,aHdr);
654 if (err != KErrNotFound)
659 TBool CWSPDecodeTest::SegmenterExpectCorruptL(RStringPool aPool, TPtrC8 aHdr)
661 TInt err = SegmenterCommonL(aPool,aHdr);
662 if (err != KErrCorrupt)
667 void CWSPDecodeTest::SegmenterTestL()
669 _LIT(KTestText, "WSP Decode: Segmenter");
670 iTestHarness->StartTestL(KTestText);
671 TRAPD(error, TestSegmenterL());
672 iTestHarness->EndTest(error);
673 User::LeaveIfError(error);
677 void CWSPDecodeTest::TestSegmenterL()
682 CleanupClosePushL(pool);
685 const TUint8 KAcceptAppVndWMLC[] = {0x80, 0x94};
686 const TUint8 KAcceptLanEngQ07[] = {0x82, 0x02, 0x99, 0x47};
687 const TUint8 KAcceptLanENSV[] = {0x82, 0x02, 0x83, 0xF0};
688 const TUint8 KDateThu23Apr1998134127GMT[] = {0x92, 0x04, 0x35, 0x3f, 0x45, 0x11};
689 const TUint8 KContentRangeBytes0499[] = {0x90, 0x03, 0x00, 0x88, 0x01};
690 const TUint8 KAcceptRangeNewRangeUnit[] = {0x84, 'n','e','w','-','r','a','n','g','e','-','u','n','i','t',0x00};
691 const TUint8 KXNewHdrFoo[] = {'X','-','n','e','w','-','H','e','a','d','e','r',0x00,'F','o','o',0x00};
692 const TUint8 KTwo[] = {0x80, 0x94, 0x81, 0x93};
694 const TUint8 KCorrupt1[] = {0x82};
695 buf.Copy(KCorrupt1, sizeof(KCorrupt1));
696 if (!SegmenterExpectCorruptL(pool, buf))
697 User::Leave(KErrGeneral);
699 const TUint8 KCorrupt2[] = {0x82, 0x02};
700 buf.Copy(KCorrupt2, sizeof(KCorrupt2));
701 if (!SegmenterExpectCorruptL(pool, buf))
702 User::Leave(KErrGeneral);
704 buf.Copy(KAcceptAppVndWMLC, sizeof(KAcceptAppVndWMLC));
705 if (!SegmenterL(pool, buf))
706 User::Leave(KErrGeneral);
708 buf.Copy(KAcceptLanEngQ07, sizeof(KAcceptLanEngQ07));
709 if (!SegmenterL(pool, buf))
710 User::Leave(KErrGeneral);
712 buf.Copy(KAcceptLanENSV, sizeof(KAcceptLanENSV));
713 if (!SegmenterL(pool, buf))
714 User::Leave(KErrGeneral);
716 buf.Copy(KDateThu23Apr1998134127GMT, sizeof(KDateThu23Apr1998134127GMT));
717 if (!SegmenterL(pool, buf))
718 User::Leave(KErrGeneral);
720 buf.Copy(KContentRangeBytes0499, sizeof(KContentRangeBytes0499));
721 if (!SegmenterL(pool, buf))
722 User::Leave(KErrGeneral);
724 buf.Copy(KAcceptRangeNewRangeUnit, sizeof(KAcceptRangeNewRangeUnit));
725 if (!SegmenterL(pool, buf))
726 User::Leave(KErrGeneral);
728 buf.Copy(KXNewHdrFoo, sizeof(KXNewHdrFoo));
729 if (!SegmenterL(pool, buf))
730 User::Leave(KErrGeneral);
732 buf.Copy(KTwo, sizeof(KTwo));
733 if (!SegmenterL(pool, buf))
734 User::Leave(KErrGeneral);
736 CleanupStack::PopAndDestroy(&pool);
741 void CWSPDecodeTest::XXXTestL()
743 _LIT(KTestText, "WSP Decode: XXX");
744 iTestHarness->StartTestL(KTestText);
745 TRAPD(error, TestXXXL());
746 iTestHarness->EndTest(error);
747 User::LeaveIfError(error);