diff -r 000000000000 -r bde4ae8d615e os/ossrv/genericservices/httputils/Test/Integration/TestFileUriSuite/TestForAllFilesStep.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/os/ossrv/genericservices/httputils/Test/Integration/TestFileUriSuite/TestForAllFilesStep.cpp Fri Jun 15 03:10:57 2012 +0200 @@ -0,0 +1,232 @@ +// 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: +// TESTGENERATEFILEURIFORALLFILESSTEP.CPP +// +// + +/** + @file + @internalTechnology +*/ + +// Epoc Includes +// For File URI handler API +#include +#include +#include + +// User Include +#include "TestForAllFilesStep.h" + +/** +Constructor. Sets the test step name +*/ +CTestForAllFilesStep::CTestForAllFilesStep() + { + //Call base class method to set human readable name for test step + SetTestStepName(KTestForAllFilesStep); + } + +/** +Does the main functionality of a test step. Here just calls DoTestL. +@internalTechnology +@param None +@return EPass or EFail indicating the success or failure of the test step +*/ +TVerdict CTestForAllFilesStep::doTestStepL() + { + __UHEAP_MARK; + INFO_PRINTF1(_L("\n")); + TRAPD(err, DoTestL()); + if(err != KErrNone) + { + ERR_PRINTF2(_L("Leave occured in CTestForAllFilesStep::DoTestL: %D"), err); + SetTestStepResult(EFail); + } + INFO_PRINTF1(_L("\n")); + __UHEAP_MARKEND; + return TestStepResult(); + } // doTestStepL() + +/** +Scans all the directories and calls TestBothWaysL that tests the +creation of URI from a filename and vice versa for all the files. +*/ +void CTestForAllFilesStep::DoTestL() + { + RFs fs; + TInt err = fs.Connect(); + if(err != KErrNone) + { + ERR_PRINTF2(_L("Error occured while connecting to file server: %D"), err); + SetTestStepResult(EFail); + } + else + { + TBuf<4> rootDir; + CDirScan *dirScan = CDirScan::NewLC(fs); + TInt drive; + for(drive = EDriveA; drive <= EDriveZ; ++drive) + { + rootDir.Format(_L("%c:\\"), static_cast(KLetterA + drive)); + dirScan->SetScanDataL(rootDir, KEntryAttNormal, ESortNone); + CDir* entryList = NULL; + FOREVER + { + TRAPD(err, dirScan->NextL(entryList)); + if(err == KErrNotReady) + { + INFO_PRINTF2(_L("Drive %S not ready"), &rootDir); + break; + } + if (entryList==NULL) + { + break; + } + CleanupStack::PushL(entryList); + TFileName filename; + TInt index; + for(index = 0; index < entryList->Count(); ++index) + { + const TEntry& entry = (*entryList)[index]; + filename = dirScan->FullPath(); + filename.Append(entry.iName); + INFO_PRINTF1(_L("\n")); + INFO_PRINTF2(_L("The next file name in the dir-scan = %S"), &filename); + INFO_PRINTF1(_L("Calling 8-bit versions")); + + // To keep VC compiler happy as it does not support + // explicit template calls.Hence passing empty variables + // cUri8 and tUriParser8 + CUri8* cUri8 = NULL; + TUriParser8 tUriParser8; + TestBothWaysL(cUri8, tUriParser8, filename); + INFO_PRINTF1(_L("\n")); + INFO_PRINTF1(_L("Calling 16-bit versions")); + CUri16* cUri16 = NULL; + TUriParser16 tUriParser16; + TestBothWaysL(cUri16, tUriParser16, filename); + } + CleanupStack::PopAndDestroy(entryList); + } // FOREVER + } + fs.Close(); + CleanupStack::PopAndDestroy(dirScan); + } + } // DoTestL + +/** +Template function that calls CUri::CreateFileUriL to generate a URI and +calls TUriC::GetFileNameL() with this URI, to verify that the filename so got +is the same as the original one. +*/ +template +void CTestForAllFilesStep::TestBothWaysL(CUriType*& cUri8Or16, TUriParserType& tUriParser8Or16, TFileName& aFileName) + { + TUint flags = KErrNone; + TDriveNumber driveNum; + TParse parser; + parser.Set(aFileName, 0, 0); + TBuf<1> drive = parser.Drive().Left(1); + drive.LowerCase(); + + CTestFileUriServer::GetDriveNumber(drive, driveNum); + TBool aResult; + TInt err = CTestFileUriServer::IsRemovableDrive(driveNum, aResult); + if(err != KErrNone) + { + ERR_PRINTF2(_L("Error occured while checking whether drive is removable: %D"), err); + SetTestStepResult(EFail); + } + else + { + if(aResult) + {// The drive is a removable drive + INFO_PRINTF1(_L("The drive is a removable drive")); + flags = EExtMedia; + } + + // Generate the URI + TRAPD(err, cUri8Or16 = CUriType::CreateFileUriL(aFileName, flags)); + + if(err != KErrNone) + { + ERR_PRINTF2(_L("Error occured in CreateFileUriL: %D"), err); + SetTestStepResult(EFail); + } + else + { + CleanupStack::PushL(cUri8Or16); + // Just in case, create a 16-bit heap desc and print. + HBufC16* tempBuf = HBufC16::NewL(cUri8Or16->Uri().UriDes().Length()); + tempBuf->Des().Copy(cUri8Or16->Uri().UriDes()); + INFO_PRINTF2(_L("File URI returned by CreateFileUriL = %S"), tempBuf); + delete tempBuf; + + if(aResult) + { + TBuf<1> correctDrive; + err = CTestFileUriServer::FirstRemovableDriveWithSameFileName(aFileName, correctDrive); + if(err != KErrNone) + { + ERR_PRINTF2(_L("Error occured in FirstRemovableDriveWithSameFileName: %D"), err); + SetTestStepResult(EFail); + } + else + { + correctDrive.LowerCase(); + if(correctDrive != drive) + { + aFileName.Replace(0, 1, correctDrive); + INFO_PRINTF1(_L("One more removable drive found with the same file name, but is ahead in alphabetical order")); + INFO_PRINTF2(_L("Hence the correct expected file name is %S"), aFileName); + } + } + } + + // Convert the URI to filename back again + HBufC16* returnedFileName = NULL; + + tUriParser8Or16.Parse(cUri8Or16->Uri().UriDes()); + TRAPD(err, returnedFileName = tUriParser8Or16.GetFileNameL()); + CleanupStack::PopAndDestroy(cUri8Or16); + if(err != KErrNone) + { + ERR_PRINTF2(_L("Error occured in GetFileNameL: %D"), err); + SetTestStepResult(EFail); + } + else + { + INFO_PRINTF2(_L("The filename returned by GetFileNameL = %S"), returnedFileName); + + // Verify the result + aFileName.LowerCase(); + returnedFileName->Des().LowerCase(); + + if(returnedFileName->Compare(aFileName) != KErrNone) + { + INFO_PRINTF1(_L("The returned filename did not match the original filename. Result = INCORRECT")); + SetTestStepResult(EFail); + } + else + { + INFO_PRINTF1(_L("The returned filename is same as the original filename. Result = CORRECT")); + } + delete returnedFileName; + } + } + } + } // TestBothWaysL + +