sl@0: // Copyright (c) 2001-2009 Nokia Corporation and/or its subsidiary(-ies). sl@0: // All rights reserved. sl@0: // This component and the accompanying materials are made available sl@0: // under the terms of "Eclipse Public License v1.0" sl@0: // which accompanies this distribution, and is available sl@0: // at the URL "http://www.eclipse.org/legal/epl-v10.html". sl@0: // sl@0: // Initial Contributors: sl@0: // Nokia Corporation - initial contribution. sl@0: // sl@0: // Contributors: sl@0: // sl@0: // Description: sl@0: // sl@0: sl@0: #include "CTextUtilsTest.h" sl@0: sl@0: #include <uriutilscommon.h> sl@0: #include <inetprottextutils.h> sl@0: sl@0: #include "TextUtilsTestCommon.h" sl@0: #include "TextUtilsTests.h" sl@0: sl@0: CTextUtilsTest* CTextUtilsTest::NewLC(CIpuTestHarness* aTestHarness) sl@0: { sl@0: CTextUtilsTest* self = new (ELeave) CTextUtilsTest(aTestHarness); sl@0: CleanupStack::PushL(self); sl@0: self->ConstructL(); sl@0: return self; sl@0: } sl@0: sl@0: CTextUtilsTest* CTextUtilsTest::NewL(CIpuTestHarness* aTestHarness) sl@0: { sl@0: CTextUtilsTest* self = CTextUtilsTest::NewLC(aTestHarness); sl@0: CleanupStack::Pop(self); sl@0: return self; sl@0: } sl@0: sl@0: CTextUtilsTest::CTextUtilsTest(CIpuTestHarness* aTestHarness) sl@0: : iTestHarness(aTestHarness) sl@0: { sl@0: } sl@0: sl@0: void CTextUtilsTest::ConstructL() sl@0: { sl@0: } sl@0: sl@0: CTextUtilsTest::~CTextUtilsTest() sl@0: { sl@0: } sl@0: sl@0: void CTextUtilsTest::DoTestsL() sl@0: { sl@0: sl@0: TestTextUtilsRemoveL(KRemove0_base, KRemove0_left, KRemove0_left_consumed, sl@0: KRemove0_right, KRemove0_right_consumed, sl@0: KRemove0_both, KRemove0_both_consumed); sl@0: sl@0: TestTextUtilsDesToIntConversionL(KDecRep0, KNumericValue0, KIsValid0); sl@0: TestTextUtilsDesToIntConversionL(KDecRep1, KNumericValue1, KIsValid1); sl@0: TestTextUtilsDesToIntConversionL(KDecRep2, KNumericValue2, KIsValid2); sl@0: TestTextUtilsDesToIntConversionL(KDecRep3, KNumericValue3, KIsValid3); sl@0: sl@0: TestTextUtilsIntToDesConversionL(KNumericValue0, KDecRep0); sl@0: TestTextUtilsIntToDesConversionL(KNumericValue1, KDecRep1); sl@0: sl@0: _LIT(KWhiteSpace," \t"); sl@0: TestTextUtilsDesToHexConversionL(KWhiteSpace, 0, EFalse); sl@0: sl@0: TestTextUtilsDesToHexConversionL(KHexRep0, KNumericValue0, KIsValid0); sl@0: TestTextUtilsDesToHexConversionL(KHexRep1, KNumericValue1, KIsValid1); sl@0: TestTextUtilsDesToHexConversionL(KHexRep2, KNumericValue2, KIsValid2); sl@0: TestTextUtilsDesToHexConversionL(KHexRep3, KNumericValue3, KIsValid3); sl@0: sl@0: TestTextUtilsHexToDesConversionL(KNumericValue0, KHexRep0); sl@0: TestTextUtilsHexToDesConversionL(KNumericValue1, KHexRep1); sl@0: sl@0: TestTextUtilsExtractQuotedStringL(KQuotedBuffer0, KQuotedString0, KQuotedRemainder0, KExpectedError0); sl@0: TestTextUtilsExtractQuotedStringL(KQuotedBuffer1, KQuotedString1, KQuotedRemainder1, KExpectedError1); sl@0: TestTextUtilsExtractQuotedStringL(KQuotedBuffer2, KQuotedString2, KQuotedRemainder2, KExpectedError2); sl@0: TestTextUtilsExtractQuotedStringL(KQuotedBuffer3, KQuotedString3, KQuotedRemainder3, KExpectedError3); sl@0: sl@0: TestTextUtilsExtractTokenFromListL( sl@0: KListBuffer0, sl@0: KListToken0_0, sl@0: KListToken0_1, sl@0: KListToken0_2, sl@0: KListRemainder0, sl@0: KListSeparator0 sl@0: ); sl@0: sl@0: TestTextUtilsExtractTokenFromListL( sl@0: KListBuffer1, sl@0: KListToken1_0, sl@0: KListToken1_1, sl@0: KListToken1_2, sl@0: KListRemainder1, sl@0: KListSeparator1 sl@0: ); sl@0: sl@0: TestTextUtilsExtractTokenFromListL( sl@0: KListBuffer2, sl@0: KListToken2_0, sl@0: KListToken2_1, sl@0: KListToken2_2, sl@0: KListRemainder2, sl@0: KListSeparator2 sl@0: ); sl@0: sl@0: TestTextUtilsExtractTokenFromListL( sl@0: KListBuffer3, sl@0: KListToken3_0, sl@0: KListToken3_1, sl@0: KListToken3_2, sl@0: KListRemainder3, sl@0: KListSeparator3 sl@0: ); sl@0: } sl@0: sl@0: void CTextUtilsTest::TestTextUtilsRemoveL(const TDesC& aBase, sl@0: const TDesC& aRemoveLeft, TInt aConsumedLeft, sl@0: const TDesC& aRemoveRight, TInt aConsumedRight, sl@0: const TDesC& aRemoveBoth, TInt aConsumedBoth) sl@0: { sl@0: iTestHarness->StartTestL(_L("Test TextUtils Remove (16-bit)")); sl@0: sl@0: TInt error = DoTestTextUtilsRemove<TPtrC16>(aBase, aRemoveLeft, aConsumedLeft, sl@0: aRemoveRight, aConsumedRight, sl@0: aRemoveBoth, aConsumedBoth); sl@0: sl@0: iTestHarness->EndTest(error); sl@0: sl@0: // Make 8-bit copy sl@0: HBufC8* baseBuf = HBufC8::NewLC(aBase.Length()); sl@0: TPtr8 base8Bit = baseBuf->Des(); sl@0: base8Bit.Copy(aBase); sl@0: sl@0: HBufC8* removeLeftBuf = HBufC8::NewLC(aRemoveLeft.Length()); sl@0: TPtr8 removeLeft8Bit = removeLeftBuf->Des(); sl@0: removeLeft8Bit.Copy(aRemoveLeft); sl@0: sl@0: HBufC8* removeRightBuf = HBufC8::NewLC(aRemoveRight.Length()); sl@0: TPtr8 removeRight8Bit = removeRightBuf->Des(); sl@0: removeRight8Bit.Copy(aRemoveRight); sl@0: sl@0: HBufC8* removeBothBuf = HBufC8::NewLC(aRemoveBoth.Length()); sl@0: TPtr8 removeBoth8Bit = removeBothBuf->Des(); sl@0: removeBoth8Bit.Copy(aRemoveBoth); sl@0: sl@0: iTestHarness->StartTestL(_L("Test TextUtils Remove (8-bit)")); sl@0: sl@0: error = DoTestTextUtilsRemove<TPtrC8>(base8Bit, removeLeft8Bit, aConsumedLeft, sl@0: removeRight8Bit, aConsumedRight, sl@0: removeBoth8Bit, aConsumedBoth); sl@0: sl@0: iTestHarness->EndTest(error); sl@0: sl@0: CleanupStack::PopAndDestroy(4, baseBuf); // baseBuf, removeLeftBuf, removeRightBuf, removeBothBuf sl@0: } sl@0: sl@0: void CTextUtilsTest::TestTextUtilsDesToIntConversionL(const TDesC& aDes, TInt aInt, TBool aValid) sl@0: { sl@0: iTestHarness->StartTestL(_L("Test TextUtils ConvertDescriptorToInt (16-bit)")); sl@0: sl@0: TInt error = DoTestTextUtilsDesToIntConversion(aDes, aInt, aValid); sl@0: sl@0: iTestHarness->EndTest(error); sl@0: sl@0: // Make 8-bit copy sl@0: HBufC8* desBuf = HBufC8::NewLC(aDes.Length()); sl@0: TPtr8 des8Bit = desBuf->Des(); sl@0: des8Bit.Copy(aDes); sl@0: sl@0: iTestHarness->StartTestL(_L("Test TextUtils ConvertDescriptorToInt (8-bit)")); sl@0: sl@0: error = DoTestTextUtilsDesToIntConversion(des8Bit, aInt, aValid); sl@0: sl@0: iTestHarness->EndTest(error); sl@0: sl@0: CleanupStack::PopAndDestroy(desBuf); // desBuf sl@0: } sl@0: sl@0: void CTextUtilsTest::TestTextUtilsIntToDesConversionL(TInt aInt, const TDesC& aDes) sl@0: { sl@0: iTestHarness->StartTestL(_L("Test TextUtils ConvertIntToDescriptor (16-bit)")); sl@0: sl@0: TInt error = DoTestTextUtilsIntToDesConversion<HBufC16>(aInt, aDes); sl@0: sl@0: iTestHarness->EndTest(error); sl@0: sl@0: // Make 8-bit copy sl@0: HBufC8* desBuf = HBufC8::NewLC(aDes.Length()); sl@0: TPtr8 des8Bit = desBuf->Des(); sl@0: des8Bit.Copy(aDes); sl@0: sl@0: iTestHarness->StartTestL(_L("Test TextUtils ConvertIntToDescriptor (8-bit)")); sl@0: sl@0: error = DoTestTextUtilsIntToDesConversion<HBufC8>(aInt, des8Bit); sl@0: sl@0: iTestHarness->EndTest(error); sl@0: sl@0: CleanupStack::PopAndDestroy(desBuf); // desBuf sl@0: } sl@0: sl@0: sl@0: sl@0: void CTextUtilsTest::TestTextUtilsDesToHexConversionL(const TDesC& aDes, TInt aHexNumber, TBool aValid) sl@0: { sl@0: iTestHarness->StartTestL(_L("Test TextUtils ConvertDescriptorToHex (16-bit)")); sl@0: sl@0: TInt error = DoTestTextUtilsDesToHexConversion(aDes, aHexNumber, aValid); sl@0: iTestHarness->EndTest(error); sl@0: sl@0: // Test 8 bit version sl@0: TestTextUtilsDesToHexConversion8L(aDes, aHexNumber, aValid); sl@0: } sl@0: sl@0: sl@0: void CTextUtilsTest::TestTextUtilsDesToHexConversion8L(const TDesC& aDes, TInt aHexNumber, TBool aValid) sl@0: { sl@0: HBufC8* desBuf = HBufC8::NewLC(aDes.Length()); sl@0: TPtr8 des8Bit = desBuf->Des(); sl@0: des8Bit.Copy(aDes); sl@0: sl@0: iTestHarness->StartTestL(_L("Test TextUtils ConvertDescriptorToHex (8-bit)")); sl@0: sl@0: TInt error = DoTestTextUtilsDesToHexConversion(des8Bit, aHexNumber, aValid); sl@0: sl@0: iTestHarness->EndTest(error); sl@0: sl@0: CleanupStack::PopAndDestroy(desBuf); // desBuf sl@0: } sl@0: sl@0: sl@0: sl@0: void CTextUtilsTest::TestTextUtilsHexToDesConversionL(TInt aHex, const TDesC& aDes) sl@0: { sl@0: iTestHarness->StartTestL(_L("Test TextUtils ConvertHexToDescriptor (16-bit)")); sl@0: sl@0: TInt error = DoTestTextUtilsHexToDesConversion<HBufC16>(aHex, aDes); sl@0: sl@0: iTestHarness->EndTest(error); sl@0: sl@0: // Make 8-bit copy sl@0: HBufC8* desBuf = HBufC8::NewLC(aDes.Length()); sl@0: TPtr8 des8Bit = desBuf->Des(); sl@0: des8Bit.Copy(aDes); sl@0: sl@0: iTestHarness->StartTestL(_L("Test TextUtils ConvertHexToDescriptor (8-bit)")); sl@0: sl@0: error = DoTestTextUtilsHexToDesConversion<HBufC8>(aHex, des8Bit); sl@0: sl@0: iTestHarness->EndTest(error); sl@0: sl@0: CleanupStack::PopAndDestroy(desBuf); // desBuf sl@0: } sl@0: sl@0: void CTextUtilsTest::TestTextUtilsExtractQuotedStringL( sl@0: const TDesC& aBuffer, sl@0: const TDesC& aString, sl@0: const TDesC& aRemainder, sl@0: TInt aExpectedError sl@0: ) sl@0: { sl@0: iTestHarness->StartTestL(_L("Test TextUtils ExtractQuotedStringL (16-bit)")); sl@0: sl@0: TInt error = DoTestExtractQuotedStringL<TPtrC>(aBuffer, aString, aRemainder, aExpectedError); sl@0: sl@0: iTestHarness->EndTest(error); sl@0: sl@0: // Make 8-bit copy sl@0: HBufC8* buffer = HBufC8::NewLC(aBuffer.Length()); sl@0: buffer->Des().Copy(aBuffer); sl@0: sl@0: HBufC8* string = HBufC8::NewLC(aString.Length()); sl@0: string->Des().Copy(aString); sl@0: sl@0: HBufC8* remainder = HBufC8::NewLC(aRemainder.Length()); sl@0: remainder->Des().Copy(aRemainder); sl@0: sl@0: iTestHarness->StartTestL(_L("Test TextUtils ExtractQuotedStringL (8-bit)")); sl@0: sl@0: error = DoTestExtractQuotedStringL<TPtrC8>(*buffer, *string, *remainder, aExpectedError); sl@0: sl@0: iTestHarness->EndTest(error); sl@0: sl@0: CleanupStack::PopAndDestroy(3, buffer); sl@0: } sl@0: sl@0: void CTextUtilsTest::TestTextUtilsExtractTokenFromListL( sl@0: const TDesC& aBuffer, sl@0: const TDesC& aToken0, sl@0: const TDesC& aToken1, sl@0: const TDesC& aToken2, sl@0: const TDesC& aRemainder, sl@0: const TDesC& aSeparator sl@0: ) sl@0: { sl@0: iTestHarness->StartTestL(_L("Test TextUtils ExtractTokenFromList, multiple separator (16-bit)")); sl@0: sl@0: TInt error = DoExtractTokenFromListMultipleSeparator<TPtrC>(aBuffer, aToken0, aToken1, aToken2, aRemainder, aSeparator); sl@0: sl@0: iTestHarness->EndTest(error); sl@0: sl@0: // Make 8-bit copy sl@0: HBufC8* buffer = HBufC8::NewLC(aBuffer.Length()); sl@0: buffer->Des().Copy(aBuffer); sl@0: sl@0: HBufC8* token0 = HBufC8::NewLC(aToken0.Length()); sl@0: token0->Des().Copy(aToken0); sl@0: sl@0: HBufC8* token1 = HBufC8::NewLC(aToken1.Length()); sl@0: token1->Des().Copy(aToken1); sl@0: sl@0: HBufC8* token2 = HBufC8::NewLC(aToken2.Length()); sl@0: token2->Des().Copy(aToken2); sl@0: sl@0: HBufC8* remainder = HBufC8::NewLC(aRemainder.Length()); sl@0: remainder->Des().Copy(aRemainder); sl@0: sl@0: HBufC8* separator = HBufC8::NewLC(aSeparator.Length()); sl@0: separator->Des().Copy(aSeparator); sl@0: sl@0: iTestHarness->StartTestL(_L("Test TextUtils ExtractTokenFromList, multiple separator (8-bit)")); sl@0: sl@0: error = DoExtractTokenFromListMultipleSeparator<TPtrC8>(*buffer, *token0, *token1, *token2, *remainder, *separator); sl@0: sl@0: iTestHarness->EndTest(error); sl@0: sl@0: CleanupStack::PopAndDestroy(6, buffer); sl@0: } sl@0: sl@0: void CTextUtilsTest::TestTextUtilsExtractTokenFromListL( sl@0: const TDesC& aBuffer, sl@0: const TDesC& aToken0, sl@0: const TDesC& aToken1, sl@0: const TDesC& aToken2, sl@0: const TDesC& aRemainder, sl@0: TChar aSeparator sl@0: ) sl@0: { sl@0: iTestHarness->StartTestL(_L("Test TextUtils ExtractTokenFromList, single separator (16-bit)")); sl@0: sl@0: TInt error = DoExtractTokenFromListSingleSeparator<TPtrC>(aBuffer, aToken0, aToken1, aToken2, aRemainder, aSeparator); sl@0: sl@0: iTestHarness->EndTest(error); sl@0: sl@0: // Make 8-bit copy sl@0: HBufC8* buffer = HBufC8::NewLC(aBuffer.Length()); sl@0: buffer->Des().Copy(aBuffer); sl@0: sl@0: HBufC8* token0 = HBufC8::NewLC(aToken0.Length()); sl@0: token0->Des().Copy(aToken0); sl@0: sl@0: HBufC8* token1 = HBufC8::NewLC(aToken1.Length()); sl@0: token1->Des().Copy(aToken1); sl@0: sl@0: HBufC8* token2 = HBufC8::NewLC(aToken2.Length()); sl@0: token2->Des().Copy(aToken2); sl@0: sl@0: HBufC8* remainder = HBufC8::NewLC(aRemainder.Length()); sl@0: remainder->Des().Copy(aRemainder); sl@0: sl@0: iTestHarness->StartTestL(_L("Test TextUtils ExtractTokenFromList, single separator (8-bit)")); sl@0: sl@0: error = DoExtractTokenFromListSingleSeparator<TPtrC8>(*buffer, *token0, *token1, *token2, *remainder, aSeparator); sl@0: sl@0: iTestHarness->EndTest(error); sl@0: sl@0: CleanupStack::PopAndDestroy(5, buffer); sl@0: } sl@0: sl@0: /* sl@0: * Local methods sl@0: */ sl@0: sl@0: template<class TPtrCType, class TDesCType> sl@0: LOCAL_C TInt DoTestTextUtilsRemove(const TDesCType& aBase, sl@0: const TDesCType& aRemoveLeft, TInt aConsumedLeft, sl@0: const TDesCType& aRemoveRight, TInt aConsumedRight, sl@0: const TDesCType& aRemoveBoth, TInt aConsumedBoth) sl@0: { sl@0: // Do remove left... sl@0: TPtrCType data = aBase; sl@0: TInt consumed = InetProtTextUtils::RemoveWhiteSpace(data, InetProtTextUtils::ERemoveLeft); sl@0: // Check... sl@0: if( data.Compare(aRemoveLeft) != 0 || consumed != aConsumedLeft ) sl@0: { sl@0: return KErrNotFound; sl@0: } sl@0: // Do remove right... sl@0: data.Set(aBase); sl@0: consumed = InetProtTextUtils::RemoveWhiteSpace(data, InetProtTextUtils::ERemoveRight); sl@0: // Check... sl@0: if( data.Compare(aRemoveRight) != 0 || consumed != aConsumedRight ) sl@0: { sl@0: return KErrNotFound; sl@0: } sl@0: // Do remove both... sl@0: data.Set(aBase); sl@0: consumed = InetProtTextUtils::RemoveWhiteSpace(data, InetProtTextUtils::ERemoveBoth); sl@0: // Check... sl@0: if( data.Compare(aRemoveBoth) != 0 || consumed != aConsumedBoth ) sl@0: { sl@0: return KErrNotFound; sl@0: } sl@0: return KErrNone; sl@0: } sl@0: sl@0: template<class TDesCType> sl@0: LOCAL_C TInt DoTestTextUtilsDesToIntConversion(const TDesCType& aDes, TInt aInt, TBool aValid) sl@0: { sl@0: TInt theInt; sl@0: TInt error = InetProtTextUtils::ConvertDescriptorToInt(aDes, theInt); sl@0: if( (error < KErrNone && aValid) || (error >= KErrNone && !aValid) ) sl@0: { sl@0: return KErrNotFound; sl@0: } sl@0: if( aValid && theInt != aInt ) sl@0: { sl@0: return KErrNotFound; sl@0: } sl@0: return KErrNone; sl@0: } sl@0: sl@0: template<class HBufCType, class TDesCType> sl@0: LOCAL_C TInt DoTestTextUtilsIntToDesConversion(TInt aInt, const TDesCType& aDes) sl@0: { sl@0: HBufCType* theDes = NULL; sl@0: TRAPD(error, InetProtTextUtils::ConvertIntToDescriptorL(aInt, theDes)); sl@0: if( error != KErrNone ) sl@0: { sl@0: return KErrNotFound; sl@0: } sl@0: if( theDes->CompareF(aDes) != 0 ) sl@0: { sl@0: delete theDes; sl@0: return KErrNotFound; sl@0: } sl@0: delete theDes; sl@0: return KErrNone; sl@0: } sl@0: sl@0: template<class TDesCType> sl@0: LOCAL_C TInt DoTestTextUtilsDesToHexConversion(const TDesCType& aDes, TInt aHex, TBool aValid) sl@0: { sl@0: TInt theHex; sl@0: TInt error = InetProtTextUtils::ConvertDescriptorToHex(aDes, theHex); sl@0: if( (error < KErrNone && aValid) || (error >= KErrNone && !aValid) ) sl@0: { sl@0: return KErrNotFound; sl@0: } sl@0: if( aValid && theHex != aHex ) sl@0: { sl@0: return KErrNotFound; sl@0: } sl@0: return KErrNone; sl@0: } sl@0: sl@0: template<class HBufCType, class TDesCType> sl@0: LOCAL_C TInt DoTestTextUtilsHexToDesConversion(TInt aHex, const TDesCType& aDes) sl@0: { sl@0: HBufCType* theDes = NULL; sl@0: TRAPD(error, InetProtTextUtils::ConvertHexToDescriptorL(aHex, theDes)); sl@0: if( error != KErrNone ) sl@0: { sl@0: return KErrNotFound; sl@0: } sl@0: if( theDes->CompareF(aDes) != 0 ) sl@0: { sl@0: delete theDes; sl@0: return KErrNotFound; sl@0: } sl@0: delete theDes; sl@0: return KErrNone; sl@0: } sl@0: sl@0: template<class TPtrCType, class TDesCType> sl@0: LOCAL_C TInt DoTestExtractQuotedStringL(const TDesCType& aBuffer, const TDesCType& aString, const TDesCType& aRemainder, TInt aExpectedError) sl@0: { sl@0: TPtrCType buffer(aBuffer); sl@0: TPtrCType string; sl@0: TRAPD( error, InetProtTextUtils::ExtractQuotedStringL(buffer, string) ); sl@0: sl@0: if( error == KErrNone && aExpectedError == KErrNone) sl@0: { sl@0: if( aString.Compare(string) == 0 && aRemainder.Compare(buffer) == 0 ) sl@0: { sl@0: // Passed sl@0: return KErrNone; sl@0: } sl@0: else sl@0: { sl@0: // Failed sl@0: return KErrNotFound; sl@0: } sl@0: } sl@0: else if( error == aExpectedError ) sl@0: { sl@0: // Got expected error - passed sl@0: return KErrNone; sl@0: } sl@0: else sl@0: { sl@0: // Failed sl@0: return KErrNotFound; sl@0: } sl@0: } sl@0: sl@0: template<class TPtrCType, class TDesCType> sl@0: LOCAL_C TInt DoExtractTokenFromListMultipleSeparator( sl@0: const TDesCType& aBuffer, sl@0: const TDesCType& aToken0, sl@0: const TDesCType& aToken1, sl@0: const TDesCType& aToken2, sl@0: const TDesCType& aRemainder, sl@0: const TDesCType& aSeparator sl@0: ) sl@0: { sl@0: // get the first token... sl@0: TPtrCType buffer = aBuffer; sl@0: TPtrCType token; sl@0: InetProtTextUtils::ExtractNextTokenFromList(buffer, token, aSeparator); sl@0: sl@0: // Is it correct? sl@0: if( token.Compare(aToken0) != 0 ) sl@0: { sl@0: // Failed sl@0: return KErrNotFound; sl@0: } sl@0: // get the second token sl@0: InetProtTextUtils::ExtractNextTokenFromList(buffer, token, aSeparator); sl@0: sl@0: // Is it correct? sl@0: if( token.Compare(aToken1) != 0 ) sl@0: { sl@0: // Failed sl@0: return KErrNotFound; sl@0: } sl@0: // get the third token sl@0: InetProtTextUtils::ExtractNextTokenFromList(buffer, token, aSeparator); sl@0: sl@0: // Is it correct? sl@0: if( token.Compare(aToken2) != 0 ) sl@0: { sl@0: // Failed sl@0: return KErrNotFound; sl@0: } sl@0: // Check that the remainder is correct sl@0: if( buffer.Compare(aRemainder) != 0 ) sl@0: { sl@0: // Failed sl@0: return KErrNotFound; sl@0: } sl@0: return KErrNone; sl@0: } sl@0: sl@0: template<class TPtrCType, class TDesCType> sl@0: LOCAL_C TInt DoExtractTokenFromListSingleSeparator( sl@0: const TDesCType& aBuffer, sl@0: const TDesCType& aToken0, sl@0: const TDesCType& aToken1, sl@0: const TDesCType& aToken2, sl@0: const TDesCType& aRemainder, sl@0: TChar aSeparator sl@0: ) sl@0: { sl@0: // get the first token... sl@0: TPtrCType buffer = aBuffer; sl@0: TPtrCType token; sl@0: InetProtTextUtils::ExtractNextTokenFromList(buffer, token, aSeparator); sl@0: sl@0: // Is it correct? sl@0: if( token.Compare(aToken0) != 0 ) sl@0: { sl@0: // Failed sl@0: return KErrNotFound; sl@0: } sl@0: // get the second token sl@0: InetProtTextUtils::ExtractNextTokenFromList(buffer, token, aSeparator); sl@0: sl@0: // Is it correct? sl@0: if( token.Compare(aToken1) != 0 ) sl@0: { sl@0: // Failed sl@0: return KErrNotFound; sl@0: } sl@0: // get the third token sl@0: InetProtTextUtils::ExtractNextTokenFromList(buffer, token, aSeparator); sl@0: sl@0: // Is it correct? sl@0: if( token.Compare(aToken2) != 0 ) sl@0: { sl@0: // Failed sl@0: return KErrNotFound; sl@0: } sl@0: // Check that the remainder is correct sl@0: if( buffer.Compare(aRemainder) != 0 ) sl@0: { sl@0: // Failed sl@0: return KErrNotFound; sl@0: } sl@0: return KErrNone; sl@0: }