diff -r 000000000000 -r e4d67989cc36 lowlevellibsandfws/genericusabilitylib/test/src/t_lsformat.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/lowlevellibsandfws/genericusabilitylib/test/src/t_lsformat.cpp Tue Feb 02 02:01:42 2010 +0200 @@ -0,0 +1,1927 @@ +// Copyright (c) 2008-2009 Nokia Corporation and/or its subsidiary(-ies). +// All rights reserved. +// This component and the accompanying materials are made available +// under the terms of "Eclipse Public License v1.0" +// which accompanies this distribution, and is available +// at the URL "http://www.eclipse.org/legal/epl-v10.html". +// +// Initial Contributors: +// Nokia Corporation - initial contribution. +// +// Contributors: +// +// Description: +// Overview: +// Test methods of the LString16, LString8, LString template class. +// API Information: +// LString16, LString8, LString +// Details : +// - Create some 16 bit modifiable descriptors, 8 bit modifiable descriptors +// of fixed length, Build-independent modifiable descriptors, initialize +// with different strings and check for +// - Comparison operators, +// - Property access methods, +// - Fill & swap methods, +// - Conversion methods, +// - Comparison methods, +// - Pattern Matching methods, +// - Pattern Locating methods, +// - Copying methods, +// - Find, FindC, FindF methods, +// - Repeat, Trim, TrimLeft, TrimRight, Insert, Delete, Left, +// Right, Mid methods, +// - Formatting methods, +// - Replace methods are as expected. +// - Construct some descriptors with buffer length, string and buffer reference and +// verify that they are created successfully. +// - Test assignment operators and comparison operators for different descriptors. +// - Initialize some descriptors and check descriptors' maximum length, length and +// size are as expected. +// - Check Fill and Swap methods are as expected. +// - Test Fold, Collate, LowerCase, UpperCase methods are as expected. +// - Test Comparison methods are as expected. +// - Test pattern matching for simple string, wild cards with collated comparison. Verify that the +// return value is KErrNotFound when pattern doesn't match. +// - Check Locating methods by searching character in forward and backward direction and +// verify the return value is KErrNotFound when unavailable character is searched. +// - Check copying strings and converting those into lower and upper case strings are +// as expected. +// - Check Find methods by searching string and verify the return value is KErrNotFound when +// unavailable string is searched. +// - Check Repeat, Trim, Insert and Delete methods are as expected. +// - Check the formatting operations are as expected. +// - Check integer to decimal character representation is as expected. +// - Check integer to character representation with different number system is as expected. +// - Check string formatting with variable parameter list is as expected +// - Check Replace method by replacing string at different places in a string is as expected. +// - Check the conversion of real numbers, extended precision real numbers into string +// format is as expected. +// - Check Format and FormatList methods are as expected. +// - Check Format of TReal is as expected. +// - Check the non-leaving and leaving descriptors overflow handlers are as expected. +// Platforms/Drives/Compatibility: +// All +// Assumptions/Requirement/Pre-requisites: +// Failures and causes: +// Base Port information: +// +// + +#include +#include +#include +#include +#include +#include +#include + +#ifdef __VC32__ + // Solve compilation problem caused by non-English locale + #pragma setlocale("english") +#endif + +LOCAL_D RTest test(_L("T_LSFORMAT")); + +#pragma warning(disable: 4127) // disabling warning "conditional expression is constant" +#pragma warning(disable: 4310) // disabling warning "cast truncates constant value" + +#undef _TL +#define _TL(a) DESTEMPLATE((S*)RTest::String(sizeof(S),(TText8*)a,(TText16*)L ## a)) +#undef _TS +#define _TS(a) ((const S*)RTest::String(sizeof(S),(TText8*)a,(TText16*)L ## a)) + +template +class TestLString + { +public: + TestLString(TInt aLength); // Test class constructor. + void Test1L(); // Tests all functions of the class with auto extension + void Test2(); // Tests all constructors. + void Test3(); // Tests all assignment operators + void Test4(); // Tests all comparison operators + void Test7(); // Tests all conversion + void Test8(); // Tests all comparison + void Test9(); // Tests all matching + void Test10(); // Tests all locating + void Test11L(); // Tests all Copying + void Test12(); // Tests all finding + void Test13L(); // Tests all basic like ops + void Test14L(); // Tests all formating with auto extension + void Test15L(); // Tests all replacing with auto extension + void test_TBufL(); // Test all classes +protected: + void Test14_ReorderedParameterFormatting(TInt aDummyParameter, ...); + void Test14_ReorderedParameterFormattingL(TInt aDummyParameter, ...); +private: + TInt iMaxBufLength; + }; + +template +void TestEq(const T& a, const T& b, TInt aLine) + { + if (a!=b) + { + LString16 buf(256); + test.Printf(_L("LINE %d:\n"),aLine); + buf.CopyL(a); + test.Printf(_L("a=%S\n"),&buf); + buf.CopyL(b); + test.Printf(_L("b=%S\n"),&buf); + test(0); + } + } + + +#define TESTEQ(a,b) TestEq((a),(b),__LINE__) + +template +GLDEF_C TestLString::TestLString(TInt aLength) +// Constructor. + : iMaxBufLength(aLength) + {} + +/** +@SYMTestCaseID SYSLIB-EUSERHL-UT-4011 +@SYMTestCaseDesc Tests LString Auto-extending functions +@SYMTestPriority High +@SYMTestActions Creates LString objects and uses the auto-extending LString + functions to manipulate the strings. + Verifies that the LStrings are auto-extended as expected. +@SYMTestExpectedResults The LString objects should be auto-extended as required to + contain any new data. +@SYMREQ 10372-3 +*/ +template +GLDEF_C void TestLString::Test1L() + { + + test.Start(_L ("@SYMTestCaseID:SYSLIB-EUSERHL-UT-4011")); + + test.Next(_L("Extending Methods")); + + T a(1); + T b(1); + + test(a.Length()==0); + test(a.MaxLength() >=1); + + test.Next(_L("Setting a bigger length ")); + a.SetLengthL(10); + test(a.Length()== 10); + test(a.MaxLength() >= 10); + + test.Next(_L("operator+ with memory extension ")); + test(b.MaxLength() >=1); + b += a; + test(b.Length()== 10); + test(b.MaxLength() >= 10); + + TChar c('A'); + test(b.MaxLength() >=1); + b += c; + test(b.Length()== 11); + test(b.MaxLength() >= 10); + + test.Next(_L("Filling past current size ")); + a.FillL(' ', 20); + test(a.Length()== 20); + test(a.MaxLength() >= 20); + + test.Next(_L("Append filling past current size ")); + a.AppendFillL(' ', 10); + test(a.Length()== 30); + test(a.MaxLength() >= 30); + + test.Next(_L("Zeroing past current size ")); + a.FillZL(40); + test(a.Length()== 40); + test(a.MaxLength() >= 40); + + test.Next(_L("Entended Copying")); + a.CopyL(b); + test(a == b); + + a.CopyL(_TL("AB")); + test(a == _TL("AB")); + + a.CopyFL(b); + + T d(b); + d.Fold(); + test(a == d); + + a.CopyFL(_TL("AB")); + test(a == _TL("ab")); + + a.CopyCL(b); + + d = b; + d.Collate(); + test(a == d); + + a.CopyCL(_TL("AB")); + test(a == _TL("ab")); + + a.CopyLCL(b); + + d = b; + d.LowerCase(); + test(a == d); + + a.CopyLCL(_TL("AB")); + test(a == _TL("ab")); + + a.CopyUCL(b); + + d = b; + d.UpperCase(); + test(a == d); + + a.CopyUCL(_TL("AB")); + test(a == _TL("AB")); + + a.CopyCPL(b); + + d = b; + d.Capitalize(); + test(a == d); + + a.CopyCPL(_TL("AB")); + test(a == _TL("Ab")); + + test.Next(_L("Basic like ops")); + + a.Zero(); + b=_TL("AA"); + a.InsertL(0,b); + test(a == b); + + test.Next(_L("Formating")); + a.JustifyL(_TL("AB"),10,ELeft,' '); + test(a == _TL("AB ")); + + a.JustifyL(b,10,ELeft,' '); + test(a == _TL("AA ")); + + b.FillL('A',2); + test(b == _TL("AA")); + + a.Zero(); + a.AppendJustifyL(_TL("AB"),10,ELeft,' '); + test(a == _TL("AB ")); + + a.AppendJustifyL(b,10,ELeft,' '); + test(a == _TL("AB AA ")); + + DESTEMPLATE des(b); + a.Zero(); + a.AppendJustifyL(des,2,10,ELeft,' '); + test(a == _TL("AA ")); + + a.AppendJustifyL(des,2,KDefaultJustifyWidth ,ELeft,' '); + test(a == _TL("AA AA")); + + a.Zero(); + a.AppendJustifyL(des,10,ELeft,' '); + test(a == _TL("AA ")); + + a.AppendJustifyL(des,KDefaultJustifyWidth ,ELeft,' '); + test(a == _TL("AA AA")); + + a.Zero(); + a.AppendJustifyL(b.PtrZL(),10,ELeft,' '); + test(a == _TL("AA ")); + + a.AppendJustifyL(b.PtrZL(),KDefaultJustifyWidth,ELeft,' '); + test(a == _TL("AA AA")); + + a.AppendJustifyL(b.PtrZL(),2,KDefaultJustifyWidth,ELeft,' '); + test(a == _TL("AA AAAA")); + + a.Zero(); + a.AppendJustifyL(b.PtrZL(),2,10,ELeft,' '); + test(a == _TL("AA ")); + + a.AppendJustifyL(b.PtrZL(),2,5,ELeft,' '); + test(a == _TL("AA AA ")); + + TInt v1=10; + a.NumL(v1); + test(a == _TL("10")); + a.AppendNumL(v1); + test(a == _TL("1010")); + + TInt v2=10; + a.NumL((TUint)v2,EHex); + test(a == _TL("a")); + a.AppendNumL((TUint)v2,EHex); + test(a == _TL("aa")); + + a.NumUCL((TUint)v2,EHex); + test(a == _TL("A")); + a.AppendNumUCL((TUint)v2,EHex); + test(a == _TL("AA")); + + a.NumFixedWidthL((TUint)v2,EHex,1); + test(a == _TL("a")); + a.AppendNumFixedWidthL((TUint)v2,EHex,1); + test(a == _TL("aa")); + + a.NumFixedWidthUCL((TUint)v2,EHex,1); + test(a == _TL("A")); + a.AppendNumFixedWidthUCL((TUint)v2,EHex,1); + test(a == _TL("AA")); + + TReal v3=10.0; + TRealFormat ff; + ff.iType=KRealFormatFixed; + ff.iWidth=10; + ff.iPlaces=2; + ff.iPoint='.'; + ff.iTriad=','; + ff.iTriLen=3; + a.NumL(v3,ff); + test(a == _TL("10.00")); + + a.AppendNumL(v3,ff); + test(a == _TL("10.0010.00")); + + a.FormatL(_TL("%d"),12); + test(a == _TL("12")); + + a.AppendFormatL(_TL("%d"),12); + test(a == _TL("1212")); + + b=_TL("%d"); + a.FormatL(b,12); + test(a == _TL("12")); + a.AppendFormatL(b,12); + test(a == _TL("1212")); + //*/ + + test.Next(_L("Replacing")); + a=_TL("AAC"); + b=_TL("B"); + a.ReplaceL(1,1,b); + test(a == _TL("ABC")); + + test.End(); + } + + + +/** +@SYMTestCaseID SYSLIB-EUSERHL-UT-4012 +@SYMTestCaseDesc Tests all LString Constructors +@SYMTestPriority High +@SYMTestActions Creates LString objects using the different constructors. + Verifies that length and contents are as expected +@SYMTestExpectedResults LString objects should be created with the correct + Length and contents +@SYMREQ 10372 +*/ +template +GLDEF_C void TestLString::Test2() +// Tests all constructors. + { + + test.Start (_L ("@SYMTestCaseID:SYSLIB-EUSERHL-UT-4012")); + + test.Next(_L("Default")); + + T a(iMaxBufLength); + test(a.MaxLength() >=iMaxBufLength); + test(a.Length()==0); + + test.Next(_L("By string")); + T c(iMaxBufLength); + c = _TL("AB"); + test(c.Length()==2); + test(c[0]=='A'); + test(c[1]=='B'); + + test.Next(_L("By buffer reference")); + T d(iMaxBufLength); + d = c; + test(d.Length()==2); + test(d[0]=='A'); + test(d[1]=='B'); + + test.End(); + } + +/** +@SYMTestCaseID SYSLIB-EUSERHL-UT-4013 +@SYMTestCaseDesc Tests all LString Assignment operators +@SYMTestPriority High +@SYMTestActions Creates LString objects and uses the different assignment + operators to change the string contents + Verifies that length and contents are as expected +@SYMTestExpectedResults LString data should be assigned as expected +@SYMREQ 10372 +*/ +template +GLDEF_C void TestLString::Test3() +// Tests all assignment operators + { + + test.Start (_L ("@SYMTestCaseID:SYSLIB-EUSERHL-UT-4013")); + + test.Next(_L("By String")); + + T a; + a=_TL("AB"); + a+=_TL("CD"); + test(a.Length()==4); + test(a==_TL("ABCD")); + + test.Next(_L("By buffer")); + T b; + b=a; + b+=a; + test(b.Length()==8); + test(b==_TL("ABCDABCD")); +// + test.End(); + } + +/** +@SYMTestCaseID SYSLIB-EUSERHL-UT-4014 +@SYMTestCaseDesc Tests all LString comparison operators +@SYMTestPriority High +@SYMTestActions Creates LString objects and uses the different comparison + operators to compare string contents against other strings + Verifies that comparison operators work as expected +@SYMTestExpectedResults LString data comparison should work as expected +@SYMREQ 10372 +*/ +template +GLDEF_C void TestLString::Test4() +// Test all comparison operators + { + + test.Start (_L ("@SYMTestCaseID:SYSLIB-EUSERHL-UT-4014")); + + test.Next(_L("By NULL string")); + + T a; + test(a==_TL("")); // NULL strings + test(!(a!=_TL(""))); + test(a<=_TL("")); + test(a>=_TL("")); + test(!(a<_TL(""))); + test(!(a>_TL(""))); + test(_TL("")==a); + test(!(_TL("")!=a)); + test(_TL("")<=a); + test(_TL("")>=a); + test(!(_TL("")a)); + + test.Next(_L("By string or buffer")); + a=_TL("abc"); + test(a==_TL("abc")); // == + test(!(a==_TL("xyz"))); + test(!(a==_TL("aa"))); + test(_TL("abc")==a); + test(!(_TL("xyz")==a)); + test(!(_TL("aa")==a)); + test(a!=_TL("xyz")); // != + test(!(a!=_TL("abc"))); + test(a!=_TL("aa")); + test(_TL("xyz")!=a); + test(!(_TL("abc")!=a)); + test(_TL("aa")!=a); + test(a<_TL("x")); // < + test(!(a<_TL("abc"))); + test(!(a<_TL("aa"))); + test(_TL("aa")_TL("aa")); // > + test(!(a>_TL("abc"))); + test(!(a>_TL("xyz"))); + test(_TL("xyz")>a); + test(!(_TL("abc")>a)); + test(!(_TL("aa")>a)); + test(a>=_TL("abc")); // >= + test(!(a>=_TL("xyz"))); + test(a>=_TL("aa")); + test(_TL("abc")>=a); + test(!(_TL("aaa")>=a)); + test(_TL("xyz")>=a); + test(a<=_TL("abc")); // <= + test(!(a<=_TL("aa"))); + test(a<=_TL("xyz")); + test(_TL("abc")<=a); + test(!(_TL("xyz")<=a)); + test(_TL("aa")<=a); + + test.Next(_L("By special characters")); + a=_TL("!@#$%^&*()"); + test(a==_TL("!@#$%^&*()")); + + test.End(); + } + +/** +@SYMTestCaseID SYSLIB-EUSERHL-UT-4015 +@SYMTestCaseDesc Tests all LString conversion methods +@SYMTestPriority High +@SYMTestActions Creates LString objects and uses the different conversion + methods to fold, collate and change case. + Verifies that conversion methods work as expected. +@SYMTestExpectedResults LString data conversion methods should work as expected +@SYMREQ 10372 +*/ +template +GLDEF_C void TestLString::Test7() +// Conversion operators + { + + test.Start (_L ("@SYMTestCaseID:SYSLIB-EUSERHL-UT-4015")); + + test.Next(_L("Fold, collate ...")); + + T a; + T b; + a=_TL("abc AbC"); + b=_TL("ABC ABC"); + a.Fold(); + b.Fold(); + test(a==b); + a=_TL("abc AbC"); + b=_TL("ABC ABC"); + a.Collate(); + b.Collate(); + test(a==b); + a.LowerCase(); + test(a==_TL("abc abc")); + a.Capitalize(); + test(a==_TL("Abc abc")); + a.UpperCase(); + test(a==_TL("ABC ABC")); + + test.End(); + } + +/** +@SYMTestCaseID SYSLIB-EUSERHL-UT-4016 +@SYMTestCaseDesc Tests LString Compare() method +@SYMTestPriority High +@SYMTestActions Creates LString objects and uses the Compare() + method to compare string contents against other strings + Verifies that comparison method works as expected +@SYMTestExpectedResults LString Compare() method should return a positive + value if this LString is greater than the specified descriptor. + Negative if this LString is less than the specified descriptor. + Zero if both descriptors have the same length and the their + contents are the same. +@SYMREQ 10372 +*/ +template +GLDEF_C void TestLString::Test8() +// Comparison + { + + test.Start (_L ("@SYMTestCaseID:SYSLIB-EUSERHL-UT-4016")); + + test.Next(_L("By string")); + + T a(iMaxBufLength); + a=_TL("abc AbC"); + test(a.Compare(_TL("abc AbC"))==0); + test(a.CompareF(_TL("ABC aBc"))==0); + test(a.Compare(_TL("xyz"))!=0); + test(a.CompareC(_TL("xyz"))!=0); + test(a.CompareF(_TL("xyz"))!=0); + + test.Next(_L("By buffer")); + T b; + T c; + a=_TL("abc AbC"); + b=_TL("abc AbC"); + c=_TL("xyz"); + test(a.Compare(b)==0); + test(a.Compare(c)!=0); + b=_TL("ABC aBc"); + test(a.CompareC(c)!=0); + test(a.CompareF(b)==0); + test(a.CompareF(c)!=0); + + test.End(); + } + +/** +@SYMTestCaseID SYSLIB-EUSERHL-UT-4017 +@SYMTestCaseDesc Tests LString MatchX() methods +@SYMTestPriority High +@SYMTestActions Creates LString objects and uses the MatchX() + methods to compare string contents against other strings + Verifies that MatchX methods work as expected +@SYMTestExpectedResults LString MatchX() methods should compare string + contents and return the index of the first match, + or KErrNotFound if there is no match. +@SYMREQ 10372 +*/ +template +GLDEF_C void TestLString::Test9() +// Matching (need to test explicit result as error KErrNotFound = KMaxTUint +// and so registers as TRUE. (test parameter is TUint) ) + { + + test.Start (_L ("@SYMTestCaseID:SYSLIB-EUSERHL-UT-4017")); + + test.Next(_L("By string")); + + T a(iMaxBufLength); + a=_TL("abc AbC"); + test(a.Match(_TL("abc AbC"))==0); + test(a.MatchC(_TL("ABC aBc"))==0); + test(a.MatchF(_TL("ABC aBc"))==0); + test(a.Match(_TL("xyz"))==KErrNotFound); + test(a.MatchC(_TL("xyz"))==KErrNotFound); + test(a.MatchF(_TL("xyz"))==KErrNotFound); + + test.Next(_L("By buffer")); + T b; + T c; + a=_TL("abc AbC"); + b=_TL("abc AbC"); + c=_TL("xyz"); + test(a.Match(b)==0); + test(a.Match(c)==KErrNotFound); + b=_TL("ABC aBc"); + test(a.MatchC(b)==0); + test(a.MatchC(c)==KErrNotFound); + test(a.MatchF(b)==0); + test(a.MatchF(c)==KErrNotFound); + + test.Next(_L("Wildcards")); + a=_TL("abcxyz"); + test(a.Match(_TL("abc*"))==0); + test(a.Match(_TL("abw*"))==KErrNotFound); + a=_TL("abcdefg"); + test(a.Match(_TL("a*fg"))==0); + test(a.Match(_TL("a*f"))==KErrNotFound); + test(a.Match(_TL("abc*fgh"))==KErrNotFound); + a=_TL("abcdef"); + test(a.Match(_TL("abc?ef"))==0); + test(a.Match(_TL("abc?xf"))==KErrNotFound); + + a=_TL("a(01)"); + test(a.Match(_TL("*(01)"))==1); + test(a.Match(_TL("?(01)"))==0); + test(a.Match(_TL("?(*)"))==0); + test(a.Match(_TL("?(**)"))==0); + + test(a.Match(_TL("?(\?\?)"))==0); + test(a.Match(_TL("*(*)"))>=0); + test(a.Match(_TL("*(0?)"))>=0); + test(a.Match(_TL("a(\?\?)"))==0); + test(a.Match(_TL("*(\?\?)"))>=0); + + test.Next(_L("wild cards with collated comparison")); + a = _TL("abcdefghijkl"); + test(a.MatchC(_TL("abc*")) == 0); + test(a.MatchC(_TL("abc")) == KErrNotFound); + test(a.MatchC(_TL("xyz")) == KErrNotFound); + test(a.MatchC(_TL("*def")) == KErrNotFound); + test(a.MatchC(_TL("*def*")) == 3); + test(a.MatchC(_TL("*d?f*")) == 3); + test(a.MatchC(_TL("a*kl")) == 0); + test(a.MatchC(_TL("*e*?l")) == 4); + test(a.MatchC(_TL("abc*dEf*")) == 0); + + T candidate(_TL("")); + T search(_TL("**")); + + test(candidate.MatchC(search) == 0); + + candidate = _TL(""); + search = _TL("*"); + test(candidate.MatchC(search) == 0); + + candidate = _TL("abcd"); + search = _TL("*abc*cd"); + test(candidate.MatchC(search) == KErrNotFound); + + if (sizeof(S) == 2) + { + test.Next(_L("Unicode MatchC and FindC treat base+accent as equal to composed character")); + LString16 p = _L("te\x302te"); + test(p.MatchC(_L("t\xeate")) == 0); + test(p.FindC(_L("t\xeate")) == 0); + } + + test.End(); + } + + +/** +@SYMTestCaseID SYSLIB-EUSERHL-UT-4018 +@SYMTestCaseDesc Tests LString Locate() methods +@SYMTestPriority High +@SYMTestActions Creates LString objects and uses the LocateX() + methods to search for a character within the LString + Verifies that LocateX() methods works as expected +@SYMTestExpectedResults LString LocateX() method should return offset + of the character position from the beginning of the data or + KErrNotFound if no matching character can be found. +@SYMREQ 10372 +*/ +template +GLDEF_C void TestLString::Test10() +// Locating + { + + test.Start (_L ("@SYMTestCaseID:SYSLIB-EUSERHL-UT-4018")); + + T a(iMaxBufLength); + TChar b; + + test.Next(_L("First Char")); + + b='a'; + a=_TL("axaxa"); + test(a.Locate(b)==0); + test(a.LocateF(b)==0); + test(a.LocateReverse(b)==4); + test(a.LocateReverseF(b)==4); + + test.Next(_L("Middle Char")); + a=_TL("xaxa"); + test(a.Locate(b)==1); + test(a.LocateF(b)==1); + a=_TL("axax"); + test(a.LocateReverse(b)==2); + test(a.LocateReverseF(b)==2); + + test.Next(_L("Last Char")); + a=_TL("xxa"); + test(a.Locate(b)==2); + test(a.LocateF(b)==2); + a=_TL("axx"); + test(a.LocateReverse(b)==0); + test(a.LocateReverseF(b)==0); + + test.Next(_L("Test for failure of locate")); + a=_TL("xxx"); + test(a.Locate(b)==KErrNotFound); + test(a.LocateF(b)==KErrNotFound); + test(a.LocateReverse(b)==KErrNotFound); + test(a.LocateReverseF(b)==KErrNotFound); + + test.End(); + } + + +/** +@SYMTestCaseID SYSLIB-EUSERHL-UT-4019 +@SYMTestCaseDesc Tests LString CopyX() methods +@SYMTestPriority High +@SYMTestActions Creates LString objects and uses the CopyX() + methods to copy data into the strings. + Verifies that the length and contents of the LString + are as expefcted +@SYMTestExpectedResults LString CopyX() methods should copy data into + LString as expected +@SYMREQ 10372 +*/ +template +GLDEF_C void TestLString::Test11L() +// Copying + { + + test.Start (_L ("@SYMTestCaseID:SYSLIB-EUSERHL-UT-4019")); + + test.Next(_L("By String")); + + T a(iMaxBufLength); + T b(iMaxBufLength); + + a.CopyL(_TL("abc")); + test(a.Length()==3); + test(a==_TL("abc")); + a.CopyFL(_TL("abc")); + test(a.Length()==3); + b.CopyFL(_TL("ABC")); + test(a==b); + a.CopyLCL(_TL("AbC")); + test(a==_TL("abc")); + test(a.Length()==3); + a.CopyCL(_TL("abc")); + b.CopyCL(_TL("ABC")); + test(a==b); + test(a.Length()==3); + a.CopyCPL(_TL("abc")); + test(a==_TL("Abc")); + test(a.Length()==3); + a.CopyUCL(_TL("aBc")); + test(a==_TL("ABC")); + test(a.Length()==3); + + test.Next(_L("By buffer")); + b=_TL("abc"); + a.CopyL(b); + test(a==_TL("abc")); + test(a.Length()==3); + a=_TL(""); + a.CopyFL(b); + b.CopyFL(_TL("ABC")); + test(a==b); + test(a.Length()==3); + a=_TL(""); + b=_TL("AbC"); + a.CopyLCL(b); + test(a==_TL("abc")); + test(a.Length()==3); + a=_TL(""); + b=_TL("abC"); + a.CopyCL(b); + b.CopyCL(_TL("ABC")); + test(a==b); + test(a.Length()==3); + a=_TL(""); + b=_TL("abC"); + a.CopyCPL(b); + test(a==_TL("Abc")); + test(a.Length()==3); + a=_TL(""); + b=_TL("aBc"); + a.CopyUCL(b); + test(a.Length()==3); + test(a==_TL("ABC")); + + test.End(); + } + + +/** +@SYMTestCaseID SYSLIB-EUSERHL-UT-4020 +@SYMTestCaseDesc Tests LString FindX() methods +@SYMTestPriority High +@SYMTestActions Creates LString objects and uses the FindX() + methods to find substrings. + Verifies that the index of the substring returned is as expected +@SYMTestExpectedResults LString FindX() methods should return the index of the first + character of the substring if it exists in the LString otherwise + return KErrNotFound. +@SYMREQ 10372 +*/ +template +GLDEF_C void TestLString::Test12() +// Finding + { + + test.Start (_L ("@SYMTestCaseID:SYSLIB-EUSERHL-UT-4020")); + + test.Next(_L("By String")); + + T a(iMaxBufLength); + T b(iMaxBufLength); + + a=_TL("abccef"); + test(a.Find(_TL(""))==0); + test(a.Find(_TL("abc"))==0); + test(a.Find(_TL("cce"))==2); + test(a.Find(_TL("cef"))==3); + test(a.Find(_TL("efg"))==KErrNotFound); + test(a.Find(_TL("xxx"))==KErrNotFound); + test(a.FindF(_TL(""))==0); + test(a.FindF(_TL("AbC"))==0); + test(a.FindF(_TL("CcE"))==2); + test(a.FindF(_TL("CeF"))==3); + test(a.FindF(_TL("efg"))==KErrNotFound); + test(a.FindF(_TL("xxx"))==KErrNotFound); + test(a.FindC(_TL(""))==0); + test(a.FindC(_TL("aBc"))==0); + test(a.FindC(_TL("cce"))==2); + test(a.FindC(_TL("cEf"))==3); + test(a.FindC(_TL("efg"))==KErrNotFound); + test(a.FindC(_TL("xxx"))==KErrNotFound); + + test.Next(_L("By buffer")); + test(a.Find(b)==0); + test(a.FindF(b)==0); + test(a.FindC(b)==0); + b=_TL("xxx"); + test(a.Find(b)==KErrNotFound); + test(a.FindF(b)==KErrNotFound); + test(a.FindC(b)==KErrNotFound); + b=_TL("efg"); + test(a.Find(b)==KErrNotFound); + test(a.FindF(b)==KErrNotFound); + test(a.FindC(b)==KErrNotFound); + b=_TL("abc"); + test(a.Find(b)==0); + b=_TL("cce"); + test(a.Find(b)==2); + b=_TL("cef"); + test(a.Find(b)==3); + b=_TL("AbC"); + test(a.FindF(b)==0); + b=_TL("CcE"); + test(a.FindF(b)==2); + b=_TL("CeF"); + test(a.FindF(b)==3); + b=_TL("aBc"); + test(a.FindC(b)==0); + b=_TL("cCe"); + test(a.FindC(b)==2); + b=_TL("cEf"); + test(a.FindC(b)==3); + + test.End(); + } + + +/** +@SYMTestCaseID SYSLIB-EUSERHL-UT-4021 +@SYMTestCaseDesc Tests LString modification methods +@SYMTestPriority High +@SYMTestActions Creates LString objects and uses the Repeat(), + TrimX(), InsertL(), Delete(), Left(), Right() and Mid() methods + to modify the string. + Verifies that the LString is modified as expected +@SYMTestExpectedResults LString modification methods should modify the LString + data as expected. +@SYMREQ 10372 +*/ +template +GLDEF_C void TestLString::Test13L() +// Basic like ops + { + + test.Start (_L ("@SYMTestCaseID:SYSLIB-EUSERHL-UT-4021")); + + test.Next(_L("Repeat, trim, insert and delete")); + + T a(iMaxBufLength); + T b(iMaxBufLength); + TInt max=a.MaxLength(); + b=_TL("abc"); + a.Repeat(_TL("abc")); + test(a==_TL("")); + a.Repeat(b); + test(a==_TL("")); + for (TInt j=1;j +GLDEF_C void TestLString::Test14L() +// Formating operations + { + + test.Start (_L ("@SYMTestCaseID:SYSLIB-EUSERHL-UT-4022")); + + test.Next(_L("Justify")); + //---------------------------Apepend+Justify----------------------------------- + T a(1); + T b(1); + T d(1); + + TInt aWidth; + TChar c; + a=_TL("wxyz"); + b=_TL("abc"); + d=_TL("linearisation"); + const S* pD=_TS("299792458"); + c='x'; + aWidth=KDefaultJustifyWidth; // Left justified, Default width + a.JustifyL(b,aWidth,ELeft,c); + test(a==b); + test(a.Length()==3); + a.AppendJustifyL(b,aWidth,ELeft,c); + test(a==_TL("abcabc")); + test(a.Length()==6); + aWidth=1; // Width < String length + a.JustifyL(b,aWidth,ELeft,c); + test(a==_TL("a")); + test(a.Length()==1); + a.AppendJustifyL(b,aWidth,ELeft,c); + test(a==_TL("aa")); + test(a.Length()==2); + aWidth=5; // Width > String length + a.JustifyL(b,aWidth,ELeft,c); + test(a==_TL("abcxx")); + test(a.Length()==5); + a.AppendJustifyL(b,aWidth,ELeft,c); + test(a==_TL("abcxxabcxx")); + test(a.Length()==10); + + aWidth=KDefaultJustifyWidth; // Right justified, Default width + a.JustifyL(b,aWidth,ERight,c); + test(a==b); + test(a.Length()==3); + a.AppendJustifyL(b,aWidth,ERight,c); + test(a==_TL("abcabc")); + test(a.Length()==6); + + aWidth=1; // Right justified, Width < String length + a.JustifyL(b,aWidth,ERight,c); + test(a==_TL("a")); + test(a.Length()==1); + a.AppendJustifyL(b,aWidth,ERight,c); + test(a==_TL("aa")); + test(a.Length()==2); + + aWidth=5; // Right justified, width > String length + a.JustifyL(b,aWidth,ERight,c); + test(a==_TL("xxabc")); + test(a.Length()==5); + a.AppendJustifyL(b,aWidth,ERight,c); + test(a==_TL("xxabcxxabc")); + test(a.Length()==10); + + aWidth=KDefaultJustifyWidth; // Center justified, Default width + a.JustifyL(b,aWidth,ECenter,c); + test(a==b); + test(a.Length()==3); + a.AppendJustifyL(b,aWidth,ECenter,c); + test(a==_TL("abcabc")); + test(a.Length()==6); + + aWidth=1; // Centre justified, width < String length + a.JustifyL(b,aWidth,ECenter,c); + test(a==_TL("a")); + test(a.Length()==1); + a.AppendJustifyL(b,aWidth,ECenter,c); + test(a==_TL("aa")); + test(a.Length()==2); + + aWidth=5; // Centre justified, width > String length + a.JustifyL(b,aWidth,ECenter,c); + test(a==_TL("xabcx")); + test(a.Length()==5); + a.AppendJustifyL(b,aWidth,ECenter,c); + test(a==_TL("xabcxxabcx")); + test(a.Length()==10); + + //----------------------Num---------------------------------------------------- + test.Next(_L("Num")); + TInt j=-2147483647-1; + a.NumL(j); + test(a==_TL("-2147483648")); + test(a.Length()==11); + TUint i=2147483648u; + a.NumL(i); + test(a==_TL("2147483648")); + test(a.Length()==10); + if (a.MaxLength()>31) + { + a.NumL(i,EBinary); + test(a==_TL("10000000000000000000000000000000")); + test(a.Length()==32); + a=_TL(""); + a.NumUCL(i,EBinary); + test(a==_TL("10000000000000000000000000000000")); + test(a.Length()==32); + } + i=31; + a.NumL(i,EBinary); + test(a==_TL("11111")); + test(a.Length()==5); + a=_TL(""); + a.NumUCL(i,EBinary); + test(a==_TL("11111")); + test(a.Length()==5); + i=2147483648u; + a.NumL(i,EOctal); + test(a==_TL("20000000000")); + test(a.Length()==11); + a=_TL(""); + a.NumUCL(i,EOctal); + test(a==_TL("20000000000")); + test(a.Length()==11); + a.NumL(i,EDecimal); + test(a==_TL("2147483648")); + test(a.Length()==10); + a=_TL(""); + a.NumUCL(i,EDecimal); + test(a==_TL("2147483648")); + test(a.Length()==10); + a.NumL(i,EHex); + test(a==_TL("80000000")); + test(a.Length()==8); + a=_TL(""); + a.NumUCL(i,EHex); + test(a==_TL("80000000")); + test(a.Length()==8); + i=0; + a.NumL(i); + test(a==_TL("0")); + test(a.Length()==1); + a=_TL("abc"); + a.NumL(i,EBinary); + test(a==_TL("0")); + test(a.Length()==1); + a=_TL("abc"); + a.NumUCL(i,EBinary); + test(a==_TL("0")); + test(a.Length()==1); + a=_TL("abc"); + a.NumL(i,EOctal); + test(a==_TL("0")); + test(a.Length()==1); + a=_TL(""); + a.NumUCL(i,EOctal); + test(a==_TL("0")); + test(a.Length()==1); + a=_TL("abc"); + a.NumL(i,EDecimal); + test(a==_TL("0")); + test(a.Length()==1); + a=_TL(""); + a.NumUCL(i,EDecimal); + test(a==_TL("0")); + test(a.Length()==1); + a=_TL("abc"); + a.NumL(i,EHex); + test(a==_TL("0")); + test(a.Length()==1); + a=_TL(""); + a.NumUCL(i,EHex); + test(a==_TL("0")); + test(a.Length()==1); + + // TInt i=a.Num(6.2,format); NOT IMPLEMENTED + //----------------------AppendNum---------------------------------------------------- + test.Next(_L("AppendNum")); + a=_TL("0"); + a.AppendNumL(j); + test(a==_TL("0-2147483648")); + test(a.Length()==12); + + a=_TL("abc"); + i=4294967295u; + a.AppendNumL(i); + test(a==_TL("abc4294967295")); + test(a.Length()==13); + + j=2147483647; + a=_TL("abc"); + a.AppendNumL(j); + test(a==_TL("abc2147483647")); + test(a.Length()==13); + + a=_TL("a"); + i=180150000; + if (a.MaxLength()>28) + { + a.AppendNumL(i,EBinary); + test(a==_TL("a1010101111001101111011110000")); + test(a.Length()==29); + } + a=_TL("a"); + a.AppendNumL(15,EBinary); + test(a==_TL("a1111")); + test(a.Length()==5); + + a=_TL("a"); + a.AppendNumL(i,EDecimal); + test(a==_TL("a180150000")); + test(a.Length()==10); + + a=_TL("a"); + a.AppendNumL(i,EOctal); + test(a==_TL("a1257157360")); + test(a.Length()==11); + + a=_TL("a"); + a.AppendNumUCL(i,EHex); + test(a==_TL("aABCDEF0")); + test(a.Length()==8); + + + a=_TL("a"); + a.AppendNumFixedWidthL(i,EHex,3); + test(a==_TL("aabc")); + test(a.Length()==4); + + a=_TL("a"); + a.AppendNumFixedWidthUCL(i,EHex,4); + test(a==_TL("aABCD")); + test(a.Length()==5); + + + //----------------------Format---------------------------------------------------- + test.Next(_L("Format")); + a=_TL(""); + b=_TL("cde"); + a.FormatL(_TL("%S"),&b); + test(a==b); + test(a.Length()==3); + + DESTEMPLATE xyz=_TL("xyzwpq"); + a.FormatL(_TL("%S"),&xyz); + test(a==_TL("xyzwpq")); + test(a.Length()==6); + + DESTEMPLATE cde=_TL("cde"); + a.FormatL(_TL("ab %-x5S"),&cde); + test(a==_TL("ab cdexx")); + test(a.Length()==8); + + a.FormatL(_TL("ab %=x5S"),&cde); + test(a==_TL("ab xcdex")); + test(a.Length()==8); + + a.FormatL(_TL("ab %+x5S"),&cde); + test(a==_TL("ab xxcde")); + test(a.Length()==8); + + a.FormatL(_TL("ab %5S"),&cde); + test(a==_TL("ab cde")); + test(a.Length()==8); + + a.FormatL(_TL("ab %-**S"),'x',5,&cde); + test(a==_TL("ab cdexx")); + test(a.Length()==8); + + a.FormatL(_TL("ab %*S"),5,&cde); + test(a==_TL("ab cde")); + test(a.Length()==8); + + a=_TL("xyz"); + a.FormatL(_TL("ab %-x5S"),&b); + test(a==_TL("ab cdexx")); + test(a.Length()==8); + + a=_TL("xyz"); + a.FormatL(_TL("ab %-**S"),'x',5,&b); + test(a==_TL("ab cdexx")); + test(a.Length()==8); + + a=_TL("xyz"); + a.FormatL(_TL("ab %*S"),5,&b); + test(a==_TL("ab cde")); + test(a.Length()==8); + + DESTEMPLATE fred=_TL("fred"); + a.FormatL(_TL("%+0*S"),10,&fred); + test(a==_TL("000000fred")); + test(a.Length()==10); + + a.FormatL(_TL("%-0*S"),7,&fred); + test(a==_TL("fred000")); + test(a.Length()==7); + + a.FormatL(_TL("%0*S"),11,&fred); + test(a==_TL("0000000fred")); + test(a.Length()==11); + + a.FormatL(_TL("c=%s"),pD); + TESTEQ(a,_TL("c=299792458")); + + a.FormatL(_TL("c=%10.6s"),pD); + test(a==_TL("c= 299792")); + + a.FormatL(_TL("c=%*.*s"),5,4,pD); + test(a==_TL("c= 2997")); + + a.FormatL(_TL("%S"),&d); + test(a==_TL("linearisation")); + + a.FormatL(_TL("%10.6S"),&d); + test(a==_TL(" linear")); + + a.FormatL(_TL("%*.*S"),5,4,&d); + test(a==_TL(" line")); + + a.FormatL(_TL("%*.*Sed"),10,8,&d); + test(a==_TL(" linearised")); + + a.FormatL(_TL("%*.*S"),14,20,&d); + test(a==_TL(" linearisation")); + + a.FormatL(_TL("ab %-,5b"),7); + test(a==_TL("ab 111,,")); + test(a.Length()==8); + + a.FormatL(_TL("ab %=,5O"),31); + test(a==_TL("ab ,37,,")); + test(a.Length()==8); + + a.FormatL(_TL("ab %+xlx"),TInt64(171)); + test(a==_TL("ab ab")); + test(a.Length()==5); + + a.FormatL(_TL("ab %+xlX %+xlx"),TInt64(171),TInt64(171)); + TESTEQ(a,_TL("ab AB ab")); + test(a.Length()==8); + + a.FormatL(_TL("ab %lu"),MAKE_TINT64((TUint)(KMinTInt),0)); + test(a==_TL("ab 9223372036854775808")); + test(a.Length()==22); + + a.FormatL(_TL("ab %ld"),MAKE_TINT64((TUint)(KMinTInt),1)); + test(a==_TL("ab -9223372036854775807")); + test(a.Length()==23); + + a.FormatL(_TL("ab %ld"),MAKE_TINT64((TUint)(KMinTInt),0)); + test(a==_TL("ab -9223372036854775808")); + test(a.Length()==23); + + a.FormatL(_TL("ab %ld"),MAKE_TINT64((TUint)(KMaxTInt),KMaxTUint)); + test(a==_TL("ab 9223372036854775807")); + test(a.Length()==22); + + a.FormatL(_TL("ab %ld"),MAKE_TINT64(KMaxTUint,KMaxTUint)); + test(a==_TL("ab -1")); + test(a.Length()==5); + + a.FormatL(_TL("ab %lu"),MAKE_TINT64(KMaxTUint,KMaxTUint)); + test(a==_TL("ab 18446744073709551615")); + test(a.Length()==23); + + a.FormatL(_TL("ab %ld"),TInt64(0)); + test(a==_TL("ab 0")); + test(a.Length()==4); + + a.FormatL(_TL("ab %lb"),TInt64(0)); + test(a==_TL("ab 0")); + test(a.Length()==4); + + a.FormatL(_TL("ab %lx"),TInt64(0)); + test(a==_TL("ab 0")); + test(a.Length()==4); + + a.FormatL(_TL("ab %lo"),TInt64(0)); + test(a==_TL("ab 0")); + test(a.Length()==4); + + a.FormatL(_TL("ab %lu"),TInt64(0)); + test(a==_TL("ab 0")); + test(a.Length()==4); + + a.FormatL(_TL("ab %lb"),MAKE_TINT64((TUint)(KMaxTInt),KMaxTUint)); + test(a==_TL("ab 111111111111111111111111111111111111111111111111111111111111111")); + test(a.Length()==66); + + a.FormatL(_TL("ab %lb"),MAKE_TINT64(KMaxTUint,KMaxTUint)); + test(a==_TL("ab 1111111111111111111111111111111111111111111111111111111111111111")); + test(a.Length()==67); + + a.FormatL(_TL("ab %lx"),MAKE_TINT64((TUint)(KMaxTInt),KMaxTUint)); + test(a==_TL("ab 7fffffffffffffff")); + test(a.Length()==19); + + a.FormatL(_TL("ab %lx"),MAKE_TINT64(KMaxTUint,KMaxTUint)); + test(a==_TL("ab ffffffffffffffff")); + test(a.Length()==19); + + a.FormatL(_TL("ab %lo"),MAKE_TINT64((TUint)(KMaxTInt),KMaxTUint)); + test(a==_TL("ab 777777777777777777777")); + test(a.Length()==24); + + // tests which excercise any 8 byte alignment requirement on 64bit integers + a.FormatL(_TL("%li%S"),MAKE_TINT64(1,2),&fred); + test(a==_TL("4294967298fred")); + + a.FormatL(_TL("%S%li%S"),&fred,MAKE_TINT64(1,2),&fred); + test(a==_TL("fred4294967298fred")); + + a.FormatL(_TL("%lu%S"),MAKE_TINT64(1,2),&fred); + test(a==_TL("4294967298fred")); + + a.FormatL(_TL("%S%lu%S"),&fred,MAKE_TINT64(1,2),&fred); + test(a==_TL("fred4294967298fred")); + + a.FormatL(_TL("ab %U"),233); + test(a==_TL("ab 233")); + test(a.Length()==6); + + a.FormatL(_TL("ab %*d"),5,-131); + test(a==_TL("ab -131")); + test(a.Length()==8); + + a.FormatL(_TL("ab%c"),'x'); + test(a==_TL("abx")); + test(a.Length()==3); + + a.FormatL(_TL("%W"),-131); + test(*(TInt32*)a.Ptr()==-131); + + a.FormatL(_TL("%M"),-131); + test(*(TInt32*)a.Ptr()==2113929215); + + a.FormatL(_TL("%w"),-131); + test(*(TInt16*)a.Ptr()==-131); + + a.FormatL(_TL("%m"),-131); + test(*(TInt16*)a.Ptr()==32255); + + //----------------------AppendFormat---------------------------------------------------- + a=_TL("xyz"); + a.AppendFormatL(_TL("ab %+xlx"),TInt64(171)); + test(a==_TL("xyzab ab")); + test(a.Length()==8); + + a=_TL("xyz"); + a.AppendFormatL(_TL("ab %5S"),&b); + test(a==_TL("xyzab cde")); + test(a.Length()==11); + + a=_TL("xyz"); + a.AppendFormatL(_TL("%W"),-131); +// test(*(TInt32*)(a.Ptr()+3)==-131); // Alignment-safe version: + TInt val; + Mem::Copy(&val,&a[3],4); + test(val==-131); + +// Cannot do this on GCCE or ARMv5 because of +// "Cannot pass objects of non-POD type through '...'. +// Call will abort at runtime". + +#ifdef __WINSCW__ + const TAny* const zeroTerminatedString=(sizeof(S)==2)? (const TAny*)_S16(":-)E"): (const TAny*)_S8(":-)E"); + const TInt dummyParameter=0; + b=_TL("ebdb"); + Test14_ReorderedParameterFormattingL(dummyParameter, 0x20ac, 11, 3, 13.89543, zeroTerminatedString, '!', TInt64(199), 2, &b, 6, 30005, TRealX(0.125), 0x8bdd); +#endif + + test.End(); + } + +/** +@SYMTestCaseID SYSLIB-EUSERHL-UT-4024 +@SYMTestCaseDesc Tests LString leaving variant FormatListL() method +@SYMTestPriority High +@SYMTestActions Creates LString objects and uses the LString FormatListL() method + to format the string. + Verifies that the LString is formatted as expected +@SYMTestExpectedResults LString FormatListL() method should work as expected +@SYMREQ 10372 +*/ +template +GLDEF_C void TestLString::Test14_ReorderedParameterFormattingL(TInt aDummyParameter, ...) + { + + test.Start (_L ("@SYMTestCaseID:SYSLIB-EUSERHL-UT-4024")); + + VA_LIST parameterList; + T generated(1); + T expected(1); + + VA_START(parameterList, aDummyParameter); + generated.FormatListL(_TL("\t%-**.*fqq%.3swww%+*5Ldeeee%.*Srrrrr%0*xtttttt%.3Fyyyyyyy%c"), parameterList); + test(generated.Length()==61); + expected.FormatL(_TL("\t13.895%c%c%c%c%cqq:-)www!!199eeeeebrrrrr007535tttttt0.125yyyyyyy"), (S)0x20ac, (S)0x20ac, (S)0x20ac, (S)0x20ac, (S)0x20ac); + test(generated.Left(generated.Length()-1)==expected); + test(generated[generated.Length()-1]==(S)0x8bdd); + + VA_START(parameterList, aDummyParameter); + generated.FormatListL(_TL("\t%$1$-**.*fqq%.3swww%+*5Ldeeee%.*Srrrrr%0*xtttttt%$6$.3Fyyyyyyy%c"), parameterList); + test(generated.Length()==61); + expected.FormatL(_TL("\t13.895%c%c%c%c%cqq:-)www!!199eeeeebrrrrr007535tttttt0.125yyyyyyy"), (S)0x20ac, (S)0x20ac, (S)0x20ac, (S)0x20ac, (S)0x20ac); + test(generated.Left(generated.Length()-1)==expected); + test(generated[generated.Length()-1]==(S)0x8bdd); + + VA_START(parameterList, aDummyParameter); + generated.FormatListL(_TL("\t%$6$.3Fqq%.3swww%+*5Ldeeee%.*Srrrrr%0*xtttttt%$1$-**.*fyyyyyyy%c"), parameterList); + test(generated.Length()==61); + expected.FormatL(_TL("\t0.125qq:-)www!!199eeeeebrrrrr007535tttttt13.895%c%c%c%c%cyyyyyyy"), (S)0x20ac, (S)0x20ac, (S)0x20ac, (S)0x20ac, (S)0x20ac); + test(generated.Left(generated.Length()-1)==expected); + test(generated[generated.Length()-1]==(S)0x8bdd); + + VA_START(parameterList, aDummyParameter); + generated.FormatListL(_TL("\t%-**.*fqq%.3swww%$5$0*xeeee%.*Srrrrr%$3$+*5Ldtttttt%.3Fyyyyyyy%c"), parameterList); + test(generated.Length()==61); + expected.FormatL(_TL("\t13.895%c%c%c%c%cqq:-)www007535eeeeebrrrrr!!199tttttt0.125yyyyyyy"), (S)0x20ac, (S)0x20ac, (S)0x20ac, (S)0x20ac, (S)0x20ac); + test(generated.Left(generated.Length()-1)==expected); + test(generated[generated.Length()-1]==(S)0x8bdd); + + VA_START(parameterList, aDummyParameter); + generated.FormatListL(_TL("\t%-**.*fqq%$4$.*Swww%+*5Ldeeee%$2$.3srrrrr%0*xtttttt%.3Fyyyyyyy%c"), parameterList); + test(generated.Length()==61); + expected.FormatL(_TL("\t13.895%c%c%c%c%cqqebwww!!199eeee:-)rrrrr007535tttttt0.125yyyyyyy"), (S)0x20ac, (S)0x20ac, (S)0x20ac, (S)0x20ac, (S)0x20ac); + test(generated.Left(generated.Length()-1)==expected); + test(generated[generated.Length()-1]==(S)0x8bdd); + + VA_START(parameterList, aDummyParameter); + generated.FormatListL(_TL("\t%-**.*fqq%.3swww%+*5Ldeeee%$7$crrrrr%0*xtttttt%.3Fyyyyyyy%$4$.*S"), parameterList); + test(generated.Length()==61); + expected.FormatL(_TL("\t13.895%c%c%c%c%cqq:-)www!!199eeee"), (S)0x20ac, (S)0x20ac, (S)0x20ac, (S)0x20ac, (S)0x20ac); + test(generated.Left(29)==expected); + test(generated[29]==(S)0x8bdd); + test(generated.Mid(29+1)==_TL("rrrrr007535tttttt0.125yyyyyyyeb")); + + VA_START(parameterList, aDummyParameter); + generated.FormatListL(_TL("\t%$4$.*Sqq%.3swww%+*5Ldeeee%$6$.3Frrrrr%0*xtttttt%$1$-**.*fyyyyyyy%c"), parameterList); + test(generated.Length()==61); + expected.FormatL(_TL("\tebqq:-)www!!199eeee0.125rrrrr007535tttttt13.895%c%c%c%c%cyyyyyyy"), (S)0x20ac, (S)0x20ac, (S)0x20ac, (S)0x20ac, (S)0x20ac); + test(generated.Left(generated.Length()-1)==expected); + test(generated[generated.Length()-1]==(S)0x8bdd); + + VA_START(parameterList, aDummyParameter); + generated.FormatListL(_TL("\t%$7$cqq%$6$.3Fwww%$5$0*xeeee%.*Srrrrr%$3$+*5Ldtttttt%$2$.3syyyyyyy%$1$-**.*f"), parameterList); + test(generated.Length()==61); + test(generated.Left(1)==_TL("\t")); + test(generated[1]==(S)0x8bdd); + expected.FormatL(_TL("qq0.125www007535eeeeebrrrrr!!199tttttt:-)yyyyyyy13.895%c%c%c%c%c"), (S)0x20ac, (S)0x20ac, (S)0x20ac, (S)0x20ac, (S)0x20ac); + test(generated.Mid(2)==expected); + + VA_START(parameterList, aDummyParameter); + generated.FormatListL(_TL("\t%$7$cqq%$6$.3Fwww%$5$0*xeeee%$4$.*Srrrrr%$3$+*5Ldtttttt%$2$.3syyyyyyy%$1$-**.*f"), parameterList); + test(generated.Length()==61); + test(generated.Left(1)==_TL("\t")); + test(generated[1]==(S)0x8bdd); + expected.FormatL(_TL("qq0.125www007535eeeeebrrrrr!!199tttttt:-)yyyyyyy13.895%c%c%c%c%c"), (S)0x20ac, (S)0x20ac, (S)0x20ac, (S)0x20ac, (S)0x20ac); + test(generated.Mid(2)==expected); + + test.End(); + } + + +/** +@SYMTestCaseID SYSLIB-EUSERHL-UT-4025 +@SYMTestCaseDesc Tests LString ReplaceL() method +@SYMTestPriority High +@SYMTestActions Creates LString objects and uses the ReplaceL() method + to replace the string data. + Verifies that the LString data is replaced as expected +@SYMTestExpectedResults LString ReplaceL() method should replace data + in the LString as expected. +@SYMREQ 10372 +*/ +template +GLDEF_C void TestLString::Test15L() +// Replacing + { + + test.Start (_L ("@SYMTestCaseID:SYSLIB-EUSERHL-UT-4025")); + + test.Next(_L("Replace")); + T a(1); + T b(1); + test(a.MaxLength()>=1); + a=_TL("abccccc"); + b=_TL("def"); + a.ReplaceL(3,4,b); // Replace with smaller in middle (insert and delete) + test(a==_TL("abcdef")); + a.ReplaceL(1,1,b); // Replace with larger in middle (insert and delete) + test(a==_TL("adefcdef")); + a.ReplaceL(0,8,_TL("")); // Replace complete string (delete) + test(a==_TL("")); + a.ReplaceL(0,0,b); // Replace at beginning (insert) + test(a==b); + a.ReplaceL(3,0,_TL("xyz")); // Replace at end (append) + test(a==_TL("defxyz")); + a.ReplaceL(0,0,_TL("")); // Replace nothing at beginning (do nothing) + test(a==_TL("defxyz")); + a.ReplaceL(6,0,_TL("")); // Replace nothing at end (do nothing) + test(a==_TL("defxyz")); + test.End(); + } + + +template +GLDEF_C void TestLString::test_TBufL() +// Test the TBuf class. + { + test.Start(_L("All operations")); + Test1L(); + test.Next(_L("Constructors")); + Test2(); + test.Next(_L("Additional tests")); + Test3(); + test.Next(_L("Comparison operators")); + Test4(); + test.Next(_L("Conversion operators")); + Test7(); + test.Next(_L("Comparison")); + Test8(); + test.Next(_L("Matching")); + Test9(); + test.Next(_L("Locating")); + Test10(); + test.Next(_L("Copying")); + Test11L(); + test.Next(_L("Finding")); + Test12(); + test.Next(_L("Basic like ops")); + Test13L(); + test.Next(_L("Leaving variants of Formating")); + Test14L(); + + test.Next(_L("Leaving variants of Replacing")); + Test15L(); + test.End(); + } + +/** +@SYMTestCaseID SYSLIB-EUSERHL-UT-4026 +@SYMTestCaseDesc Tests LString FormatL() method +@SYMTestPriority High +@SYMTestActions Creates LString objects and uses the FormatL() method + to format the string data. + Verifies that the LString data is formatted as expected +@SYMTestExpectedResults LString FormatL() method should format data + in the LString as expected. +@SYMREQ 10372 +*/ +template +LOCAL_C void testFormatL() + { + + test.Start (_L ("@SYMTestCaseID:SYSLIB-EUSERHL-UT-4026")); + + //TBuf<0x100> aa; + T aa(1); + aa.FormatL(_TL("x%- 5fx"), 6.2345678); + test(aa==_TL("x6.234568x")); + aa.FormatL(_TL("x%+ 5fx"), 6.2345678); + test(aa==_TL("x6.234568x")); + aa.FormatL(_TL("x% 5fx"), 6.2345678); + test(aa==_TL("x6.234568x")); + aa.FormatL(_TL("x%= 5fx"), 6.2345678); + test(aa==_TL("x6.234568x")); + aa.FormatL(_TL("x%- 10fx"), 6.2345); + test(aa==_TL("x6.234500 x")); + aa.FormatL(_TL("x%+ 10fx"), 6.2345); + test(aa==_TL("x 6.234500x")); + aa.FormatL(_TL("x% 10fx"), 6.2345); + test(aa==_TL("x 6.234500x")); + aa.FormatL(_TL("x%= 10fx"), 6.2345); + test(aa==_TL("x 6.234500 x")); + aa.FormatL(_TL("x%10fx"), 12345352342.545); + test(aa==_TL("x12,345,352,342.545000x")); + aa.FormatL(_TL("x%20.9fx"), 1.0123456789); + test(aa==_TL("x 1.012345679x")); + aa.FormatL(_TL("x%5.1fx"), 1.99); + test(aa==_TL("x 2.0x")); + +// Cannot do these on GCCE or ARMv5 because of +// "Cannot pass objects of non-POD type through '...'. +// Call will abort at runtime". +#ifdef __WINSCW__ + aa.FormatL(_TL("x%- 5Fx"), TRealX(6.2345678)); + test(aa==_TL("x6.234568x")); + aa.FormatL(_TL("x%+ 5Fx"), TRealX(6.2345678)); + test(aa==_TL("x6.234568x")); + aa.FormatL(_TL("x% 5Fx"), TRealX(6.2345678)); + test(aa==_TL("x6.234568x")); + aa.FormatL(_TL("x%= 5Fx"), TRealX(6.2345678)); + test(aa==_TL("x6.234568x")); + aa.FormatL(_TL("x%- 10Fx"), TRealX(6.2345)); + test(aa==_TL("x6.234500 x")); + aa.FormatL(_TL("x%+ 10Fx"), TRealX(6.2345)); + test(aa==_TL("x 6.234500x")); + aa.FormatL(_TL("x% 10Fx"), TRealX(6.2345)); + test(aa==_TL("x 6.234500x")); + aa.FormatL(_TL("x%+010Fx"), TRealX(6.2345)); + test(aa==_TL("x006.234500x")); + aa.FormatL(_TL("x%+10Fx"), TRealX(6.2345)); + test(aa==_TL("x 6.234500x")); + aa.FormatL(_TL("x%10Fx"), TRealX(6.2345)); + test(aa==_TL("x 6.234500x")); + aa.FormatL(_TL("x%010Fx"), TRealX(6.2345)); + test(aa==_TL("x006.234500x")); + aa.FormatL(_TL("x%= 10Fx"), TRealX(6.2345)); + test(aa==_TL("x 6.234500 x")); + aa.FormatL(_TL("x%10Fx"), TRealX(12345352342.545)); + test(aa==_TL("x12,345,352,342.545000x")); + aa.FormatL(_TL("x%20.9Fx"), TRealX(1.0123456789)); + test(aa==_TL("x 1.012345679x")); + aa.FormatL(_TL("x%5.1Fx"), TRealX(1.99)); + test(aa==_TL("x 2.0x")); +#endif + + aa.FormatL(_TL("x%- 5ex"), 6.2345678); + test(aa==_TL("x6.234568E+00x")); + aa.FormatL(_TL("x%+ 5ex"), 6.2345678); + test(aa==_TL("x6.234568E+00x")); + aa.FormatL(_TL("x% 5ex"), 6.2345678); + test(aa==_TL("x6.234568E+00x")); + aa.FormatL(_TL("x%= 5ex"), 6.2345678); + test(aa==_TL("x6.234568E+00x")); + aa.FormatL(_TL("x%- 14ex"), 6.2345); + test(aa==_TL("x6.234500E+00 x")); + aa.FormatL(_TL("x%+ 14ex"), 6.2345); + test(aa==_TL("x 6.234500E+00x")); + aa.FormatL(_TL("x% 14ex"), 6.2345); + test(aa==_TL("x 6.234500E+00x")); + aa.FormatL(_TL("x%= 14ex"), 6.2345); + test(aa==_TL("x 6.234500E+00 x")); + aa.FormatL(_TL("x%10ex"), 12345352342.545); + test(aa==_TL("x1.234535E+10x")); + aa.FormatL(_TL("x%20.9ex"), 1.0123456789); + test(aa==_TL("x 1.012345679E+00x")); + aa.FormatL(_TL("x%5.1ex"), 1.99); + test(aa==_TL("x2.0E+00x")); + + test.End(); + } + +/** +@SYMTestCaseID SYSLIB-EUSERHL-UT-4027 +@SYMTestCaseDesc Tests LString AppendFormatL() method +@SYMTestPriority High +@SYMTestActions Creates LString objects and uses the AppendFormatL() method + to format the string data with and without an overflow handler. + Verifies that the LString data is formatted as expected when using an + overflow handler. +@SYMTestExpectedResults LString AppendFormatL() method should format data + in the LString as expected with and without an overflow handler +@SYMREQ 10372 +*/ +template +void testAppendFormatIgnoreOverflowL() + { + + test.Start (_L ("@SYMTestCaseID:SYSLIB-EUSERHL-UT-4027")); + + test.Next(_L("Test no overflow")); + + T buf(1); + buf.AppendFormatL(_TL("A Descriptor")); + test(buf==_TL("A Descriptor")); + + test.Next(_L("Test overflow with no conversions")); + buf.AppendFormatL(_TL("123456789")); + test(buf==_TL("A Descriptor123456789")); + + test.Next(_L("Force overflow with descriptor conversion")); + buf = _TL("Symbian OS"); + buf.Compress(); + + T buf2; + buf2 = _TL(" - This descriptor should cause overflow"); + buf.AppendFormatL(_TL("%S"),&buf2); + test(buf==_TL("Symbian OS - This descriptor should cause overflow")); + + test.End(); + + } + +#ifndef _DEBUG +#pragma warning( disable : 4702) //Unreachable code +#pragma warning( disable : 4710) //Function not expanded +#endif + + +void RunTestsL() + { + test.Next(_L("class LString8")); + TestLString a(0x50); + a.test_TBufL(); + + test.Next(_L("TReal formating with auto LString8 extension ")); + testFormatL(); + + test.Next(_L("class LString16")); + TestLString b(0x50); + b.test_TBufL(); + + test.Next(_L("TReal formating with auto LString16 extension ")); + testFormatL(); + + testAppendFormatIgnoreOverflowL(); + testAppendFormatIgnoreOverflowL(); + } + +GLDEF_C TInt E32Main() +// Test the TBuf type. + { + + CTrapCleanup* trapHandler=CTrapCleanup::New(); + test(trapHandler!=NULL); + + + test.Title(); + test.Start(_L("Test Formating Functions")); + + TRAPD(err, RunTestsL()); + + test.End(); + + delete trapHandler; + + return(err); + + } + +//#pragma warning( default : 4702) +//#pragma warning( default : 4710) + +