genericservices/httputils/Test/t_uriparser/CEscapeUtilsTest.cpp
changeset 0 e4d67989cc36
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/genericservices/httputils/Test/t_uriparser/CEscapeUtilsTest.cpp	Tue Feb 02 02:01:42 2010 +0200
@@ -0,0 +1,392 @@
+// Copyright (c) 2001-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:
+//
+
+#include "CEscapeUtilsTest.h"
+
+#include <e32base.h>
+
+#include "EscapeUtilsTestCommon.h"
+#include "EscapeUtilsTests.h"
+#include <tconvbase64.h>
+
+CEscapeUtilsTest* CEscapeUtilsTest::NewLC(CIpuTestHarness* aTestHarness)
+	{
+	CEscapeUtilsTest* self = new (ELeave) CEscapeUtilsTest(aTestHarness);
+	CleanupStack::PushL(self);
+	self->ConstructL();
+	return self;
+	}
+
+CEscapeUtilsTest* CEscapeUtilsTest::NewL(CIpuTestHarness* aTestHarness)
+	{
+	CEscapeUtilsTest* self = CEscapeUtilsTest::NewLC(aTestHarness);
+	CleanupStack::Pop(self);
+	return self;
+	}
+
+CEscapeUtilsTest::CEscapeUtilsTest(CIpuTestHarness* aTestHarness)
+: iTestHarness(aTestHarness)
+	{
+	}
+
+void CEscapeUtilsTest::ConstructL()
+	{
+	}
+
+CEscapeUtilsTest::~CEscapeUtilsTest()
+	{
+	}
+
+void CEscapeUtilsTest::DoTestsL()
+	{
+	TestEscapeUtilsEscapeEncodeL(KEscapeDecoded0, KEscapeEncoded0_auth, EscapeUtils::EEscapeAuth);
+	TestEscapeUtilsEscapeEncodeL(KEscapeDecoded0, KEscapeEncoded0_path, EscapeUtils::EEscapePath);
+	TestEscapeUtilsEscapeEncodeL(KEscapeDecoded0, KEscapeEncoded0_query, EscapeUtils::EEscapeQuery);
+	TestEscapeUtilsEscapeEncodeL(KEscapeDecoded0, KEscapeEncoded0_normal, EscapeUtils::EEscapeNormal);
+	TestEscapeUtilsEscapeEncodeL(KEscapeDecoded0, KEscapeEncoded0_url, EscapeUtils::EEscapeUrlEncoded);
+
+	TestEscapeUtilsEscapeEncodeL(KEscapeDecoded1, KEscapeEncoded1_auth, EscapeUtils::EEscapeAuth);
+	TestEscapeUtilsEscapeEncodeL(KEscapeDecoded1, KEscapeEncoded1_path, EscapeUtils::EEscapePath);
+	TestEscapeUtilsEscapeEncodeL(KEscapeDecoded1, KEscapeEncoded1_query, EscapeUtils::EEscapeQuery);
+	TestEscapeUtilsEscapeEncodeL(KEscapeDecoded1, KEscapeEncoded1_normal, EscapeUtils::EEscapeNormal);
+	TestEscapeUtilsEscapeEncodeL(KEscapeDecoded1, KEscapeEncoded1_url, EscapeUtils::EEscapeUrlEncoded);
+
+
+	TestEscapeUtilsEscapeDecodeL(KEscapeEncoded0_auth, KEscapeDecoded0);
+	TestEscapeUtilsEscapeDecodeL(KEscapeEncoded0_path, KEscapeDecoded0);
+	TestEscapeUtilsEscapeDecodeL(KEscapeEncoded0_query, KEscapeDecoded0);
+	TestEscapeUtilsEscapeDecodeL(KEscapeEncoded0_normal, KEscapeDecoded0);
+
+	TestEscapeUtilsEscapeDecodeL(KEscapeEncoded1_auth, KEscapeDecoded1);
+	TestEscapeUtilsEscapeDecodeL(KEscapeEncoded1_path, KEscapeDecoded1);
+	TestEscapeUtilsEscapeDecodeL(KEscapeEncoded1_query, KEscapeDecoded1);
+	TestEscapeUtilsEscapeDecodeL(KEscapeEncoded1_normal, KEscapeDecoded1);
+
+	// Test cases for section 2.9.1.2 //
+
+	TestEscapeUtilsEscapeEncodeL(KEscapeDecoded2, KEscapeEncoded2_auth, EscapeUtils::EEscapeAuth);
+	TestEscapeUtilsEscapeEncodeL(KEscapeDecoded2, KEscapeEncoded2_path, EscapeUtils::EEscapePath);
+	TestEscapeUtilsEscapeEncodeL(KEscapeDecoded2, KEscapeEncoded2_query, EscapeUtils::EEscapeQuery);
+	TestEscapeUtilsEscapeEncodeL(KEscapeDecoded2, KEscapeEncoded2_normal, EscapeUtils::EEscapeNormal);
+	TestEscapeUtilsEscapeEncodeL(KEscapeDecoded2, KEscapeEncoded2_url, EscapeUtils::EEscapeUrlEncoded);
+
+	TestEscapeUtilsEscapeEncodeL(KEscapeDecoded3, KEscapeEncoded3_auth, EscapeUtils::EEscapeAuth);
+	TestEscapeUtilsEscapeEncodeL(KEscapeDecoded3, KEscapeEncoded3_path, EscapeUtils::EEscapePath);
+	TestEscapeUtilsEscapeEncodeL(KEscapeDecoded3, KEscapeEncoded3_query, EscapeUtils::EEscapeQuery);
+	TestEscapeUtilsEscapeEncodeL(KEscapeDecoded3, KEscapeEncoded3_normal, EscapeUtils::EEscapeNormal);
+	TestEscapeUtilsEscapeEncodeL(KEscapeDecoded3, KEscapeEncoded3_url, EscapeUtils::EEscapeUrlEncoded);
+
+	TestEscapeUtilsEscapeEncodeL(KEscapeDecoded4, KEscapeEncoded4_auth, EscapeUtils::EEscapeAuth);
+	TestEscapeUtilsEscapeEncodeL(KEscapeDecoded4, KEscapeEncoded4_path, EscapeUtils::EEscapePath);
+	TestEscapeUtilsEscapeEncodeL(KEscapeDecoded4, KEscapeEncoded4_query, EscapeUtils::EEscapeQuery);
+	TestEscapeUtilsEscapeEncodeL(KEscapeDecoded4, KEscapeEncoded4_normal, EscapeUtils::EEscapeNormal);
+	TestEscapeUtilsEscapeEncodeL(KEscapeDecoded4, KEscapeEncoded4_url, EscapeUtils::EEscapeUrlEncoded);
+
+	TestEscapeUtilsEscapeEncodeL(KEscapeDecoded5, KEscapeEncoded5_auth, EscapeUtils::EEscapeAuth);
+	TestEscapeUtilsEscapeEncodeL(KEscapeDecoded5, KEscapeEncoded5_path, EscapeUtils::EEscapePath);
+	TestEscapeUtilsEscapeEncodeL(KEscapeDecoded5, KEscapeEncoded5_query, EscapeUtils::EEscapeQuery);
+	TestEscapeUtilsEscapeEncodeL(KEscapeDecoded5, KEscapeEncoded5_normal, EscapeUtils::EEscapeNormal);
+	TestEscapeUtilsEscapeEncodeL(KEscapeDecoded5, KEscapeEncoded5_url, EscapeUtils::EEscapeUrlEncoded);
+
+	TestEscapeUtilsEscapeEncodeL(KEscapeDecoded6, KEscapeEncoded6_auth, EscapeUtils::EEscapeAuth);
+	TestEscapeUtilsEscapeEncodeL(KEscapeDecoded6, KEscapeEncoded6_path, EscapeUtils::EEscapePath);
+	TestEscapeUtilsEscapeEncodeL(KEscapeDecoded6, KEscapeEncoded6_query, EscapeUtils::EEscapeQuery);
+	TestEscapeUtilsEscapeEncodeL(KEscapeDecoded6, KEscapeEncoded6_normal, EscapeUtils::EEscapeNormal);
+	TestEscapeUtilsEscapeEncodeL(KEscapeDecoded6, KEscapeEncoded6_url, EscapeUtils::EEscapeUrlEncoded);
+
+	TestEscapeUtilsEscapeEncodeL(KEscapeDecoded7, KEscapeEncoded7_auth, EscapeUtils::EEscapeAuth);
+	TestEscapeUtilsEscapeEncodeL(KEscapeDecoded7, KEscapeEncoded7_path, EscapeUtils::EEscapePath);
+	TestEscapeUtilsEscapeEncodeL(KEscapeDecoded7, KEscapeEncoded7_query, EscapeUtils::EEscapeQuery);
+	TestEscapeUtilsEscapeEncodeL(KEscapeDecoded7, KEscapeEncoded7_normal, EscapeUtils::EEscapeNormal);
+	TestEscapeUtilsEscapeEncodeL(KEscapeDecoded7, KEscapeEncoded7_url, EscapeUtils::EEscapeUrlEncoded);
+
+
+	TestEscapeUtilsEscapeDecodeL(KEscapeEncoded2_auth, KEscapeDecoded2);
+	TestEscapeUtilsEscapeDecodeL(KEscapeEncoded2_path, KEscapeDecoded2);
+	TestEscapeUtilsEscapeDecodeL(KEscapeEncoded2_query, KEscapeDecoded2);
+	TestEscapeUtilsEscapeDecodeL(KEscapeEncoded2_normal, KEscapeDecoded2);
+	TestEscapeUtilsEscapeDecodeL(KEscapeEncoded2_url, KEscapeDecoded2);
+
+	TestEscapeUtilsEscapeDecodeL(KEscapeEncoded3_auth, KEscapeDecoded3);
+	TestEscapeUtilsEscapeDecodeL(KEscapeEncoded3_path, KEscapeDecoded3);
+	TestEscapeUtilsEscapeDecodeL(KEscapeEncoded3_query, KEscapeDecoded3);
+	TestEscapeUtilsEscapeDecodeL(KEscapeEncoded3_normal, KEscapeDecoded3);
+	TestEscapeUtilsEscapeDecodeL(KEscapeEncoded3_url, KEscapeDecoded3);
+
+	TestEscapeUtilsEscapeDecodeL(KEscapeEncoded4_auth, KEscapeDecoded4);
+	TestEscapeUtilsEscapeDecodeL(KEscapeEncoded4_path, KEscapeDecoded4);
+	TestEscapeUtilsEscapeDecodeL(KEscapeEncoded4_query, KEscapeDecoded4);
+	TestEscapeUtilsEscapeDecodeL(KEscapeEncoded4_normal, KEscapeDecoded4);
+	TestEscapeUtilsEscapeDecodeL(KEscapeEncoded4_url, KEscapeDecoded4);
+
+	TestEscapeUtilsEscapeDecodeL(KEscapeEncoded5_auth, KEscapeDecoded5);
+	TestEscapeUtilsEscapeDecodeL(KEscapeEncoded5_path, KEscapeDecoded5);
+	TestEscapeUtilsEscapeDecodeL(KEscapeEncoded5_query, KEscapeDecoded5);
+	TestEscapeUtilsEscapeDecodeL(KEscapeEncoded5_normal, KEscapeDecoded5);
+	TestEscapeUtilsEscapeDecodeL(KEscapeEncoded5_url, KEscapeDecoded5);
+
+	TestEscapeUtilsEscapeDecodeL(KEscapeEncoded6_auth, KEscapeDecoded6);
+	TestEscapeUtilsEscapeDecodeL(KEscapeEncoded6_path, KEscapeDecoded6);
+	TestEscapeUtilsEscapeDecodeL(KEscapeEncoded6_query, KEscapeDecoded6);
+	TestEscapeUtilsEscapeDecodeL(KEscapeEncoded6_normal, KEscapeDecoded6);
+	TestEscapeUtilsEscapeDecodeL(KEscapeEncoded6_url, KEscapeDecoded6);
+
+	TestEscapeUtilsEscapeDecodeL(KEscapeEncoded7_auth, KEscapeDecoded7);
+	TestEscapeUtilsEscapeDecodeL(KEscapeEncoded7_path, KEscapeDecoded7);
+	TestEscapeUtilsEscapeDecodeL(KEscapeEncoded7_query, KEscapeDecoded7);
+	TestEscapeUtilsEscapeDecodeL(KEscapeEncoded7_normal, KEscapeDecoded7);
+	TestEscapeUtilsEscapeDecodeL(KEscapeEncoded7_url, KEscapeDecoded7);
+
+	//
+
+	TestEscapeUtilsUnicodeUtf8ConversionsL(KUnicode_0, KUtf8_0);
+
+	TestEscapeUtilsIsExcludedCharL(KExcludedChar0, KExcludedChar0_excluded);
+	TestEscapeUtilsIsExcludedCharL(KExcludedChar1, KExcludedChar1_excluded);
+	TestEscapeUtilsIsExcludedCharL(KExcludedChar2, KExcludedChar2_excluded);
+	TestEscapeUtilsIsExcludedCharL(KExcludedChar3, KExcludedChar3_excluded);
+	TestEscapeUtilsIsExcludedCharL(KExcludedChar4, KExcludedChar4_excluded);
+
+	TestEscapeUtilsIsEscapeTripleL(KEscapeTriple0(), KEscapeTriple0_valid, KEscapeTriple0_value);
+	TestEscapeUtilsIsEscapeTripleL(KEscapeTriple1(), KEscapeTriple1_valid, KEscapeTriple1_value);
+	TestEscapeUtilsIsEscapeTripleL(KEscapeTriple2(), KEscapeTriple2_valid, KEscapeTriple2_value);
+	
+	//TConvBase64 Test
+	TestEscapeUtilsBase64ConversionL(KEscapeDecoded2);
+	}
+
+void CEscapeUtilsTest::TestEscapeUtilsEscapeEncodeL(const TDesC& aData, const TDesC& aExpected, EscapeUtils::TEscapeMode aEscapeMode)
+	{
+	iTestHarness->StartTestL(_L("Test EscapeUtils EscapeEncode (16-bit)"));
+
+	TInt error = DoTestEscapeUtilsEscapeEncode<HBufC16>(aData, aExpected, aEscapeMode);
+
+	iTestHarness->EndTest(error);
+
+	// Make 8-bit copy
+	HBufC8* dataBuf = HBufC8::NewLC(aData.Length());
+	TPtr8 data8Bit = dataBuf->Des();
+	data8Bit.Copy(aData);
+
+	HBufC8* expectedBuf = HBufC8::NewLC(aExpected.Length());
+	TPtr8 expected8Bit = expectedBuf->Des();
+	expected8Bit.Copy(aExpected);
+
+	iTestHarness->StartTestL(_L("Test EscapeUtils EscapeEncode (8-bit)"));
+
+	error = DoTestEscapeUtilsEscapeEncode<HBufC8>(data8Bit, expected8Bit, aEscapeMode);
+
+	iTestHarness->EndTest(error);
+
+	CleanupStack::PopAndDestroy(2, dataBuf);	// dataBuf, expectedBuf
+	}
+
+void CEscapeUtilsTest::TestEscapeUtilsEscapeDecodeL(const TDesC& aData, const TDesC& aExpected)
+	{
+	iTestHarness->StartTestL(_L("Test EscapeUtils EscapeDecode (16-bit)"));
+
+	TInt error = DoTestEscapeUtilsEscapeDecode<HBufC16>(aData, aExpected);
+
+	iTestHarness->EndTest(error);
+
+	// Make 8-bit copy
+	HBufC8* dataBuf = HBufC8::NewLC(aData.Length());
+	TPtr8 data8Bit = dataBuf->Des();
+	data8Bit.Copy(aData);
+
+	HBufC8* expectedBuf = HBufC8::NewLC(aExpected.Length());
+	TPtr8 expected8Bit = expectedBuf->Des();
+	expected8Bit.Copy(aExpected);
+
+	iTestHarness->StartTestL(_L("Test EscapeUtils EscapeDecode (8-bit)"));
+
+	error = DoTestEscapeUtilsEscapeDecode<HBufC8>(data8Bit, expected8Bit);
+
+	iTestHarness->EndTest(error);
+
+	CleanupStack::PopAndDestroy(2, dataBuf);	// dataBuf, expectedBuf
+	}
+
+void CEscapeUtilsTest::TestEscapeUtilsUnicodeUtf8ConversionsL(const TDesC& aUnicode, const TDesC& aUtf8)
+	{
+	// Make 8-bit copy of utf8
+	HBufC8* utf8Buf = HBufC8::NewLC(aUtf8.Length());
+	utf8Buf->Des().Copy(aUtf8);
+
+	// Escape decode
+	HBufC8* unescapedUtf8Buf = EscapeUtils::EscapeDecodeL(*utf8Buf);
+	CleanupStack::PushL(unescapedUtf8Buf);
+	TPtr8 unescapedUtf8 = unescapedUtf8Buf->Des();
+
+	iTestHarness->StartTestL(_L("Test EscapeUtils ConvertFromUnicodeToUtf8"));
+
+	HBufC8* convertedUtf8 = NULL;
+	TRAPD(error, convertedUtf8 = EscapeUtils::ConvertFromUnicodeToUtf8L(aUnicode));
+	if( error == KErrNone )
+		{
+		// Check is expected
+		if( convertedUtf8->Compare(unescapedUtf8) != 0 )
+			{
+			error = KErrNotFound;
+			}
+		delete convertedUtf8;
+		}
+	iTestHarness->EndTest(error);
+
+	iTestHarness->StartTestL(_L("Test EscapeUtils ConvertToUnicodeFromUtf8"));
+
+	HBufC16* convertedUnicode = NULL;
+	TRAP(error, convertedUnicode = EscapeUtils::ConvertToUnicodeFromUtf8L(unescapedUtf8));
+	if( error == KErrNone )
+		{
+		// Check is expected
+		if( convertedUnicode->Compare(aUnicode) != 0 )
+			{
+			error = KErrNotFound;
+			}
+		delete convertedUnicode;
+		}
+	iTestHarness->EndTest(error);
+
+	CleanupStack::PopAndDestroy(2, utf8Buf);	// utf8Buf, unescapedUtf8Buf
+	}
+
+void CEscapeUtilsTest::TestEscapeUtilsIsExcludedCharL(TChar aChar, TBool aIsExcluded)
+	{
+	iTestHarness->StartTestL(_L("Test EscapeUtils IsExcludedChar"));
+
+	TBool excluded = EscapeUtils::IsExcludedChar(aChar);
+
+	TInt error = KErrNone;
+	if( (!excluded && aIsExcluded) | (excluded && !aIsExcluded) )
+		{
+		error = KErrNotFound;
+		}
+	iTestHarness->EndTest(error);
+	}
+
+void CEscapeUtilsTest::TestEscapeUtilsIsEscapeTripleL(const TDesC& aData, TBool aIsTriple, TInt aValue)
+	{
+	iTestHarness->StartTestL(_L("Test EscapeUtils IsEscapeTriple (16-Bit)"));
+
+	TInt error = DoTestEscapeUtilsIsEscapeTriple(aData, aIsTriple, aValue);
+
+	iTestHarness->EndTest(error);
+
+	// Make 8-bit copy
+	HBufC8* dataBuf = HBufC8::NewLC(aData.Length());
+	TPtr8 data8Bit = dataBuf->Des();
+	data8Bit.Copy(aData);
+
+	iTestHarness->StartTestL(_L("Test EscapeUtils IsEscapeTriple (8-Bit)"));
+
+	error = DoTestEscapeUtilsIsEscapeTriple(data8Bit, aIsTriple, aValue);
+
+	iTestHarness->EndTest(error);
+
+	CleanupStack::PopAndDestroy(dataBuf);	// dataBuf
+	}
+
+void CEscapeUtilsTest::TestEscapeUtilsBase64ConversionL(const TDesC& aData)
+	{	
+	iTestHarness->StartTestL(_L("Test EscapeUtils Base64 Conversion Check"));
+	
+	TInt error = KErrNotFound;
+	HBufC8* dataBuf = HBufC8::NewMaxLC (aData.Length());
+	TPtr8 dataPtr(dataBuf->Des());
+	
+	HBufC8* encodedBuf = HBufC8::NewMaxLC(aData.Length() * 2);
+	TPtr8 encodedPtr(encodedBuf->Des());
+
+	TBase64 codec;
+	codec.Encode(dataPtr, encodedPtr);	
+	
+	HBufC8* decodedBuf = HBufC8::NewMaxLC(aData.Length());
+	TPtr8 decodedPtr(decodedBuf->Des());
+	
+	codec.Decode(encodedPtr, decodedPtr);
+	if(decodedPtr.Compare(dataPtr) == 0)
+		{
+			error = KErrNone;
+		}
+	iTestHarness->EndTest(error);
+	
+	CleanupStack::PopAndDestroy(decodedBuf);	// decodedBuf
+	CleanupStack::PopAndDestroy(encodedBuf);	// encodedBuf
+	CleanupStack::PopAndDestroy(dataBuf);		// dataBuf			
+	}
+	
+//
+//
+//	Implementation of LOCAL functions
+//
+//
+
+template<class HBufCType, class TDesCType>
+LOCAL_C TInt DoTestEscapeUtilsEscapeEncode(const TDesCType& aData, const TDesCType& aExpected, EscapeUtils::TEscapeMode aEscapeMode)
+	{
+	// Do escaping
+	HBufCType* escaped = NULL;
+	TRAPD(error, escaped = EscapeUtils::EscapeEncodeL(aData, aEscapeMode));
+	if( error != KErrNone )
+		{
+		return KErrNotFound;
+		}
+	// Check with expected
+	if( escaped->Compare(aExpected) != 0 )
+		{
+		delete escaped;
+		return KErrNotFound;
+		}
+	delete escaped;
+	return KErrNone;
+	}
+
+template<class HBufCType, class TDesCType>
+LOCAL_C TInt DoTestEscapeUtilsEscapeDecode(const TDesCType& aData, const TDesCType& aExpected)
+	{
+	// Do unescaping
+	HBufCType* unescaped = NULL;
+	TRAPD(error, unescaped = EscapeUtils::EscapeDecodeL(aData));
+	if( error != KErrNone )
+		{
+		return KErrNotFound;
+		}
+	// Check with expected
+	if( unescaped->Compare(aExpected) != 0 )
+		{
+		delete unescaped;
+		return KErrNotFound;
+		}
+	delete unescaped;
+	return KErrNone;
+	}
+
+template<class TDesCType>
+LOCAL_C TInt DoTestEscapeUtilsIsEscapeTriple(const TDesCType& aData, TBool aIsTriple, TInt aValue)
+	{
+	// Check for the triple
+	TInt value;
+	TBool triple = EscapeUtils::IsEscapeTriple(aData, value);
+	if( (!triple && aIsTriple) | (triple && !aIsTriple) )
+		{
+		return KErrNotFound;
+		}
+	if( triple && value != aValue )
+		{
+		return KErrNotFound;
+		}
+	return KErrNone;
+	}