|         |      1 // Copyright (c) 1994-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 the License "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". | 
|         |      7 // | 
|         |      8 // Initial Contributors: | 
|         |      9 // Nokia Corporation - initial contribution. | 
|         |     10 // | 
|         |     11 // Contributors: | 
|         |     12 // | 
|         |     13 // Description: | 
|         |     14 // e32test\buffer\t_buf.cpp | 
|         |     15 // Overview: | 
|         |     16 // Test methods of the TBuf16, TBuf8, TBuf template class. | 
|         |     17 // API Information: | 
|         |     18 // TBuf16, TBuf8, TBuf. | 
|         |     19 // Details : | 
|         |     20 // - Create some 16 bit modifiable descriptors, 8 bit modifiable descriptors | 
|         |     21 // of fixed length, Build-independent modifiable descriptors, initialize  | 
|         |     22 // with different strings and check for | 
|         |     23 // - Comparison operators, | 
|         |     24 // - Property access methods, | 
|         |     25 // - Fill & swap methods, | 
|         |     26 // - Conversion methods, | 
|         |     27 // - Comparison methods, | 
|         |     28 // - Pattern Matching methods, | 
|         |     29 // - Pattern Locating methods, | 
|         |     30 // - Copying methods,  | 
|         |     31 // - Find, FindC, FindF methods, | 
|         |     32 // - Repeat, Trim, TrimLeft, TrimRight, Insert, Delete, Left, | 
|         |     33 // Right, Mid methods, | 
|         |     34 // - Formatting methods, | 
|         |     35 // - Replace methods are as expected. | 
|         |     36 // - Construct some descriptors with buffer length, string and buffer reference and | 
|         |     37 // verify that they are created successfully. | 
|         |     38 // - Test assignment operators and comparison operators for different descriptors. | 
|         |     39 // - Initialize some descriptors and check descriptors' maximum length, length and  | 
|         |     40 // size are as expected.  | 
|         |     41 // - Check Fill and Swap methods are as expected. | 
|         |     42 // - Test Fold, Collate, LowerCase, UpperCase methods are as expected. | 
|         |     43 // - Test Comparison methods are as expected. | 
|         |     44 // - Test pattern matching for simple string, wild cards with collated comparison. Verify that the  | 
|         |     45 // return value is KErrNotFound when pattern doesn't match. | 
|         |     46 // - Check Locating methods by searching character in forward and backward direction and  | 
|         |     47 // verify the return value is KErrNotFound when unavailable character is searched. | 
|         |     48 // - Check copying strings and converting those into lower and upper case strings are | 
|         |     49 // as expected. | 
|         |     50 // - Check Find methods by searching string and verify the return value is KErrNotFound when  | 
|         |     51 // unavailable string is searched. | 
|         |     52 // - Check Repeat, Trim, Insert and Delete methods are as expected. | 
|         |     53 // - Check the formatting operations are as expected. | 
|         |     54 // - Check integer to decimal character representation is as expected. | 
|         |     55 // - Check integer to character representation with different number system is as expected. | 
|         |     56 // - Check string formatting with variable parameter list is as expected | 
|         |     57 // - Check Replace method by replacing string at different places in a string is as expected. | 
|         |     58 // - Check the conversion of real numbers, extended precision real numbers into string | 
|         |     59 // format is as expected. | 
|         |     60 // - Check Format and FormatList methods are as expected. | 
|         |     61 // - Check Format of TReal is as expected. | 
|         |     62 // - Check the non-leaving and leaving descriptors overflow handlers are as expected.  | 
|         |     63 // Platforms/Drives/Compatibility: | 
|         |     64 // All  | 
|         |     65 // Assumptions/Requirement/Pre-requisites: | 
|         |     66 // Failures and causes: | 
|         |     67 // Base Port information: | 
|         |     68 //  | 
|         |     69 // | 
|         |     70  | 
|         |     71 #include <e32test.h> | 
|         |     72 #include <e32math.h> | 
|         |     73 #include <hal.h> | 
|         |     74 #include <hal_data.h> | 
|         |     75 #include <hal_data.h> | 
|         |     76 #include <e32svr.h> | 
|         |     77  | 
|         |     78 #ifdef __VC32__ | 
|         |     79     // Solve compilation problem caused by non-English locale | 
|         |     80     #pragma setlocale("english") | 
|         |     81 #endif | 
|         |     82  | 
|         |     83 LOCAL_D RTest test(_L("T_BUF")); | 
|         |     84  | 
|         |     85 #pragma warning(disable: 4127) // disabling warning "conditional expression is constant" | 
|         |     86 #pragma warning(disable: 4310) // disabling warning "cast truncates constant value" | 
|         |     87  | 
|         |     88 #undef _TL | 
|         |     89 #define _TL(a) DESTEMPLATE((S*)RTest::String(sizeof(S),(TText8*)a,(TText16*)L ## a))  | 
|         |     90 #undef _TS | 
|         |     91 #define _TS(a) ((const S*)RTest::String(sizeof(S),(TText8*)a,(TText16*)L ## a))  | 
|         |     92  | 
|         |     93 template<class T,class S,class DESTEMPLATE>	 | 
|         |     94 class TestTBuf | 
|         |     95 	{ | 
|         |     96 public: | 
|         |     97 	TestTBuf(TInt aLength); // Test class constructor. | 
|         |     98 	void Test1();   // Tests all functions of the class. | 
|         |     99 	void Test2();   // Tests all constructors. | 
|         |    100 	void Test3();	// Tests all assignment operators | 
|         |    101 	void Test4();	// Tests all comparison operators | 
|         |    102 	void Test5();	// Tests all property access | 
|         |    103 	void Test6();	// Tests all fill and swap | 
|         |    104 	void Test7();	// Tests all conversion  | 
|         |    105 	void Test8();	// Tests all comparison | 
|         |    106 	void Test9();	// Tests all matching | 
|         |    107 	void Test10();	// Tests all locating | 
|         |    108 	void Test11();	// Tests all Copying | 
|         |    109 	void Test12();	// Tests all finding | 
|         |    110 	void Test13();	// Tests all basic like ops | 
|         |    111 	void Test14();  // Tests all formating | 
|         |    112 	void Test15();  // Tests all replacing | 
|         |    113 	void test_TBuf(); // Test all classes | 
|         |    114 protected: | 
|         |    115 	void Test1List(T* a,T* b,...); | 
|         |    116 	void Test14_ReorderedParameterFormatting(TInt aDummyParameter, ...); | 
|         |    117 private: | 
|         |    118 	TInt iMaxBufLength; | 
|         |    119 	}; | 
|         |    120  | 
|         |    121 void TestEq(const TDesC8& a, const TDesC8& b, TInt aLine) | 
|         |    122 	{ | 
|         |    123 	if (a!=b) | 
|         |    124 		{ | 
|         |    125 		TBuf<256> buf; | 
|         |    126 		test.Printf(_L("LINE %d:\n"),aLine); | 
|         |    127 		buf.Copy(a); | 
|         |    128 		test.Printf(_L("a=%S\n"),&buf); | 
|         |    129 		buf.Copy(b); | 
|         |    130 		test.Printf(_L("b=%S\n"),&buf); | 
|         |    131 		test(0); | 
|         |    132 		} | 
|         |    133 	} | 
|         |    134  | 
|         |    135 void TestEq(const TDesC16& a, const TDesC16& b, TInt aLine) | 
|         |    136 	{ | 
|         |    137 	if (a!=b) | 
|         |    138 		{ | 
|         |    139 		test.Printf(_L("LINE %d:\n"),aLine); | 
|         |    140 		test.Printf(_L("a=%S\n"),&a); | 
|         |    141 		test.Printf(_L("b=%S\n"),&b); | 
|         |    142 		test(0); | 
|         |    143 		} | 
|         |    144 	} | 
|         |    145  | 
|         |    146 #define TESTEQ(a,b)	TestEq((a),(b),__LINE__) | 
|         |    147  | 
|         |    148 template <class T,class S,class DESTEMPLATE> | 
|         |    149 GLDEF_C TestTBuf<T,S,DESTEMPLATE>::TestTBuf(TInt aLength) | 
|         |    150 // Constructor. | 
|         |    151 	: iMaxBufLength(aLength) | 
|         |    152 	{} | 
|         |    153  | 
|         |    154 template <class T,class S,class DESTEMPLATE> | 
|         |    155 GLDEF_C void TestTBuf<T,S,DESTEMPLATE>::Test1List(T* a,T* b,...) | 
|         |    156 // Test the format with list functions. | 
|         |    157 	{ | 
|         |    158 	VA_LIST list; | 
|         |    159 	VA_START(list,b); | 
|         |    160 	a->Format(*b,list); | 
|         |    161 	VA_START(list,b); | 
|         |    162 	a->AppendFormat(*b,list); | 
|         |    163 	VA_START(list,b); | 
|         |    164 	a->Format(_TL("%d"),list); | 
|         |    165 	VA_START(list,b); | 
|         |    166 	a->AppendFormat(_TL("%d"),list); | 
|         |    167 	} | 
|         |    168  | 
|         |    169 template <class T,class S,class DESTEMPLATE> | 
|         |    170 GLDEF_C void TestTBuf<T,S,DESTEMPLATE>::Test1() | 
|         |    171 // Tests all functions of the class. | 
|         |    172 	{ | 
|         |    173 	test.Start(_L("Constructors")); | 
|         |    174 	T a; | 
|         |    175 	T b; | 
|         |    176 	T c(_TL("AB")); | 
|         |    177 	T d(c); | 
|         |    178  | 
|         |    179 // To avoid unused warning | 
|         |    180     a.Length(); | 
|         |    181     b.Length(); | 
|         |    182     c.Length(); | 
|         |    183     d.Length(); | 
|         |    184  | 
|         |    185 	test.Next(_L("Copy operators")); | 
|         |    186 	a=_TL("DE"); | 
|         |    187 	b=c; | 
|         |    188 	a+=_TL("DE"); | 
|         |    189 	b+=c; | 
|         |    190  | 
|         |    191 	test.Next(_L("Comparison operators")); | 
|         |    192 	TInt t=(a<b); | 
|         |    193 	t=(a<_TL("AB")); | 
|         |    194 	t=(_TL("AB")<a); | 
|         |    195 	t=(a<=b); | 
|         |    196 	t=(a<=_TL("AB")); | 
|         |    197 	t=(_TL("AB")<=a); | 
|         |    198 	t=(a>b); | 
|         |    199 	t=(a>_TL("AB")); | 
|         |    200 	t=(_TL("AB")>a); | 
|         |    201 	t=(a>=b); | 
|         |    202 	t=(a>=_TL("AB")); | 
|         |    203 	t=(_TL("AB")>=a); | 
|         |    204 	t=(a==b); | 
|         |    205 	t=(a==_TL("AB")); | 
|         |    206 	t=(_TL("AB")==a); | 
|         |    207 	t=(a!=_TL("AB")); | 
|         |    208 	t=(_TL("AB")!=a); | 
|         |    209  | 
|         |    210 	test.Next(_L("Property access")); | 
|         |    211 	a[0]='A'; | 
|         |    212 	a.Ptr(); | 
|         |    213 	TInt i=a.MaxLength()-a.Length(); | 
|         |    214 	i=a.Size(); | 
|         |    215 	a.Zero(); | 
|         |    216 	a.SetLength(2);  | 
|         |    217  | 
|         |    218 	test.Next(_L("Fill & swap")); | 
|         |    219 	a.Fill(' '); | 
|         |    220 	a.Fill(' ',iMaxBufLength); | 
|         |    221 	a.FillZ(); | 
|         |    222 	a.FillZ(iMaxBufLength); | 
|         |    223 	a.Swap(b); | 
|         |    224  | 
|         |    225 	test.Next(_L("Conversion")); | 
|         |    226 	a.Fold(); | 
|         |    227 	a.Collate(); | 
|         |    228 	a.LowerCase(); | 
|         |    229 	a.UpperCase(); | 
|         |    230 	a.Capitalize(); | 
|         |    231  | 
|         |    232 	test.Next(_L("Comparison")); | 
|         |    233 	a.Compare(b); | 
|         |    234 	a.Compare(_TL("AB")); | 
|         |    235 	a.CompareF(b); | 
|         |    236 	a.CompareF(_TL("AB")); | 
|         |    237 	a.CompareC(b); | 
|         |    238 	a.CompareC(_TL("AB")); | 
|         |    239  | 
|         |    240 	test.Next(_L("Matching")); | 
|         |    241 	a.Match(b); | 
|         |    242 	a.Match(_TL("AB")); | 
|         |    243 	a.MatchF(b); | 
|         |    244 	a.MatchF(_TL("AB")); | 
|         |    245  | 
|         |    246 	T buf(_TL("abcdef")); | 
|         |    247 	TInt res = buf.MatchF(_TL("abc*def")); | 
|         |    248 	test(res == 0); | 
|         |    249  | 
|         |    250 	a.MatchC(b); | 
|         |    251 	a.MatchC(_TL("AB")); | 
|         |    252  | 
|         |    253 	test.Next(_L("Locating")); | 
|         |    254 	a.Locate('A'); | 
|         |    255 	a.LocateF('A'); | 
|         |    256 	a.LocateReverse('A'); | 
|         |    257 	a.LocateReverseF('A'); | 
|         |    258  | 
|         |    259 	test.Next(_L("Copying")); | 
|         |    260 	a.Copy(b); | 
|         |    261 	a.Copy(_TL("AB")); | 
|         |    262 //	a.Copy(_TL("AB"),1); | 
|         |    263 	a.CopyF(b); | 
|         |    264 	a.CopyF(_TL("AB")); | 
|         |    265 	a.CopyC(b); | 
|         |    266 	a.CopyC(_TL("AB")); | 
|         |    267 	a.CopyLC(b); | 
|         |    268 	a.CopyLC(_TL("AB")); | 
|         |    269 	a.CopyUC(b); | 
|         |    270 	a.CopyUC(_TL("AB")); | 
|         |    271 	a.CopyCP(b); | 
|         |    272 	a.CopyCP(_TL("AB")); | 
|         |    273  | 
|         |    274 	test.Next(_L("Finding")); | 
|         |    275 	a.Find(b); | 
|         |    276 	a.Find(_TL("AB")); | 
|         |    277 	a.FindF(b); | 
|         |    278 	a.FindF(_TL("AB")); | 
|         |    279 	a.FindC(b); | 
|         |    280 	a.FindC(_TL("AB")); | 
|         |    281  | 
|         |    282 	test.Next(_L("Basic like ops")); | 
|         |    283 	a.Repeat(b); | 
|         |    284 	a.Repeat(_TL("AB")); | 
|         |    285 	a.TrimLeft(); | 
|         |    286 	a.TrimRight(); | 
|         |    287 	a.Trim(); | 
|         |    288 	b=_TL("AA"); | 
|         |    289 	a.Insert(0,b); | 
|         |    290 	a.Delete(0,2); | 
|         |    291 	b = a.Left(1); | 
|         |    292 	b = a.Right(1); | 
|         |    293 	b = a.Mid(0,1); | 
|         |    294  | 
|         |    295 	test.Next(_L("Formating")); | 
|         |    296 	a.Justify(_TL("AB"),10,ELeft,' '); | 
|         |    297 	a.Justify(b,10,ELeft,' '); | 
|         |    298 	b.Fill('A',2); | 
|         |    299 	a.Zero(); | 
|         |    300 	a.AppendJustify(_TL("AB"),10,ELeft,' '); | 
|         |    301 	a.AppendJustify(b,10,ELeft,' '); | 
|         |    302 	TInt v1=10; | 
|         |    303 	a.Num(v1); | 
|         |    304 	a.AppendNum(v1); | 
|         |    305 	TInt v2=10; | 
|         |    306 	a.Num((TUint)v2,EHex); | 
|         |    307 	a.AppendNum((TUint)v2,EHex); | 
|         |    308 	a.NumUC((TUint)v2,EHex); | 
|         |    309 	a.AppendNumUC((TUint)v2,EHex); | 
|         |    310 	TReal v3=10.0; | 
|         |    311 	TRealFormat ff; | 
|         |    312 	ff.iType=KRealFormatFixed; | 
|         |    313 	ff.iWidth=10; | 
|         |    314 	ff.iPlaces=2; | 
|         |    315 	ff.iPoint='.'; | 
|         |    316 	ff.iTriad=','; | 
|         |    317 	ff.iTriLen=3; | 
|         |    318 	a.Num(v3,ff); | 
|         |    319 	a.AppendNum(v3,ff); | 
|         |    320 	a.Format(_TL("%d"),12); | 
|         |    321 	a.AppendFormat(_TL("%d"),12); | 
|         |    322 	b=_TL("%d"); | 
|         |    323 	a.Format(b,12); | 
|         |    324 	a.AppendFormat(b,12); | 
|         |    325 	Test1List(&a,&b,12); | 
|         |    326  | 
|         |    327 	test.Next(_L("Replacing")); | 
|         |    328 	a=_TL("AAC"); | 
|         |    329 	b=_TL("B"); | 
|         |    330 	a.Replace(1,1,b); | 
|         |    331 	test.End(); | 
|         |    332 	} | 
|         |    333  | 
|         |    334 template <class T,class S,class DESTEMPLATE> | 
|         |    335 GLDEF_C void TestTBuf<T,S,DESTEMPLATE>::Test2() | 
|         |    336 // Tests all constructors. | 
|         |    337 	{ | 
|         |    338 	test.Start(_L("Default")); | 
|         |    339 	T a; | 
|         |    340 	test(a.MaxLength()==iMaxBufLength); | 
|         |    341 	test(a.Length()==0); | 
|         |    342  | 
|         |    343 	test.Next(_L("By length")); | 
|         |    344 	T b(iMaxBufLength>>1); | 
|         |    345 	test(b.MaxLength()==iMaxBufLength); | 
|         |    346 	test(b.Length()==(iMaxBufLength>>1)); | 
|         |    347  | 
|         |    348 	test.Next(_L("By string")); | 
|         |    349 	T c(_TL("AB")); | 
|         |    350 	test(c.MaxLength()==iMaxBufLength); | 
|         |    351 	test(c.Length()==2); | 
|         |    352 	test(c[0]=='A'); | 
|         |    353 	test(c[1]=='B'); | 
|         |    354  | 
|         |    355 	test.Next(_L("By buffer reference")); | 
|         |    356 	T d(c); | 
|         |    357 	test(d.MaxLength()==iMaxBufLength); | 
|         |    358 	test(d.Length()==2); | 
|         |    359 	test(d[0]=='A'); | 
|         |    360 	test(d[1]=='B'); | 
|         |    361 	test.End(); | 
|         |    362 	} | 
|         |    363  | 
|         |    364 template <class T,class S,class DESTEMPLATE> | 
|         |    365 GLDEF_C void TestTBuf<T,S,DESTEMPLATE>::Test3() | 
|         |    366 // Tests all assignment operators | 
|         |    367 	{ | 
|         |    368 	test.Start(_L("By String")); | 
|         |    369 	T a; | 
|         |    370 	a=_TL("AB"); | 
|         |    371 	a+=_TL("CD"); | 
|         |    372 	test(a.Length()==4); | 
|         |    373 	test(a==_TL("ABCD")); | 
|         |    374  | 
|         |    375 	test.Next(_L("By buffer")); | 
|         |    376 	T b; | 
|         |    377 	b=a; | 
|         |    378 	b+=a; | 
|         |    379 	test(b.Length()==8); | 
|         |    380 	test(b==_TL("ABCDABCD")); | 
|         |    381 //	 | 
|         |    382 	test.End(); | 
|         |    383 	} | 
|         |    384  | 
|         |    385 template <class T,class S,class DESTEMPLATE> | 
|         |    386 GLDEF_C void TestTBuf<T,S,DESTEMPLATE>::Test4() | 
|         |    387 // Test all comparison operators | 
|         |    388 	{ | 
|         |    389 	test.Start(_L("By NULL string")); | 
|         |    390 	T a; | 
|         |    391 	test(a==_TL(""));		// NULL strings | 
|         |    392 	test(!(a!=_TL(""))); | 
|         |    393 	test(a<=_TL("")); | 
|         |    394 	test(a>=_TL("")); | 
|         |    395 	test(!(a<_TL(""))); | 
|         |    396 	test(!(a>_TL(""))); | 
|         |    397 	test(_TL("")==a); | 
|         |    398 	test(!(_TL("")!=a)); | 
|         |    399 	test(_TL("")<=a); | 
|         |    400 	test(_TL("")>=a); | 
|         |    401 	test(!(_TL("")<a)); | 
|         |    402 	test(!(_TL("")>a)); | 
|         |    403  | 
|         |    404 	test.Next(_L("By string or buffer")); | 
|         |    405 	a=_TL("abc"); | 
|         |    406 	test(a==_TL("abc"));		// == | 
|         |    407 	test(!(a==_TL("xyz"))); | 
|         |    408 	test(!(a==_TL("aa"))); | 
|         |    409 	test(_TL("abc")==a); | 
|         |    410 	test(!(_TL("xyz")==a)); | 
|         |    411 	test(!(_TL("aa")==a)); | 
|         |    412 	test(a!=_TL("xyz"));		// != | 
|         |    413 	test(!(a!=_TL("abc"))); | 
|         |    414 	test(a!=_TL("aa")); | 
|         |    415 	test(_TL("xyz")!=a); | 
|         |    416 	test(!(_TL("abc")!=a)); | 
|         |    417 	test(_TL("aa")!=a); | 
|         |    418 	test(a<_TL("x"));			// < | 
|         |    419 	test(!(a<_TL("abc"))); | 
|         |    420 	test(!(a<_TL("aa"))); | 
|         |    421 	test(_TL("aa")<a); | 
|         |    422 	test(!(_TL("abc")<a)); | 
|         |    423 	test(!(_TL("xyz")<a)); | 
|         |    424 	test(a>_TL("aa"));			// > | 
|         |    425 	test(!(a>_TL("abc"))); | 
|         |    426 	test(!(a>_TL("xyz"))); | 
|         |    427 	test(_TL("xyz")>a); | 
|         |    428 	test(!(_TL("abc")>a)); | 
|         |    429 	test(!(_TL("aa")>a)); | 
|         |    430 	test(a>=_TL("abc"));		// >= | 
|         |    431 	test(!(a>=_TL("xyz"))); | 
|         |    432 	test(a>=_TL("aa")); | 
|         |    433 	test(_TL("abc")>=a); | 
|         |    434 	test(!(_TL("aaa")>=a)); | 
|         |    435 	test(_TL("xyz")>=a); | 
|         |    436 	test(a<=_TL("abc"));		// <= | 
|         |    437 	test(!(a<=_TL("aa"))); | 
|         |    438 	test(a<=_TL("xyz")); | 
|         |    439 	test(_TL("abc")<=a); | 
|         |    440 	test(!(_TL("xyz")<=a)); | 
|         |    441 	test(_TL("aa")<=a); | 
|         |    442  | 
|         |    443 	test.Next(_L("By special characters")); | 
|         |    444 	a=_TL("!@#$%^&*()"); | 
|         |    445 	test(a==_TL("!@#$%^&*()")); | 
|         |    446 	test.End();	 | 
|         |    447 	} | 
|         |    448  | 
|         |    449 template <class T,class S,class DESTEMPLATE> | 
|         |    450 GLDEF_C void TestTBuf<T,S,DESTEMPLATE>::Test5() | 
|         |    451 // Test all property access | 
|         |    452 	{ | 
|         |    453 	test.Start(_L("Length and Size")); | 
|         |    454 	T a; | 
|         |    455 	TInt maxLength=a.MaxLength(); | 
|         |    456     TInt i; | 
|         |    457 	for (i=0;i<maxLength;i++) | 
|         |    458 		{ | 
|         |    459 		test(a.Length()==i);	// Length | 
|         |    460 		test(a.Size()==(TInt)(sizeof(S)*i)); // Size | 
|         |    461 		a.AppendNum(i%10); | 
|         |    462 		} | 
|         |    463 	const T b=a; | 
|         |    464 	for (i=0;i<maxLength;i++) | 
|         |    465 		{ | 
|         |    466 		test(a[i]=='0'+(i%10));	// At | 
|         |    467 		test(b[i]=='0'+(i%10));	// AtConst | 
|         |    468 		} | 
|         |    469 	test(a[0]==*a.Ptr());	//Ptr | 
|         |    470 	a.SetLength(0);	// SetLength | 
|         |    471 	test(a.Length()==0); | 
|         |    472 	a.SetLength(maxLength-1); | 
|         |    473 	test(a.Length()==maxLength-1); | 
|         |    474 	a.Zero();	// Null | 
|         |    475 	test(a.Length()==0); | 
|         |    476 	test.End(); | 
|         |    477 	} | 
|         |    478  | 
|         |    479 template <class T,class S,class DESTEMPLATE> | 
|         |    480 GLDEF_C void TestTBuf<T,S,DESTEMPLATE>::Test6() | 
|         |    481 // Fill and Swap | 
|         |    482 	{ | 
|         |    483 	test.Start(_L("Fill and Swap")); | 
|         |    484 	T a,b; | 
|         |    485 	TChar chr; | 
|         |    486 	TInt j; | 
|         |    487 	TInt maxLength=a.MaxLength(); | 
|         |    488 	for (TInt i=0;i<maxLength;i++) | 
|         |    489 		{ | 
|         |    490 		chr=(i%10)+'0'; | 
|         |    491 		a.SetLength(i); | 
|         |    492 		a.Fill(chr);	// Fill(TChar) | 
|         |    493 		b.Swap(a); | 
|         |    494 		test(b.Length()==i);	// Swap | 
|         |    495 		j=0; | 
|         |    496 		while (j<i) | 
|         |    497 			test(b[j++]=='0'+(i%10)); | 
|         |    498 		b.FillZ();	// FillZ() | 
|         |    499 		a.Swap(b); | 
|         |    500 		j=0; | 
|         |    501 		while (j<i) | 
|         |    502 			test(a[j++]==0); | 
|         |    503 		a.Fill(chr,i);	// Fill(TChar,TUint) | 
|         |    504 		j=0; | 
|         |    505 		while (j<i) | 
|         |    506 			test(a[j++]=='0'+(i%10)); | 
|         |    507 		a.FillZ(i);	// FillZ(TUint) | 
|         |    508 		j=0; | 
|         |    509 		while (j<i) | 
|         |    510 			test(a[j++]==0); | 
|         |    511 		} | 
|         |    512 	test.End(); | 
|         |    513 	} | 
|         |    514  | 
|         |    515 template <class T,class S,class DESTEMPLATE> | 
|         |    516 GLDEF_C void TestTBuf<T,S,DESTEMPLATE>::Test7() | 
|         |    517 // Conversion operators | 
|         |    518 	{ | 
|         |    519 	test.Start(_L("Fold, collate ...")); | 
|         |    520 	T a; | 
|         |    521 	T b; | 
|         |    522 	a=_TL("abc AbC"); | 
|         |    523 	b=_TL("ABC ABC"); | 
|         |    524 	a.Fold(); | 
|         |    525 	b.Fold(); | 
|         |    526 	test(a==b); | 
|         |    527 	a=_TL("abc AbC"); | 
|         |    528 	b=_TL("ABC ABC"); | 
|         |    529 	a.Collate(); | 
|         |    530 	b.Collate(); | 
|         |    531 	test(a==b); | 
|         |    532 	a.LowerCase(); | 
|         |    533 	test(a==_TL("abc abc")); | 
|         |    534 	a.Capitalize(); | 
|         |    535 	test(a==_TL("Abc abc")); | 
|         |    536 	a.UpperCase(); | 
|         |    537 	test(a==_TL("ABC ABC")); | 
|         |    538 	test.End(); | 
|         |    539 	} | 
|         |    540  | 
|         |    541 template <class T,class S,class DESTEMPLATE> | 
|         |    542 GLDEF_C void TestTBuf<T,S,DESTEMPLATE>::Test8() | 
|         |    543 // Comparison | 
|         |    544 	{ | 
|         |    545 	test.Start(_L("By string")); | 
|         |    546 	T a; | 
|         |    547 	a=_TL("abc AbC"); | 
|         |    548 	test(a.Compare(_TL("abc AbC"))==0); | 
|         |    549 	test(a.CompareF(_TL("ABC aBc"))==0); | 
|         |    550 	test(a.Compare(_TL("xyz"))!=0); | 
|         |    551 	test(a.CompareC(_TL("xyz"))!=0); | 
|         |    552 	test(a.CompareF(_TL("xyz"))!=0); | 
|         |    553  | 
|         |    554 	test.Next(_L("By buffer")); | 
|         |    555 	T b; | 
|         |    556 	T c; | 
|         |    557 	a=_TL("abc AbC"); | 
|         |    558 	b=_TL("abc AbC"); | 
|         |    559 	c=_TL("xyz"); | 
|         |    560 	test(a.Compare(b)==0); | 
|         |    561 	test(a.Compare(c)!=0); | 
|         |    562 	b=_TL("ABC aBc"); | 
|         |    563 	test(a.CompareC(c)!=0); | 
|         |    564 	test(a.CompareF(b)==0); | 
|         |    565 	test(a.CompareF(c)!=0); | 
|         |    566  | 
|         |    567 	test.End(); | 
|         |    568 	} | 
|         |    569  | 
|         |    570 template <class T,class S,class DESTEMPLATE> | 
|         |    571 GLDEF_C void TestTBuf<T,S,DESTEMPLATE>::Test9() | 
|         |    572 // Matching (need to test explicit result as error KErrNotFound = KMaxTUint | 
|         |    573 // 			 and so registers as TRUE. (test parameter is TUint) ) | 
|         |    574 	{ | 
|         |    575 	test.Start(_L("By string")); | 
|         |    576 	T a; | 
|         |    577 	a=_TL("abc AbC"); | 
|         |    578 	test(a.Match(_TL("abc AbC"))==0); | 
|         |    579 	test(a.MatchC(_TL("ABC aBc"))==0); | 
|         |    580 	test(a.MatchF(_TL("ABC aBc"))==0); | 
|         |    581 	test(a.Match(_TL("xyz"))==KErrNotFound); | 
|         |    582 	test(a.MatchC(_TL("xyz"))==KErrNotFound); | 
|         |    583 	test(a.MatchF(_TL("xyz"))==KErrNotFound); | 
|         |    584  | 
|         |    585 	test.Next(_L("By buffer")); | 
|         |    586 	T b; | 
|         |    587 	T c; | 
|         |    588 	a=_TL("abc AbC"); | 
|         |    589 	b=_TL("abc AbC"); | 
|         |    590 	c=_TL("xyz"); | 
|         |    591 	test(a.Match(b)==0); | 
|         |    592 	test(a.Match(c)==KErrNotFound); | 
|         |    593 	b=_TL("ABC aBc"); | 
|         |    594 	test(a.MatchC(b)==0); | 
|         |    595 	test(a.MatchC(c)==KErrNotFound); | 
|         |    596 	test(a.MatchF(b)==0); | 
|         |    597 	test(a.MatchF(c)==KErrNotFound); | 
|         |    598  | 
|         |    599 	test.Next(_L("Wildcards")); | 
|         |    600 	a=_TL("abcxyz"); | 
|         |    601 	test(a.Match(_TL("abc*"))==0); | 
|         |    602 	test(a.Match(_TL("abw*"))==KErrNotFound); | 
|         |    603 	a=_TL("abcdefg"); | 
|         |    604 	test(a.Match(_TL("a*fg"))==0); | 
|         |    605 	test(a.Match(_TL("a*f"))==KErrNotFound); | 
|         |    606 	test(a.Match(_TL("abc*fgh"))==KErrNotFound); | 
|         |    607 	a=_TL("abcdef"); | 
|         |    608 	test(a.Match(_TL("abc?ef"))==0); | 
|         |    609 	test(a.Match(_TL("abc?xf"))==KErrNotFound); | 
|         |    610  | 
|         |    611 	a=_TL("a(01)"); | 
|         |    612 	test(a.Match(_TL("*(01)"))==1); | 
|         |    613 	test(a.Match(_TL("?(01)"))==0); | 
|         |    614 	test(a.Match(_TL("?(*)"))==0); | 
|         |    615 	test(a.Match(_TL("?(**)"))==0); | 
|         |    616  | 
|         |    617 	test(a.Match(_TL("?(\?\?)"))==0); | 
|         |    618 	test(a.Match(_TL("*(*)"))>=0); | 
|         |    619 	test(a.Match(_TL("*(0?)"))>=0); | 
|         |    620 	test(a.Match(_TL("a(\?\?)"))==0); | 
|         |    621 	test(a.Match(_TL("*(\?\?)"))>=0); | 
|         |    622  | 
|         |    623 	test.Next(_L("wild cards with collated comparison")); | 
|         |    624 	a = _TL("abcdefghijkl"); | 
|         |    625 	test(a.MatchC(_TL("abc*")) == 0); | 
|         |    626 	test(a.MatchC(_TL("abc")) == KErrNotFound); | 
|         |    627 	test(a.MatchC(_TL("xyz")) == KErrNotFound); | 
|         |    628 	test(a.MatchC(_TL("*def")) == KErrNotFound); | 
|         |    629 	test(a.MatchC(_TL("*def*")) == 3); | 
|         |    630 	test(a.MatchC(_TL("*d?f*")) == 3); | 
|         |    631 	test(a.MatchC(_TL("a*kl")) == 0); | 
|         |    632 	test(a.MatchC(_TL("*e*?l")) == 4); | 
|         |    633 	test(a.MatchC(_TL("abc*dEf*")) == 0); | 
|         |    634 	 | 
|         |    635 	 | 
|         |    636 	T candidate; | 
|         |    637 	T search; | 
|         |    638 	 | 
|         |    639 	candidate = _TL(""); | 
|         |    640 	search = _TL("**"); | 
|         |    641 	test(candidate.MatchC(search) == 0); | 
|         |    642 	 | 
|         |    643 	candidate = _TL(""); | 
|         |    644 	search = _TL("*"); | 
|         |    645 	test(candidate.MatchC(search) == 0); | 
|         |    646 	 | 
|         |    647 	candidate = _TL("abcd"); | 
|         |    648 	search = _TL("*abc*cd"); | 
|         |    649 	test(candidate.MatchC(search) == KErrNotFound); | 
|         |    650    	 | 
|         |    651 	if (sizeof(S) == 2) | 
|         |    652 		{ | 
|         |    653 		test.Next(_L("Unicode MatchC and FindC treat base+accent as equal to composed character")); | 
|         |    654 		TPtrC p = _L("te\x302te"); | 
|         |    655 		test(p.MatchC(_L("t\xeate")) == 0); | 
|         |    656 		test(p.FindC(_L("t\xeate")) == 0); | 
|         |    657 		} | 
|         |    658  | 
|         |    659 	test.End(); | 
|         |    660 	} | 
|         |    661  | 
|         |    662 template <class T,class S,class DESTEMPLATE> | 
|         |    663 GLDEF_C void TestTBuf<T,S,DESTEMPLATE>::Test10() | 
|         |    664 // Locating | 
|         |    665 	{ | 
|         |    666 	T a; | 
|         |    667 	TChar b; | 
|         |    668  | 
|         |    669 	test.Start(_L("First Char")); | 
|         |    670 	b='a'; | 
|         |    671 	a=_TL("axaxa"); | 
|         |    672 	test(a.Locate(b)==0); | 
|         |    673 	test(a.LocateF(b)==0); | 
|         |    674 	test(a.LocateReverse(b)==4); | 
|         |    675 	test(a.LocateReverseF(b)==4); | 
|         |    676  | 
|         |    677 	test.Next(_L("Middle Char")); | 
|         |    678 	a=_TL("xaxa"); | 
|         |    679 	test(a.Locate(b)==1); | 
|         |    680 	test(a.LocateF(b)==1); | 
|         |    681 	a=_TL("axax"); | 
|         |    682 	test(a.LocateReverse(b)==2); | 
|         |    683 	test(a.LocateReverseF(b)==2); | 
|         |    684  | 
|         |    685 	test.Next(_L("Last Char")); | 
|         |    686 	a=_TL("xxa"); | 
|         |    687 	test(a.Locate(b)==2); | 
|         |    688 	test(a.LocateF(b)==2); | 
|         |    689 	a=_TL("axx"); | 
|         |    690 	test(a.LocateReverse(b)==0); | 
|         |    691 	test(a.LocateReverseF(b)==0); | 
|         |    692  | 
|         |    693 	test.Next(_L("Test for failure of locate")); | 
|         |    694 	a=_TL("xxx"); | 
|         |    695 	test(a.Locate(b)==KErrNotFound); | 
|         |    696 	test(a.LocateF(b)==KErrNotFound); | 
|         |    697 	test(a.LocateReverse(b)==KErrNotFound); | 
|         |    698 	test(a.LocateReverseF(b)==KErrNotFound); | 
|         |    699  | 
|         |    700 	test.End(); | 
|         |    701 	} | 
|         |    702  | 
|         |    703 template <class T,class S,class DESTEMPLATE> | 
|         |    704 GLDEF_C void TestTBuf<T,S,DESTEMPLATE>::Test11() | 
|         |    705 // Copying | 
|         |    706 	{ | 
|         |    707 	T a, b; | 
|         |    708 		 | 
|         |    709 	test.Start(_L("By String")); | 
|         |    710 	a.Copy(_TL("abc")); | 
|         |    711 	test(a.Length()==3); | 
|         |    712 	test(a==_TL("abc")); | 
|         |    713 	a.CopyF(_TL("abc")); | 
|         |    714 	test(a.Length()==3); | 
|         |    715 	b.CopyF(_TL("ABC")); | 
|         |    716 	test(a==b); | 
|         |    717 	a.CopyLC(_TL("AbC")); | 
|         |    718 	test(a==_TL("abc")); | 
|         |    719 	test(a.Length()==3); | 
|         |    720 	a.CopyC(_TL("abc")); | 
|         |    721 	b.CopyC(_TL("ABC")); | 
|         |    722 	test(a==b); | 
|         |    723 	test(a.Length()==3); | 
|         |    724 	a.CopyCP(_TL("abc")); | 
|         |    725 	test(a==_TL("Abc")); | 
|         |    726 	test(a.Length()==3); | 
|         |    727 	a.CopyUC(_TL("aBc")); | 
|         |    728 	test(a==_TL("ABC")); | 
|         |    729 	test(a.Length()==3); | 
|         |    730 //	a.Copy(_TL("abc"),3); | 
|         |    731 //	test(a==_TL("abc")); | 
|         |    732 //	test(a.Length()==3); | 
|         |    733 //	a.Copy(_TL("abcd"),3); | 
|         |    734 //	test(a==_TL("abc")); | 
|         |    735 //	test(a.Length()==3); | 
|         |    736  | 
|         |    737 	test.Next(_L("By buffer")); | 
|         |    738 	b=_TL("abc"); | 
|         |    739 	a.Copy(b); | 
|         |    740 	test(a==_TL("abc")); | 
|         |    741 	test(a.Length()==3); | 
|         |    742 	a=_TL(""); | 
|         |    743 	a.CopyF(b); | 
|         |    744 	b.CopyF(_TL("ABC")); | 
|         |    745 	test(a==b); | 
|         |    746 	test(a.Length()==3); | 
|         |    747 	a=_TL(""); | 
|         |    748 	b=_TL("AbC"); | 
|         |    749 	a.CopyLC(b); | 
|         |    750 	test(a==_TL("abc")); | 
|         |    751 	test(a.Length()==3); | 
|         |    752 	a=_TL(""); | 
|         |    753 	b=_TL("abC"); | 
|         |    754 	a.CopyC(b); | 
|         |    755 	b.CopyC(_TL("ABC")); | 
|         |    756 	test(a==b); | 
|         |    757 	test(a.Length()==3); | 
|         |    758 	a=_TL(""); | 
|         |    759 	b=_TL("abC"); | 
|         |    760 	a.CopyCP(b); | 
|         |    761 	test(a==_TL("Abc")); | 
|         |    762 	test(a.Length()==3); | 
|         |    763 	a=_TL(""); | 
|         |    764 	b=_TL("aBc"); | 
|         |    765 	a.CopyUC(b); | 
|         |    766 	test(a.Length()==3); | 
|         |    767 	test(a==_TL("ABC")); | 
|         |    768  | 
|         |    769 	test.End(); | 
|         |    770 	} | 
|         |    771  | 
|         |    772  | 
|         |    773 template <class T,class S,class DESTEMPLATE> | 
|         |    774 GLDEF_C void TestTBuf<T,S,DESTEMPLATE>::Test12() | 
|         |    775 // Finding | 
|         |    776 	{ | 
|         |    777 	test.Start(_L("By String")); | 
|         |    778 	T a,b; | 
|         |    779 	a=_TL("abccef"); | 
|         |    780 	test(a.Find(_TL(""))==0); | 
|         |    781 	test(a.Find(_TL("abc"))==0); | 
|         |    782 	test(a.Find(_TL("cce"))==2); | 
|         |    783 	test(a.Find(_TL("cef"))==3); | 
|         |    784 	test(a.Find(_TL("efg"))==KErrNotFound); | 
|         |    785 	test(a.Find(_TL("xxx"))==KErrNotFound); | 
|         |    786 	test(a.FindF(_TL(""))==0); | 
|         |    787 	test(a.FindF(_TL("AbC"))==0); | 
|         |    788 	test(a.FindF(_TL("CcE"))==2); | 
|         |    789 	test(a.FindF(_TL("CeF"))==3); | 
|         |    790 	test(a.FindF(_TL("efg"))==KErrNotFound); | 
|         |    791 	test(a.FindF(_TL("xxx"))==KErrNotFound); | 
|         |    792 	test(a.FindC(_TL(""))==0); | 
|         |    793 	test(a.FindC(_TL("aBc"))==0); | 
|         |    794 	test(a.FindC(_TL("cce"))==2); | 
|         |    795 	test(a.FindC(_TL("cEf"))==3); | 
|         |    796 	test(a.FindC(_TL("efg"))==KErrNotFound); | 
|         |    797 	test(a.FindC(_TL("xxx"))==KErrNotFound); | 
|         |    798  | 
|         |    799 	test.Next(_L("By buffer")); | 
|         |    800 	test(a.Find(b)==0); | 
|         |    801 	test(a.FindF(b)==0); | 
|         |    802 	test(a.FindC(b)==0); | 
|         |    803 	b=_TL("xxx"); | 
|         |    804 	test(a.Find(b)==KErrNotFound); | 
|         |    805 	test(a.FindF(b)==KErrNotFound); | 
|         |    806 	test(a.FindC(b)==KErrNotFound); | 
|         |    807 	b=_TL("efg"); | 
|         |    808 	test(a.Find(b)==KErrNotFound); | 
|         |    809 	test(a.FindF(b)==KErrNotFound); | 
|         |    810 	test(a.FindC(b)==KErrNotFound); | 
|         |    811 	b=_TL("abc"); | 
|         |    812 	test(a.Find(b)==0); | 
|         |    813 	b=_TL("cce"); | 
|         |    814 	test(a.Find(b)==2); | 
|         |    815 	b=_TL("cef"); | 
|         |    816 	test(a.Find(b)==3); | 
|         |    817 	b=_TL("AbC"); | 
|         |    818 	test(a.FindF(b)==0); | 
|         |    819 	b=_TL("CcE"); | 
|         |    820 	test(a.FindF(b)==2); | 
|         |    821 	b=_TL("CeF"); | 
|         |    822 	test(a.FindF(b)==3); | 
|         |    823 	b=_TL("aBc"); | 
|         |    824 	test(a.FindC(b)==0); | 
|         |    825 	b=_TL("cCe"); | 
|         |    826 	test(a.FindC(b)==2); | 
|         |    827 	b=_TL("cEf"); | 
|         |    828 	test(a.FindC(b)==3); | 
|         |    829  | 
|         |    830 	test.End(); | 
|         |    831 	} | 
|         |    832  | 
|         |    833 template <class T,class S,class DESTEMPLATE> | 
|         |    834 GLDEF_C void TestTBuf<T,S,DESTEMPLATE>::Test13() | 
|         |    835 // Basic like ops | 
|         |    836 	{ | 
|         |    837 	test.Start(_L("Repeat, trim, insert and delete")); | 
|         |    838 	T a,b; | 
|         |    839 	TInt max=a.MaxLength();  | 
|         |    840 	b=_TL("abc"); | 
|         |    841 	a.Repeat(_TL("abc")); | 
|         |    842 	test(a==_TL("")); | 
|         |    843 	a.Repeat(b); | 
|         |    844 	test(a==_TL("")); | 
|         |    845 	for (TInt j=1;j<max;j++) // ?? Cannot SetLength = MaxLength | 
|         |    846 		{ | 
|         |    847 		a.SetLength(j); | 
|         |    848 		a.Repeat(_TL("abc")); | 
|         |    849         TInt i; | 
|         |    850 		for (i=0;i<j;i++) | 
|         |    851 			test(a[i]==b[i%3]); | 
|         |    852 		a=_TL(""); | 
|         |    853 		a.SetLength(j); | 
|         |    854 		a.Repeat(b); | 
|         |    855 		for (i=0;i<j;i++) | 
|         |    856 			test(a[i]==b[i%3]); | 
|         |    857 		a=_TL(""); | 
|         |    858 		} | 
|         |    859 	a=_TL("\t\n  ab \t\n "); | 
|         |    860 	a.TrimLeft(); | 
|         |    861 	test(a==_TL("ab \t\n ")); | 
|         |    862 	test(a.Length()==6); | 
|         |    863 	a=_TL("\t\n  ab \t\n "); | 
|         |    864 	a.TrimRight(); | 
|         |    865 	test(a==_TL("\t\n  ab")); | 
|         |    866 	test(a.Length()==6); | 
|         |    867 	a=_TL(" \t\n ab \t \n"); | 
|         |    868 	a.Trim(); | 
|         |    869 	test(a==_TL("ab")); | 
|         |    870 	a.Trim(); | 
|         |    871 	test(a==_TL("ab")); | 
|         |    872 	a=_TL("abc"); | 
|         |    873 	b=_TL("123"); | 
|         |    874 	a.Insert(1,b); | 
|         |    875 	test(a==_TL("a123bc")); | 
|         |    876 	test(a.Length()==6); | 
|         |    877 	b=_TL(""); | 
|         |    878 	a.Insert(4,b); | 
|         |    879 	test(a==_TL("a123bc")); | 
|         |    880 	test(a.Length()==6); | 
|         |    881 	a.Insert(0,b); | 
|         |    882 	test(a==_TL("a123bc")); | 
|         |    883 	test(a.Length()==6); | 
|         |    884 	a.Delete(1,3); | 
|         |    885 	test(a==_TL("abc")); | 
|         |    886 	test(a.Length()==3); | 
|         |    887 	a.Delete(0,3); | 
|         |    888 	test(a==_TL("")); | 
|         |    889 	test(a.Length()==0); | 
|         |    890  | 
|         |    891 	test.Next(_L("TrimAll")); | 
|         |    892 	a=_TL(""); | 
|         |    893 	a.TrimAll(); | 
|         |    894 	test(a==_TL("")); | 
|         |    895 	a=_TL(" "); | 
|         |    896 	a.TrimAll(); | 
|         |    897 	test(a==_TL("")); | 
|         |    898 	a=_TL("   "); | 
|         |    899 	a.TrimAll(); | 
|         |    900 	test(a==_TL("")); | 
|         |    901 	a=_TL("    ab cd  ef    g"); | 
|         |    902 	a.TrimAll(); | 
|         |    903 	test(a==_TL("ab cd ef g")); | 
|         |    904 	a=_TL("abcdef"); | 
|         |    905 	a.TrimAll(); | 
|         |    906 	test(a==_TL("abcdef")); | 
|         |    907 	a=_TL("a  b\t cd\t\tef"); | 
|         |    908 	a.TrimAll(); | 
|         |    909 	test(a==_TL("a b\tcd\tef")); | 
|         |    910 	a=_TL("abcdef \t ghijk"); | 
|         |    911 	a.TrimAll(); | 
|         |    912 	test(a==_TL("abcdef ghijk")); | 
|         |    913 	a=_TL("abcdef g"); | 
|         |    914 	a.TrimAll(); | 
|         |    915 	test(a==_TL("abcdef g")); | 
|         |    916 	a=_TL("ab  cd  ef  gh  ij"); | 
|         |    917 	a.TrimAll(); | 
|         |    918 	test(a==_TL("ab cd ef gh ij")); | 
|         |    919 	a=_TL("a        b          c     defg h     i  jk l     mno pqr stu  vw   xyz"); | 
|         |    920 	a.TrimAll(); | 
|         |    921 	test(a==_TL("a b c defg h i jk l mno pqr stu vw xyz")); | 
|         |    922  | 
|         |    923 	test.Next(_L("Right, Left and Mid")); | 
|         |    924 	a=_TL("abcdef"); | 
|         |    925 	b = a.Left(3); | 
|         |    926 	test(b==_TL("abc")); | 
|         |    927 	test(b.Length()==3); | 
|         |    928 	b = a.Right(3); | 
|         |    929 	test(b==_TL("def")); | 
|         |    930 	b = a.Mid(2); | 
|         |    931 	test(b==_TL("cdef")); | 
|         |    932 	test(b.Length()==4); | 
|         |    933 	b = a.Left(2); | 
|         |    934 	test(b==_TL("ab")); | 
|         |    935 	test(b.Length()==2); | 
|         |    936 	b = a.Right(2); | 
|         |    937 	test(b==_TL("ef")); | 
|         |    938 	b = a.Mid(2,1); | 
|         |    939 	test(b==_TL("c")); | 
|         |    940 	test(b.Length()==1); | 
|         |    941 	b = a.Left(6); | 
|         |    942 	test(b==_TL("abcdef")); | 
|         |    943 	test(b.Length()==6); | 
|         |    944 	b=_TL(""); | 
|         |    945 	b.SetLength(4); | 
|         |    946 	b = a.Right(6); | 
|         |    947 	test(b==_TL("abcdef")); | 
|         |    948 	test(b.Length()==6); | 
|         |    949 	a = a.Left(6); | 
|         |    950 	test(a==_TL("abcdef")); | 
|         |    951 	b=_TL(""); | 
|         |    952 	b = a.Mid(0,6); | 
|         |    953 	test(b==_TL("abcdef"));  | 
|         |    954 	test.End(); | 
|         |    955 	} | 
|         |    956  | 
|         |    957 template <class T,class S,class DESTEMPLATE> | 
|         |    958 GLDEF_C void TestTBuf<T,S,DESTEMPLATE>::Test14() | 
|         |    959 // Formating operations | 
|         |    960 	{ | 
|         |    961 	test.Start(_L("Justify")); | 
|         |    962 	T a,b,d; | 
|         |    963 	TInt aWidth; | 
|         |    964 	TChar c; | 
|         |    965 	a=_TL("wxyz"); | 
|         |    966 	b=_TL("abc"); | 
|         |    967 	d=_TL("linearisation"); | 
|         |    968 	const S* pD=_TS("299792458"); | 
|         |    969 	c='x'; | 
|         |    970 	aWidth=KDefaultJustifyWidth; // Left justified, Default width | 
|         |    971 	a.Justify(b,aWidth,ELeft,c); | 
|         |    972 	test(a==b); | 
|         |    973 	test(a.Length()==3); | 
|         |    974 	a.AppendJustify(b,aWidth,ELeft,c); | 
|         |    975 	test(a==_TL("abcabc")); | 
|         |    976 	test(a.Length()==6); | 
|         |    977 	aWidth=1;	// Width < String length | 
|         |    978 	a.Justify(b,aWidth,ELeft,c); | 
|         |    979 	test(a==_TL("a")); | 
|         |    980 	test(a.Length()==1); | 
|         |    981 	a.AppendJustify(b,aWidth,ELeft,c); | 
|         |    982 	test(a==_TL("aa")); | 
|         |    983 	test(a.Length()==2); | 
|         |    984 	aWidth=5; // Width > String length | 
|         |    985 	a.Justify(b,aWidth,ELeft,c); | 
|         |    986 	test(a==_TL("abcxx")); | 
|         |    987 	test(a.Length()==5); | 
|         |    988 	a.AppendJustify(b,aWidth,ELeft,c); | 
|         |    989 	test(a==_TL("abcxxabcxx")); | 
|         |    990 	test(a.Length()==10); | 
|         |    991  | 
|         |    992 	aWidth=KDefaultJustifyWidth; // Right justified, Default width | 
|         |    993 	a.Justify(b,aWidth,ERight,c); | 
|         |    994 	test(a==b); | 
|         |    995 	test(a.Length()==3); | 
|         |    996 	a.AppendJustify(b,aWidth,ERight,c); | 
|         |    997 	test(a==_TL("abcabc")); | 
|         |    998 	test(a.Length()==6); | 
|         |    999 	aWidth=1; // Right justified, Width < String length | 
|         |   1000 	a.Justify(b,aWidth,ERight,c); | 
|         |   1001 	test(a==_TL("a")); | 
|         |   1002 	test(a.Length()==1); | 
|         |   1003 	a.AppendJustify(b,aWidth,ERight,c); | 
|         |   1004 	test(a==_TL("aa")); | 
|         |   1005 	test(a.Length()==2); | 
|         |   1006 	aWidth=5; // Right justified, width > String length | 
|         |   1007 	a.Justify(b,aWidth,ERight,c); | 
|         |   1008 	test(a==_TL("xxabc")); | 
|         |   1009 	test(a.Length()==5); | 
|         |   1010 	a.AppendJustify(b,aWidth,ERight,c); | 
|         |   1011 	test(a==_TL("xxabcxxabc")); | 
|         |   1012 	test(a.Length()==10); | 
|         |   1013  | 
|         |   1014 	aWidth=KDefaultJustifyWidth; // Center justified, Default width | 
|         |   1015 	a.Justify(b,aWidth,ECenter,c); | 
|         |   1016 	test(a==b); | 
|         |   1017 	test(a.Length()==3); | 
|         |   1018 	a.AppendJustify(b,aWidth,ECenter,c); | 
|         |   1019 	test(a==_TL("abcabc")); | 
|         |   1020 	test(a.Length()==6); | 
|         |   1021 	aWidth=1; // Centre justified, width < String length | 
|         |   1022 	a.Justify(b,aWidth,ECenter,c); | 
|         |   1023 	test(a==_TL("a")); | 
|         |   1024 	test(a.Length()==1); | 
|         |   1025 	a.AppendJustify(b,aWidth,ECenter,c); | 
|         |   1026 	test(a==_TL("aa")); | 
|         |   1027 	test(a.Length()==2); | 
|         |   1028 	aWidth=5; // Centre justified, width > String length | 
|         |   1029 	a.Justify(b,aWidth,ECenter,c); | 
|         |   1030 	test(a==_TL("xabcx")); | 
|         |   1031 	test(a.Length()==5); | 
|         |   1032 	a.AppendJustify(b,aWidth,ECenter,c); | 
|         |   1033 	test(a==_TL("xabcxxabcx")); | 
|         |   1034 	test(a.Length()==10); | 
|         |   1035  | 
|         |   1036 	test.Next(_L("Num")); | 
|         |   1037 	TInt j=-2147483647-1;  | 
|         |   1038 	a.Num(j); | 
|         |   1039 	test(a==_TL("-2147483648")); | 
|         |   1040 	test(a.Length()==11); | 
|         |   1041 	TUint i=2147483648u; | 
|         |   1042 	a.Num(i); | 
|         |   1043 	test(a==_TL("2147483648")); | 
|         |   1044 	test(a.Length()==10); | 
|         |   1045 	if (a.MaxLength()>31) | 
|         |   1046 		{ | 
|         |   1047 		a.Num(i,EBinary); | 
|         |   1048 		test(a==_TL("10000000000000000000000000000000")); | 
|         |   1049 		test(a.Length()==32); | 
|         |   1050 		a=_TL(""); | 
|         |   1051 		a.NumUC(i,EBinary); | 
|         |   1052 		test(a==_TL("10000000000000000000000000000000")); | 
|         |   1053 		test(a.Length()==32); | 
|         |   1054 		} | 
|         |   1055 	i=31; | 
|         |   1056 	a.Num(i,EBinary); | 
|         |   1057 	test(a==_TL("11111")); | 
|         |   1058 	test(a.Length()==5); | 
|         |   1059 	a=_TL(""); | 
|         |   1060 	a.NumUC(i,EBinary); | 
|         |   1061 	test(a==_TL("11111")); | 
|         |   1062 	test(a.Length()==5); | 
|         |   1063 	i=2147483648u; | 
|         |   1064 	a.Num(i,EOctal); | 
|         |   1065 	test(a==_TL("20000000000")); | 
|         |   1066 	test(a.Length()==11); | 
|         |   1067 	a=_TL(""); | 
|         |   1068 	a.NumUC(i,EOctal); | 
|         |   1069 	test(a==_TL("20000000000")); | 
|         |   1070 	test(a.Length()==11); | 
|         |   1071 	a.Num(i,EDecimal); | 
|         |   1072 	test(a==_TL("2147483648")); | 
|         |   1073 	test(a.Length()==10); | 
|         |   1074 	a=_TL(""); | 
|         |   1075 	a.NumUC(i,EDecimal); | 
|         |   1076 	test(a==_TL("2147483648")); | 
|         |   1077 	test(a.Length()==10); | 
|         |   1078 	a.Num(i,EHex); | 
|         |   1079 	test(a==_TL("80000000")); | 
|         |   1080 	test(a.Length()==8); | 
|         |   1081 	a=_TL(""); | 
|         |   1082 	a.NumUC(i,EHex); | 
|         |   1083 	test(a==_TL("80000000")); | 
|         |   1084 	test(a.Length()==8); | 
|         |   1085 	i=0; | 
|         |   1086 	a.Num(i); | 
|         |   1087 	test(a==_TL("0")); | 
|         |   1088 	test(a.Length()==1); | 
|         |   1089 	a=_TL("abc"); | 
|         |   1090 	a.Num(i,EBinary); | 
|         |   1091 	test(a==_TL("0")); | 
|         |   1092 	test(a.Length()==1); | 
|         |   1093 	a=_TL("abc"); | 
|         |   1094 	a.NumUC(i,EBinary); | 
|         |   1095 	test(a==_TL("0")); | 
|         |   1096 	test(a.Length()==1); | 
|         |   1097 	a=_TL("abc"); | 
|         |   1098 	a.Num(i,EOctal); | 
|         |   1099 	test(a==_TL("0")); | 
|         |   1100 	test(a.Length()==1); | 
|         |   1101 	a=_TL(""); | 
|         |   1102 	a.NumUC(i,EOctal); | 
|         |   1103 	test(a==_TL("0")); | 
|         |   1104 	test(a.Length()==1); | 
|         |   1105 	a=_TL("abc"); | 
|         |   1106 	a.Num(i,EDecimal); | 
|         |   1107 	test(a==_TL("0")); | 
|         |   1108 	test(a.Length()==1); | 
|         |   1109 	a=_TL(""); | 
|         |   1110 	a.NumUC(i,EDecimal); | 
|         |   1111 	test(a==_TL("0")); | 
|         |   1112 	test(a.Length()==1); | 
|         |   1113 	a=_TL("abc"); | 
|         |   1114 	a.Num(i,EHex); | 
|         |   1115 	test(a==_TL("0")); | 
|         |   1116 	test(a.Length()==1); | 
|         |   1117 	a=_TL(""); | 
|         |   1118 	a.NumUC(i,EHex); | 
|         |   1119 	test(a==_TL("0")); | 
|         |   1120 	test(a.Length()==1); | 
|         |   1121 //	TInt i=a.Num(6.2,format); NOT IMPLEMENTED | 
|         |   1122 	a.AppendNum(j); | 
|         |   1123 	test(a==_TL("0-2147483648")); | 
|         |   1124 	test(a.Length()==12); | 
|         |   1125 	a=_TL("abc"); | 
|         |   1126 	i=4294967295u; | 
|         |   1127 	a.AppendNum(i); | 
|         |   1128 	test(a==_TL("abc4294967295")); | 
|         |   1129 	test(a.Length()==13); | 
|         |   1130 	j=2147483647; | 
|         |   1131 	a=_TL("abc"); | 
|         |   1132 	a.AppendNum(j); | 
|         |   1133 	test(a==_TL("abc2147483647")); | 
|         |   1134 	test(a.Length()==13); | 
|         |   1135 	a=_TL("a"); | 
|         |   1136 	i=180150000; | 
|         |   1137 	if (a.MaxLength()>28) | 
|         |   1138 		{ | 
|         |   1139 		a.AppendNum(i,EBinary); | 
|         |   1140 		test(a==_TL("a1010101111001101111011110000")); | 
|         |   1141 		test(a.Length()==29); | 
|         |   1142 		} | 
|         |   1143 	a=_TL("a"); | 
|         |   1144 	a.AppendNum(15,EBinary); | 
|         |   1145 	test(a==_TL("a1111")); | 
|         |   1146 	test(a.Length()==5); | 
|         |   1147 	a=_TL("a"); | 
|         |   1148 	a.AppendNum(i,EDecimal); | 
|         |   1149 	test(a==_TL("a180150000")); | 
|         |   1150 	test(a.Length()==10); | 
|         |   1151 	a=_TL("a"); | 
|         |   1152 	a.AppendNum(i,EOctal); | 
|         |   1153 	test(a==_TL("a1257157360")); | 
|         |   1154 	test(a.Length()==11); | 
|         |   1155 	a=_TL("a"); | 
|         |   1156 	a.AppendNumUC(i,EHex); | 
|         |   1157 	test(a==_TL("aABCDEF0")); | 
|         |   1158 	test(a.Length()==8); | 
|         |   1159 //	i=a.AppendNum(6.32, format); NOT IMPLEMENTED | 
|         |   1160  | 
|         |   1161 	test.Next(_L("Format")); | 
|         |   1162 	a=_TL(""); | 
|         |   1163 	b=_TL("cde"); | 
|         |   1164 	a.Format(_TL("%S"),&b); | 
|         |   1165 	test(a==b); | 
|         |   1166 	test(a.Length()==3); | 
|         |   1167     DESTEMPLATE xyz=_TL("xyzwpq"); | 
|         |   1168 	a.Format(_TL("%S"),&xyz); | 
|         |   1169 	test(a==_TL("xyzwpq")); | 
|         |   1170 	test(a.Length()==6); | 
|         |   1171     DESTEMPLATE cde=_TL("cde"); | 
|         |   1172 	a.Format(_TL("ab %-x5S"),&cde); | 
|         |   1173 	test(a==_TL("ab cdexx")); | 
|         |   1174 	test(a.Length()==8); | 
|         |   1175 	a.Format(_TL("ab %=x5S"),&cde); | 
|         |   1176 	test(a==_TL("ab xcdex")); | 
|         |   1177 	test(a.Length()==8); | 
|         |   1178 	a.Format(_TL("ab %+x5S"),&cde); | 
|         |   1179 	test(a==_TL("ab xxcde")); | 
|         |   1180 	test(a.Length()==8); | 
|         |   1181 	a.Format(_TL("ab %5S"),&cde); | 
|         |   1182 	test(a==_TL("ab   cde")); | 
|         |   1183 	test(a.Length()==8); | 
|         |   1184 	a.Format(_TL("ab %-**S"),'x',5,&cde); | 
|         |   1185 	test(a==_TL("ab cdexx")); | 
|         |   1186 	test(a.Length()==8); | 
|         |   1187 	a.Format(_TL("ab %*S"),5,&cde); | 
|         |   1188 	test(a==_TL("ab   cde")); | 
|         |   1189 	test(a.Length()==8); | 
|         |   1190 	a=_TL("xyz"); | 
|         |   1191 	a.Format(_TL("ab %-x5S"),&b); | 
|         |   1192 	test(a==_TL("ab cdexx")); | 
|         |   1193 	test(a.Length()==8); | 
|         |   1194 	a=_TL("xyz"); | 
|         |   1195 	a.Format(_TL("ab %-**S"),'x',5,&b); | 
|         |   1196 	test(a==_TL("ab cdexx")); | 
|         |   1197 	test(a.Length()==8); | 
|         |   1198 	a=_TL("xyz"); | 
|         |   1199 	a.Format(_TL("ab %*S"),5,&b); | 
|         |   1200 	test(a==_TL("ab   cde")); | 
|         |   1201 	test(a.Length()==8); | 
|         |   1202  | 
|         |   1203 	DESTEMPLATE fred=_TL("fred"); | 
|         |   1204 	a.Format(_TL("%+0*S"),10,&fred); | 
|         |   1205 	test(a==_TL("000000fred")); | 
|         |   1206 	test(a.Length()==10); | 
|         |   1207 	a.Format(_TL("%-0*S"),7,&fred); | 
|         |   1208 	test(a==_TL("fred000")); | 
|         |   1209 	test(a.Length()==7); | 
|         |   1210 	a.Format(_TL("%0*S"),11,&fred); | 
|         |   1211 	test(a==_TL("0000000fred")); | 
|         |   1212 	test(a.Length()==11); | 
|         |   1213 	a.Format(_TL("c=%s"),pD); | 
|         |   1214 	TESTEQ(a,_TL("c=299792458")); | 
|         |   1215 	a.Format(_TL("c=%10.6s"),pD); | 
|         |   1216 	test(a==_TL("c=    299792")); | 
|         |   1217 	a.Format(_TL("c=%*.*s"),5,4,pD); | 
|         |   1218 	test(a==_TL("c= 2997")); | 
|         |   1219 	a.Format(_TL("%S"),&d); | 
|         |   1220 	test(a==_TL("linearisation")); | 
|         |   1221 	a.Format(_TL("%10.6S"),&d); | 
|         |   1222 	test(a==_TL("    linear")); | 
|         |   1223 	a.Format(_TL("%*.*S"),5,4,&d); | 
|         |   1224 	test(a==_TL(" line")); | 
|         |   1225 	a.Format(_TL("%*.*Sed"),10,8,&d); | 
|         |   1226 	test(a==_TL("  linearised")); | 
|         |   1227 	a.Format(_TL("%*.*S"),14,20,&d); | 
|         |   1228 	test(a==_TL(" linearisation")); | 
|         |   1229  | 
|         |   1230 	a.Format(_TL("ab %-,5b"),7); | 
|         |   1231 	test(a==_TL("ab 111,,")); | 
|         |   1232 	test(a.Length()==8); | 
|         |   1233 	a.Format(_TL("ab %=,5O"),31); | 
|         |   1234 	test(a==_TL("ab ,37,,")); | 
|         |   1235 	test(a.Length()==8); | 
|         |   1236 	a.Format(_TL("ab %+xlx"),TInt64(171)); | 
|         |   1237 	test(a==_TL("ab ab")); | 
|         |   1238 	test(a.Length()==5); | 
|         |   1239 	a.Format(_TL("ab %+xlX %+xlx"),TInt64(171),TInt64(171)); | 
|         |   1240 	TESTEQ(a,_TL("ab AB ab")); | 
|         |   1241 	test(a.Length()==8); | 
|         |   1242 	a.Format(_TL("ab %lu"),MAKE_TINT64((TUint)(KMinTInt),0)); | 
|         |   1243 	test(a==_TL("ab 9223372036854775808")); | 
|         |   1244 	test(a.Length()==22); | 
|         |   1245 	a.Format(_TL("ab %ld"),MAKE_TINT64((TUint)(KMinTInt),1)); | 
|         |   1246 	test(a==_TL("ab -9223372036854775807")); | 
|         |   1247 	test(a.Length()==23); | 
|         |   1248 	a.Format(_TL("ab %ld"),MAKE_TINT64((TUint)(KMinTInt),0)); | 
|         |   1249 	test(a==_TL("ab -9223372036854775808")); | 
|         |   1250 	test(a.Length()==23); | 
|         |   1251 	a.Format(_TL("ab %ld"),MAKE_TINT64((TUint)(KMaxTInt),KMaxTUint)); | 
|         |   1252 	test(a==_TL("ab 9223372036854775807")); | 
|         |   1253 	test(a.Length()==22); | 
|         |   1254 	a.Format(_TL("ab %ld"),MAKE_TINT64(KMaxTUint,KMaxTUint)); | 
|         |   1255 	test(a==_TL("ab -1")); | 
|         |   1256 	test(a.Length()==5); | 
|         |   1257 	a.Format(_TL("ab %lu"),MAKE_TINT64(KMaxTUint,KMaxTUint)); | 
|         |   1258 	test(a==_TL("ab 18446744073709551615")); | 
|         |   1259 	test(a.Length()==23); | 
|         |   1260 	a.Format(_TL("ab %ld"),TInt64(0)); | 
|         |   1261 	test(a==_TL("ab 0")); | 
|         |   1262 	test(a.Length()==4); | 
|         |   1263 	a.Format(_TL("ab %lb"),TInt64(0)); | 
|         |   1264 	test(a==_TL("ab 0")); | 
|         |   1265 	test(a.Length()==4); | 
|         |   1266 	a.Format(_TL("ab %lx"),TInt64(0)); | 
|         |   1267 	test(a==_TL("ab 0")); | 
|         |   1268 	test(a.Length()==4); | 
|         |   1269 	a.Format(_TL("ab %lo"),TInt64(0)); | 
|         |   1270 	test(a==_TL("ab 0")); | 
|         |   1271 	test(a.Length()==4); | 
|         |   1272 	a.Format(_TL("ab %lu"),TInt64(0)); | 
|         |   1273 	test(a==_TL("ab 0")); | 
|         |   1274 	test(a.Length()==4); | 
|         |   1275 	a.Format(_TL("ab %lb"),MAKE_TINT64((TUint)(KMaxTInt),KMaxTUint)); | 
|         |   1276 	test(a==_TL("ab 111111111111111111111111111111111111111111111111111111111111111")); | 
|         |   1277 	test(a.Length()==66); | 
|         |   1278 	a.Format(_TL("ab %lb"),MAKE_TINT64(KMaxTUint,KMaxTUint)); | 
|         |   1279 	test(a==_TL("ab 1111111111111111111111111111111111111111111111111111111111111111")); | 
|         |   1280 	test(a.Length()==67); | 
|         |   1281 	a.Format(_TL("ab %lx"),MAKE_TINT64((TUint)(KMaxTInt),KMaxTUint)); | 
|         |   1282 	test(a==_TL("ab 7fffffffffffffff")); | 
|         |   1283 	test(a.Length()==19); | 
|         |   1284 	a.Format(_TL("ab %lx"),MAKE_TINT64(KMaxTUint,KMaxTUint)); | 
|         |   1285 	test(a==_TL("ab ffffffffffffffff")); | 
|         |   1286 	test(a.Length()==19); | 
|         |   1287 	a.Format(_TL("ab %lo"),MAKE_TINT64((TUint)(KMaxTInt),KMaxTUint)); | 
|         |   1288 	test(a==_TL("ab 777777777777777777777")); | 
|         |   1289 	test(a.Length()==24); | 
|         |   1290 	// tests which excercise any 8 byte alignment requirement on 64bit integers | 
|         |   1291 	a.Format(_TL("%li%S"),MAKE_TINT64(1,2),&fred); | 
|         |   1292 	test(a==_TL("4294967298fred")); | 
|         |   1293 	a.Format(_TL("%S%li%S"),&fred,MAKE_TINT64(1,2),&fred); | 
|         |   1294 	test(a==_TL("fred4294967298fred")); | 
|         |   1295 	a.Format(_TL("%lu%S"),MAKE_TINT64(1,2),&fred); | 
|         |   1296 	test(a==_TL("4294967298fred")); | 
|         |   1297 	a.Format(_TL("%S%lu%S"),&fred,MAKE_TINT64(1,2),&fred); | 
|         |   1298 	test(a==_TL("fred4294967298fred")); | 
|         |   1299  | 
|         |   1300 	a.Format(_TL("ab %U"),233); | 
|         |   1301 	test(a==_TL("ab 233")); | 
|         |   1302 	test(a.Length()==6); | 
|         |   1303 	a.Format(_TL("ab %*d"),5,-131); | 
|         |   1304 	test(a==_TL("ab  -131")); | 
|         |   1305 	test(a.Length()==8); | 
|         |   1306 	a.Format(_TL("ab%c"),'x'); | 
|         |   1307 	test(a==_TL("abx")); | 
|         |   1308 	test(a.Length()==3); | 
|         |   1309 	a.Format(_TL("%W"),-131); | 
|         |   1310 	test(*(TInt32*)a.Ptr()==-131); | 
|         |   1311 	a.Format(_TL("%M"),-131); | 
|         |   1312 	test(*(TInt32*)a.Ptr()==2113929215); | 
|         |   1313 	a.Format(_TL("%w"),-131); | 
|         |   1314 	test(*(TInt16*)a.Ptr()==-131); | 
|         |   1315 	a.Format(_TL("%m"),-131); | 
|         |   1316 	test(*(TInt16*)a.Ptr()==32255); | 
|         |   1317 	a=_TL("xyz"); | 
|         |   1318 	a.AppendFormat(_TL("ab %+xlx"),TInt64(171)); | 
|         |   1319 	test(a==_TL("xyzab ab")); | 
|         |   1320 	test(a.Length()==8); | 
|         |   1321 	a=_TL("xyz"); | 
|         |   1322 	a.AppendFormat(_TL("ab %5S"),&b); | 
|         |   1323 	test(a==_TL("xyzab   cde")); | 
|         |   1324 	test(a.Length()==11); | 
|         |   1325 	a=_TL("xyz"); | 
|         |   1326 	a.AppendFormat(_TL("%W"),-131); | 
|         |   1327 //	test(*(TInt32*)(a.Ptr()+3)==-131); // Alignment-safe version: | 
|         |   1328     TInt val; | 
|         |   1329     Mem::Copy(&val,&a[3],4); | 
|         |   1330 	test(val==-131); | 
|         |   1331 	a=_TL("xyz"); | 
|         |   1332 //	a.Append(_TL("abc"),3); | 
|         |   1333 //	test(a==_TL("xyzabc")); | 
|         |   1334  | 
|         |   1335 	a.Format(_TL("")); | 
|         |   1336 	test(a==_TL("")); | 
|         |   1337 	a.Format(_TL(""),9,5); | 
|         |   1338 	test(a==_TL("")); | 
|         |   1339 	a.Format(_TL("qwerty")); | 
|         |   1340 	test(a==_TL("qwerty")); | 
|         |   1341 	a.Format(_TL("qwerty"),9,5); | 
|         |   1342 	test(a==_TL("qwerty")); | 
|         |   1343 	a.Format(_TL("%$1$d%$2$d"),9,5); | 
|         |   1344 	test(a==_TL("95")); | 
|         |   1345 	test(a.Length()==2); | 
|         |   1346 	a.Format(_TL("%$2$d%$1$d"),9,5); | 
|         |   1347 	test(a==_TL("59")); | 
|         |   1348 	test(a.Length()==2); | 
|         |   1349 	b=_TL("eb"); | 
|         |   1350 	a.Format(_TL("%$1$S%$2$d"),&b,205); | 
|         |   1351 	test(a==_TL("eb205")); | 
|         |   1352 	test(a.Length()==5); | 
|         |   1353 	a.Format(_TL("%$2$d%$1$S"),&b,205); | 
|         |   1354 	test(a==_TL("205eb")); | 
|         |   1355 	test(a.Length()==5); | 
|         |   1356 	b=_TL("ebdb"); | 
|         |   1357  | 
|         |   1358 // Cannot do this on GCC (X86) because of "Cannot pass objects of non-POD type through '...'. Call will abort at runtime". | 
|         |   1359 #if !(defined(__GCC32__) && defined(__X86__)) | 
|         |   1360 	const TAny* const zeroTerminatedString=(sizeof(S)==2)? (const TAny*)_S16(":-)E"): (const TAny*)_S8(":-)E"); | 
|         |   1361 	const TInt dummyParameter=0; | 
|         |   1362 	Test14_ReorderedParameterFormatting(dummyParameter, 0x20ac, 11, 3, 13.89543, zeroTerminatedString, '!', TInt64(199), 2, &b, 6, 30005, TRealX(0.125), 0x8bdd); | 
|         |   1363 #endif | 
|         |   1364  | 
|         |   1365 	test.Next(_L("Print some numbers")); | 
|         |   1366 	TInt64 TI64 = MAKE_TINT64(0x101010u,0x10101010u); | 
|         |   1367 	test.Printf(_L("    %%ld: %ld\n"),TI64); | 
|         |   1368 	test.Printf(_L("    %%lu: %lu\n"),TI64); | 
|         |   1369 	test.Printf(_L("    %%lx: %lx\n"),TI64); | 
|         |   1370 	test.Printf(_L("    %%lb: %lb\n"),TI64); | 
|         |   1371 	test.Printf(_L("    %%lo: %lo\n\n"),TI64); | 
|         |   1372 	TI64 = UI64LIT(0xabcdef12345678); | 
|         |   1373 	test.Printf(_L("    %%ld: %ld\n"),TI64); | 
|         |   1374 	test.Printf(_L("    %%lu: %lu\n"),TI64); | 
|         |   1375 	test.Printf(_L("    %%lx: %lx\n"),TI64); | 
|         |   1376 	test.Printf(_L("    %%lb: %lb\n"),TI64); | 
|         |   1377 	test.Printf(_L("    %%lo: %lo\n\n"),TI64); | 
|         |   1378 	TI64 = UI64LIT(0x7fffffffffffffff); | 
|         |   1379 	test.Printf(_L("    %%ld: %ld\n"),TI64); | 
|         |   1380 	test.Printf(_L("    %%lu: %lu\n"),TI64); | 
|         |   1381 	test.Printf(_L("    %%lx: %lx\n"),TI64); | 
|         |   1382 	test.Printf(_L("    %%lb: %lb\n"),TI64); | 
|         |   1383 	test.Printf(_L("    %%lo: %lo\n\n"),TI64); | 
|         |   1384 	TI64 = UI64LIT(0x8000000000000000); | 
|         |   1385 	test.Printf(_L("    %%ld: %ld\n"),TI64); | 
|         |   1386 	test.Printf(_L("    %%lu: %lu\n"),TI64); | 
|         |   1387 	test.Printf(_L("    %%lx: %lx\n"),TI64); | 
|         |   1388 	test.Printf(_L("    %%lb: %lb\n"),TI64); | 
|         |   1389 	test.Printf(_L("    %%lo: %lo\n\n"),TI64); | 
|         |   1390 	TI64 = UI64LIT(0xffffffffffffffff); | 
|         |   1391 	test.Printf(_L("    %%ld: %ld\n"),TI64); | 
|         |   1392 	test.Printf(_L("    %%lu: %lu\n"),TI64); | 
|         |   1393 	test.Printf(_L("    %%lx: %lx\n"),TI64); | 
|         |   1394 	test.Printf(_L("    %%lb: %lb\n"),TI64); | 
|         |   1395 	test.Printf(_L("    %%lo: %lo\n\n"),TI64); | 
|         |   1396  | 
|         |   1397 	test.Next(_L("Regression tests")); | 
|         |   1398 	a.Format(_TL("[%-A4p]")); | 
|         |   1399 	test(a==_TL("[AAAA]")); | 
|         |   1400  | 
|         |   1401 	test.End(); | 
|         |   1402 	} | 
|         |   1403  | 
|         |   1404 template <class T,class S,class DESTEMPLATE> | 
|         |   1405 GLDEF_C void TestTBuf<T,S,DESTEMPLATE>::Test14_ReorderedParameterFormatting(TInt aDummyParameter, ...) | 
|         |   1406 	{ | 
|         |   1407 	VA_LIST parameterList; | 
|         |   1408 	T generated; | 
|         |   1409 	T expected; | 
|         |   1410  | 
|         |   1411 	VA_START(parameterList, aDummyParameter); | 
|         |   1412 	generated.FormatList(_TL("\t%-**.*fqq%.3swww%+*5Ldeeee%.*Srrrrr%0*xtttttt%.3Fyyyyyyy%c"), parameterList); | 
|         |   1413 	test(generated.Length()==61); | 
|         |   1414 	expected.Format(_TL("\t13.895%c%c%c%c%cqq:-)www!!199eeeeebrrrrr007535tttttt0.125yyyyyyy"), (S)0x20ac, (S)0x20ac, (S)0x20ac, (S)0x20ac, (S)0x20ac); | 
|         |   1415 	test(generated.Left(generated.Length()-1)==expected); | 
|         |   1416 	test(generated[generated.Length()-1]==(S)0x8bdd); | 
|         |   1417  | 
|         |   1418 	VA_START(parameterList, aDummyParameter); | 
|         |   1419 	generated.FormatList(_TL("\t%$1$-**.*fqq%.3swww%+*5Ldeeee%.*Srrrrr%0*xtttttt%$6$.3Fyyyyyyy%c"), parameterList); | 
|         |   1420 	test(generated.Length()==61); | 
|         |   1421 	expected.Format(_TL("\t13.895%c%c%c%c%cqq:-)www!!199eeeeebrrrrr007535tttttt0.125yyyyyyy"), (S)0x20ac, (S)0x20ac, (S)0x20ac, (S)0x20ac, (S)0x20ac); | 
|         |   1422 	test(generated.Left(generated.Length()-1)==expected); | 
|         |   1423 	test(generated[generated.Length()-1]==(S)0x8bdd); | 
|         |   1424  | 
|         |   1425 	VA_START(parameterList, aDummyParameter); | 
|         |   1426 	generated.FormatList(_TL("\t%$6$.3Fqq%.3swww%+*5Ldeeee%.*Srrrrr%0*xtttttt%$1$-**.*fyyyyyyy%c"), parameterList); | 
|         |   1427 	test(generated.Length()==61); | 
|         |   1428 	expected.Format(_TL("\t0.125qq:-)www!!199eeeeebrrrrr007535tttttt13.895%c%c%c%c%cyyyyyyy"), (S)0x20ac, (S)0x20ac, (S)0x20ac, (S)0x20ac, (S)0x20ac); | 
|         |   1429 	test(generated.Left(generated.Length()-1)==expected); | 
|         |   1430 	test(generated[generated.Length()-1]==(S)0x8bdd); | 
|         |   1431  | 
|         |   1432 	VA_START(parameterList, aDummyParameter); | 
|         |   1433 	generated.FormatList(_TL("\t%-**.*fqq%.3swww%$5$0*xeeee%.*Srrrrr%$3$+*5Ldtttttt%.3Fyyyyyyy%c"), parameterList); | 
|         |   1434 	test(generated.Length()==61); | 
|         |   1435 	expected.Format(_TL("\t13.895%c%c%c%c%cqq:-)www007535eeeeebrrrrr!!199tttttt0.125yyyyyyy"), (S)0x20ac, (S)0x20ac, (S)0x20ac, (S)0x20ac, (S)0x20ac); | 
|         |   1436 	test(generated.Left(generated.Length()-1)==expected); | 
|         |   1437 	test(generated[generated.Length()-1]==(S)0x8bdd); | 
|         |   1438  | 
|         |   1439 	VA_START(parameterList, aDummyParameter); | 
|         |   1440 	generated.FormatList(_TL("\t%-**.*fqq%$4$.*Swww%+*5Ldeeee%$2$.3srrrrr%0*xtttttt%.3Fyyyyyyy%c"), parameterList); | 
|         |   1441 	test(generated.Length()==61); | 
|         |   1442 	expected.Format(_TL("\t13.895%c%c%c%c%cqqebwww!!199eeee:-)rrrrr007535tttttt0.125yyyyyyy"), (S)0x20ac, (S)0x20ac, (S)0x20ac, (S)0x20ac, (S)0x20ac); | 
|         |   1443 	test(generated.Left(generated.Length()-1)==expected); | 
|         |   1444 	test(generated[generated.Length()-1]==(S)0x8bdd); | 
|         |   1445  | 
|         |   1446 	VA_START(parameterList, aDummyParameter); | 
|         |   1447 	generated.FormatList(_TL("\t%-**.*fqq%.3swww%+*5Ldeeee%$7$crrrrr%0*xtttttt%.3Fyyyyyyy%$4$.*S"), parameterList); | 
|         |   1448 	test(generated.Length()==61); | 
|         |   1449 	expected.Format(_TL("\t13.895%c%c%c%c%cqq:-)www!!199eeee"), (S)0x20ac, (S)0x20ac, (S)0x20ac, (S)0x20ac, (S)0x20ac); | 
|         |   1450 	test(generated.Left(29)==expected); | 
|         |   1451 	test(generated[29]==(S)0x8bdd); | 
|         |   1452 	test(generated.Mid(29+1)==_TL("rrrrr007535tttttt0.125yyyyyyyeb")); | 
|         |   1453  | 
|         |   1454 	VA_START(parameterList, aDummyParameter); | 
|         |   1455 	generated.FormatList(_TL("\t%$4$.*Sqq%.3swww%+*5Ldeeee%$6$.3Frrrrr%0*xtttttt%$1$-**.*fyyyyyyy%c"), parameterList); | 
|         |   1456 	test(generated.Length()==61); | 
|         |   1457 	expected.Format(_TL("\tebqq:-)www!!199eeee0.125rrrrr007535tttttt13.895%c%c%c%c%cyyyyyyy"), (S)0x20ac, (S)0x20ac, (S)0x20ac, (S)0x20ac, (S)0x20ac); | 
|         |   1458 	test(generated.Left(generated.Length()-1)==expected); | 
|         |   1459 	test(generated[generated.Length()-1]==(S)0x8bdd); | 
|         |   1460  | 
|         |   1461 	VA_START(parameterList, aDummyParameter); | 
|         |   1462 	generated.FormatList(_TL("\t%$7$cqq%$6$.3Fwww%$5$0*xeeee%.*Srrrrr%$3$+*5Ldtttttt%$2$.3syyyyyyy%$1$-**.*f"), parameterList); | 
|         |   1463 	test(generated.Length()==61); | 
|         |   1464 	test(generated.Left(1)==_TL("\t")); | 
|         |   1465 	test(generated[1]==(S)0x8bdd); | 
|         |   1466 	expected.Format(_TL("qq0.125www007535eeeeebrrrrr!!199tttttt:-)yyyyyyy13.895%c%c%c%c%c"), (S)0x20ac, (S)0x20ac, (S)0x20ac, (S)0x20ac, (S)0x20ac); | 
|         |   1467 	test(generated.Mid(2)==expected); | 
|         |   1468  | 
|         |   1469 	VA_START(parameterList, aDummyParameter); | 
|         |   1470 	generated.FormatList(_TL("\t%$7$cqq%$6$.3Fwww%$5$0*xeeee%$4$.*Srrrrr%$3$+*5Ldtttttt%$2$.3syyyyyyy%$1$-**.*f"), parameterList); | 
|         |   1471 	test(generated.Length()==61); | 
|         |   1472 	test(generated.Left(1)==_TL("\t")); | 
|         |   1473 	test(generated[1]==(S)0x8bdd); | 
|         |   1474 	expected.Format(_TL("qq0.125www007535eeeeebrrrrr!!199tttttt:-)yyyyyyy13.895%c%c%c%c%c"), (S)0x20ac, (S)0x20ac, (S)0x20ac, (S)0x20ac, (S)0x20ac); | 
|         |   1475 	test(generated.Mid(2)==expected); | 
|         |   1476 	} | 
|         |   1477  | 
|         |   1478 template <class T,class S,class DESTEMPLATE> | 
|         |   1479 GLDEF_C void TestTBuf<T,S,DESTEMPLATE>::Test15() | 
|         |   1480 // Replacing | 
|         |   1481 	{ | 
|         |   1482 	test.Start(_L("Replace")); | 
|         |   1483 	T a,b; | 
|         |   1484 	test(a.MaxLength()>=9); | 
|         |   1485 	a=_TL("abccccc"); | 
|         |   1486 	b=_TL("def"); | 
|         |   1487 	a.Replace(3,4,b); // Replace with smaller in middle (insert and delete) | 
|         |   1488 	test(a==_TL("abcdef")); | 
|         |   1489 	a.Replace(1,1,b); // Replace with larger in middle (insert and delete) | 
|         |   1490 	test(a==_TL("adefcdef")); | 
|         |   1491 	a.Replace(0,8,_TL("")); // Replace complete string (delete) | 
|         |   1492 	test(a==_TL("")); | 
|         |   1493 	a.Replace(0,0,b); // Replace at beginning (insert) | 
|         |   1494 	test(a==b); | 
|         |   1495 	a.Replace(3,0,_TL("xyz")); // Replace at end (append) | 
|         |   1496 	test(a==_TL("defxyz")); | 
|         |   1497 	a.Replace(0,0,_TL("")); // Replace nothing at beginning (do nothing) | 
|         |   1498 	test(a==_TL("defxyz")); | 
|         |   1499 	a.Replace(6,0,_TL("")); // Replace nothing at end (do nothing) | 
|         |   1500 	test(a==_TL("defxyz")); | 
|         |   1501 	//a.Replace(6,1,_TL("")); // this will panic - no char after end to replace | 
|         |   1502 	//a.Replace(0,7,_TL("")); // this will panic - aint 7 chars to replace | 
|         |   1503 	test.End(); | 
|         |   1504 	} | 
|         |   1505  | 
|         |   1506 template<class T,class S,class DESTEMPLATE> | 
|         |   1507 GLDEF_C void TestTBuf<T,S,DESTEMPLATE>::test_TBuf() | 
|         |   1508 // Test the TBuf class. | 
|         |   1509 	{ | 
|         |   1510 	test.Start(_L("All operations")); | 
|         |   1511 	Test1(); | 
|         |   1512 	test.Next(_L("Constructors")); | 
|         |   1513 	Test2(); | 
|         |   1514 	test.Next(_L("Additional tests")); | 
|         |   1515 	Test3(); | 
|         |   1516 	test.Next(_L("Comparison operators")); | 
|         |   1517 	Test4(); | 
|         |   1518 	test.Next(_L("Property access")); | 
|         |   1519 	Test5(); | 
|         |   1520 	test.Next(_L("Fill and swap")); | 
|         |   1521 	Test6(); | 
|         |   1522 	test.Next(_L("Conversion operators")); | 
|         |   1523 	Test7(); | 
|         |   1524 	test.Next(_L("Comparison")); | 
|         |   1525 	Test8(); | 
|         |   1526 	test.Next(_L("Matching")); | 
|         |   1527 	Test9(); | 
|         |   1528 	test.Next(_L("Locating")); | 
|         |   1529 	Test10(); | 
|         |   1530 	test.Next(_L("Copying")); | 
|         |   1531 	Test11(); | 
|         |   1532 	test.Next(_L("Finding")); | 
|         |   1533 	Test12(); | 
|         |   1534 	test.Next(_L("Basic like ops")); | 
|         |   1535 	Test13(); | 
|         |   1536 	test.Next(_L("Formating")); | 
|         |   1537 	Test14(); | 
|         |   1538 	test.Next(_L("Replacing")); | 
|         |   1539 	Test15(); | 
|         |   1540 	test.End(); | 
|         |   1541 	} | 
|         |   1542  | 
|         |   1543 LOCAL_C void testFormat() | 
|         |   1544 	{ | 
|         |   1545 	TBuf<0x100> aa; | 
|         |   1546 	aa.Format(_L("x%- 5fx"), 6.2345678); | 
|         |   1547 	test(aa==_L("x6.234568x")); | 
|         |   1548 	aa.Format(_L("x%+ 5fx"), 6.2345678); | 
|         |   1549 	test(aa==_L("x6.234568x")); | 
|         |   1550 	aa.Format(_L("x% 5fx"), 6.2345678); | 
|         |   1551 	test(aa==_L("x6.234568x")); | 
|         |   1552 	aa.Format(_L("x%= 5fx"), 6.2345678); | 
|         |   1553 	test(aa==_L("x6.234568x")); | 
|         |   1554 	aa.Format(_L("x%- 10fx"), 6.2345); | 
|         |   1555 	test(aa==_L("x6.234500  x")); | 
|         |   1556 	aa.Format(_L("x%+ 10fx"), 6.2345); | 
|         |   1557 	test(aa==_L("x  6.234500x")); | 
|         |   1558 	aa.Format(_L("x% 10fx"), 6.2345); | 
|         |   1559 	test(aa==_L("x  6.234500x")); | 
|         |   1560 	aa.Format(_L("x%= 10fx"), 6.2345); | 
|         |   1561 	test(aa==_L("x 6.234500 x")); | 
|         |   1562 	aa.Format(_L("x%10fx"), 12345352342.545); | 
|         |   1563 	test(aa==_L("x12,345,352,342.545000x")); | 
|         |   1564 	aa.Format(_L("x%20.9fx"), 1.0123456789); | 
|         |   1565 	test(aa==_L("x         1.012345679x")); | 
|         |   1566 	aa.Format(_L("x%5.1fx"), 1.99); | 
|         |   1567 	test(aa==_L("x  2.0x")); | 
|         |   1568  | 
|         |   1569 // Cannot do these on GCC (X86) because of "Cannot pass objects of non-POD type through '...'. Call will abort at runtime". | 
|         |   1570 #if !(defined(__GCC32__) && defined(__X86__)) | 
|         |   1571 	aa.Format(_L("x%- 5Fx"), TRealX(6.2345678)); | 
|         |   1572 	test(aa==_L("x6.234568x")); | 
|         |   1573 	aa.Format(_L("x%+ 5Fx"), TRealX(6.2345678)); | 
|         |   1574 	test(aa==_L("x6.234568x")); | 
|         |   1575 	aa.Format(_L("x% 5Fx"), TRealX(6.2345678)); | 
|         |   1576 	test(aa==_L("x6.234568x")); | 
|         |   1577 	aa.Format(_L("x%= 5Fx"), TRealX(6.2345678)); | 
|         |   1578 	test(aa==_L("x6.234568x")); | 
|         |   1579 	aa.Format(_L("x%- 10Fx"), TRealX(6.2345)); | 
|         |   1580 	test(aa==_L("x6.234500  x")); | 
|         |   1581 	aa.Format(_L("x%+ 10Fx"), TRealX(6.2345)); | 
|         |   1582 	test(aa==_L("x  6.234500x")); | 
|         |   1583 	aa.Format(_L("x% 10Fx"), TRealX(6.2345)); | 
|         |   1584 	test(aa==_L("x  6.234500x")); | 
|         |   1585 	aa.Format(_L("x%+010Fx"), TRealX(6.2345)); | 
|         |   1586 	test(aa==_L("x006.234500x")); | 
|         |   1587 	aa.Format(_L("x%+10Fx"), TRealX(6.2345)); | 
|         |   1588 	test(aa==_L("x  6.234500x")); | 
|         |   1589 	aa.Format(_L("x%10Fx"), TRealX(6.2345)); | 
|         |   1590 	test(aa==_L("x  6.234500x")); | 
|         |   1591 	aa.Format(_L("x%010Fx"), TRealX(6.2345)); | 
|         |   1592 	test(aa==_L("x006.234500x")); | 
|         |   1593 	aa.Format(_L("x%= 10Fx"), TRealX(6.2345)); | 
|         |   1594 	test(aa==_L("x 6.234500 x")); | 
|         |   1595 	aa.Format(_L("x%10Fx"), TRealX(12345352342.545)); | 
|         |   1596 	test(aa==_L("x12,345,352,342.545000x")); | 
|         |   1597 	aa.Format(_L("x%20.9Fx"), TRealX(1.0123456789)); | 
|         |   1598 	test(aa==_L("x         1.012345679x")); | 
|         |   1599 	aa.Format(_L("x%5.1Fx"), TRealX(1.99)); | 
|         |   1600 	test(aa==_L("x  2.0x")); | 
|         |   1601 #endif | 
|         |   1602  | 
|         |   1603 	aa.Format(_L("x%- 5ex"), 6.2345678); | 
|         |   1604 	test(aa==_L("x6.234568E+00x")); | 
|         |   1605 	aa.Format(_L("x%+ 5ex"), 6.2345678); | 
|         |   1606 	test(aa==_L("x6.234568E+00x")); | 
|         |   1607 	aa.Format(_L("x% 5ex"), 6.2345678); | 
|         |   1608 	test(aa==_L("x6.234568E+00x")); | 
|         |   1609 	aa.Format(_L("x%= 5ex"), 6.2345678); | 
|         |   1610 	test(aa==_L("x6.234568E+00x")); | 
|         |   1611 	aa.Format(_L("x%- 14ex"), 6.2345); | 
|         |   1612 	test(aa==_L("x6.234500E+00  x")); | 
|         |   1613 	aa.Format(_L("x%+ 14ex"), 6.2345); | 
|         |   1614 	test(aa==_L("x  6.234500E+00x")); | 
|         |   1615 	aa.Format(_L("x% 14ex"), 6.2345); | 
|         |   1616 	test(aa==_L("x  6.234500E+00x")); | 
|         |   1617 	aa.Format(_L("x%= 14ex"), 6.2345); | 
|         |   1618 	test(aa==_L("x 6.234500E+00 x")); | 
|         |   1619 	aa.Format(_L("x%10ex"), 12345352342.545); | 
|         |   1620 	test(aa==_L("x1.234535E+10x")); | 
|         |   1621 	aa.Format(_L("x%20.9ex"), 1.0123456789); | 
|         |   1622 	test(aa==_L("x     1.012345679E+00x")); | 
|         |   1623 	aa.Format(_L("x%5.1ex"), 1.99); | 
|         |   1624 	test(aa==_L("x2.0E+00x")); | 
|         |   1625 	} | 
|         |   1626  | 
|         |   1627  | 
|         |   1628 class TO8 : public TDes8Overflow | 
|         |   1629 	{ | 
|         |   1630 public: | 
|         |   1631 	virtual void Overflow(TDes8 &aDes); | 
|         |   1632 	}; | 
|         |   1633  | 
|         |   1634 void TO8::Overflow(TDes8 &aDes) | 
|         |   1635 	{ | 
|         |   1636 	aDes=_L8("OVERFLOW"); | 
|         |   1637 	} | 
|         |   1638  | 
|         |   1639 class TO8L : public TDes8Overflow | 
|         |   1640 	{ | 
|         |   1641 public: | 
|         |   1642 	virtual void Overflow(TDes8 &aDes); | 
|         |   1643 	}; | 
|         |   1644  | 
|         |   1645 void TO8L::Overflow(TDes8 &/*aDes*/) | 
|         |   1646 	{ | 
|         |   1647 	User::Leave(KErrOverflow); | 
|         |   1648 	} | 
|         |   1649  | 
|         |   1650 class TO16 : public TDes16Overflow | 
|         |   1651 	{ | 
|         |   1652 public: | 
|         |   1653 	virtual void Overflow(TDes16 &aDes); | 
|         |   1654 	}; | 
|         |   1655  | 
|         |   1656 void TO16::Overflow(TDes16 &aDes) | 
|         |   1657 	{ | 
|         |   1658 	aDes=_L16("OVERFLOW"); | 
|         |   1659 	} | 
|         |   1660  | 
|         |   1661 class TO16L : public TDes16Overflow | 
|         |   1662 	{ | 
|         |   1663 public: | 
|         |   1664 	virtual void Overflow(TDes16 &aDes); | 
|         |   1665 	}; | 
|         |   1666  | 
|         |   1667 void TO16L::Overflow(TDes16 &/*aDes*/) | 
|         |   1668 	{ | 
|         |   1669 	User::Leave(KErrOverflow); | 
|         |   1670 	} | 
|         |   1671  | 
|         |   1672 void append8(TDes8 &aBuf, TDes8Overflow *aHandler, TRefByValue<const TDesC8> aFmt, ...) | 
|         |   1673 	{ | 
|         |   1674 	VA_LIST list; | 
|         |   1675 	VA_START(list, aFmt); | 
|         |   1676 	aBuf.AppendFormatList(aFmt, list, aHandler); | 
|         |   1677 	} | 
|         |   1678  | 
|         |   1679 void append16(TDes16 &aBuf, TDes16Overflow *aHandler, TRefByValue<const TDesC16> aFmt, ...) | 
|         |   1680 	{ | 
|         |   1681 	VA_LIST list; | 
|         |   1682 	VA_START(list, aFmt); | 
|         |   1683 	aBuf.AppendFormatList(aFmt, list, aHandler); | 
|         |   1684 	} | 
|         |   1685  | 
|         |   1686 void testOverflow() | 
|         |   1687 	{ | 
|         |   1688 	test.Start(_L("Test no overflow")); | 
|         |   1689 	TBuf8<16> buf=_L8("A "); | 
|         |   1690 	append8(buf, NULL, _L8("Descriptor")); | 
|         |   1691 	test(buf==_L8("A Descriptor")); | 
|         |   1692  | 
|         |   1693 	test.Printf(_L("Use a non-leaving overflow handler\n")); | 
|         |   1694 	test.Next(_L("Force overflow with no conversions")); | 
|         |   1695     TO8 overflow; | 
|         |   1696 	append8(buf, &overflow, _L8("12345678901234567")); | 
|         |   1697 	test(buf==_L8("OVERFLOW")); | 
|         |   1698  | 
|         |   1699 	test.Next(_L("Force overflow with decimal conversion")); | 
|         |   1700 	buf=_L8("A Descriptor"); | 
|         |   1701 	append8(buf, &overflow,  _L8("%d"), 12345678); | 
|         |   1702 	test(buf==_L8("OVERFLOW")); | 
|         |   1703  | 
|         |   1704 	test.Printf(_L("Use a leaving overflow handler\n")); | 
|         |   1705 	test.Next(_L("AppendFormatList with no overflow")); | 
|         |   1706 	buf=_L8("A Descriptor"); | 
|         |   1707     TO8L overflowLeave; | 
|         |   1708 	TRAPD(r, append8(buf, &overflowLeave, _L8("ONE"))); | 
|         |   1709 	test(r==KErrNone); | 
|         |   1710 	test(buf==_L8("A DescriptorONE")); | 
|         |   1711 	test.Next(_L("Force overflow with hexadecimal conversion")); | 
|         |   1712 	buf=_L8("A Descriptor"); | 
|         |   1713 	TRAP(r, append8(buf, &overflowLeave, _L8("%08x"), 0)); | 
|         |   1714 	test(r==KErrOverflow); | 
|         |   1715 		{ | 
|         |   1716 		test.Printf(_L("Repeat tests with TBuf16\n")); | 
|         |   1717 		test.Next(_L("Test no overflow")); | 
|         |   1718 		TBuf16<16> buf=_L16("A "); | 
|         |   1719 		append16(buf, NULL, _L16("Descriptor")); | 
|         |   1720 		test(buf==_L16("A Descriptor")); | 
|         |   1721  | 
|         |   1722 		test.Printf(_L("Use a non-leaving overflow handler\n")); | 
|         |   1723 		test.Next(_L("Force overflow with no conversions")); | 
|         |   1724 		TO16 overflow; | 
|         |   1725 		append16(buf, &overflow, _L16("12345678901234567")); | 
|         |   1726 		test(buf==_L16("OVERFLOW")); | 
|         |   1727  | 
|         |   1728 		test.Next(_L("Force overflow with decimal conversion")); | 
|         |   1729 		buf=_L16("A Descriptor"); | 
|         |   1730 		append16(buf, &overflow,  _L16("%d"), 12345678); | 
|         |   1731 		test(buf==_L16("OVERFLOW")); | 
|         |   1732  | 
|         |   1733 		test.Printf(_L("Use a leaving overflow handler\n")); | 
|         |   1734 		test.Next(_L("AppendFormatList with no overflow")); | 
|         |   1735 		buf=_L16("A Descriptor"); | 
|         |   1736 		TO16L overflowLeave; | 
|         |   1737 		TRAPD(r, append16(buf, &overflowLeave, _L16("ONE"))); | 
|         |   1738 		test(r==KErrNone); | 
|         |   1739 		test(buf==_L16("A DescriptorONE")); | 
|         |   1740 		test.Next(_L("Force overflow with hexadecimal conversion")); | 
|         |   1741 		buf=_L16("A Descriptor"); | 
|         |   1742 		TRAP(r, append16(buf, &overflowLeave, _L16("%08x"), 0)); | 
|         |   1743 		test(r==KErrOverflow); | 
|         |   1744 		} | 
|         |   1745 	test.End(); | 
|         |   1746 	} | 
|         |   1747  | 
|         |   1748 void testIgnoreOverflow() | 
|         |   1749 	{ | 
|         |   1750 	test.Start(_L("Test no overflow")); | 
|         |   1751 	TBuf8<16> buf=_L8("A "); | 
|         |   1752 	append8(buf, NULL, _L8("Descriptor")); | 
|         |   1753 	test(buf==_L8("A Descriptor")); | 
|         |   1754  | 
|         |   1755 	test.Printf(_L("Use a non-leaving overflow handler\n")); | 
|         |   1756 	test.Next(_L("Force overflow with no conversions")); | 
|         |   1757     TDes8IgnoreOverflow overflow; | 
|         |   1758 	append8(buf, &overflow, _L8("12345678901234567")); | 
|         |   1759 	test(buf==_L8("A Descriptor1234")); | 
|         |   1760  | 
|         |   1761 	test.Next(_L("Force overflow with decimal conversion")); | 
|         |   1762 	buf=_L8("A Descriptor"); | 
|         |   1763 	append8(buf, &overflow,  _L8("%d"), 123456789); | 
|         |   1764 	test(buf==_L8("A Descriptor")); | 
|         |   1765  | 
|         |   1766 	//test.Printf(_L("Repeat tests with TBuf16\n")); | 
|         |   1767 	test.Next(_L("Test no overflow")); | 
|         |   1768 	TBuf16<17> buf2=_L16("A "); | 
|         |   1769 	append16(buf2, NULL, _L16("Descriptor")); | 
|         |   1770 	test(buf2==_L16("A Descriptor")); | 
|         |   1771  | 
|         |   1772 	test.Printf(_L("Use a non-leaving overflow handler\n")); | 
|         |   1773 	test.Next(_L("Force overflow with no conversions")); | 
|         |   1774 	TDes16IgnoreOverflow overflow2; | 
|         |   1775 	append16(buf2, &overflow2, _L16("12345678901234567")); | 
|         |   1776 	test(buf2==_L16("A Descriptor12345")); | 
|         |   1777  | 
|         |   1778 	test.Next(_L("Force overflow with decimal conversion")); | 
|         |   1779 	buf2=_L16("A Descriptor"); | 
|         |   1780 	append16(buf2, &overflow2,  _L16("%d"), 123456789); | 
|         |   1781 	test(buf2==_L16("A Descriptor")); | 
|         |   1782  | 
|         |   1783 	test.End(); | 
|         |   1784 	} | 
|         |   1785  | 
|         |   1786 void testAppendFormatIgnoreOverflow() | 
|         |   1787 	{ | 
|         |   1788 	test.Start(_L("Test no overflow")); | 
|         |   1789 	TBuf8<16> buf; | 
|         |   1790 	buf.AppendFormat(_L8("A Descriptor"));	 | 
|         |   1791 	test(buf==_L8("A Descriptor")); | 
|         |   1792 	 | 
|         |   1793 	test.Next(_L("Force overflow with no conversions")); | 
|         |   1794     TDes8IgnoreOverflow overflow; | 
|         |   1795 	buf.AppendFormat(_L8("123456789012345679"),&overflow); | 
|         |   1796 	test(buf==_L8("A Descriptor1234")); | 
|         |   1797 	 | 
|         |   1798 	test.Next(_L("Force overflow with decimal conversion")); | 
|         |   1799 	buf = _L8("Symbian OS"); | 
|         |   1800 	buf.AppendFormat(_L8("%d"), &overflow, 1234567); | 
|         |   1801 	test(buf==_L8("Symbian OS")); | 
|         |   1802 	 | 
|         |   1803 	test.Next(_L("Test no overflow")); | 
|         |   1804 	TBuf16<16> buf2; | 
|         |   1805 	buf2.AppendFormat(_L16("A Descriptor"));	 | 
|         |   1806 	test(buf2==_L16("A Descriptor")); | 
|         |   1807 	 | 
|         |   1808 	test.Next(_L("Force overflow with no conversions")); | 
|         |   1809     TDes16IgnoreOverflow overflow2; | 
|         |   1810 	buf2.AppendFormat(_L16("123456789012345679"),&overflow2); | 
|         |   1811 	test(buf2==_L16("A Descriptor1234")); | 
|         |   1812 	 | 
|         |   1813 	test.Next(_L("Force overflow with decimal conversion")); | 
|         |   1814 	buf2 = _L16("Symbian OS"); | 
|         |   1815 	buf2.AppendFormat(_L16("%d"), &overflow2, 1234567); | 
|         |   1816 	test(buf2==_L16("Symbian OS")); | 
|         |   1817  | 
|         |   1818 	test.End(); | 
|         |   1819  | 
|         |   1820  | 
|         |   1821 	} | 
|         |   1822  | 
|         |   1823 // INC061330  AV28Crit: NTT - TInt TDesC16.FindC -method is giving strange output values  | 
|         |   1824 // This test should pass with "ELangPrcChinese" locale. | 
|         |   1825 void INC061330() | 
|         |   1826 	{ | 
|         |   1827 	TLanguage defaultLang = User::Language(); | 
|         |   1828  | 
|         |   1829 	TInt err = HAL::Set(HAL::ELanguageIndex, ELangPrcChinese); | 
|         |   1830 	test(err == KErrNone);	 | 
|         |   1831  | 
|         |   1832 	TBuf<50> libraryName; | 
|         |   1833  | 
|         |   1834 	libraryName.Format(_L("ELOCL.%02d"), ELangPrcChinese); | 
|         |   1835  | 
|         |   1836 	//Reset the locale | 
|         |   1837 	err=UserSvr::ChangeLocale(KNullDesC); | 
|         |   1838 	test(err==KErrNone); | 
|         |   1839  | 
|         |   1840 	//Now change to chinese locale | 
|         |   1841 	err = UserSvr::ChangeLocale(libraryName); | 
|         |   1842 	if(err==KErrNotFound) | 
|         |   1843 		{ | 
|         |   1844 		test.Printf(_L("TEST CASE NOT RUN BECAUSE ELangPrcChinese LOCALE NOT FOUND!\n")); | 
|         |   1845 		HAL::Set(HAL::ELanguageIndex, defaultLang); | 
|         |   1846 		return; | 
|         |   1847 		} | 
|         |   1848 	test(err == KErrNone); | 
|         |   1849 	 | 
|         |   1850 	TLanguage lang = User::Language(); | 
|         |   1851 	test(lang == ELangPrcChinese); | 
|         |   1852  | 
|         |   1853 	TInt pos; | 
|         |   1854 	_LIT(KBuf, "hello"); | 
|         |   1855  | 
|         |   1856 	pos = KBuf().FindC(_L("a")); | 
|         |   1857 	test(pos == KErrNotFound); | 
|         |   1858  | 
|         |   1859 	pos = KBuf().FindC(_L("zzz")); | 
|         |   1860 	test(pos == KErrNotFound); | 
|         |   1861  | 
|         |   1862 	pos = KBuf().FindC(_L(".")); | 
|         |   1863 	test(pos == KErrNotFound); | 
|         |   1864  | 
|         |   1865 	pos = KBuf().FindC(_L(":")); | 
|         |   1866 	test(pos == KErrNotFound); | 
|         |   1867  | 
|         |   1868 	pos = KBuf().FindC(_L("hela")); | 
|         |   1869 	test(pos == KErrNotFound); | 
|         |   1870  | 
|         |   1871 	//Reset the locale | 
|         |   1872 	err=UserSvr::ChangeLocale(KNullDesC); | 
|         |   1873 	test(err==KErrNone); | 
|         |   1874 	 | 
|         |   1875 	//Now revert to the original default english locale | 
|         |   1876 	libraryName.Format(_L("ELOCL.%02d"), defaultLang); | 
|         |   1877 	test(err == KErrNone); | 
|         |   1878 	err = UserSvr::ChangeLocale(libraryName); | 
|         |   1879 	test(err == KErrNone); | 
|         |   1880 	 | 
|         |   1881 	lang = User::Language(); | 
|         |   1882 	test(lang == defaultLang); | 
|         |   1883 	} | 
|         |   1884 #ifndef _DEBUG | 
|         |   1885 #pragma warning( disable : 4702) //Unreachable code | 
|         |   1886 #pragma warning( disable : 4710) //Function not expanded | 
|         |   1887 #endif | 
|         |   1888 GLDEF_C TInt E32Main() | 
|         |   1889 // Test the TBuf type. | 
|         |   1890     { | 
|         |   1891 	test.Title(); | 
|         |   1892  | 
|         |   1893 	test.Start(_L("class TBuf16<0x50>")); | 
|         |   1894 	TestTBuf<TBuf16<0x50>,TText16,TPtrC16> c(0x50); | 
|         |   1895 	c.test_TBuf(); | 
|         |   1896 	 | 
|         |   1897 	test.Next(_L("class TBuf8<0x50>")); | 
|         |   1898 	TestTBuf<TBuf8<0x50>,TText8,TPtrC8> b(0x50); | 
|         |   1899 	b.test_TBuf(); | 
|         |   1900 	 | 
|         |   1901 	test.Next(_L("class TBuf<0x50>")); | 
|         |   1902 	TestTBuf<TBuf<0x50>,TText,TPtrC> a(0x50); | 
|         |   1903 	a.test_TBuf(); | 
|         |   1904  | 
|         |   1905 	test.Next(_L("TReal formating")); | 
|         |   1906 	testFormat(); | 
|         |   1907  | 
|         |   1908 	test.Next(_L("Test overflow handler")); | 
|         |   1909 	testOverflow(); | 
|         |   1910  | 
|         |   1911 	test.Next(_L("Test ignore overflow handler")); | 
|         |   1912 	testIgnoreOverflow(); | 
|         |   1913  | 
|         |   1914 	test.Next(_L("Test Format ignore overflow handler")); | 
|         |   1915 	testAppendFormatIgnoreOverflow(); | 
|         |   1916  | 
|         |   1917 	test.Next(_L("INC061330")); | 
|         |   1918 	INC061330(); | 
|         |   1919  | 
|         |   1920 	test.End(); | 
|         |   1921  | 
|         |   1922 	return(KErrNone); | 
|         |   1923     } | 
|         |   1924  | 
|         |   1925 //#pragma warning( default : 4702) | 
|         |   1926 //#pragma warning( default : 4710) | 
|         |   1927  | 
|         |   1928  |