--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/kerneltest/e32test/buffer/t_des.cpp Thu Dec 17 09:24:54 2009 +0200
@@ -0,0 +1,1521 @@
+// Copyright (c) 1995-2009 Nokia Corporation and/or its subsidiary(-ies).
+// All rights reserved.
+// This component and the accompanying materials are made available
+// under the terms of the License "Eclipse Public License v1.0"
+// which accompanies this distribution, and is available
+// at the URL "http://www.eclipse.org/legal/epl-v10.html".
+//
+// Initial Contributors:
+// Nokia Corporation - initial contribution.
+//
+// Contributors:
+//
+// Description:
+// e32test\buffer\t_des.cpp
+// Overview:
+// Test methods of the TDes template class.
+// API Information:
+// TDes
+// Details:
+// - Test assigning TPtrs in various ways and confirm results are as expected.
+// - Test locating in reverse on an empty TPtr, verify it returns KErrNoFound.
+// - For TBuf, TBuf8 and TBuf16 objects:
+// - Construct a default TBuf object and verify Length and MaxLength values are
+// as expected.
+// - Construct a TBuf object with length and verify Length and MaxLength values
+// are as expected.
+// - Construct a TBuf object over a string, verify Length and MaxLength values
+// are as expected. Verify the string data is correct.
+// - Construct a TBuf object over a descriptor, verify Length and MaxLength values
+// are as expected. Verify the data is correct.
+// - Construct a TBuf object over a buffer, verify Length and MaxLength values
+// are as expected. Verify the data is correct.
+// - Construct a TBuf object and assign a string to it, verify Length and MaxLength
+// values are as expected. Verify the data is correct.
+// - Construct a TBuf object and assign a descriptor to it, verify Length and MaxLength
+// values are as expected. Verify the data is correct.
+// - Construct a TBuf object and assign a buffer to it, verify Length and MaxLength
+// values are as expected. Verify the data is correct.
+// - Check the available user heap space and check for memory leaks by comparing it to
+// the initial value.
+// - For TPtrC, TPtrC8 and TPtrC16 objects:
+// - Verify the invariant for a null pointer descriptor
+// - Construct a TPtrC object over a constant string, verify Length and string data
+// are correct.
+// - Construct a TPtrC object over a constant descriptor, verify Length and data are
+// correct.
+// - Construct a TPtrC object over a constant buffer with length, verify Length and
+// data are correct.
+// - Check the available user heap space and check for memory leaks by comparing it to
+// the initial value.
+// - For TPtr, TPtr8 and TPtr16 objects:
+// - Verify the invariant for a null pointer descriptor
+// - Construct a TPtr object over a buffer with length and maxlength, verify Length,
+// MaxLength and data are correct.
+// - Construct a TPtr object over a buffer with maxlength, verify Length, MaxLength
+// and Ptr are correct.
+// - Construct a TPtr object and assign a string to it. Verify Length, MaxLength and
+// the string data are correct.
+// - Construct a TPtr object and assign a buffer to it. Verify Length, MaxLength and
+// the data are correct.
+// - Construct a TPtr object and assign a descriptor to it. Verify Length, MaxLength
+// and the data are correct.
+// - Check the available user heap space and check for memory leaks by comparing it to
+// the initial value.
+// - Verify the TPtr copy constructor by setting and checking a text string.
+// - For TBufC, TBufC8 and TBufC16 objects:
+// - Construct a default TBufC object. Verify default Length is as expected.
+// - Construct a TBufC object over a string, verify Length and data are correct.
+// - Construct a TBufC object over a TBufC, verify Length and data are correct.
+// - Construct a TBufC object and assign a string to it, verify Length and data
+// are correct.
+// - Construct a TBufC object and assign a descriptor to it, verify Length and data
+// are correct.
+// - Construct a TBufC object and assign a TBufC to it, verify Length and data
+// are correct.
+// - Check the available user heap space and check for memory leaks by comparing it to
+// the initial value.
+// - For HBufC, HBufC8 and HBufC16 objects:
+// - Create a new descriptor using the New() method, verify non-NULL return value.
+// - Construct a HBufC object and assign a string to it, verify Length and data
+// are correct.
+// - Construct a HBufC object and assign a descriptor to it, verify Length and data
+// are correct.
+// - Construct a HBufC object and assign a HBufC to it, verify Length and data
+// are correct.
+// - Construct a HBufC object and call ReAlloc method, verify Length and data are
+// correct.
+// - Check the available user heap space and check for memory leaks by comparing it to
+// the initial value.
+// - Test ASCII destination with Unicode source. Verify string results are as expected.
+// - For TLitC, TLitC8 and TLitC16 objects:
+// - Verify member operators.
+// - Assign and validate literal values
+// - For TBuf, TBuf8 and TBuf16 objects, test TDes derived objects that return TPtrs.
+// - Extract and verify the left portion of the descriptor (LeftTPtr).
+// - Extract and verify the right portion of the descriptor (RightTPtr).
+// - Extract and verify the middle portion of the descriptor (MidTPtr).
+// - For TPtr, TPtr8 and TPtr16 objects, test TDes derived objects that return TPtrs.
+// - Extract and verify the left portion of the descriptor (LeftTPtr).
+// - Extract and verify the right portion of the descriptor (RightTPtr).
+// - Extract and verify the middle portion of the descriptor (MidTPtr).
+// Platforms/Drives/Compatibility:
+// All
+// Assumptions/Requirement/Pre-requisites:
+// Failures and causes:
+// Base Port information:
+//
+//
+
+#include <e32test.h>
+
+LOCAL_D RTest test(_L("T_DES"));
+
+template<class T,class S, class L, class R>
+class TestTDes
+ {
+public:
+ TestTDes(); // Test class constructor.
+ void Test1();
+ void Test2();
+ void Test3();
+ void Test4();
+ void Test5();
+ void Test6();
+ void Test7();
+ void Test8();
+ void Test9();
+ void Test10();
+ void Test11();
+ void Test12();
+ void Test13();
+ void Test14();
+ void Test15();
+ void Test16();
+ void Test17();
+ void Test18();
+ void TestA();
+ void TestB();
+ void TestC();
+ void TestD();
+ void TestE();
+ void TestF();
+ void TestG();
+ void TestH();
+ void TestI();
+ void TestJ();
+ void TestK();
+ void TestL();
+ void TestM();
+ void TestN();
+ void TestO();
+ void TestP();
+ void test_TPtrC(); // Test TPtrC classes
+ void test_TPtr(); // Test TPtr classes
+ void test_TBuf(); // Test TBuf classes
+ void test_TBufC(); // Test TBufC classes
+ void test_HBufC(); // Test HBufC classes
+ void test_TBufReturningModifiable();
+ void test_TPtrReturningModifiable();
+ void test_TDesReturningModifiable(const T& a, R& b);
+ void testHeapSpace(TInt);
+ };
+
+template <class T, class S, class L, class R>
+GLDEF_C TestTDes<T,S,L,R>::TestTDes()
+//
+// Constructor
+//
+ {}
+
+template <class T,class S,class L,class R>
+GLDEF_C void TestTDes<T,S,L,R>::testHeapSpace(TInt startAvail)
+//
+// Test no memory leakage has occured
+//
+ {
+
+ test.Next(_L("Testing for memory leaks"));
+ TInt endAvail,temp;
+ endAvail=User::Available(temp);
+ test(endAvail==startAvail);
+ }
+
+template <class T, class S, class L, class R>
+GLDEF_C void TestTDes<T,S,L,R>::Test1()
+//
+// Constructs a view over a constant string
+//
+ {
+
+ T a(_TL("ABc"));
+ a.__DbgTestInvariant();
+ test(a.Length()==3);
+ test(*a.Ptr()=='A');
+ test(*(a.Ptr()+1)=='B');
+ test(*(a.Ptr()+2)=='c');
+ }
+
+template<class T, class S, class L, class R>
+GLDEF_C void TestTDes<T,S,L,R>::Test2()
+//
+// Constructs a view over a descriptor
+//
+ {
+
+ T aDes(_TL("ABc"));
+ aDes.__DbgTestInvariant();
+ T b(aDes);
+ b.__DbgTestInvariant();
+ test(b.Length()==aDes.Length());
+ test(*b.Ptr()==*aDes.Ptr());
+ test(*(b.Ptr()+1)==*(aDes.Ptr()+1));
+ test(*(b.Ptr()+2)==*(aDes.Ptr()+2));
+ }
+
+template<class T, class S, class L, class R>
+GLDEF_C void TestTDes<T,S,L,R>::Test3()
+//
+// Constructs a view over a length specified buffer
+//
+ {
+
+ S* aBuf = _TL("ABCDEF");
+ T aDes(aBuf,6);
+ aDes.__DbgTestInvariant();
+ test(aDes.Length()==6);
+ for(S count=0; count<aDes.Length(); count++)
+ test(*(aDes.Ptr()+count)==('A' + count));
+ test(aDes.Ptr()==aBuf);
+ }
+
+template<class T, class S, class L, class R>
+GLDEF_C void TestTDes<T,S,L,R>::Test4()
+//
+// Constructs a r/w view over a buffer with length & maxlength
+//
+ {
+
+ S* aBuf;
+ aBuf=_TL("LMNOPQ");
+ T aDesW(aBuf,6,0x0A);
+ aDesW.__DbgTestInvariant();
+ test(aDesW.Length()==6);
+ for(S count=0; count<aDesW.Length(); count++)
+ test(*(aDesW.Ptr()+count)==('L' + count));
+ test(aDesW.Ptr()==aBuf);
+ test(aDesW.MaxLength()==0x0A);
+ }
+
+template<class T, class S, class L, class R>
+GLDEF_C void TestTDes<T,S,L,R>::Test5()
+//
+// Constructs a r/w view over a buffer with maxlength
+//
+ {
+
+ S* aBuf;
+ aBuf=_TL("ZYXWVU");
+ T aDesW(aBuf,0x06);
+ aDesW.__DbgTestInvariant();
+ test(aDesW.Length()==0);
+ test(aDesW.MaxLength()==0x06);
+ test(aDesW.Ptr()==aBuf);
+ }
+
+template<class T, class S, class L, class R>
+GLDEF_C void TestTDes<T,S,L,R>::Test6()
+//
+// Constructs a r/w view over a LcbBase with maxlength
+//
+ {
+ // Cant use yet, see calling function
+ }
+
+template<class T, class S, class L, class R>
+GLDEF_C void TestTDes<T,S,L,R>::Test7()
+//
+// Constructs a default TBuf view
+//
+ {
+
+ T aBuf;
+ aBuf.__DbgTestInvariant();
+ test(aBuf.Length()==0);
+ test(aBuf.MaxLength()==0x40);
+ }
+
+template<class T, class S, class L, class R>
+GLDEF_C void TestTDes<T,S,L,R>::Test8()
+//
+// Constructs a TBuf view with length
+//
+ {
+
+ T aBuf(10);
+ aBuf.__DbgTestInvariant();
+ test(aBuf.Length()==10);
+ test(aBuf.MaxLength()==0x40);
+ }
+
+template<class T, class S, class L, class R>
+GLDEF_C void TestTDes<T,S,L,R>::Test9()
+//
+// Constructs a TBuf view over a string
+//
+ {
+
+ T aBuf(_TL("ABCDEF"));
+ aBuf.__DbgTestInvariant();
+ test(aBuf.Length()==6);
+ test(aBuf.MaxLength()==0x40);
+ for(S count=0;count<aBuf.Length();count++)
+ test(*(aBuf.Ptr()+count)==('A' + count));
+ }
+
+template<class T, class S, class L, class R>
+GLDEF_C void TestTDes<T,S,L,R>::Test10()
+//
+// Constructs a TBuf view over a descriptor
+//
+ {
+
+ R aDesR(_TL("ABCDEF"));
+ aDesR.__DbgTestInvariant();
+ T aBuf(aDesR);
+ aBuf.__DbgTestInvariant();
+ test(aBuf.MaxLength()==0x40);
+ test(aBuf.Length()==aDesR.Length());
+ test(aBuf.Length()==6);
+ for(S count=0;count<aBuf.Length();count++)
+ {
+ test(*(aBuf.Ptr()+count)==('A' + count));
+ test(*(aBuf.Ptr()+count)==*(aDesR.Ptr()+count));
+ }
+ }
+
+template<class T, class S, class L, class R>
+GLDEF_C void TestTDes<T,S,L,R>::Test11()
+//
+// Constructs a TBuf view over a buffer
+//
+ {
+
+ T aBuf(_TL("ABCDEF"));
+ aBuf.__DbgTestInvariant();
+ T bBuf(aBuf);
+ bBuf.__DbgTestInvariant();
+ test(bBuf.MaxLength()==aBuf.MaxLength());
+ test(bBuf.MaxLength()==0x40);
+ test(bBuf.Length()==aBuf.Length());
+ test(bBuf.Length()==6);
+ for(S count=0;count<bBuf.Length();count++)
+ {
+ test(*(bBuf.Ptr()+count)==('A' + count));
+ test(*(bBuf.Ptr()+count)==*(aBuf.Ptr()+count));
+ }
+ }
+
+template<class T,class S,class L,class R>
+GLDEF_C void TestTDes<T,S,L,R>::Test12()
+//
+// Exercise the default TBufC constructor
+//
+ {
+
+ T buf;
+ buf.__DbgTestInvariant();
+ test(buf.Length()==0);
+ }
+
+template<class T,class S,class L,class R>
+GLDEF_C void TestTDes<T,S,L,R>::Test13()
+//
+// Constructor over a string
+//
+ {
+
+ S* pString=(_TL("12"));
+ T buf(pString);
+ buf.__DbgTestInvariant();
+ test(buf.Length()==2);
+ test(*(buf.Ptr())=='1');
+ test(*(buf.Ptr()+1)=='2');
+ }
+
+template<class T,class S,class L,class R>
+GLDEF_C void TestTDes<T,S,L,R>::Test14()
+//
+// Constructor over a TDesC (TPtrC)
+//
+ {
+
+ R des(_TL("Test 14"));
+ des.__DbgTestInvariant();
+ T buf(des);
+ buf.__DbgTestInvariant();
+ test(buf.Length()==7);
+ test(buf.Length()==des.Length());
+ test(*(buf.Ptr())=='T');
+ test(*(buf.Ptr()+1)=='e');
+ test(*(buf.Ptr()+2)=='s');
+ test(*(buf.Ptr()+3)=='t');
+ test(*(buf.Ptr()+4)==' ');
+ test(*(buf.Ptr()+5)=='1');
+ test(*(buf.Ptr()+6)=='4');
+ }
+
+
+template<class T,class S,class L,class R>
+GLDEF_C void TestTDes<T,S,L,R>::Test15()
+//
+// Constructor over a TBufC
+//
+ {
+
+ T oldBuf(_TL("Test 15"));
+ oldBuf.__DbgTestInvariant();
+ T newBuf(oldBuf);
+ newBuf.__DbgTestInvariant();
+ test(newBuf.Length()==8);
+ test(newBuf.Length()==oldBuf.Length());
+ test(*(newBuf.Ptr())=='T');
+ test(*(newBuf.Ptr()+1)=='e');
+ test(*(newBuf.Ptr()+2)=='s');
+ test(*(newBuf.Ptr()+3)=='t');
+ test(*(newBuf.Ptr()+4)==' ');
+ test(*(newBuf.Ptr()+5)==' ');
+ test(*(newBuf.Ptr()+6)=='1');
+ test(*(newBuf.Ptr()+7)=='5');
+ }
+
+template<class T,class S,class L,class R>
+GLDEF_C void TestTDes<T,S,L,R>::Test16()
+//
+// New operator - without leave
+//
+ {
+
+ T* pBuf=T::New(0x40);
+ test(pBuf!=NULL);
+ pBuf->__DbgTestInvariant();
+ User::Free(pBuf);
+ }
+
+template<class T,class S,class L,class R>
+GLDEF_C void TestTDes<T,S,L,R>::Test17()
+//
+// NewL operator - forcing a leave
+//
+ {
+
+/*
+
+ Reinstate if some method is found of forcing alloc fail
+ This test no longer works due to heap growing functionality of E32 057
+
+ T* pBuf;
+ TInt temp;
+ TInt available=User::Available(temp);
+ TAny* pDummy=User::Alloc(available);
+ TRAPD(ret,pBuf=T::NewL(0x40))
+ test(ret==KErrNoMemory);
+ User::Free(pDummy);
+*/
+ }
+
+template<class T,class S,class L,class R>
+GLDEF_C void TestTDes<T,S,L,R>::Test18()
+//
+// NewL operator - forcing success
+//
+ {
+
+ T* pBuf=NULL;
+ TRAPD(ret,pBuf=T::NewL(0x40))
+ test(ret==0);
+ test(pBuf!=NULL);
+ pBuf->__DbgTestInvariant();
+ User::Free(pBuf);
+ }
+
+template<class T, class S, class L, class R>
+GLDEF_C void TestTDes<T,S,L,R>::TestA()
+//
+// String Assignment
+//
+ {
+
+ S myBuf[7];
+ Mem::Copy(myBuf,_TL("ABCDEF"),7*sizeof(S));
+ T aDes(myBuf,0x06,0x06);
+ aDes=_TL("ZYXWVU");
+ aDes.__DbgTestInvariant();
+ test(aDes.Length()==6);
+ test(aDes.MaxLength()==0x06);
+ S count=0;
+ for(;count<aDes.Length(); count++)
+ {
+ test(*(aDes.Ptr()+count)==('Z'-count));
+ }
+ aDes=_TL("123");
+ aDes.__DbgTestInvariant();
+ test(aDes.Length()==3);
+ test(aDes.MaxLength()==0x06);
+ for(count=0; count<aDes.Length(); count++)
+ {
+ test(*(aDes.Ptr()+count)==('1'+count));
+ }
+ }
+
+
+template<class T, class S, class L, class R>
+GLDEF_C void TestTDes<T,S,L,R>::TestB()
+// DesW Assignment
+ {
+ S aBuf[11];
+ S bBuf[11];
+
+ Mem::Copy(aBuf,_TL("ZYXWVUTSRQ"),11*sizeof(S));
+ Mem::Copy(bBuf,_TL("ABCDEFGHIJ"),11*sizeof(S));
+ T aDes(aBuf,0x0A,0x0A);
+ T bDes(bBuf,0x0A);
+ bDes=aDes;
+ aDes.__DbgTestInvariant();
+ bDes.__DbgTestInvariant();
+ test(aDes.Length()==bDes.Length());
+ test(aDes.MaxLength()==0x0A);
+ test(bDes.MaxLength()==0x0A);
+ for(S count=0; count<bDes.Length(); count++)
+ {
+ test(*(aDes.Ptr()+count)==*(bDes.Ptr()+count));
+ }
+ }
+
+
+
+template<class T, class S, class L, class R>
+GLDEF_C void TestTDes<T,S,L,R>::TestC()
+// DesC Assignment
+ {
+ S aBuf[11];
+ R aDesR(_TL("1234567890"));
+ Mem::Copy(aBuf,_TL("ABCDEFGHIJ"),11*sizeof(S));
+ T aDes(aBuf,0x0A,0x0A);
+ aDes=aDesR;
+ aDes.__DbgTestInvariant();
+ test(aDes.Length()==aDesR.Length());
+ test(aDes.MaxLength()==0x0A);
+ for(S count=0; count<aDes.Length(); count++)
+ {
+ test(*(aDes.Ptr()+count)==*(aDesR.Ptr()+count));
+ }
+ }
+
+
+template<class T, class S, class L, class R>
+GLDEF_C void TestTDes<T,S,L,R>::TestD()
+// TBuf string Assignment
+ {
+ T aBuf;
+ aBuf=(_TL("ABCDEF"));
+ aBuf.__DbgTestInvariant();
+ test(aBuf.Length()==6);
+ test(aBuf.MaxLength()==0x40);
+ for(S count=0; count<aBuf.Length(); count++)
+ {
+ test(*(aBuf.Ptr()+count)==('A'+count));
+ }
+ }
+
+
+template<class T, class S, class L, class R>
+GLDEF_C void TestTDes<T,S,L,R>::TestE()
+// TBuf descriptor Assignment
+ {
+ R aDesR(_TL("ABCDEF"));
+ T aBuf;
+ aBuf=aDesR;
+ aBuf.__DbgTestInvariant();
+ test(aBuf.MaxLength()==0x40);
+ test(aBuf.Length()==aDesR.Length());
+ test(aBuf.Length()==6);
+ for(S count=0;count<aBuf.Length();count++)
+ {
+ test(*(aBuf.Ptr()+count)==('A' + count));
+ test(*(aBuf.Ptr()+count)==*(aDesR.Ptr()+count));
+ }
+ }
+
+
+template<class T, class S, class L, class R>
+GLDEF_C void TestTDes<T,S,L,R>::TestF()
+// TBuf buffer Assignment
+ {
+ T aBuf(_TL("ABCDEF"));
+ T bBuf;
+ bBuf=aBuf;
+ bBuf.__DbgTestInvariant();
+ test(bBuf.MaxLength()==aBuf.MaxLength());
+ test(bBuf.MaxLength()==0x40);
+ test(bBuf.Length()==aBuf.Length());
+ test(bBuf.Length()==6);
+ for(S count=0;count<bBuf.Length();count++)
+ {
+ test(*(bBuf.Ptr()+count)==('A' + count));
+ test(*(bBuf.Ptr()+count)==*(aBuf.Ptr()+count));
+ }
+ }
+
+
+template<class T, class S, class L, class R>
+GLDEF_C void TestTDes<T,S,L,R>::TestG()
+// TBufC string assignment test
+ {
+ S* pString=_TL("TestG");
+ T buf;
+
+ test(buf.Length()==0);
+ buf=pString;
+ buf.__DbgTestInvariant();
+ test(buf.Length()==5);
+ test(*(buf.Ptr())=='T');
+ test(*(buf.Ptr()+1)=='e');
+ test(*(buf.Ptr()+2)=='s');
+ test(*(buf.Ptr()+3)=='t');
+ test(*(buf.Ptr()+4)=='G');
+ }
+
+
+template<class T, class S, class L, class R>
+GLDEF_C void TestTDes<T,S,L,R>::TestH()
+// TBufC descriptor assignment
+ {
+ R des(_TL("TestH"));
+ T buf;
+
+ test(buf.Length()==0);
+ buf=des;
+ buf.__DbgTestInvariant();
+ test(buf.Length()==5);
+ test(buf.Length()==des.Length());
+ test(*(buf.Ptr())=='T');
+ test(*(buf.Ptr()+1)=='e');
+ test(*(buf.Ptr()+2)=='s');
+ test(*(buf.Ptr()+3)=='t');
+ test(*(buf.Ptr()+4)=='H');
+ }
+
+template<class T, class S, class L, class R>
+GLDEF_C void TestTDes<T,S,L,R>::TestI()
+// TBufC TBufC assignment
+ {
+ T oldBuf(_TL("TEsti"));
+ T newBuf;
+
+ test(newBuf.Length()==0);
+ newBuf=oldBuf;
+ newBuf.__DbgTestInvariant();
+ test(newBuf.Length()==5);
+ test(newBuf.Length()==oldBuf.Length());
+ test(*(newBuf.Ptr())=='T');
+ test(*(newBuf.Ptr()+1)=='E');
+ test(*(newBuf.Ptr()+2)=='s');
+ test(*(newBuf.Ptr()+3)=='t');
+ test(*(newBuf.Ptr()+4)=='i');
+ }
+
+template<class T,class S,class L,class R>
+GLDEF_C void TestTDes<T,S,L,R>::TestJ()
+//
+// HBufC string assignment
+//
+ {
+
+ S* pString=_TL("tEStJ");
+ T* pBuf=NULL;
+ TRAPD(ret,pBuf=T::NewL(0x40))
+ test(ret==0);
+ test(pBuf!=NULL);
+ *pBuf=pString;
+ pBuf->__DbgTestInvariant();
+ test(pBuf->Length()==5);
+ test(*(pBuf->Ptr())=='t');
+ test(*(pBuf->Ptr()+1)=='E');
+ test(*(pBuf->Ptr()+2)=='S');
+ test(*(pBuf->Ptr()+3)=='t');
+ test(*(pBuf->Ptr()+4)=='J');
+ User::Free(pBuf);
+ }
+
+template<class T,class S,class L,class R>
+GLDEF_C void TestTDes<T,S,L,R>::TestK()
+//
+// HBufC descriptor assignment
+//
+ {
+
+ R des(_TL("TestK"));
+ T* pBuf=NULL;
+ TRAPD(ret,pBuf=T::NewL(0x40))
+ test(ret==0);
+ test(pBuf!=NULL);
+ *pBuf=des;
+ pBuf->__DbgTestInvariant();
+ test(pBuf->Length()==5);
+ test(pBuf->Length()==des.Length());
+ test(*(pBuf->Ptr())=='T');
+ test(*(pBuf->Ptr()+1)=='e');
+ test(*(pBuf->Ptr()+2)=='s');
+ test(*(pBuf->Ptr()+3)=='t');
+ test(*(pBuf->Ptr()+4)=='K');
+ User::Free(pBuf);
+ }
+
+template<class T,class S,class L,class R>
+GLDEF_C void TestTDes<T,S,L,R>::TestL()
+//
+// HBufC HBufC assignment
+//
+ {
+
+ S* pString=_TL("testl");
+ T* pOldBuf=NULL;
+ T* pNewBuf=NULL;
+ TRAPD(ret,pOldBuf=T::NewL(0x40))
+ test(ret==0);
+ TRAP(ret,pNewBuf=T::NewL(0x40))
+ test(ret==0);
+ test(pNewBuf!=NULL);
+ test(pOldBuf!=NULL);
+ *pOldBuf=pString;
+ *pNewBuf=*pOldBuf;
+ pOldBuf->__DbgTestInvariant();
+ pNewBuf->__DbgTestInvariant();
+ test(pNewBuf->Length()==5);
+ test(pOldBuf->Length()==pNewBuf->Length());
+ test(*(pNewBuf->Ptr())=='t');
+ test(*(pNewBuf->Ptr()+1)=='e');
+ test(*(pNewBuf->Ptr()+2)=='s');
+ test(*(pNewBuf->Ptr()+3)=='t');
+ test(*(pNewBuf->Ptr()+4)=='l');
+ User::Free(pOldBuf);
+ User::Free(pNewBuf);
+//
+ TRAP(ret,pOldBuf=T::NewMaxL(0x40))
+ test(ret==0);
+ TRAP(ret,pNewBuf=T::NewMaxL(0x40))
+ test(ret==0);
+ test(pNewBuf!=NULL);
+ test(pOldBuf!=NULL);
+ pOldBuf->__DbgTestInvariant();
+ pNewBuf->__DbgTestInvariant();
+ test(pNewBuf->Length()==0x40);
+ test(pOldBuf->Length()==0x40);
+ pNewBuf->Des().Zero();
+ pOldBuf->Des().Zero();
+ pOldBuf->__DbgTestInvariant();
+ pNewBuf->__DbgTestInvariant();
+ test(pNewBuf->Length()==0);
+ test(pOldBuf->Length()==0);
+ *pOldBuf=pString;
+ *pNewBuf=*pOldBuf;
+ pOldBuf->__DbgTestInvariant();
+ pNewBuf->__DbgTestInvariant();
+ test(pNewBuf->Length()==5);
+ test(pOldBuf->Length()==pNewBuf->Length());
+ test(*(pNewBuf->Ptr())=='t');
+ test(*(pNewBuf->Ptr()+1)=='e');
+ test(*(pNewBuf->Ptr()+2)=='s');
+ test(*(pNewBuf->Ptr()+3)=='t');
+ test(*(pNewBuf->Ptr()+4)=='l');
+ User::Free(pOldBuf);
+ User::Free(pNewBuf);
+ }
+
+template<class T,class S,class L,class R>
+GLDEF_C void TestTDes<T,S,L,R>::TestM()
+//
+// HBufC ReAlloc
+//
+ {
+
+ S* pString=_TL("TESTM");
+ T* pBuf;
+ pBuf=T::NewL(0x40);
+ *pBuf=pString;
+ pBuf->ReAlloc(0x40);
+ test(pBuf!=NULL);
+ pBuf->__DbgTestInvariant();
+ test(pBuf->Length()==5);
+ test(*(pBuf->Ptr())=='T');
+ test(*(pBuf->Ptr()+1)=='E');
+ test(*(pBuf->Ptr()+2)=='S');
+ test(*(pBuf->Ptr()+3)=='T');
+ test(*(pBuf->Ptr()+4)=='M');
+ User::Free(pBuf);
+ }
+
+template<class T,class S,class L,class R>
+GLDEF_C void TestTDes<T,S,L,R>::TestN()
+//
+// HBufC ReAllocL - forcing a leave
+//
+ {
+
+/*
+
+ Reinstate if some method is found of forcing alloc fail
+ This test no longer works due to heap growing functionality of E32 057
+
+ S* pString=_TL("tEStJ");
+ T* pBuf;
+ TInt available, temp;
+ TAny* pDummy;
+ pBuf=T::NewL(0x40);
+ test(pBuf!=NULL);
+ *pBuf=pString;
+ available=User::Available(temp);
+ pDummy=User::Alloc(available);
+ TRAPD(ret,pBuf->ReAllocL(0x50))
+ test(ret==KErrNoMemory);
+ User::Free(pDummy);
+ User::Free(pBuf);
+*/
+ }
+
+template<class T,class S,class L,class R>
+GLDEF_C void TestTDes<T,S,L,R>::TestO()
+// HBufC ReAllocL - forcing success
+ {
+
+ S* pString=_TL("tEStJ");
+ T* pBuf;
+ pBuf=T::NewL(0x40);
+ test(pBuf!=0);
+ *pBuf=pString;
+ TRAPD(ret,pBuf->ReAllocL(0x40))
+ test(ret==0);
+ test(pBuf!=NULL);
+ pBuf->__DbgTestInvariant();
+ test(pBuf->Length()==5);
+ test(*(pBuf->Ptr())=='t');
+ test(*(pBuf->Ptr()+1)=='E');
+ test(*(pBuf->Ptr()+2)=='S');
+ test(*(pBuf->Ptr()+3)=='t');
+ test(*(pBuf->Ptr()+4)=='J');
+ User::Free(pBuf);
+ }
+
+template<class T,class S,class L,class R>
+GLDEF_C void TestTDes<T,S,L,R>::TestP()
+// Invariant for null pointer descriptor
+// Added to reproduce DEF023302
+ {
+ T p(NULL, 0);
+ p.__DbgTestInvariant();
+ }
+
+GLDEF_C void TestCopy16()
+// Test TPtr16 copy constructor
+ {
+ TBuf16<0x20> buf(_S16("Paddington Station"));
+ TPtr16 ptr1((TText16*)buf.Ptr(),buf.Length(),buf.MaxLength());
+ ptr1.__DbgTestInvariant();
+ TPtr16 ptr2(ptr1);
+ ptr2.__DbgTestInvariant();
+ ptr2[11]='B';
+ ptr2[12]='e';
+ ptr2[13]='a';
+ ptr2[14]='r';
+ ptr2[15]=' ';
+ ptr1.SetLength(15);
+ ptr2.Append(_L16(" acid"));
+ test(ptr1==_L16("Paddington Bear"));
+ test(ptr2==_L16("Paddington Bear on acid"));
+ }
+
+GLDEF_C void Test16To8()
+// Test ASCII dest with Unicode source
+ {
+ TBuf8<0x20> buf(_S8("Paddington Station"));
+ TPtr8 ptr1((TText8*)buf.Ptr(),buf.Length(),buf.MaxLength());
+ ptr1.__DbgTestInvariant();
+ TPtr8 ptr2(ptr1);
+ ptr2.__DbgTestInvariant();
+ ptr2[11]='B';
+ ptr2[12]='e';
+ ptr2[13]='a';
+ ptr2[14]='r';
+ ptr2[15]=' ';
+ ptr1.SetLength(15);
+ ptr1.__DbgTestInvariant();
+ ptr2.Append(_L16(" acid"));
+ ptr2.__DbgTestInvariant();
+ test(ptr1==_L8("Paddington Bear"));
+ test(ptr2==_L8("Paddington Bear on acid"));
+ }
+
+
+GLDEF_C void TestCopy8()
+// Test TPtr8 copy constructor
+ {
+ TBuf8<0x20> buf(_S8("Paddington Station"));
+ TPtr8 ptr1((TText8*)buf.Ptr(),buf.Length(),buf.MaxLength());
+ TPtr8 ptr2(ptr1);
+ ptr2[11]='B';
+ ptr2[12]='e';
+ ptr2[13]='a';
+ ptr2[14]='r';
+ ptr2[15]=' ';
+ ptr1.SetLength(15);
+ ptr2.Append(_L8(" acid"));
+ ptr1.__DbgTestInvariant();
+ ptr2.__DbgTestInvariant();
+ test(ptr1==_L8("Paddington Bear"));
+ test(ptr2==_L8("Paddington Bear on acid"));
+ }
+
+GLDEF_C void TestCopy()
+// Test TPtr copy constructor
+ {
+ TBuf<0x20> buf(_S("Paddington Station"));
+ TPtr ptr1((TText*)buf.Ptr(),buf.Length(),buf.MaxLength());
+ TPtr ptr2(ptr1);
+ ptr2[11]='B';
+ ptr2[12]='e';
+ ptr2[13]='a';
+ ptr2[14]='r';
+ ptr2[15]=' ';
+ ptr1.SetLength(15);
+ ptr2.Append(_L(" acid"));
+ ptr1.__DbgTestInvariant();
+ ptr2.__DbgTestInvariant();
+ test(ptr1==_L("Paddington Bear"));
+ test(ptr2==_L("Paddington Bear on acid"));
+ }
+
+template<class T, class S, class L, class R>
+GLDEF_C void TestTDes<T,S,L,R>::test_TPtrC()
+//
+// Test the TDesC class special member functions
+//
+ {
+
+ test.Start(_L("Invariant for null pointer descriptor"));
+ TestP();
+ test.Next(_L("R/O view over constant string"));
+ Test1();
+ test.Next(_L("R/O view over constant descriptor"));
+ Test2();
+ test.Next(_L("R/O view over constant buffer with length"));
+ Test3();
+ }
+
+template<class T, class S, class L, class R>
+GLDEF_C void TestTDes<T,S,L,R>::test_TPtr()
+//
+// Test the TPtr class special member functions
+//
+ {
+
+ test.Start(_L("Invariant for null pointer descriptor"));
+ TestP();
+ test.Next(_L("R/W view over buffer with length & maxlength"));
+ Test4();
+ test.Next(_L("R/W view over buffer with maxlength"));
+ Test5();
+// Skipped the following test because Colly hasn't
+// written the templates yet for the TBufC8 & 16 classes
+// test.Next(_L("R/W view over LcbBase with maxlength"));
+// Test6();
+ test.Next(_L("String assignment"));
+ TestA();
+ test.Next(_L("DesW assignment"));
+ TestB();
+ test.Next(_L("DesC assignment"));
+ TestC();
+ }
+
+template<class T, class S, class L, class R>
+GLDEF_C void TestTDes<T,S,L,R>::test_TBuf()
+//
+// Test the TBuf class special member functions
+//
+ {
+
+ test.Start(_L("TBuf default view, no params"));
+ Test7();
+ test.Next(_L("TBuf view with a length"));
+ Test8();
+ test.Next(_L("TBuf view over a string"));
+ Test9();
+ test.Next(_L("TBuf view over a descriptor"));
+ Test10();
+ test.Next(_L("TBuf view over a buffer"));
+ Test11();
+ test.Next(_L("String assignment"));
+ TestD();
+ test.Next(_L("Descriptor assignment"));
+ TestE();
+ test.Next(_L("Buffer assignment"));
+ TestF();
+ }
+
+template<class T,class S,class L,class R>
+GLDEF_C void TestTDes<T,S,L,R>::test_TBufC()
+//
+// Test the TBufC class methods
+//
+ {
+
+ test.Start(_L("Default constructor"));
+ Test12();
+ test.Next(_L("With a string"));
+ Test13();
+ test.Next(_L("With a Descriptor (TPtrC)"));
+ Test14();
+ test.Next(_L("With a TBufC"));
+ Test15();
+ test.Next(_L("String assignment"));
+ TestG();
+ test.Next(_L("Descriptor assignment (TPtrC)"));
+ TestH();
+ test.Next(_L("TBufC assignment"));
+ TestI();
+ }
+
+template<class T,class S,class L,class R>
+GLDEF_C void TestTDes<T,S,L,R>::test_HBufC()
+//
+// Test the HBufC class methods.
+//
+ {
+
+ test.Start(_L("New"));
+ Test16();
+ test.Next(_L("NewL - forcing a leave"));
+ Test17();
+ test.Next(_L("NewL - showing success"));
+ Test18();
+ test.Next(_L("String assignment"));
+ TestJ();
+ test.Next(_L("Descriptor assignment"));
+ TestK();
+ test.Next(_L("HBufC assignment"));
+ TestL();
+ test.Next(_L("ReAlloc"));
+ TestM();
+ test.Next(_L("ReAllocL - forcing a leave"));
+ TestN();
+ test.Next(_L("ReAllocL - showing success"));
+ TestO();
+ }
+
+template<class T,class S,class L,class R>
+GLDEF_C void TestTDes<T,S,L,R>::test_TBufReturningModifiable()
+ {
+ T a;
+ R b(0,0);
+ a.Copy(_TL("abcdefg"));
+ test_TDesReturningModifiable(a,b);
+ }
+
+template<class T,class S,class L,class R>
+GLDEF_C void TestTDes<T,S,L,R>::test_TPtrReturningModifiable()
+ {
+ S* aBuf;
+ aBuf=_TL("abcdefg");
+ T a(aBuf,7,7);
+ R b(0,0);
+ test_TDesReturningModifiable(a,b);
+ }
+
+template<class T,class S,class L,class R>
+GLDEF_C void TestTDes<T,S,L,R>::test_TDesReturningModifiable(const T& a, R& b)
+ {
+ test.Start(_L("Test TDes derived objects that return TPtrs"));
+
+ test.Next(_L("LeftTPtr"));
+ b.Set(a.LeftTPtr(3));
+ b.__DbgTestInvariant();
+ test(b == a.Left(3));
+
+ b.Set(a.LeftTPtr(0));
+ b.__DbgTestInvariant();
+ test(b == a.Left(0));
+
+ b.Set(a.LeftTPtr(7));
+ b.__DbgTestInvariant();
+ test(b == a.Left(7));
+
+ b = a.LeftTPtr(42);
+ b.__DbgTestInvariant();
+ test(b == a.Left(7));
+
+ test.Next(_L("RightTPtr"));
+ b.Set(a.RightTPtr(5));
+ b.__DbgTestInvariant();
+ test(b == a.Right(5));
+
+ b.Set(a.RightTPtr(7));
+ b.__DbgTestInvariant();
+ test(b == a.Right(7));
+
+ b.Set(a.RightTPtr(0));
+ b.__DbgTestInvariant();
+ test(b == a.Right(0));
+
+ b.Set(a.RightTPtr(42));
+ b.__DbgTestInvariant();
+ test(b == a.Right(42));
+
+ test.Next(_L("MidTPtr"));
+ b.Set(a.MidTPtr(5));
+ b.__DbgTestInvariant();
+ test(b == a.Mid(5));
+
+ b.Set(a.MidTPtr(7));
+ b.__DbgTestInvariant();
+ test(b == a.Mid(7));
+
+ b.Set(a.MidTPtr(0));
+ b.__DbgTestInvariant();
+ test(b == a.Mid(0));
+
+ test.Next(_L("MidTPtr (2 parms)"));
+ b.Set(a.MidTPtr(4,3));
+ b.__DbgTestInvariant();
+ test(b == a.Mid(4,3));
+ test(b == a.Mid(4));
+
+ b.Set(a.MidTPtr(0,0));
+ b.__DbgTestInvariant();
+ test(b == a.Mid(0,0));
+
+ b.Set(a.MidTPtr(3,2));
+ b.__DbgTestInvariant();
+ test(b == a.Mid(3,2));
+
+ b.Set(a.MidTPtr(7,0));
+ b.__DbgTestInvariant();
+ test(b == a.Mid(7,0));
+ }
+
+LOCAL_C void testAssignTPtr()
+//
+// Test assigning TPtr's.
+//
+ {
+
+ TBufC<0x20> x(_S("Hello"));
+ TPtr p=x.Des();
+ p+=_L(" World");
+ test(p==_L("Hello World"));
+ test(x==_L("Hello World"));
+ p.SetLength(5);
+ test(p==_L("Hello"));
+ test(x==_L("Hello"));
+ TBufC<0x20> y(_S("ByeBye"));
+ TPtr q=y.Des();
+ q.Set(p);
+ test(q==p);
+ q+=_L(" World");
+ test(q==_L("Hello World"));
+ test(x==_L("Hello World"));
+ test(y==_L("ByeBye"));
+ q.Set((TText*)x.Ptr(),x.Length(),x.Des().MaxLength());
+ test(q==_L("Hello World"));
+ test(q.MaxLength()==0x20);
+ q.SetLength(1);
+ test(q==_L("H"));
+ test(x==_L("Hello World"));
+ }
+
+LOCAL_C void testTPtrLocateReverse()
+//
+// Test locating in reverse on an empty TPtr
+//
+ {
+
+ TPtrC a;
+ test(a.LocateReverse('0')==KErrNotFound);
+ test(a.LocateReverseF('0')==KErrNotFound);
+ }
+
+_LIT8(KLitTest1_8,"1");
+_LIT8(KLitTest12_8,"12");
+_LIT8(KLitTest123_8,"123");
+_LIT8(KLitTest1234_8,"1234");
+_LIT8(KLitTestalpha_8,"abcdefghijklmnopqrstuvwxyz");
+
+LOCAL_C const TDesC8& testByRef8(TRefByValue<const TDesC8> aRef)
+ {
+ return aRef;
+ }
+
+LOCAL_C void testTLitC8()
+ {
+ test.Start(_L("All members"));
+ test (_L8("")==KNullDesC8); // operator const TDesC8&
+ test (KNullDesC8()==TPtrC8()); // operator()
+ const TDesC8* pNull=&KNullDesC8; // operator&
+ test (pNull->Compare(_L8(""))==0);
+ test (&testByRef8(KNullDesC8)==&KNullDesC8); // operator const TRefByValue<const TDesC8>
+//
+ test.Next(_L("Literal values"));
+ const TDesC8& t1=KLitTest1_8;
+ test (t1.Length()==1);
+ test (t1[0]=='1');
+ test (t1==_L8("1"));
+ const TDesC8& t12=KLitTest12_8;
+ test (t12.Length()==2);
+ test (t12[0]=='1');
+ test (t12==_L8("12"));
+ const TDesC8& t123=KLitTest123_8;
+ test (t123.Length()==3);
+ test (t123[0]=='1');
+ test (t123==_L8("123"));
+ const TDesC8& t1234=KLitTest1234_8;
+ test (t1234.Length()==4);
+ test (t1234[0]=='1');
+ test (t1234==_L8("1234"));
+ const TDesC8& talpha=KLitTestalpha_8;
+ test (talpha.Length()==26);
+ test (talpha[0]=='a');
+ test (talpha==_L8("abcdefghijklmnopqrstuvwxyz"));
+//
+ test.End();
+ }
+
+_LIT16(KLitTest1_16,"1");
+_LIT16(KLitTest12_16,"12");
+_LIT16(KLitTest123_16,"123");
+_LIT16(KLitTest1234_16,"1234");
+_LIT16(KLitTestalpha_16,"abcdefghijklmnopqrstuvwxyz");
+
+LOCAL_C const TDesC16& testByRef16(TRefByValue<const TDesC16> aRef)
+ {
+ return aRef;
+ }
+
+LOCAL_C void testTLitC16()
+ {
+ test.Start(_L("All members"));
+ test (_L16("")==KNullDesC16); // operator const TDesC16&
+ test (KNullDesC16()==TPtrC16()); // operator()
+ const TDesC16* pNull=&KNullDesC16; // operator&
+ test (pNull->Compare(_L16(""))==0);
+ test (&testByRef16(KNullDesC16)==&KNullDesC16); // operator const TRefByValue<const TDesC16>
+//
+ test.Next(_L("Literal values"));
+ const TDesC16& t1=KLitTest1_16;
+ test (t1.Length()==1);
+ test (t1[0]=='1');
+ test (t1==_L16("1"));
+ const TDesC16& t12=KLitTest12_16;
+ test (t12.Length()==2);
+ test (t12[0]=='1');
+ test (t12==_L16("12"));
+ const TDesC16& t123=KLitTest123_16;
+ test (t123.Length()==3);
+ test (t123[0]=='1');
+ test (t123==_L16("123"));
+ const TDesC16& t1234=KLitTest1234_16;
+ test (t1234.Length()==4);
+ test (t1234[0]=='1');
+ test (t1234==_L16("1234"));
+ const TDesC16& talpha=KLitTestalpha_16;
+ test (talpha.Length()==26);
+ test (talpha[0]=='a');
+ test (talpha==_L16("abcdefghijklmnopqrstuvwxyz"));
+//
+ test.End();
+ }
+
+_LIT(KLitTest1,"1");
+_LIT(KLitTest12,"12");
+_LIT(KLitTest123,"123");
+_LIT(KLitTest1234,"1234");
+_LIT(KLitTestalpha,"abcdefghijklmnopqrstuvwxyz");
+
+LOCAL_C const TDesC& testByRef(TRefByValue<const TDesC> aRef)
+ {
+ return aRef;
+ }
+
+LOCAL_C void testTLitC()
+ {
+ test.Start(_L("All members"));
+ test (_L("")==KNullDesC); // operator const TDesC&
+ test (KNullDesC()==TPtrC()); // operator()
+ const TDesC* pNull=&KNullDesC; // operator&
+ test (pNull->Compare(_L(""))==0);
+ test (&testByRef(KNullDesC)==&KNullDesC); // operator const TRefByValue<const TDesC>
+#if defined(_UNICODE)
+ test (_L16("")==KNullDesC); // operator const TDesC&
+ test (KNullDesC()==TPtrC16()); // operator()
+ const TDesC16* pNull16=&KNullDesC; // operator&
+ test (pNull16->Compare(_L16(""))==0);
+ test (&testByRef16(KNullDesC)==&KNullDesC); // operator const TRefByValue<const TDesC>
+#else
+ test (_L8("")==KNullDesC); // operator const TDesC&
+ test (KNullDesC()==TPtrC8()); // operator()
+ const TDesC8* pNull8=&KNullDesC; // operator&
+ test (pNull8->Compare(_L8(""))==0);
+ test (&testByRef8(KNullDesC)==&KNullDesC); // operator const TRefByValue<const TDesC>
+#endif
+//
+ test.Next(_L("Literal values"));
+ const TDesC& t1=KLitTest1;
+ test (t1.Length()==1);
+ test (t1[0]=='1');
+ test (t1==_L("1"));
+ const TDesC& t12=KLitTest12;
+ test (t12.Length()==2);
+ test (t12[0]=='1');
+ test (t12==_L("12"));
+ const TDesC& t123=KLitTest123;
+ test (t123.Length()==3);
+ test (t123[0]=='1');
+ test (t123==_L("123"));
+ const TDesC& t1234=KLitTest1234;
+ test (t1234.Length()==4);
+ test (t1234[0]=='1');
+ test (t1234==_L("1234"));
+ const TDesC& talpha=KLitTestalpha;
+ test (talpha.Length()==26);
+ test (talpha[0]=='a');
+ test (talpha==_L("abcdefghijklmnopqrstuvwxyz"));
+//
+ test.End();
+ }
+
+LOCAL_C void testLiteral()
+ {
+ test.Next(_L("class TLitC8"));
+ testTLitC8();
+ test.Next(_L("class TLitC16"));
+ testTLitC16();
+ test.Next(_L("class TLitC"));
+ testTLitC();
+ }
+
+/**
+@SYMTestCaseID TI18N-TDESC-CIT-4012
+@SYMTestCaseDesc Check surrogate function
+@SYMTestPriority High
+@SYMTestActions Test Match, Locate, FindCorruptSurrogate, Match2
+@SYMTestExpectedResults It works as function specifies
+@SYMREQ REQ12064, REQ12065
+*/
+
+LOCAL_C void testSurrogateAwareInterfaces()
+ {
+ test.Next(_L("new TDesC interfaces"));
+ }
+
+
+#ifndef _DEBUG
+#pragma warning (disable: 4702)// Unreachable code
+#pragma warning (disable: 4701)// Local variable used without being initialized
+#pragma warning (disable: 4710)// Function not expanded
+#endif
+
+GLDEF_C TInt E32Main()
+//
+// Test the TDes type.
+//
+ {
+ test.Title();
+//
+ TInt startAvail,temp;
+ startAvail=User::Available(temp);
+//
+ test.Start(_L("Assigning TPtr's"));
+ testAssignTPtr();
+//
+ test.Next(_L("Locate reverse on empty TPtr"));
+ testTPtrLocateReverse();
+//
+ test.Next(_L("class TBuf<0x40>"));
+ TestTDes<TBuf<0x40>,TText,TUint, TPtrC> jj;
+ jj.test_TBuf();
+ jj.testHeapSpace(startAvail);
+ test.End();
+//
+ test.Next(_L("class TBuf8<0x40>"));
+ TestTDes<TBuf8<0x40>,TUint8,TUint8, TPtrC8> ii;
+ ii.test_TBuf();
+ ii.testHeapSpace(startAvail);
+ test.End();
+//
+ test.Next(_L("class TBuf16<0x40>"));
+ TestTDes<TBuf16<0x40>,TUint16,TUint16, TPtrC16> hh;
+ hh.test_TBuf();
+ hh.testHeapSpace(startAvail);
+ test.End();
+//
+ test.Next(_L("class TPtrC"));
+ TestTDes<TPtrC,TText,TUint, TPtrC> dd;
+ dd.test_TPtrC();
+ dd.testHeapSpace(startAvail);
+ test.End();
+//
+ test.Next(_L("class TPtrC8"));
+ TestTDes<TPtrC8,TUint8,TUint8, TPtrC8> cc;
+ cc.test_TPtrC();
+ cc.testHeapSpace(startAvail);
+ test.End();
+//
+ test.Next(_L("class TPtrC16"));
+ TestTDes<TPtrC16,TUint16,TUint16, TPtrC16> bb;
+ bb.test_TPtrC();
+ bb.testHeapSpace(startAvail);
+ test.End();
+//
+ test.Next(_L("class TPtr"));
+ TestTDes<TPtr,TText,TUint, TPtrC> gg;
+ gg.test_TPtr();
+ gg.testHeapSpace(startAvail);
+ test.Next(_L("Copy constructor"));
+ TestCopy();
+ test.End();
+//
+ test.Next(_L("class TPtr8"));
+ TestTDes<TPtr8,TUint8,TUint8, TPtrC8> ff;
+ ff.test_TPtr();
+ ff.testHeapSpace(startAvail);
+ test.Next(_L("Copy constructor"));
+ TestCopy8();
+ test.End();
+//
+ test.Next(_L("class TPtr16"));
+ TestTDes<TPtr16,TUint16,TUint16, TPtrC16> ee;
+ ee.test_TPtr();
+ ee.testHeapSpace(startAvail);
+ test.Next(_L("Copy constructor"));
+ TestCopy16();
+ test.End();
+//
+ test.Next(_L("class TBufC"));
+ TestTDes<TBufC<0x40>, TText, TUint16, TPtrC> kk;
+ kk.test_TBufC();
+ kk.testHeapSpace(startAvail);
+ test.End();
+//
+ test.Next(_L("class TBufC8"));
+ TestTDes<TBufC8<0x40>, TUint8, TUint8, TPtrC8> ll;
+ ll.test_TBufC();
+ ll.testHeapSpace(startAvail);
+ test.End();
+//
+ test.Next(_L("class TBufC16"));
+ TestTDes<TBufC16<0x40>, TUint16, TUint16, TPtrC16> mm;
+ mm.test_TBufC();
+ mm.testHeapSpace(startAvail);
+ test.End();
+//
+ test.Next(_L("class HBufC"));
+ TestTDes<HBufC, TText, TUint, TPtrC> nn;
+ nn.test_HBufC();
+ nn.testHeapSpace(startAvail);
+ test.End();
+//
+ test.Next(_L("class HBufC8"));
+ TestTDes<HBufC8, TUint8, TUint8, TPtrC8> oo;
+ oo.test_HBufC();
+ oo.testHeapSpace(startAvail);
+ test.End();
+
+ test.Next(_L("Test Unicode to Ascii stuff"));
+ Test16To8();
+//
+ test.Next(_L("class HBufC16"));
+ TestTDes<HBufC16, TUint16, TUint16, TPtrC16> pp;
+ pp.test_HBufC();
+ pp.testHeapSpace(startAvail);
+ test.End();
+//
+ testLiteral();
+//
+ test.Next(_L("class TBuf returning TPtr"));
+ TestTDes<TBuf<0x40>, TText, TUint, TPtr> qq;
+ qq.test_TBufReturningModifiable();
+ test.End();
+
+ test.Next(_L("class TBuf8 returning TPtr8"));
+ TestTDes<TBuf8<0x40>, TText8, TUint8, TPtr8> rr;
+ rr.test_TBufReturningModifiable();
+ test.End();
+
+ test.Next(_L("class TBuf16 returning TPtr16"));
+ TestTDes<TBuf16<0x40>, TText16, TUint16, TPtr16> ss;
+ ss.test_TBufReturningModifiable();
+ test.End();
+
+ test.Next(_L("class TPtr returning TPtr"));
+ TestTDes<TPtr, TText, TUint, TPtr> tt;
+ tt.test_TPtrReturningModifiable();
+ test.End();
+
+ test.Next(_L("class TPtr8 returning TPtr8"));
+ TestTDes<TPtr8, TText8, TUint8, TPtr8> uu;
+ uu.test_TPtrReturningModifiable();
+ test.End();
+
+ test.Next(_L("class TPtr16 returning TPtr16"));
+ TestTDes<TPtr16, TText16, TUint16, TPtr16> vv;
+ vv.test_TPtrReturningModifiable();
+ test.End();
+
+ testSurrogateAwareInterfaces();
+ test.End();
+
+ return(KErrNone);
+ }
+#pragma warning (default: 4702)// Unreachable code
+#pragma warning (default: 4701)// Local variable used without being initialized
+#pragma warning (default: 4710)// Function not expanded
+
+