genericservices/httputils/Test/t_fileuri/CFileUriTest.cpp
changeset 0 e4d67989cc36
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/genericservices/httputils/Test/t_fileuri/CFileUriTest.cpp	Tue Feb 02 02:01:42 2010 +0200
@@ -0,0 +1,574 @@
+// Copyright (c) 2004-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:
+// Note : Testing for file uri component extraction for external media drive will be done only 
+// if an external media drive does exist
+// 
+//
+
+#include "CFileUriTest.h"
+
+#include <e32base.h>
+#include <escapeutils.h>
+#include "FileUriTestCommon.h"
+
+//File URI Constents
+_LIT8(KFileUriScheme8, "file");
+_LIT16(KFileUriScheme16, "file");
+
+//
+//
+//	File Uri Tests
+//
+//
+
+CFileUriTest* CFileUriTest::NewLC(CIpuTestHarness* aTestHarness)
+	{
+	CFileUriTest* self = new (ELeave) CFileUriTest(aTestHarness);
+	CleanupStack::PushL(self);
+	self->ConstructL();
+	return self;
+	}
+
+CFileUriTest* CFileUriTest::NewL(CIpuTestHarness* aTestHarness)
+	{
+	CFileUriTest* self = CFileUriTest::NewLC(aTestHarness);
+	CleanupStack::Pop(self);
+	return self;
+	}
+
+CFileUriTest::CFileUriTest(CIpuTestHarness* aTestHarness)
+: iTestHarness(aTestHarness)
+	{
+	}
+
+void CFileUriTest::ConstructL()
+	{
+	}
+
+CFileUriTest::~CFileUriTest()
+	{
+	}
+
+void CFileUriTest::DoTestsL()
+	{
+	TBuf<3> drive(_L("$:\\"));
+	//File URI Creation Test - for public files on fixed and removable media 
+	//----------------------------------------------------------------------------------
+	_LIT(KFullFileName, "c:\\public\\bar\\foo\\some\\randomness.txt");
+	
+	//Testing 8-bit & 16-bit File URI creation for public file on a fixed drive
+	_LIT(KExpectedUri, "file://c/public/bar/foo/some/randomness.txt");
+	TestFileUriCreationL(KFullFileName, KExpectedUri, 0);
+	
+	_LIT(KFullFileName2, "c:\\dummy\\file.txt");
+ 	_LIT(KExpectedUri3, "file://c/dummy/file.txt");
+	TestFileUriCreationL(KFullFileName2, KExpectedUri3, 0);
+
+	_LIT(KFullFileName1, "c:\\randomness.txt");
+	
+	//Testing 8-bit & 16-bit File URI creation for public file on a fixed drive
+	_LIT(KExpectedUri2, "file://c/randomness.txt");
+	TestFileUriCreationL(KFullFileName1, KExpectedUri2, 0);
+
+	//Testing 8-bit & 16-bit File URI creation for public file on a removable media drive
+	_LIT(KExpectedUri1, "file://ext-media/public/bar/foo/some/randomness.txt");
+	TestFileUriCreationL(KFullFileName, KExpectedUri1, EExtMedia);
+	
+	_LIT(KExtMediaFullFileName, "X:\\mydir\\myfile.ext");
+	_LIT(KExtMediaExpectedUri1, "file://ext-media/mydir/myfile.ext");
+	TestFileUriCreationL(KExtMediaFullFileName, KExtMediaExpectedUri1, EExtMedia);
+	//----------------------------------------------------------------------------------
+
+	//File URI component extraction Test - Schema, Path and Filename - 
+	// - for public files on fixed and removable media 
+	//----------------------------------------------------------------------------------
+	_LIT(KFileName, "c:\\public\\bar\\foo\\some\\randomness.txt");
+	
+	//Testing 8-bit & 16-bit File URI creation for public file on a fixed drive
+	_LIT(KExpectedPath, "/c/public/bar/foo/some/randomness.txt");
+	TestFileUriComponentExtractionL(KFileName, KExpectedPath, KFileName, drive, 0);
+	
+	//Testing 8-bit & 16-bit File URI creation for public file on a fixed drive
+	_LIT(KFileName1, "c:\\system\\·····.ini");
+	_LIT(KExpectedPath1, "/c/system/·····.ini");
+	TestFileUriComponentExtractionL(KFileName1, KExpectedPath1, KFileName1, drive, 0);
+
+	//Creating files on removable media drive (X:) 
+	// Need to change the removable Drive letter if X doesn't exist or its not removable media drive  	
+	RFs fs;
+	User::LeaveIfError(fs.Connect());
+	CleanupClosePushL(fs);
+	TDriveInfo driveInfo;
+	TInt err = KErrNotFound;
+	TInt driveNum = EDriveA;
+	
+	//Checking for extenal media drive does exist
+	for (; driveNum <= EDriveZ && err!=KErrNone; driveNum++)   
+		{
+		if (fs.Drive(driveInfo, driveNum ) == KErrNone
+			&& (driveInfo.iDriveAtt & KDriveAttRemovable))       
+			{
+			drive[0]= TInt16('A' + driveNum);
+			err = KErrNone;
+			}
+		}
+	
+	// Test only if external media drive exist
+  	if (err == KErrNone)
+  		{
+  	 	driveNum--;
+  			
+		User::LeaveIfError(fs.SetSessionPath(drive));
+		TInt ret = fs.MkDir(_L("\\mydir\\"));
+		if (ret == KErrNone || ret == KErrAlreadyExists)
+			{		
+			RFile file;
+			ret = file.Create(fs,_L("\\mydir\\myfile.ext"),EFileWrite|EFileShareAny);
+			file.Close();
+			if (ret == KErrNone || ret == KErrAlreadyExists)
+				{		
+				//Testing 8-bit & 16-bit File URI creation for public file on a removable media drive
+				_LIT(KExpectedExtMediaPath1, "/ext-media/mydir/myfile.ext");
+				TFileName extMediaFileName(KExtMediaFullFileName);
+				extMediaFileName[0] = drive[0];
+				TestFileUriComponentExtractionL(extMediaFileName, KExpectedExtMediaPath1, extMediaFileName, drive, EExtMedia);
+				CFileMan* fm = CFileMan::NewL(fs);
+				ret = fm->RmDir(_L("\\mydir\\"));
+				delete fm;	
+				}
+			}
+		}	
+	
+	CleanupStack::PopAndDestroy(&fs);
+	//----------------------------------------------------------------------------------
+  	  		
+	//File URI component extraction, obj created using CUri::NewLC Test 
+	// - Schema, Path and Filename
+	//----------------------------------------------------------------------------------
+	
+	TestFileUriCreationWithOldAPIAndComponentExtractionL(KFileName, KExpectedPath, KFileName );
+		
+	//----------------------------------------------------------------------------------
+  		
+	// resolve %-codes
+	TestFileUriNameExtractionL(_L("file://c/dir/test/file%20name.html"), _L("file name.html"), _L("\\dir\\test\\file name.html") );
+	// params in path
+	TestFileUriNameExtractionL(_L("http://www.text.org/cgi-bin/apps/index.html;one;two;three"), _L("index.html"), _L("\\cgi-bin\\apps\\index.html") );
+
+	// resolve %-codes
+	TestFileUriNameExtractionL(_L8("file://c/dir/test/file%20name.html"), _L("file name.html"), _L("\\dir\\test\\file name.html") );
+	
+	// params in path
+	TestFileUriNameExtractionL(_L8("http://www.text.org/cgi-bin/apps/index.html;one;two;three"), _L("index.html"), _L("\\cgi-bin\\apps\\index.html") );
+	
+	//----------------------------------------------------------------------------------
+
+
+				
+	//File URI Creation Test - for private files on fixed and removable media 
+	//----------------------------------------------------------------------------------
+	
+	//Testing 8-bit & 16-bit File URI creation for private file on a fixed drive
+	_LIT(KExpectedprivateUri, "file://private/Z/bar/foo/some/randomness.txt");
+	
+	_LIT(KRelativeFileName, "c:\\bar\\foo\\some\\randomness.txt");
+	TestPrivateFileUriCreationL(KRelativeFileName, EDriveZ, KExpectedprivateUri, 0);
+	
+	_LIT(KRelativeFileName1, "\\bar\\foo\\some\\randomness.txt");
+	TestPrivateFileUriCreationL(KRelativeFileName1, EDriveZ, KExpectedprivateUri, 0);
+	
+	_LIT(KRelativeFileName2, "bar\\foo\\some\\randomness.txt");
+	TestPrivateFileUriCreationL(KRelativeFileName2, EDriveZ, KExpectedprivateUri, 0);
+	
+	//Testing 8-bit & 16-bit File URI creation for private file on a removable media drive
+	_LIT(KExtMediaRelativeFileName, "\\mydir\\myfile.ext");
+	_LIT(KExpectedPrivateExtMediaUri, "file://private/ext-media/mydir/myfile.ext");
+	TestPrivateFileUriCreationL(KExtMediaRelativeFileName, EDriveZ, KExpectedPrivateExtMediaUri, EExtMedia);
+	//----------------------------------------------------------------------------------
+			
+	//File URI component extraction Test - Schema, Path and Filename - 
+	// - for private files on fixed and removable media 
+	//----------------------------------------------------------------------------------
+	
+	//Retrieveing application private path
+	
+	User::LeaveIfError(fs.Connect());
+	CleanupClosePushL(fs);		
+	TPath applPrivatePath;
+	User::LeaveIfError(fs.PrivatePath(applPrivatePath));
+	CleanupStack::PopAndDestroy(&fs);
+		
+	//Testing 8-bit & 16-bit File URI creation for private file on a fixed drive
+	_LIT(KExpectedPrivateFilePath, "/private/Z/bar/foo/some/randomness.txt");
+	_LIT(KExpectedPrivateFileName, "bar\\foo\\some\\randomness.txt");
+	TFileName expectedPrivateFileName(_L("Z:"));
+	expectedPrivateFileName.Append(applPrivatePath);
+	expectedPrivateFileName.Append(KExpectedPrivateFileName);
+	
+	TestPrivateFileUriComponentExtractionL(KRelativeFileName1, EDriveZ, KExpectedPrivateFilePath, expectedPrivateFileName, 0);
+		
+	//Testing 8-bit & 16-bit File URI creation for private file on a removable media drive
+	_LIT(KExpectedPrivateExtMediaFilePath, "/private/ext-media/mydir/myfile.ext");
+	expectedPrivateFileName[0] = drive[0];
+	
+	//Since we can't create folder "private" on removable media drive for testing purpose, the file extraction testing is not possible.
+	// So need to pass KNullDesC to avoid file extraction
+	TestPrivateFileUriComponentExtractionL(KExtMediaRelativeFileName, EDriveZ, KExpectedPrivateExtMediaFilePath, KNullDesC, EExtMedia);
+	//----------------------------------------------------------------------------------
+	}
+	
+void CFileUriTest::TestFileUriCreationL(const TDesC16& aFullFileName, const TDesC16& aExpectedUri, TUint aFlags) const
+	{
+	//Testing 8-bit File URI creation for public file on a fixed drive	
+	iTestHarness->StartTestL(_L("Test CUri - Public File URI creation (8bit)"));
+	iTestHarness->LogIt(_L("FileName: %S; \n\t\tFileStorageType:%D; \n\t\tExpected URI:%S"), &aFullFileName, aFlags, &aExpectedUri);
+	TInt error = KErrNone;
+	CUri8* uri8 = CUri8::CreateFileUriL(aFullFileName,aFlags);
+	CleanupStack::PushL(uri8);
+	HBufC8* expectedUri8 = EscapeUtils::ConvertFromUnicodeToUtf8L(aExpectedUri);
+	CleanupStack::PushL(expectedUri8);
+	error = DoFileUriExtraction<CUri8>(*uri8, *expectedUri8);
+	CleanupStack::PopAndDestroy(expectedUri8);
+	CleanupStack::PopAndDestroy(uri8);
+	iTestHarness->EndTest(error);
+	
+	//Testing 16-bit File URI creation for public file on a fixed drive
+	error = KErrNone;
+	iTestHarness->StartTestL(_L("Test CUri - File URI creation (16bit)"));
+	iTestHarness->LogIt(_L("FileName: %S; \n\t\tFileType:%D; \n\t\tExpected URI:%S"), &aFullFileName, aFlags, &aExpectedUri);
+	CUri16* uri16 = CUri16::CreateFileUriL(aFullFileName,aFlags);
+	CleanupStack::PushL(uri16);
+	error = DoFileUriExtraction<CUri16>(*uri16, aExpectedUri);
+	CleanupStack::PopAndDestroy(uri16);
+	iTestHarness->EndTest(error);
+	}
+
+void CFileUriTest::TestPrivateFileUriCreationL(const TDesC16& aRelativeFileName, const TDriveNumber aDrive, const TDesC16& aExpectedUri, TUint aFlags) const
+	{
+	//Testing 8-bit File URI creation for public file on a fixed drive
+	iTestHarness->StartTestL(_L("Test CUri - Private File URI creation (8bit)"));
+	iTestHarness->LogIt(_L("FileName: %S; \n\t\tFileStorageType:%D; \n\t\tDrive:%c; \n\t\tExpectedURI:%S"), &aRelativeFileName, aFlags, ('A' + aDrive), &aExpectedUri);
+	TInt error = KErrNone;
+	CUri8* uri8 = CUri8::CreatePrivateFileUriL(aRelativeFileName,aDrive,aFlags);
+	CleanupStack::PushL(uri8);
+	HBufC8* expectedUri8 = EscapeUtils::ConvertFromUnicodeToUtf8L(aExpectedUri);
+	error = DoFileUriExtraction<CUri8>(*uri8, *expectedUri8);
+	delete expectedUri8;
+	CleanupStack::PopAndDestroy(uri8);
+	iTestHarness->EndTest(error);
+
+	//Testing 16-bit File URI creation for public file on a fixed drive
+	error = KErrNone;
+	iTestHarness->StartTestL(_L("Test CUri - Private File URI creation (16bit)"));
+	iTestHarness->LogIt(_L("FileName: %S; \n\t\tFileStorageType:%D; \n\t\tDrive:%c; \n\t\tExpectedURI:%S"), &aRelativeFileName, aFlags, ('A' + aDrive), &aExpectedUri);
+	CUri16* uri16 = CUri16::CreatePrivateFileUriL(aRelativeFileName,aDrive,aFlags);
+	CleanupStack::PushL(uri16);
+	error = DoFileUriExtraction<CUri16>(*uri16, aExpectedUri);
+	CleanupStack::PopAndDestroy(uri16);
+	iTestHarness->EndTest(error);	
+	}
+
+void CFileUriTest::TestFileUriComponentExtractionL(const TDesC16& aFileName, const TDesC16& aPath, const TDesC16& aExpectedFileName, const TDesC16& aExpectedDrive, TUint aFlags) const
+	{
+	iTestHarness->StartTestL(_L("Test File Uri Component Extraction (8-bit)"));
+	iTestHarness->LogIt(_L("FileName: %S; \n\t\tFileStorageType:%D; \n\t\tPath:%S"), &aFileName,aFlags, &aPath);
+	HBufC8* fileUriScheme8 = HBufC8::NewLC(4);
+	fileUriScheme8->Des().Copy(KFileUriScheme8);
+	
+	HBufC* fileUriScheme16 = HBufC::NewLC(4);
+	fileUriScheme16->Des().Copy(KFileUriScheme16);
+
+	RFs fs;
+	User::LeaveIfError(fs.Connect());
+	CleanupClosePushL(fs);
+	CFileMan *fm = CFileMan::NewL(fs);
+	CleanupStack::PushL(fm);
+	
+	TInt len = aFileName.Length();
+	TInt ret = 0;
+
+	//Testing 8-bit File URI componet extraction for public file on a fixed drive
+	TInt error = KErrNone;
+	
+	CUri8* uri8 = CUri8::CreateFileUriL(aFileName,aFlags);
+	CleanupStack::PushL(uri8);
+	
+	HBufC8* path8 = EscapeUtils::ConvertFromUnicodeToUtf8L(aPath);
+	CleanupStack::PushL(path8);
+		
+	HBufC8* escapedUriPath8 = EscapeUtils::EscapeEncodeL(*path8, EscapeUtils::EEscapeNormal);
+	CleanupStack::PushL(escapedUriPath8);
+	
+	error = DoFileUriComponentExtraction<TUriParser8, CUri8>(*uri8, *fileUriScheme8, *escapedUriPath8, aExpectedFileName);
+	
+	iTestHarness->EndTest(error);	
+	
+	//-ve testing : After renaming file it should return error	
+	if (aFlags == EExtMedia && error == KErrNone)
+		{
+		iTestHarness->StartTestL(_L("EXT-MEDIA::Test File Uri Component Extraction(8-bit)"));
+		iTestHarness->LogIt(_L("FileName: %S; \n\t\tFileStorageType:%D; \n\t\tPath:%S; \n\t\tExpectedDrive:%S"), &aFileName,aFlags, &aPath, &aExpectedDrive);
+	
+		error = KErrNotFound;
+		User::LeaveIfError(fs.SetSessionPath(aExpectedDrive));
+		ret = fm->Rename(aFileName,(aFileName.Left(len-4)));
+		
+		if (ret == KErrNone || ret == KErrAlreadyExists)
+			{
+			TRAP(error, (DoFileUriComponentExtraction<TUriParser8, CUri8>(*uri8, *fileUriScheme8, *path8, aExpectedFileName)));
+			error = ((error != KErrNone) ? 0 : -1);		
+			ret = fm->Rename(aFileName.Left(aFileName.Length()-4),aFileName,CFileMan::EOverWrite);
+			}
+	
+		iTestHarness->EndTest(error);	
+		}
+	
+	//Testing 16-bit File URI componet extraction for public file on a removable media drive
+	iTestHarness->StartTestL(_L("Test File Uri Component Extraction (16-bit)"));
+	iTestHarness->LogIt(_L("FileName: \n\t\t%S; \n\t\tFileStorageType:%D; \n\t\tPath:%S"), &aFileName, aFlags, &aPath);
+	
+	CUri16* uri16 = CUri16::CreateFileUriL(aFileName,aFlags);
+	CleanupStack::PushL(uri16);
+	
+	HBufC* escapedUriPath = HBufC::NewLC(escapedUriPath8->Length());
+	escapedUriPath->Des().Copy(*escapedUriPath8);
+	
+	error = DoFileUriComponentExtraction<TUriParser16, CUri16, TDesC16>(*uri16, *fileUriScheme16, *escapedUriPath, aExpectedFileName);
+	
+	iTestHarness->EndTest(error);
+	
+	//-ve testing : After renaming file it should return error
+	if (aFlags == EExtMedia && error == KErrNone)
+		{
+		iTestHarness->StartTestL(_L(" EXT-MEDIA::Test File Uri Component Extraction(16-bit)"));
+		iTestHarness->LogIt(_L("FileName: %S; \n\t\tFileStorageType:%D; \n\t\tPath:%S; \n\t\tExpectedDrive:%S"), &aFileName,aFlags, &aPath, &aExpectedDrive);
+	
+		error = KErrNotFound;
+		User::LeaveIfError(fs.SetSessionPath(aExpectedDrive));
+		ret = fm->Rename(aFileName,(aFileName.Left(len-4)));
+	
+		if (ret == KErrNone || ret == KErrAlreadyExists)
+			{			
+			TRAP(error, (DoFileUriComponentExtraction<TUriParser16, CUri16, TDesC16>(*uri16, *fileUriScheme16, aPath, aExpectedFileName)));
+			error = ((error != KErrNone) ? 0 : -1);		
+			ret = fm->Rename(aFileName.Left(aFileName.Length()-4),aFileName,CFileMan::EOverWrite);
+			}
+	
+		iTestHarness->EndTest(error);
+		}
+
+	CleanupStack::PopAndDestroy(escapedUriPath);
+	CleanupStack::PopAndDestroy(uri16);
+	CleanupStack::PopAndDestroy(escapedUriPath8);
+	CleanupStack::PopAndDestroy(path8);
+	CleanupStack::PopAndDestroy(uri8);	
+	CleanupStack::PopAndDestroy(4, fileUriScheme8); //fileUriScheme8, fileUriScheme16,fs,fm 		
+	}
+	
+void CFileUriTest::TestPrivateFileUriComponentExtractionL(const TDesC16& aFileName, const TDriveNumber aDrive, const TDesC16& aPath, const TDesC16& aExpectedFileName, TUint aFlags) const
+	{
+	iTestHarness->StartTestL(_L("Test Private File Uri Component Extraction (8-bit)"));
+	iTestHarness->LogIt(_L("FileName: %S; \n\t\tDrive:%c, \n\t\tFileStorageType:%D; \n\t\tPath:%S"), &aFileName, ('A' + aDrive), aFlags, &aPath);
+	TInt error = KErrNone;
+	HBufC8* fileUriScheme8 = HBufC8::NewLC(4);
+	TPtr8 fileUriScheme8Ptr = fileUriScheme8->Des();
+	fileUriScheme8Ptr.Copy(KFileUriScheme8);
+	HBufC* fileUriScheme16 = HBufC::NewLC(4);
+	TPtr16 fileUriScheme16Ptr = fileUriScheme16->Des();
+	fileUriScheme16Ptr.Copy(KFileUriScheme16);
+	
+	//Testing 8-bit File URI componet extraction for private file on a fixed drive
+	CUri8* prv_uri8 = CUri8::CreatePrivateFileUriL(aFileName,aDrive,aFlags);
+	CleanupStack::PushL(prv_uri8);
+	HBufC8* path8 = EscapeUtils::ConvertFromUnicodeToUtf8L(aPath);
+	error = DoFileUriComponentExtraction<TUriParser8>(*prv_uri8, *fileUriScheme8, *path8, aExpectedFileName);
+	delete path8;
+	CleanupStack::PopAndDestroy(prv_uri8);	
+	iTestHarness->EndTest(error);	
+	
+	//Testing 16-bit File URI componet extraction for private file on a removable media drive
+	iTestHarness->StartTestL(_L("Test Private File Uri Component Extraction (16-bit)"));
+	iTestHarness->LogIt(_L("FileName: %S; \n\t\tDrive:%c, \n\t\tFileStorageType:%D; \n\t\tPath:%S"), &aFileName, ('A' + aDrive), aFlags, &aPath);
+	CUri16* prv_uri16 = CUri16::CreatePrivateFileUriL(aFileName,aDrive,aFlags);
+	CleanupStack::PushL(prv_uri16);
+	error = DoFileUriComponentExtraction<TUriParser16, CUri16, TDesC16>(*prv_uri16, *fileUriScheme16, aPath, aExpectedFileName);
+	CleanupStack::PopAndDestroy(prv_uri16);
+	iTestHarness->EndTest(error);
+	
+	CleanupStack::PopAndDestroy(2, fileUriScheme8); //fileUriScheme8, fileUriScheme16 	
+	}
+
+void CFileUriTest::TestFileUriCreationWithOldAPIAndComponentExtractionL(const TDesC16& aFileName, const TDesC16& aPath, const TDesC16& aExpectedFileName) const
+	{	
+	//Testing File URI componet extraction created using CUri::NewLC()
+	iTestHarness->StartTestL(_L("Test File Uri Component Extraction created using NewLC (8-bit)"));
+	iTestHarness->LogIt(_L("FileName: %S; \n\t\tPath:%S"), &aFileName, &aPath);	
+	TInt error = KErrNone;
+	HBufC8* fileUriScheme8 = HBufC8::NewLC(4);
+	TPtr8 fileUriScheme8Ptr = fileUriScheme8->Des();
+	fileUriScheme8Ptr.Copy(KFileUriScheme8);
+	HBufC* fileUriScheme16 = HBufC::NewLC(4);
+	TPtr16 fileUriScheme16Ptr = fileUriScheme16->Des();
+	fileUriScheme16Ptr.Copy(KFileUriScheme16);
+	
+	_LIT8(KFileUri8, "file://%S");
+	HBufC8* path8 = EscapeUtils::ConvertFromUnicodeToUtf8L(aPath);
+	CleanupStack::PushL(path8);
+	HBufC8 *fileUri8 = HBufC8::NewLC((path8->Length()+10));
+	TPtr8 fileUri8Ptr = fileUri8->Des();
+	fileUri8Ptr.AppendFormat(KFileUri8,path8);
+	TUriParser8 urip8;
+	urip8.Parse(*fileUri8);
+	CUri8* _uri8 = CUri8::NewLC(urip8); 
+	error = DoFileUriComponentExtraction<TUriParser8, CUri8, TDesC8>(*_uri8, *fileUriScheme8, *path8, aExpectedFileName);
+	CleanupStack::PopAndDestroy(_uri8);
+	iTestHarness->EndTest(error);
+
+	iTestHarness->StartTestL(_L("Test File Uri Component Extraction created using NewLC (16-bit)"));
+	iTestHarness->LogIt(_L("FileName: %S; \n\t\tFileStorageType:2; \n\t\tPath:%S"), &aFileName, &aPath);
+	HBufC *fileUri16 = EscapeUtils::ConvertToUnicodeFromUtf8L(*fileUri8);
+	CleanupStack::PushL(fileUri16);
+	TUriParser16 urip16;
+	urip16.Parse(*fileUri16);
+	CUri16* _uri16 = CUri16::NewLC(urip16);  
+	error = DoFileUriComponentExtraction<TUriParser16, CUri16, TDesC16>(*_uri16, *fileUriScheme16, aPath, aExpectedFileName);
+	CleanupStack::PopAndDestroy(_uri16);
+	iTestHarness->EndTest(error);
+	
+	CleanupStack::PopAndDestroy(5, fileUriScheme8); //fileUriScheme8, fileUriScheme16, path8, fileUri8, fileUri16  	
+	}
+	
+//
+//
+//	Implementation of LOCAL functions
+//
+//
+template<class CUriType, class TDesCType>
+TInt DoFileUriExtraction(const CUriType& aUri, const TDesCType& aExpectedFileUri)
+	{
+	TInt error = 0;
+	
+	// Check file URI...
+	error = aUri.Uri().UriDes().Compare(aExpectedFileUri);
+	if( error != 0 )
+		{
+		return error;
+		}
+	return KErrNone;
+	}
+
+template<class TUriParserType, class CUriType, class TDesCType, class TDesCType16>
+TInt DoFileUriComponentExtraction(const CUriType& aUri, const TDesCType& aScheme, const TDesCType& aPath, const TDesCType16& aExpectedFileName)
+	{
+	TUriParserType uriParser;
+	TInt error = uriParser.Parse(aUri.Uri().UriDes());
+	// Is this a valid Uri?
+	if( error == KUriUtilsErrInvalidUri )
+		{
+		return error;
+		}
+
+	// Check scheme...
+	if( (error = TestComponent(uriParser, aScheme, EUriScheme)) != 0 )
+		{
+		return error;
+		}
+	
+	// Check path...
+	if( (error = TestComponent(uriParser, aPath, EUriPath)) != 0)
+		{
+		return error;
+		}
+	
+	if (aExpectedFileName.Length() > 0)
+		{
+		HBufC* tmpFileName = uriParser.GetFileNameL();
+		error = tmpFileName->Compare(aExpectedFileName);
+		delete tmpFileName;
+		if (error != 0)
+			{
+			return error;
+			}
+		}	
+		
+	return KErrNone;
+	}
+	
+template<class TParserType, class TDesCType, class TComponentType>
+TInt TestComponent(const TParserType& aParser, const TDesCType& aExpected, TComponentType aComponent)
+	{
+	return aParser.Extract(aComponent).Compare(aExpected);
+	}
+	
+
+void CFileUriTest::TestFileUriNameExtractionL(const TDesC& aUri, const TDesC& aFilename, const TDesC& aPath)
+	{
+	TUriParser uriParser;
+	User::LeaveIfError(uriParser.Parse(aUri));
+	
+	HBufC* name;
+	TInt error = KErrNone;
+	
+	iTestHarness->StartTestL(_L("Test extract file name from URI (16 bit)"));
+	iTestHarness->LogIt(_L("URI: %S; \n\t\tExpected name:%S"), &uriParser.UriDes(), &aFilename);
+
+	name = uriParser.GetFileNameL(EUriFileNameTail);
+	iTestHarness->LogIt(_L("Computed name:%S"), name);
+	error = (aFilename.Compare(*name)==0) ? KErrNone : KErrBadName;
+	delete name;
+	
+	iTestHarness->EndTest(error);
+
+	iTestHarness->StartTestL(_L("Test extract file path from URI (16 bit)"));
+	iTestHarness->LogIt(_L("URI: %S; \n\t\tExpected Path:%S"), &uriParser.UriDes(), &aPath);
+
+	name = uriParser.GetFileNameL(EUriFileNamePath);
+	iTestHarness->LogIt(_L("Computed Path:%S"), name);
+	error = (aPath.Compare(*name)==0) ? KErrNone : KErrBadName;
+	delete name;
+	
+	iTestHarness->EndTest(error);
+	}
+	
+void CFileUriTest::TestFileUriNameExtractionL(const TDesC8& aUri, const TDesC& aFilename, const TDesC& aPath)
+	{
+	TUriParser8 uriParser;
+	User::LeaveIfError(uriParser.Parse(aUri));
+	
+	HBufC* name;
+	TInt error = KErrNone;
+
+	TFileName uri;
+	uri.Copy(uriParser.UriDes()); // safe for all valid URIs
+	iTestHarness->StartTestL(_L("Test extract file name from URI (8 bit)"));
+	iTestHarness->LogIt(_L("URI: %S; \n\t\tExpected name:%S"), &uri, &aFilename);
+
+	name = uriParser.GetFileNameL(EUriFileNameTail);
+	iTestHarness->LogIt(_L("Computed name:%S"), name);
+	error = (aFilename.Compare(*name)==0) ? KErrNone : KErrBadName;
+	delete name;
+	
+	iTestHarness->EndTest(error);
+
+	iTestHarness->StartTestL(_L("Test extract file path from URI (8 bit)"));
+	iTestHarness->LogIt(_L("URI: %S; \n\t\tExpected Path:%S"), &uri, &aPath);
+
+	name = uriParser.GetFileNameL(EUriFileNamePath);
+	iTestHarness->LogIt(_L("Computed Path:%S"), name);
+	error = (aPath.Compare(*name)==0) ? KErrNone : KErrBadName;
+	delete name;
+	
+	iTestHarness->EndTest(error);
+	}
+