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