diff -r 000000000000 -r bde4ae8d615e os/ossrv/genericservices/httputils/Test/Integration/TestInetProtUtilsSuite/Src/TestNormaliseUriStep.cpp
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/os/ossrv/genericservices/httputils/Test/Integration/TestInetProtUtilsSuite/Src/TestNormaliseUriStep.cpp	Fri Jun 15 03:10:57 2012 +0200
@@ -0,0 +1,263 @@
+// Copyright (c) 2007-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:
+// Contains implementation of CTestNormaliseUriStep class
+// 
+//
+
+/**
+ @file TESTNORMALISEURISTEP.CPP
+ @internalTechnology
+*/
+
+// User Include
+#include "TestNormaliseUriStep.h"
+// System Include
+#include <uriutils.h>
+#include <uri8.h>
+
+//constants
+const TInt KAlreadyNormalised 			= 0;
+const TInt KPercentEncoding				= 1;
+const TInt KCaseNormalisation			= 2;
+const TInt KRemoveDotegments			= 3;
+const TInt KPercentCaseNormalisation 	= 12;
+const TInt KPercentRemoveDotegments 	= 13;
+const TInt KCaseRemoveDotegments 		= 23;
+const TInt KAll 						= 123;
+
+/**
+  Constructor: Sets the test step name.
+  @internalTechnology
+  @test
+*/
+CTestNormaliseUriStep::CTestNormaliseUriStep()
+	{
+	//Call base class method to set human readable name for test step
+	SetTestStepName(KTestNormaliseUriStep);
+	}
+
+/**
+  Destructor
+  @internalTechnology
+  @test
+*/
+CTestNormaliseUriStep::~CTestNormaliseUriStep()
+	{
+	
+	}
+
+/**
+  Does the main functionality test.
+  Here, reads values from INI file and calls NormaliseAndCompareUriL
+  @internalTechnology 
+  @param		None
+  @return		EPass or EFail indicating the success or failure of the test step
+*/
+TVerdict CTestNormaliseUriStep::doTestStepL()
+	{
+	__UHEAP_MARK;
+	INFO_PRINTF1(_L("\n"));
+	// Get necessary information from INI file
+
+	TPtrC uri;
+	TPtrC expUri;
+	TInt RetCode;
+	
+	if(!GetStringFromConfig(ConfigSection(), 	KIniUri, uri) ||
+	   !GetStringFromConfig(ConfigSection(), KIniExpectedUri, expUri) ||
+	   !GetIntFromConfig(ConfigSection(), KRetCode, RetCode) )
+		{
+		ERR_PRINTF3(_L("Problem in reading values from ini.			\
+						\nExpected fields are: \n%S\n%S\n"),&KIniUri, &KIniExpectedUri);
+		SetTestStepResult(EFail);
+		}
+	else
+		{// No problem in reading values from INI file. Proceed.
+	    TRAPD(err, NormaliseAndCompareUriL(uri,expUri));
+	    if(err != KErrNone)
+		    {
+	        ERR_PRINTF2(_L("Test step failed: Leave occured in NormaliseAndCompareUriL fun: %D\n"), err);
+	 	    SetTestStepResult(EFail);	
+		    }
+		 }
+	__UHEAP_MARKEND;
+	switch (RetCode)
+		{
+		case KAlreadyNormalised :
+			{
+			INFO_PRINTF1(_L("\nAlready in Normalised Form"));
+			break;	
+			}
+		case KPercentEncoding :
+			{
+			INFO_PRINTF1(_L("\nNormalised through PercentEncoding"));
+			break;	
+			}
+		case KCaseNormalisation :
+			{
+			INFO_PRINTF1(_L("\nNormalised through CaseNormalisation"));
+			break;	
+			}
+		case KRemoveDotegments :
+			{
+			INFO_PRINTF1(_L("\nNormalised through RemoveDotegments"));
+			break;	
+			}
+		case KPercentCaseNormalisation :
+			{
+			INFO_PRINTF1(_L("\nNormalised through PercentEncoding and CaseNormalisation"));
+			break;	
+			}
+		case KPercentRemoveDotegments :
+			{
+			INFO_PRINTF1(_L("\nNormalised through PercentEncoding and RemoveDotegments"));
+			break;	
+			}
+		case KCaseRemoveDotegments :
+			{
+			INFO_PRINTF1(_L("\nNormalised through CaseNormalisation and RemoveDotegments"));
+			break;	
+			}
+		case KAll :
+			{
+			INFO_PRINTF1(_L("\nNormalised through CaseNormalisation,PercentEncoding and RemoveDotegments"));
+			break;	
+			}
+		default:
+			{
+			//do nothing
+			break;	
+			}
+		}
+	INFO_PRINTF1(_L("\nTest of UriNormalisation is Executed\n"));
+	return TestStepResult();
+	}
+	
+/**
+  Performs syntax normalisation and compares actual & expected result.
+  @param		aUri A reference to actual Uri to be normalised
+  @param		aExpUri A reference to expected uri.
+*/	
+void CTestNormaliseUriStep::NormaliseAndCompareUriL(const TDesC& aUri,const TDesC& aExpUri)
+	{
+    CUri8* cUri8=NULL;
+	TRAPD(err, cUri8=UriUtils::CreateUriL(aUri));
+	if(err != KErrNone)
+		{
+		ERR_PRINTF2(_L("Test step failed: Leave occured in Uri object creation: %D\n"), err);
+		SetTestStepResult(EFail);
+		}
+	else
+		{
+		const TUriC8& tUri(cUri8->Uri());
+		CUri8* normalisedUri = NULL; 
+		CleanupStack::PushL(cUri8);
+		INFO_PRINTF1(_L("Calling UriUtils::NormaliseUriL which does syntax normalisation.")); 	
+		TRAPD(error, normalisedUri=UriUtils::NormaliseUriL(tUri));
+		if(error == KErrNone)
+			{
+			INFO_PRINTF1(_L("URI normalised.")); 	
+			CleanupStack::PushL(normalisedUri);
+			HBufC8* uriBuf = HBufC8::NewLC(aExpUri.Length());
+			TPtr8 expUri8(uriBuf->Des());
+			expUri8.Copy(aExpUri);
+			// Comparing actual & expected uris.
+			if(normalisedUri->Uri().UriDes().Compare(expUri8)!=0)
+				{
+				ERR_PRINTF1(_L("Test step failed: actualUri is not matched with expectedUri."));
+				SetTestStepResult(EFail);
+				}
+			CleanupStack::PopAndDestroy(3, cUri8);
+			}
+		}
+	}
+
+
+/**
+  Constructor: Sets the test step name.
+  @internalTechnology
+  @test
+*/
+CTestNormaliseUriOomStep::CTestNormaliseUriOomStep()
+	{
+	//Call base class method to set human readable name for test step
+	SetTestStepName(KTestOomNormaliseUriStep);
+	}
+
+/**
+  Destructor
+  @internalTechnology
+  @test
+*/
+CTestNormaliseUriOomStep::~CTestNormaliseUriOomStep()
+	{
+	
+	}
+
+/**
+  Does the main functionality and OOM test of a test step.
+  @internalTechnology 
+  @param		None
+  @return		EPass or EFail indicating the success or failure of the test step
+*/
+TVerdict CTestNormaliseUriOomStep::doTestStepL()
+	{
+	__UHEAP_MARK;
+	TPtrC uri;
+	if(!GetStringFromConfig(ConfigSection(), 	KIniUri, uri) )
+		{
+		ERR_PRINTF2(_L("Problem in reading values from ini.			\
+						\nExpected fields are: \n%S\n"),&KIniUri);
+		SetTestStepResult(EFail);
+		}
+	else
+		{// No problem in reading values from INI file. Proceed.
+	    CUri8* cUri8=NULL;
+		TRAPD(err, cUri8=UriUtils::CreateUriL(uri));
+		if(err != KErrNone)
+			{
+			ERR_PRINTF2(_L("Test step failed: Leave occured in Uri object creation: %D\n"), err);
+			SetTestStepResult(EFail);
+			}
+		else
+			{
+			const TUriC8& tUri(cUri8->Uri());
+			CleanupStack::PushL(cUri8);
+			INFO_PRINTF1(_L("Calling UriUtils::NormaliseUriL which does syntax normalisation.")); 	
+			TInt ret = KErrNoMemory;
+			TInt failAt = 0;
+			while(ret != KErrNone)
+				{
+				failAt++;
+				INFO_PRINTF2(_L("OOM test step: %d\n"),failAt);
+
+				__UHEAP_SETFAIL( RHeap::EDeterministic, failAt );
+				__UHEAP_MARK;
+				CUri8* normalisedUri = NULL;
+				TRAP( ret, normalisedUri = UriUtils::NormaliseUriL(tUri));
+				delete normalisedUri;
+				__UHEAP_MARKEND;
+				__UHEAP_RESET;
+				if((ret == KErrNoMemory) || (ret == KErrNone))
+					{
+					INFO_PRINTF2(_L("Error/RetCode : %D\n"),ret);
+					}
+				}
+			CleanupStack::PopAndDestroy(cUri8);
+			}
+		}
+	__UHEAP_MARKEND;
+	return TestStepResult();
+	}
+