os/ossrv/genericservices/httputils/Test/t_fileuri/CFileUriTest.cpp
author sl@SLION-WIN7.fritz.box
Fri, 15 Jun 2012 03:10:57 +0200
changeset 0 bde4ae8d615e
permissions -rw-r--r--
First public contribution.
sl@0
     1
// Copyright (c) 2004-2009 Nokia Corporation and/or its subsidiary(-ies).
sl@0
     2
// All rights reserved.
sl@0
     3
// This component and the accompanying materials are made available
sl@0
     4
// under the terms of "Eclipse Public License v1.0"
sl@0
     5
// which accompanies this distribution, and is available
sl@0
     6
// at the URL "http://www.eclipse.org/legal/epl-v10.html".
sl@0
     7
//
sl@0
     8
// Initial Contributors:
sl@0
     9
// Nokia Corporation - initial contribution.
sl@0
    10
//
sl@0
    11
// Contributors:
sl@0
    12
//
sl@0
    13
// Description:
sl@0
    14
// Note : Testing for file uri component extraction for external media drive will be done only 
sl@0
    15
// if an external media drive does exist
sl@0
    16
// 
sl@0
    17
//
sl@0
    18
sl@0
    19
#include "CFileUriTest.h"
sl@0
    20
sl@0
    21
#include <e32base.h>
sl@0
    22
#include <escapeutils.h>
sl@0
    23
#include "FileUriTestCommon.h"
sl@0
    24
sl@0
    25
//File URI Constents
sl@0
    26
_LIT8(KFileUriScheme8, "file");
sl@0
    27
_LIT16(KFileUriScheme16, "file");
sl@0
    28
sl@0
    29
//
sl@0
    30
//
sl@0
    31
//	File Uri Tests
sl@0
    32
//
sl@0
    33
//
sl@0
    34
sl@0
    35
CFileUriTest* CFileUriTest::NewLC(CIpuTestHarness* aTestHarness)
sl@0
    36
	{
sl@0
    37
	CFileUriTest* self = new (ELeave) CFileUriTest(aTestHarness);
sl@0
    38
	CleanupStack::PushL(self);
sl@0
    39
	self->ConstructL();
sl@0
    40
	return self;
sl@0
    41
	}
sl@0
    42
sl@0
    43
CFileUriTest* CFileUriTest::NewL(CIpuTestHarness* aTestHarness)
sl@0
    44
	{
sl@0
    45
	CFileUriTest* self = CFileUriTest::NewLC(aTestHarness);
sl@0
    46
	CleanupStack::Pop(self);
sl@0
    47
	return self;
sl@0
    48
	}
sl@0
    49
sl@0
    50
CFileUriTest::CFileUriTest(CIpuTestHarness* aTestHarness)
sl@0
    51
: iTestHarness(aTestHarness)
sl@0
    52
	{
sl@0
    53
	}
sl@0
    54
sl@0
    55
void CFileUriTest::ConstructL()
sl@0
    56
	{
sl@0
    57
	}
sl@0
    58
sl@0
    59
CFileUriTest::~CFileUriTest()
sl@0
    60
	{
sl@0
    61
	}
sl@0
    62
sl@0
    63
void CFileUriTest::DoTestsL()
sl@0
    64
	{
sl@0
    65
	TBuf<3> drive(_L("$:\\"));
sl@0
    66
	//File URI Creation Test - for public files on fixed and removable media 
sl@0
    67
	//----------------------------------------------------------------------------------
sl@0
    68
	_LIT(KFullFileName, "c:\\public\\bar\\foo\\some\\randomness.txt");
sl@0
    69
	
sl@0
    70
	//Testing 8-bit & 16-bit File URI creation for public file on a fixed drive
sl@0
    71
	_LIT(KExpectedUri, "file://c/public/bar/foo/some/randomness.txt");
sl@0
    72
	TestFileUriCreationL(KFullFileName, KExpectedUri, 0);
sl@0
    73
	
sl@0
    74
	_LIT(KFullFileName2, "c:\\dummy\\file.txt");
sl@0
    75
 	_LIT(KExpectedUri3, "file://c/dummy/file.txt");
sl@0
    76
	TestFileUriCreationL(KFullFileName2, KExpectedUri3, 0);
sl@0
    77
sl@0
    78
	_LIT(KFullFileName1, "c:\\randomness.txt");
sl@0
    79
	
sl@0
    80
	//Testing 8-bit & 16-bit File URI creation for public file on a fixed drive
sl@0
    81
	_LIT(KExpectedUri2, "file://c/randomness.txt");
sl@0
    82
	TestFileUriCreationL(KFullFileName1, KExpectedUri2, 0);
sl@0
    83
sl@0
    84
	//Testing 8-bit & 16-bit File URI creation for public file on a removable media drive
sl@0
    85
	_LIT(KExpectedUri1, "file://ext-media/public/bar/foo/some/randomness.txt");
sl@0
    86
	TestFileUriCreationL(KFullFileName, KExpectedUri1, EExtMedia);
sl@0
    87
	
sl@0
    88
	_LIT(KExtMediaFullFileName, "X:\\mydir\\myfile.ext");
sl@0
    89
	_LIT(KExtMediaExpectedUri1, "file://ext-media/mydir/myfile.ext");
sl@0
    90
	TestFileUriCreationL(KExtMediaFullFileName, KExtMediaExpectedUri1, EExtMedia);
sl@0
    91
	//----------------------------------------------------------------------------------
sl@0
    92
sl@0
    93
	//File URI component extraction Test - Schema, Path and Filename - 
sl@0
    94
	// - for public files on fixed and removable media 
sl@0
    95
	//----------------------------------------------------------------------------------
sl@0
    96
	_LIT(KFileName, "c:\\public\\bar\\foo\\some\\randomness.txt");
sl@0
    97
	
sl@0
    98
	//Testing 8-bit & 16-bit File URI creation for public file on a fixed drive
sl@0
    99
	_LIT(KExpectedPath, "/c/public/bar/foo/some/randomness.txt");
sl@0
   100
	TestFileUriComponentExtractionL(KFileName, KExpectedPath, KFileName, drive, 0);
sl@0
   101
	
sl@0
   102
	//Testing 8-bit & 16-bit File URI creation for public file on a fixed drive
sl@0
   103
	_LIT(KFileName1, "c:\\system\\·····.ini");
sl@0
   104
	_LIT(KExpectedPath1, "/c/system/·····.ini");
sl@0
   105
	TestFileUriComponentExtractionL(KFileName1, KExpectedPath1, KFileName1, drive, 0);
sl@0
   106
sl@0
   107
	//Creating files on removable media drive (X:) 
sl@0
   108
	// Need to change the removable Drive letter if X doesn't exist or its not removable media drive  	
sl@0
   109
	RFs fs;
sl@0
   110
	User::LeaveIfError(fs.Connect());
sl@0
   111
	CleanupClosePushL(fs);
sl@0
   112
	TDriveInfo driveInfo;
sl@0
   113
	TInt err = KErrNotFound;
sl@0
   114
	TInt driveNum = EDriveA;
sl@0
   115
	
sl@0
   116
	//Checking for extenal media drive does exist
sl@0
   117
	for (; driveNum <= EDriveZ && err!=KErrNone; driveNum++)   
sl@0
   118
		{
sl@0
   119
		if (fs.Drive(driveInfo, driveNum ) == KErrNone
sl@0
   120
			&& (driveInfo.iDriveAtt & KDriveAttRemovable))       
sl@0
   121
			{
sl@0
   122
			drive[0]= TInt16('A' + driveNum);
sl@0
   123
			err = KErrNone;
sl@0
   124
			}
sl@0
   125
		}
sl@0
   126
	
sl@0
   127
	// Test only if external media drive exist
sl@0
   128
  	if (err == KErrNone)
sl@0
   129
  		{
sl@0
   130
  	 	driveNum--;
sl@0
   131
  			
sl@0
   132
		User::LeaveIfError(fs.SetSessionPath(drive));
sl@0
   133
		TInt ret = fs.MkDir(_L("\\mydir\\"));
sl@0
   134
		if (ret == KErrNone || ret == KErrAlreadyExists)
sl@0
   135
			{		
sl@0
   136
			RFile file;
sl@0
   137
			ret = file.Create(fs,_L("\\mydir\\myfile.ext"),EFileWrite|EFileShareAny);
sl@0
   138
			file.Close();
sl@0
   139
			if (ret == KErrNone || ret == KErrAlreadyExists)
sl@0
   140
				{		
sl@0
   141
				//Testing 8-bit & 16-bit File URI creation for public file on a removable media drive
sl@0
   142
				_LIT(KExpectedExtMediaPath1, "/ext-media/mydir/myfile.ext");
sl@0
   143
				TFileName extMediaFileName(KExtMediaFullFileName);
sl@0
   144
				extMediaFileName[0] = drive[0];
sl@0
   145
				TestFileUriComponentExtractionL(extMediaFileName, KExpectedExtMediaPath1, extMediaFileName, drive, EExtMedia);
sl@0
   146
				CFileMan* fm = CFileMan::NewL(fs);
sl@0
   147
				ret = fm->RmDir(_L("\\mydir\\"));
sl@0
   148
				delete fm;	
sl@0
   149
				}
sl@0
   150
			}
sl@0
   151
		}	
sl@0
   152
	
sl@0
   153
	CleanupStack::PopAndDestroy(&fs);
sl@0
   154
	//----------------------------------------------------------------------------------
sl@0
   155
  	  		
sl@0
   156
	//File URI component extraction, obj created using CUri::NewLC Test 
sl@0
   157
	// - Schema, Path and Filename
sl@0
   158
	//----------------------------------------------------------------------------------
sl@0
   159
	
sl@0
   160
	TestFileUriCreationWithOldAPIAndComponentExtractionL(KFileName, KExpectedPath, KFileName );
sl@0
   161
		
sl@0
   162
	//----------------------------------------------------------------------------------
sl@0
   163
  		
sl@0
   164
	// resolve %-codes
sl@0
   165
	TestFileUriNameExtractionL(_L("file://c/dir/test/file%20name.html"), _L("file name.html"), _L("\\dir\\test\\file name.html") );
sl@0
   166
	// params in path
sl@0
   167
	TestFileUriNameExtractionL(_L("http://www.text.org/cgi-bin/apps/index.html;one;two;three"), _L("index.html"), _L("\\cgi-bin\\apps\\index.html") );
sl@0
   168
sl@0
   169
	// resolve %-codes
sl@0
   170
	TestFileUriNameExtractionL(_L8("file://c/dir/test/file%20name.html"), _L("file name.html"), _L("\\dir\\test\\file name.html") );
sl@0
   171
	
sl@0
   172
	// params in path
sl@0
   173
	TestFileUriNameExtractionL(_L8("http://www.text.org/cgi-bin/apps/index.html;one;two;three"), _L("index.html"), _L("\\cgi-bin\\apps\\index.html") );
sl@0
   174
	
sl@0
   175
	//----------------------------------------------------------------------------------
sl@0
   176
sl@0
   177
sl@0
   178
				
sl@0
   179
	//File URI Creation Test - for private files on fixed and removable media 
sl@0
   180
	//----------------------------------------------------------------------------------
sl@0
   181
	
sl@0
   182
	//Testing 8-bit & 16-bit File URI creation for private file on a fixed drive
sl@0
   183
	_LIT(KExpectedprivateUri, "file://private/Z/bar/foo/some/randomness.txt");
sl@0
   184
	
sl@0
   185
	_LIT(KRelativeFileName, "c:\\bar\\foo\\some\\randomness.txt");
sl@0
   186
	TestPrivateFileUriCreationL(KRelativeFileName, EDriveZ, KExpectedprivateUri, 0);
sl@0
   187
	
sl@0
   188
	_LIT(KRelativeFileName1, "\\bar\\foo\\some\\randomness.txt");
sl@0
   189
	TestPrivateFileUriCreationL(KRelativeFileName1, EDriveZ, KExpectedprivateUri, 0);
sl@0
   190
	
sl@0
   191
	_LIT(KRelativeFileName2, "bar\\foo\\some\\randomness.txt");
sl@0
   192
	TestPrivateFileUriCreationL(KRelativeFileName2, EDriveZ, KExpectedprivateUri, 0);
sl@0
   193
	
sl@0
   194
	//Testing 8-bit & 16-bit File URI creation for private file on a removable media drive
sl@0
   195
	_LIT(KExtMediaRelativeFileName, "\\mydir\\myfile.ext");
sl@0
   196
	_LIT(KExpectedPrivateExtMediaUri, "file://private/ext-media/mydir/myfile.ext");
sl@0
   197
	TestPrivateFileUriCreationL(KExtMediaRelativeFileName, EDriveZ, KExpectedPrivateExtMediaUri, EExtMedia);
sl@0
   198
	//----------------------------------------------------------------------------------
sl@0
   199
			
sl@0
   200
	//File URI component extraction Test - Schema, Path and Filename - 
sl@0
   201
	// - for private files on fixed and removable media 
sl@0
   202
	//----------------------------------------------------------------------------------
sl@0
   203
	
sl@0
   204
	//Retrieveing application private path
sl@0
   205
	
sl@0
   206
	User::LeaveIfError(fs.Connect());
sl@0
   207
	CleanupClosePushL(fs);		
sl@0
   208
	TPath applPrivatePath;
sl@0
   209
	User::LeaveIfError(fs.PrivatePath(applPrivatePath));
sl@0
   210
	CleanupStack::PopAndDestroy(&fs);
sl@0
   211
		
sl@0
   212
	//Testing 8-bit & 16-bit File URI creation for private file on a fixed drive
sl@0
   213
	_LIT(KExpectedPrivateFilePath, "/private/Z/bar/foo/some/randomness.txt");
sl@0
   214
	_LIT(KExpectedPrivateFileName, "bar\\foo\\some\\randomness.txt");
sl@0
   215
	TFileName expectedPrivateFileName(_L("Z:"));
sl@0
   216
	expectedPrivateFileName.Append(applPrivatePath);
sl@0
   217
	expectedPrivateFileName.Append(KExpectedPrivateFileName);
sl@0
   218
	
sl@0
   219
	TestPrivateFileUriComponentExtractionL(KRelativeFileName1, EDriveZ, KExpectedPrivateFilePath, expectedPrivateFileName, 0);
sl@0
   220
		
sl@0
   221
	//Testing 8-bit & 16-bit File URI creation for private file on a removable media drive
sl@0
   222
	_LIT(KExpectedPrivateExtMediaFilePath, "/private/ext-media/mydir/myfile.ext");
sl@0
   223
	expectedPrivateFileName[0] = drive[0];
sl@0
   224
	
sl@0
   225
	//Since we can't create folder "private" on removable media drive for testing purpose, the file extraction testing is not possible.
sl@0
   226
	// So need to pass KNullDesC to avoid file extraction
sl@0
   227
	TestPrivateFileUriComponentExtractionL(KExtMediaRelativeFileName, EDriveZ, KExpectedPrivateExtMediaFilePath, KNullDesC, EExtMedia);
sl@0
   228
	//----------------------------------------------------------------------------------
sl@0
   229
	}
sl@0
   230
	
sl@0
   231
void CFileUriTest::TestFileUriCreationL(const TDesC16& aFullFileName, const TDesC16& aExpectedUri, TUint aFlags) const
sl@0
   232
	{
sl@0
   233
	//Testing 8-bit File URI creation for public file on a fixed drive	
sl@0
   234
	iTestHarness->StartTestL(_L("Test CUri - Public File URI creation (8bit)"));
sl@0
   235
	iTestHarness->LogIt(_L("FileName: %S; \n\t\tFileStorageType:%D; \n\t\tExpected URI:%S"), &aFullFileName, aFlags, &aExpectedUri);
sl@0
   236
	TInt error = KErrNone;
sl@0
   237
	CUri8* uri8 = CUri8::CreateFileUriL(aFullFileName,aFlags);
sl@0
   238
	CleanupStack::PushL(uri8);
sl@0
   239
	HBufC8* expectedUri8 = EscapeUtils::ConvertFromUnicodeToUtf8L(aExpectedUri);
sl@0
   240
	CleanupStack::PushL(expectedUri8);
sl@0
   241
	error = DoFileUriExtraction<CUri8>(*uri8, *expectedUri8);
sl@0
   242
	CleanupStack::PopAndDestroy(expectedUri8);
sl@0
   243
	CleanupStack::PopAndDestroy(uri8);
sl@0
   244
	iTestHarness->EndTest(error);
sl@0
   245
	
sl@0
   246
	//Testing 16-bit File URI creation for public file on a fixed drive
sl@0
   247
	error = KErrNone;
sl@0
   248
	iTestHarness->StartTestL(_L("Test CUri - File URI creation (16bit)"));
sl@0
   249
	iTestHarness->LogIt(_L("FileName: %S; \n\t\tFileType:%D; \n\t\tExpected URI:%S"), &aFullFileName, aFlags, &aExpectedUri);
sl@0
   250
	CUri16* uri16 = CUri16::CreateFileUriL(aFullFileName,aFlags);
sl@0
   251
	CleanupStack::PushL(uri16);
sl@0
   252
	error = DoFileUriExtraction<CUri16>(*uri16, aExpectedUri);
sl@0
   253
	CleanupStack::PopAndDestroy(uri16);
sl@0
   254
	iTestHarness->EndTest(error);
sl@0
   255
	}
sl@0
   256
sl@0
   257
void CFileUriTest::TestPrivateFileUriCreationL(const TDesC16& aRelativeFileName, const TDriveNumber aDrive, const TDesC16& aExpectedUri, TUint aFlags) const
sl@0
   258
	{
sl@0
   259
	//Testing 8-bit File URI creation for public file on a fixed drive
sl@0
   260
	iTestHarness->StartTestL(_L("Test CUri - Private File URI creation (8bit)"));
sl@0
   261
	iTestHarness->LogIt(_L("FileName: %S; \n\t\tFileStorageType:%D; \n\t\tDrive:%c; \n\t\tExpectedURI:%S"), &aRelativeFileName, aFlags, ('A' + aDrive), &aExpectedUri);
sl@0
   262
	TInt error = KErrNone;
sl@0
   263
	CUri8* uri8 = CUri8::CreatePrivateFileUriL(aRelativeFileName,aDrive,aFlags);
sl@0
   264
	CleanupStack::PushL(uri8);
sl@0
   265
	HBufC8* expectedUri8 = EscapeUtils::ConvertFromUnicodeToUtf8L(aExpectedUri);
sl@0
   266
	error = DoFileUriExtraction<CUri8>(*uri8, *expectedUri8);
sl@0
   267
	delete expectedUri8;
sl@0
   268
	CleanupStack::PopAndDestroy(uri8);
sl@0
   269
	iTestHarness->EndTest(error);
sl@0
   270
sl@0
   271
	//Testing 16-bit File URI creation for public file on a fixed drive
sl@0
   272
	error = KErrNone;
sl@0
   273
	iTestHarness->StartTestL(_L("Test CUri - Private File URI creation (16bit)"));
sl@0
   274
	iTestHarness->LogIt(_L("FileName: %S; \n\t\tFileStorageType:%D; \n\t\tDrive:%c; \n\t\tExpectedURI:%S"), &aRelativeFileName, aFlags, ('A' + aDrive), &aExpectedUri);
sl@0
   275
	CUri16* uri16 = CUri16::CreatePrivateFileUriL(aRelativeFileName,aDrive,aFlags);
sl@0
   276
	CleanupStack::PushL(uri16);
sl@0
   277
	error = DoFileUriExtraction<CUri16>(*uri16, aExpectedUri);
sl@0
   278
	CleanupStack::PopAndDestroy(uri16);
sl@0
   279
	iTestHarness->EndTest(error);	
sl@0
   280
	}
sl@0
   281
sl@0
   282
void CFileUriTest::TestFileUriComponentExtractionL(const TDesC16& aFileName, const TDesC16& aPath, const TDesC16& aExpectedFileName, const TDesC16& aExpectedDrive, TUint aFlags) const
sl@0
   283
	{
sl@0
   284
	iTestHarness->StartTestL(_L("Test File Uri Component Extraction (8-bit)"));
sl@0
   285
	iTestHarness->LogIt(_L("FileName: %S; \n\t\tFileStorageType:%D; \n\t\tPath:%S"), &aFileName,aFlags, &aPath);
sl@0
   286
	HBufC8* fileUriScheme8 = HBufC8::NewLC(4);
sl@0
   287
	fileUriScheme8->Des().Copy(KFileUriScheme8);
sl@0
   288
	
sl@0
   289
	HBufC* fileUriScheme16 = HBufC::NewLC(4);
sl@0
   290
	fileUriScheme16->Des().Copy(KFileUriScheme16);
sl@0
   291
sl@0
   292
	RFs fs;
sl@0
   293
	User::LeaveIfError(fs.Connect());
sl@0
   294
	CleanupClosePushL(fs);
sl@0
   295
	CFileMan *fm = CFileMan::NewL(fs);
sl@0
   296
	CleanupStack::PushL(fm);
sl@0
   297
	
sl@0
   298
	TInt len = aFileName.Length();
sl@0
   299
	TInt ret = 0;
sl@0
   300
sl@0
   301
	//Testing 8-bit File URI componet extraction for public file on a fixed drive
sl@0
   302
	TInt error = KErrNone;
sl@0
   303
	
sl@0
   304
	CUri8* uri8 = CUri8::CreateFileUriL(aFileName,aFlags);
sl@0
   305
	CleanupStack::PushL(uri8);
sl@0
   306
	
sl@0
   307
	HBufC8* path8 = EscapeUtils::ConvertFromUnicodeToUtf8L(aPath);
sl@0
   308
	CleanupStack::PushL(path8);
sl@0
   309
		
sl@0
   310
	HBufC8* escapedUriPath8 = EscapeUtils::EscapeEncodeL(*path8, EscapeUtils::EEscapeNormal);
sl@0
   311
	CleanupStack::PushL(escapedUriPath8);
sl@0
   312
	
sl@0
   313
	error = DoFileUriComponentExtraction<TUriParser8, CUri8>(*uri8, *fileUriScheme8, *escapedUriPath8, aExpectedFileName);
sl@0
   314
	
sl@0
   315
	iTestHarness->EndTest(error);	
sl@0
   316
	
sl@0
   317
	//-ve testing : After renaming file it should return error	
sl@0
   318
	if (aFlags == EExtMedia && error == KErrNone)
sl@0
   319
		{
sl@0
   320
		iTestHarness->StartTestL(_L("EXT-MEDIA::Test File Uri Component Extraction(8-bit)"));
sl@0
   321
		iTestHarness->LogIt(_L("FileName: %S; \n\t\tFileStorageType:%D; \n\t\tPath:%S; \n\t\tExpectedDrive:%S"), &aFileName,aFlags, &aPath, &aExpectedDrive);
sl@0
   322
	
sl@0
   323
		error = KErrNotFound;
sl@0
   324
		User::LeaveIfError(fs.SetSessionPath(aExpectedDrive));
sl@0
   325
		ret = fm->Rename(aFileName,(aFileName.Left(len-4)));
sl@0
   326
		
sl@0
   327
		if (ret == KErrNone || ret == KErrAlreadyExists)
sl@0
   328
			{
sl@0
   329
			TRAP(error, (DoFileUriComponentExtraction<TUriParser8, CUri8>(*uri8, *fileUriScheme8, *path8, aExpectedFileName)));
sl@0
   330
			error = ((error != KErrNone) ? 0 : -1);		
sl@0
   331
			ret = fm->Rename(aFileName.Left(aFileName.Length()-4),aFileName,CFileMan::EOverWrite);
sl@0
   332
			}
sl@0
   333
	
sl@0
   334
		iTestHarness->EndTest(error);	
sl@0
   335
		}
sl@0
   336
	
sl@0
   337
	//Testing 16-bit File URI componet extraction for public file on a removable media drive
sl@0
   338
	iTestHarness->StartTestL(_L("Test File Uri Component Extraction (16-bit)"));
sl@0
   339
	iTestHarness->LogIt(_L("FileName: \n\t\t%S; \n\t\tFileStorageType:%D; \n\t\tPath:%S"), &aFileName, aFlags, &aPath);
sl@0
   340
	
sl@0
   341
	CUri16* uri16 = CUri16::CreateFileUriL(aFileName,aFlags);
sl@0
   342
	CleanupStack::PushL(uri16);
sl@0
   343
	
sl@0
   344
	HBufC* escapedUriPath = HBufC::NewLC(escapedUriPath8->Length());
sl@0
   345
	escapedUriPath->Des().Copy(*escapedUriPath8);
sl@0
   346
	
sl@0
   347
	error = DoFileUriComponentExtraction<TUriParser16, CUri16, TDesC16>(*uri16, *fileUriScheme16, *escapedUriPath, aExpectedFileName);
sl@0
   348
	
sl@0
   349
	iTestHarness->EndTest(error);
sl@0
   350
	
sl@0
   351
	//-ve testing : After renaming file it should return error
sl@0
   352
	if (aFlags == EExtMedia && error == KErrNone)
sl@0
   353
		{
sl@0
   354
		iTestHarness->StartTestL(_L(" EXT-MEDIA::Test File Uri Component Extraction(16-bit)"));
sl@0
   355
		iTestHarness->LogIt(_L("FileName: %S; \n\t\tFileStorageType:%D; \n\t\tPath:%S; \n\t\tExpectedDrive:%S"), &aFileName,aFlags, &aPath, &aExpectedDrive);
sl@0
   356
	
sl@0
   357
		error = KErrNotFound;
sl@0
   358
		User::LeaveIfError(fs.SetSessionPath(aExpectedDrive));
sl@0
   359
		ret = fm->Rename(aFileName,(aFileName.Left(len-4)));
sl@0
   360
	
sl@0
   361
		if (ret == KErrNone || ret == KErrAlreadyExists)
sl@0
   362
			{			
sl@0
   363
			TRAP(error, (DoFileUriComponentExtraction<TUriParser16, CUri16, TDesC16>(*uri16, *fileUriScheme16, aPath, aExpectedFileName)));
sl@0
   364
			error = ((error != KErrNone) ? 0 : -1);		
sl@0
   365
			ret = fm->Rename(aFileName.Left(aFileName.Length()-4),aFileName,CFileMan::EOverWrite);
sl@0
   366
			}
sl@0
   367
	
sl@0
   368
		iTestHarness->EndTest(error);
sl@0
   369
		}
sl@0
   370
sl@0
   371
	CleanupStack::PopAndDestroy(escapedUriPath);
sl@0
   372
	CleanupStack::PopAndDestroy(uri16);
sl@0
   373
	CleanupStack::PopAndDestroy(escapedUriPath8);
sl@0
   374
	CleanupStack::PopAndDestroy(path8);
sl@0
   375
	CleanupStack::PopAndDestroy(uri8);	
sl@0
   376
	CleanupStack::PopAndDestroy(4, fileUriScheme8); //fileUriScheme8, fileUriScheme16,fs,fm 		
sl@0
   377
	}
sl@0
   378
	
sl@0
   379
void CFileUriTest::TestPrivateFileUriComponentExtractionL(const TDesC16& aFileName, const TDriveNumber aDrive, const TDesC16& aPath, const TDesC16& aExpectedFileName, TUint aFlags) const
sl@0
   380
	{
sl@0
   381
	iTestHarness->StartTestL(_L("Test Private File Uri Component Extraction (8-bit)"));
sl@0
   382
	iTestHarness->LogIt(_L("FileName: %S; \n\t\tDrive:%c, \n\t\tFileStorageType:%D; \n\t\tPath:%S"), &aFileName, ('A' + aDrive), aFlags, &aPath);
sl@0
   383
	TInt error = KErrNone;
sl@0
   384
	HBufC8* fileUriScheme8 = HBufC8::NewLC(4);
sl@0
   385
	TPtr8 fileUriScheme8Ptr = fileUriScheme8->Des();
sl@0
   386
	fileUriScheme8Ptr.Copy(KFileUriScheme8);
sl@0
   387
	HBufC* fileUriScheme16 = HBufC::NewLC(4);
sl@0
   388
	TPtr16 fileUriScheme16Ptr = fileUriScheme16->Des();
sl@0
   389
	fileUriScheme16Ptr.Copy(KFileUriScheme16);
sl@0
   390
	
sl@0
   391
	//Testing 8-bit File URI componet extraction for private file on a fixed drive
sl@0
   392
	CUri8* prv_uri8 = CUri8::CreatePrivateFileUriL(aFileName,aDrive,aFlags);
sl@0
   393
	CleanupStack::PushL(prv_uri8);
sl@0
   394
	HBufC8* path8 = EscapeUtils::ConvertFromUnicodeToUtf8L(aPath);
sl@0
   395
	error = DoFileUriComponentExtraction<TUriParser8>(*prv_uri8, *fileUriScheme8, *path8, aExpectedFileName);
sl@0
   396
	delete path8;
sl@0
   397
	CleanupStack::PopAndDestroy(prv_uri8);	
sl@0
   398
	iTestHarness->EndTest(error);	
sl@0
   399
	
sl@0
   400
	//Testing 16-bit File URI componet extraction for private file on a removable media drive
sl@0
   401
	iTestHarness->StartTestL(_L("Test Private File Uri Component Extraction (16-bit)"));
sl@0
   402
	iTestHarness->LogIt(_L("FileName: %S; \n\t\tDrive:%c, \n\t\tFileStorageType:%D; \n\t\tPath:%S"), &aFileName, ('A' + aDrive), aFlags, &aPath);
sl@0
   403
	CUri16* prv_uri16 = CUri16::CreatePrivateFileUriL(aFileName,aDrive,aFlags);
sl@0
   404
	CleanupStack::PushL(prv_uri16);
sl@0
   405
	error = DoFileUriComponentExtraction<TUriParser16, CUri16, TDesC16>(*prv_uri16, *fileUriScheme16, aPath, aExpectedFileName);
sl@0
   406
	CleanupStack::PopAndDestroy(prv_uri16);
sl@0
   407
	iTestHarness->EndTest(error);
sl@0
   408
	
sl@0
   409
	CleanupStack::PopAndDestroy(2, fileUriScheme8); //fileUriScheme8, fileUriScheme16 	
sl@0
   410
	}
sl@0
   411
sl@0
   412
void CFileUriTest::TestFileUriCreationWithOldAPIAndComponentExtractionL(const TDesC16& aFileName, const TDesC16& aPath, const TDesC16& aExpectedFileName) const
sl@0
   413
	{	
sl@0
   414
	//Testing File URI componet extraction created using CUri::NewLC()
sl@0
   415
	iTestHarness->StartTestL(_L("Test File Uri Component Extraction created using NewLC (8-bit)"));
sl@0
   416
	iTestHarness->LogIt(_L("FileName: %S; \n\t\tPath:%S"), &aFileName, &aPath);	
sl@0
   417
	TInt error = KErrNone;
sl@0
   418
	HBufC8* fileUriScheme8 = HBufC8::NewLC(4);
sl@0
   419
	TPtr8 fileUriScheme8Ptr = fileUriScheme8->Des();
sl@0
   420
	fileUriScheme8Ptr.Copy(KFileUriScheme8);
sl@0
   421
	HBufC* fileUriScheme16 = HBufC::NewLC(4);
sl@0
   422
	TPtr16 fileUriScheme16Ptr = fileUriScheme16->Des();
sl@0
   423
	fileUriScheme16Ptr.Copy(KFileUriScheme16);
sl@0
   424
	
sl@0
   425
	_LIT8(KFileUri8, "file://%S");
sl@0
   426
	HBufC8* path8 = EscapeUtils::ConvertFromUnicodeToUtf8L(aPath);
sl@0
   427
	CleanupStack::PushL(path8);
sl@0
   428
	HBufC8 *fileUri8 = HBufC8::NewLC((path8->Length()+10));
sl@0
   429
	TPtr8 fileUri8Ptr = fileUri8->Des();
sl@0
   430
	fileUri8Ptr.AppendFormat(KFileUri8,path8);
sl@0
   431
	TUriParser8 urip8;
sl@0
   432
	urip8.Parse(*fileUri8);
sl@0
   433
	CUri8* _uri8 = CUri8::NewLC(urip8); 
sl@0
   434
	error = DoFileUriComponentExtraction<TUriParser8, CUri8, TDesC8>(*_uri8, *fileUriScheme8, *path8, aExpectedFileName);
sl@0
   435
	CleanupStack::PopAndDestroy(_uri8);
sl@0
   436
	iTestHarness->EndTest(error);
sl@0
   437
sl@0
   438
	iTestHarness->StartTestL(_L("Test File Uri Component Extraction created using NewLC (16-bit)"));
sl@0
   439
	iTestHarness->LogIt(_L("FileName: %S; \n\t\tFileStorageType:2; \n\t\tPath:%S"), &aFileName, &aPath);
sl@0
   440
	HBufC *fileUri16 = EscapeUtils::ConvertToUnicodeFromUtf8L(*fileUri8);
sl@0
   441
	CleanupStack::PushL(fileUri16);
sl@0
   442
	TUriParser16 urip16;
sl@0
   443
	urip16.Parse(*fileUri16);
sl@0
   444
	CUri16* _uri16 = CUri16::NewLC(urip16);  
sl@0
   445
	error = DoFileUriComponentExtraction<TUriParser16, CUri16, TDesC16>(*_uri16, *fileUriScheme16, aPath, aExpectedFileName);
sl@0
   446
	CleanupStack::PopAndDestroy(_uri16);
sl@0
   447
	iTestHarness->EndTest(error);
sl@0
   448
	
sl@0
   449
	CleanupStack::PopAndDestroy(5, fileUriScheme8); //fileUriScheme8, fileUriScheme16, path8, fileUri8, fileUri16  	
sl@0
   450
	}
sl@0
   451
	
sl@0
   452
//
sl@0
   453
//
sl@0
   454
//	Implementation of LOCAL functions
sl@0
   455
//
sl@0
   456
//
sl@0
   457
template<class CUriType, class TDesCType>
sl@0
   458
TInt DoFileUriExtraction(const CUriType& aUri, const TDesCType& aExpectedFileUri)
sl@0
   459
	{
sl@0
   460
	TInt error = 0;
sl@0
   461
	
sl@0
   462
	// Check file URI...
sl@0
   463
	error = aUri.Uri().UriDes().Compare(aExpectedFileUri);
sl@0
   464
	if( error != 0 )
sl@0
   465
		{
sl@0
   466
		return error;
sl@0
   467
		}
sl@0
   468
	return KErrNone;
sl@0
   469
	}
sl@0
   470
sl@0
   471
template<class TUriParserType, class CUriType, class TDesCType, class TDesCType16>
sl@0
   472
TInt DoFileUriComponentExtraction(const CUriType& aUri, const TDesCType& aScheme, const TDesCType& aPath, const TDesCType16& aExpectedFileName)
sl@0
   473
	{
sl@0
   474
	TUriParserType uriParser;
sl@0
   475
	TInt error = uriParser.Parse(aUri.Uri().UriDes());
sl@0
   476
	// Is this a valid Uri?
sl@0
   477
	if( error == KUriUtilsErrInvalidUri )
sl@0
   478
		{
sl@0
   479
		return error;
sl@0
   480
		}
sl@0
   481
sl@0
   482
	// Check scheme...
sl@0
   483
	if( (error = TestComponent(uriParser, aScheme, EUriScheme)) != 0 )
sl@0
   484
		{
sl@0
   485
		return error;
sl@0
   486
		}
sl@0
   487
	
sl@0
   488
	// Check path...
sl@0
   489
	if( (error = TestComponent(uriParser, aPath, EUriPath)) != 0)
sl@0
   490
		{
sl@0
   491
		return error;
sl@0
   492
		}
sl@0
   493
	
sl@0
   494
	if (aExpectedFileName.Length() > 0)
sl@0
   495
		{
sl@0
   496
		HBufC* tmpFileName = uriParser.GetFileNameL();
sl@0
   497
		error = tmpFileName->Compare(aExpectedFileName);
sl@0
   498
		delete tmpFileName;
sl@0
   499
		if (error != 0)
sl@0
   500
			{
sl@0
   501
			return error;
sl@0
   502
			}
sl@0
   503
		}	
sl@0
   504
		
sl@0
   505
	return KErrNone;
sl@0
   506
	}
sl@0
   507
	
sl@0
   508
template<class TParserType, class TDesCType, class TComponentType>
sl@0
   509
TInt TestComponent(const TParserType& aParser, const TDesCType& aExpected, TComponentType aComponent)
sl@0
   510
	{
sl@0
   511
	return aParser.Extract(aComponent).Compare(aExpected);
sl@0
   512
	}
sl@0
   513
	
sl@0
   514
sl@0
   515
void CFileUriTest::TestFileUriNameExtractionL(const TDesC& aUri, const TDesC& aFilename, const TDesC& aPath)
sl@0
   516
	{
sl@0
   517
	TUriParser uriParser;
sl@0
   518
	User::LeaveIfError(uriParser.Parse(aUri));
sl@0
   519
	
sl@0
   520
	HBufC* name;
sl@0
   521
	TInt error = KErrNone;
sl@0
   522
	
sl@0
   523
	iTestHarness->StartTestL(_L("Test extract file name from URI (16 bit)"));
sl@0
   524
	iTestHarness->LogIt(_L("URI: %S; \n\t\tExpected name:%S"), &uriParser.UriDes(), &aFilename);
sl@0
   525
sl@0
   526
	name = uriParser.GetFileNameL(EUriFileNameTail);
sl@0
   527
	iTestHarness->LogIt(_L("Computed name:%S"), name);
sl@0
   528
	error = (aFilename.Compare(*name)==0) ? KErrNone : KErrBadName;
sl@0
   529
	delete name;
sl@0
   530
	
sl@0
   531
	iTestHarness->EndTest(error);
sl@0
   532
sl@0
   533
	iTestHarness->StartTestL(_L("Test extract file path from URI (16 bit)"));
sl@0
   534
	iTestHarness->LogIt(_L("URI: %S; \n\t\tExpected Path:%S"), &uriParser.UriDes(), &aPath);
sl@0
   535
sl@0
   536
	name = uriParser.GetFileNameL(EUriFileNamePath);
sl@0
   537
	iTestHarness->LogIt(_L("Computed Path:%S"), name);
sl@0
   538
	error = (aPath.Compare(*name)==0) ? KErrNone : KErrBadName;
sl@0
   539
	delete name;
sl@0
   540
	
sl@0
   541
	iTestHarness->EndTest(error);
sl@0
   542
	}
sl@0
   543
	
sl@0
   544
void CFileUriTest::TestFileUriNameExtractionL(const TDesC8& aUri, const TDesC& aFilename, const TDesC& aPath)
sl@0
   545
	{
sl@0
   546
	TUriParser8 uriParser;
sl@0
   547
	User::LeaveIfError(uriParser.Parse(aUri));
sl@0
   548
	
sl@0
   549
	HBufC* name;
sl@0
   550
	TInt error = KErrNone;
sl@0
   551
sl@0
   552
	TFileName uri;
sl@0
   553
	uri.Copy(uriParser.UriDes()); // safe for all valid URIs
sl@0
   554
	iTestHarness->StartTestL(_L("Test extract file name from URI (8 bit)"));
sl@0
   555
	iTestHarness->LogIt(_L("URI: %S; \n\t\tExpected name:%S"), &uri, &aFilename);
sl@0
   556
sl@0
   557
	name = uriParser.GetFileNameL(EUriFileNameTail);
sl@0
   558
	iTestHarness->LogIt(_L("Computed name:%S"), name);
sl@0
   559
	error = (aFilename.Compare(*name)==0) ? KErrNone : KErrBadName;
sl@0
   560
	delete name;
sl@0
   561
	
sl@0
   562
	iTestHarness->EndTest(error);
sl@0
   563
sl@0
   564
	iTestHarness->StartTestL(_L("Test extract file path from URI (8 bit)"));
sl@0
   565
	iTestHarness->LogIt(_L("URI: %S; \n\t\tExpected Path:%S"), &uri, &aPath);
sl@0
   566
sl@0
   567
	name = uriParser.GetFileNameL(EUriFileNamePath);
sl@0
   568
	iTestHarness->LogIt(_L("Computed Path:%S"), name);
sl@0
   569
	error = (aPath.Compare(*name)==0) ? KErrNone : KErrBadName;
sl@0
   570
	delete name;
sl@0
   571
	
sl@0
   572
	iTestHarness->EndTest(error);
sl@0
   573
	}
sl@0
   574