os/ossrv/genericservices/httputils/Test/Integration/TestFileUriSuite/TestGenerateFileUriStep.cpp
First public contribution.
1 // Copyright (c) 2004-2009 Nokia Corporation and/or its subsidiary(-ies).
2 // All rights reserved.
3 // This component and the accompanying materials are made available
4 // under the terms of "Eclipse Public License v1.0"
5 // which accompanies this distribution, and is available
6 // at the URL "http://www.eclipse.org/legal/epl-v10.html".
8 // Initial Contributors:
9 // Nokia Corporation - initial contribution.
22 // For File URI handler API
25 #include <escapeutils.h>
28 #include "TestGenerateFileUriStep.h"
31 Constructor. Sets the test step name
33 CTestGenerateFileUriStep::CTestGenerateFileUriStep()
35 //Call base class method to set human readable name for test step
36 SetTestStepName(KTestGenerateFileUriStep);
40 Does the main functionality of a test step.
41 Here, reads values from INI file and calls DoTestL
43 @see GenerateFileUriAndCompareL
45 @return EPass or EFail indicating the success or failure of the test step
47 TVerdict CTestGenerateFileUriStep::doTestStepL()
50 INFO_PRINTF1(_L("\n"));
51 // Get necessary information from INI file
53 TPtrC expectedFileUri;
58 if(!GetStringFromConfig(ConfigSection(), KIniFileName, fileName ) ||
59 !GetStringFromConfig(ConfigSection(), KIniExpectedFileUri, expectedFileUri ) ||
60 !GetStringFromConfig(ConfigSection(), KIniFileType, fileType ) ||
61 !GetIntFromConfig (ConfigSection(), KIniCharacterSet, characterSet ) ||
62 !GetStringFromConfig(ConfigSection(), KIniDrive, drive )
65 ERR_PRINTF6(_L("Problem in reading values from ini. \
66 \nExpected fields are: \n%S\n%S\n%S\n%S\n%S\n"
67 ),&KIniFileName, &KIniExpectedFileUri, &KIniFileType, &KIniCharacterSet, &KIniDrive
69 SetTestStepResult(EFail);
72 {// No problem in reading values from INI file. Proceed.
73 TRAPD(err, DoTestL(fileName, expectedFileUri, fileType, drive, characterSet));
76 ERR_PRINTF2(_L("Leave occured in CTestGenerateFileUriStep::DoTestL: %D"), err);
77 SetTestStepResult(EFail);
81 INFO_PRINTF1(_L("\n"));
82 return TestStepResult();
86 Checks whether the drive is a removable drive. Populates the <drive> placeholder.
87 And calls ExtractFileNameAndCompareL.
89 void CTestGenerateFileUriStep::DoTestL(const TPtrC& aFileName, const TPtrC& aExpectedFileUri, const TPtrC& aFileType, const TPtrC& aDrive, const TInt& aCharacterSet)
91 INFO_PRINTF2(_L("Character Set = %D"), aCharacterSet);
92 INFO_PRINTF2(_L("File name = %S"), &aFileName);
94 // Eliminate any characters like colon, slash etc.
95 TPtrC drive(aDrive.Left(1));
97 TUint flags = KErrNone;
98 TDriveNumber driveNum;
99 CTestFileUriServer::GetDriveNumber(drive, driveNum);
101 TInt err = CTestFileUriServer::IsRemovableDrive(driveNum, aResult);
104 ERR_PRINTF2(_L("Error occured while checking whether drive is removable: %D"), err);
105 SetTestStepResult(EFail);
110 {// The drive is a removable drive
111 INFO_PRINTF1(_L("The drive is a removable drive"));
113 drive.Set(KExtMedia());
115 HBufC16* expectedUriWithDrive = NULL;
117 // Fill the <drive> place holder if it exists
118 TRAPD(err, expectedUriWithDrive = CTestFileUriServer::CheckAndFillDriveNameL(aExpectedFileUri, drive));
121 ERR_PRINTF2(_L("Error occured while filling the drive-placeholder: %D"), err);
122 SetTestStepResult(EFail);
125 {// All preliminary operations OK so far, go ahead and perform the test.
126 CleanupStack::PushL(expectedUriWithDrive);
127 INFO_PRINTF2(_L("Expected File URI = %S"), expectedUriWithDrive);
128 if(aCharacterSet == KCharSet8)
130 CUri16* cUri8 = NULL;
131 GenerateFileUriAndCompareL(cUri8, aFileName, expectedUriWithDrive, flags, driveNum, aFileType);
133 else if(aCharacterSet == KCharSet16)
135 CUri16* cUri16 = NULL;
136 GenerateFileUriAndCompareL(cUri16, aFileName, expectedUriWithDrive, flags, driveNum, aFileType);
140 ERR_PRINTF1(_L("Invalid CharacterSet"));
141 SetTestStepResult(EFail);
143 CleanupStack::PopAndDestroy(expectedUriWithDrive);
149 Template function that calls the 8 or 16-bit version of
150 CreatePrivateFileUriL() or CreateFileUriL(), verifies the expected and
151 actual results and sets the test step result accordingly.
153 template <class CUriType>
154 void CTestGenerateFileUriStep::GenerateFileUriAndCompareL(CUriType*& cUri8Or16, const TPtrC& aFileName, HBufC16*& aExpectedFileUri8Or16, const TUint& aFlags, const TInt& aDriveNum, const TPtrC& aFileType)
158 // Get the URI object
159 if(aFileType == KFileTypePrivate)
160 {// Call private version
161 TRAP(err, cUri8Or16 = CUriType::CreatePrivateFileUriL(aFileName, static_cast<TDriveNumber>(aDriveNum), aFlags));
163 // Test it in case of NON-secure version too, but in that case
164 // the expected result is a Leave with KErrNotSupported.
167 {// Call non-private version
168 TRAP(err, cUri8Or16 = CUriType::CreateFileUriL(aFileName, aFlags));
172 {// If it comes here, it means there's some problem. But some tests
173 // expect an error. So just set the error, and leave the decision
175 ERR_PRINTF2(_L("Leave occured: %D"), err);
176 SetTestStepError(err);
179 {// Things seem to be OK and a URI has been returned. Do the checking
181 CleanupStack::PushL(cUri8Or16);
183 // Construct a fully lowercase 16-bit version of the returned URI, so that we
184 // can do print, compare etc.
185 HBufC16* lowerCaseUri16 = HBufC16::NewL(cUri8Or16->Uri().UriDes().Length());
186 lowerCaseUri16->Des().Copy(cUri8Or16->Uri().UriDes());
187 CleanupStack::PopAndDestroy(cUri8Or16);
189 INFO_PRINTF2(_L("The returned URI = %S"), lowerCaseUri16);
191 lowerCaseUri16->Des().LowerCase();
193 // Make expected URI too, fully lowercase
194 aExpectedFileUri8Or16->Des().LowerCase();
196 // Compare and set the verdict
197 if (lowerCaseUri16->Des() != aExpectedFileUri8Or16->Des())
199 INFO_PRINTF1(_L("The returned and expected URIs did not match. Result = INCORRECT"));
200 SetTestStepResult(EFail);
204 INFO_PRINTF1(_L("The returned and expected URIs matched. Result = CORRECT"));
206 delete lowerCaseUri16;
208 } // GenerateFileUriAndCompareL()