os/ossrv/lowlevellibsandfws/apputils/multipartparser/test/tef/smoketest/src/mppsmoketestlib.cpp
Update contrib.
1 // Copyright (c) 2008-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.
17 #include "mppsmoketestlib.h"
19 //#include "xmlengtesterdef.h"
20 //#include <utils/xmlengxestd.h>
23 * Utility fcn to compare two files ( skip or not skip white space ).
24 * @param aSrcFile full filename of a file you want to check/compare.
25 * @param aVerificationFile fill filename of a correct output file, aSrcFile will be compared to this to verify it's validity.
26 * @param aSkipWhiteSpace do not include whitespace when comparing the two files.
27 * @return Symbian OS error code.
29 TInt CMultipartTestContainer::CompareFilesL( TPtrC aSrcFile, TPtrC aVerificationFile,
30 TBool aSkipWhiteSpace)
32 _LIT(KSourceFileError,"Source file error.");
33 _LIT(KPatternFileError,"Pattern file error.");
34 _LIT(KComparePassed,"Files compare test PASSED.");
35 _LIT(KCompareFailed,"Files compare test FAILED.");
37 TInt nResult = KErrNone;
39 TBool skipWhite = FALSE;
40 TBool foundRes = FALSE;
41 TBool foundRef = FALSE;
44 User::LeaveIfError(fs.Connect());
45 CleanupClosePushL(fs);
50 TFileName srcFileName;
51 TFileName referenceFileName;
53 TPtrC SrcFile = aSrcFile;
54 TPtrC ReferenceFile = aVerificationFile;
60 if ( nResult == KErrNone )
62 srcFileName.Copy(SrcFile);
63 referenceFileName.Copy(ReferenceFile);
65 if(srcFile.Open(fs, srcFileName, EFileStream|EFileRead) == KErrNone)
67 // Does reference file exist.
68 if(referenceFile.Open(fs, referenceFileName, EFileStream|EFileRead) == KErrNone)
70 // Integer variables for compare to length of files (result and reference).
74 srcFile.Size(resSize);
75 referenceFile.Size(refSize);
77 // Next compare one letter at the time, but only if files have same length.
86 //for(TInt i = 0; i < Size; i++)
92 while(i < (resSize + 1))
97 if ( resBuf.Length() > 0)
104 // Read reference file
105 while(j < (refSize + 1))
108 referenceFile.Read(refBuf);
110 if ( refBuf.Length() > 0)
117 // Compare single letter at the time.
118 if( ( i < resSize ) && ( j < refSize ) && (resBuf[0] != refBuf[0]) )
120 nResult = KErrGeneral;
123 if( (i == (resSize + 1)) && (j < refSize) && foundRef)
125 nResult = KErrGeneral;
128 if( (i < resSize) && (j == (refSize + 1)) && foundRes)
130 nResult = KErrGeneral;
133 if ((i > resSize) && (j > refSize))
139 if (resSize != refSize)
140 nResult = KErrGeneral;
146 for(TInt i = 0; i < resSize; i++)
149 srcFile.Read(resBuf);
151 // Read reference file
152 referenceFile.Read(refBuf);
154 // Compare single letter at the time.
156 if(resBuf[0] != refBuf[0])
158 nResult = KErrGeneral;
164 referenceFile.Close();
169 nResult = KErrGeneral;
170 INFO_PRINTF1(KPatternFileError);
176 nResult = KErrGeneral;
177 INFO_PRINTF1(KSourceFileError);
182 CleanupStack::PopAndDestroy(&fs);
184 if ( nResult == KErrNone)
186 INFO_PRINTF1(KComparePassed);
190 INFO_PRINTF1(KCompareFailed);
196 CMultipartTestContainer::CMultipartTestContainer(CTestExecuteLogger& aLogger)
202 * @param aLogger TEF logger from CTestStep.
204 void CMultipartTestContainer::ConstructL()
209 * @param aLogger TEF logger from CTestStep.
211 CMultipartTestContainer* CMultipartTestContainer::NewLC(CTestExecuteLogger& aLogger)
213 CMultipartTestContainer* self = new (ELeave) CMultipartTestContainer(aLogger);
215 CleanupStack::PushL( self );
223 * @param aLogger TEF logger from CTestStep.
225 CMultipartTestContainer* CMultipartTestContainer::NewL(CTestExecuteLogger &aLogger)
227 CMultipartTestContainer* self = NewLC(aLogger );
228 CleanupStack::Pop( self );
234 CMultipartTestContainer::~CMultipartTestContainer()
239 * Read a file from the hard drive.
241 * @param aFileName full filename to read in.
242 * @return contents of the file.
244 HBufC8* CMultipartTestContainer::ReadFileLC(const TDesC& aFileName)
248 User::LeaveIfError(rfs.Connect());
249 CleanupClosePushL(rfs);
250 User::LeaveIfError(file.Open(rfs, aFileName, EFileRead));
251 CleanupClosePushL(file);
253 User::LeaveIfError(file.Size(size));
254 HBufC8* buf = HBufC8::NewLC(size);
255 TPtr8 bufPtr(buf->Des());
256 User::LeaveIfError(file.Read(bufPtr));
257 CleanupStack::Pop(); // buf
258 CleanupStack::PopAndDestroy(2); // file, rfs
259 CleanupStack::PushL(buf);
264 * Write the file to the hard drive.
267 * @param aBodyPartArray
269 void CMultipartTestContainer::WriteFileL( const TDesC& aFileName,
270 RPointerArray<CBodyPart>& aBodyPartArray )
274 CleanupClosePushL(fs);
276 TInt err = output.Open(fs, aFileName, EFileWrite);
277 if (err == KErrNotFound)
279 User::LeaveIfError(output.Create(fs, aFileName, EFileWrite));
283 TInt size = aBodyPartArray.Count();
286 for (i = 0; i < size; i++)
289 CBodyPart* bodyPart = aBodyPartArray[i];
291 if( bodyPart->Url().Ptr() )
293 output.Write(_L8("***************Ur"));
296 err = narrow.Create(bodyPart->Url().Length()*2);
299 INFO_PRINTF1(_L("Error printing Url to output file; continueing..."));
301 narrow.Copy(bodyPart->Url());
302 output.Write(narrow.Left(narrow.Length()));
305 if( bodyPart->ContentID().Ptr() )
307 output.Write(_L8("***************ContentID"));
309 output.Write(bodyPart->ContentID() );
312 if( bodyPart->Charset().Ptr() )
314 output.Write(_L8("***************Charset"));
316 output.Write( bodyPart->Charset() );
319 if( bodyPart->ContentType().Ptr() )
321 output.Write(_L8("***************ContentType"));
323 output.Write( bodyPart->ContentType() );
326 if( bodyPart->Headers().Ptr() )
328 output.Write(_L8("***************Headers"));
330 output.Write(bodyPart->Headers() );
333 if( bodyPart->Body().Ptr() )
335 output.Write(_L8("***************Body"));
337 output.Write(bodyPart->Body() );
340 output.Write(_L8("=========================================part ends"));
346 CleanupStack::PopAndDestroy(1, &fs);
352 * Write the data to a file.
354 * @param aFileName filename to write the data to.
355 * @param aData data to write.
357 void CMultipartTestContainer::WriteToDiskL( const TDesC& aFileName,
358 const TDesC8& aData )
362 TInt status( KErrNone );
363 User::LeaveIfError( fsSession.Connect() );
364 status = file.Replace( fsSession, aFileName, EFileWrite|EFileShareAny);
365 if( status == KErrNone )
374 * Parse a file with base64 encoding.
376 * @param aFile filename to be read in.
377 * @param aUrl ??? //DEBUG
378 * @param aOutput name out output file.
380 void CMultipartTestContainer::ParseFileL( const TDesC& aFile,
382 const TDesC& aOutput )
385 HBufC8* data = ReadFileLC( aFile );
387 _LIT8(KMultipartMixed, "multipart/mixed");
389 _LIT8(KBoundary1, "KBoundary");
391 RPointerArray<CBodyPart> bodyPartArray;
397 TRAP( err, MultipartParser::ParseL( *data, KMultipartMixed, KBoundary1, aUrl, bodyPartArray ) );
401 TRAP( err, MultipartParser::ParseL( *data, KMultipartMixed, KBoundary1, aFile, bodyPartArray ) );
405 INFO_PRINTF1(_L("Error parsing file."));
409 WriteFileL( aOutput, bodyPartArray);
412 CleanupStack::PopAndDestroy(); // data
413 // clean up body part array and its content
414 TInt size = bodyPartArray.Count();
416 for (i = 0; i < size; i++)
418 delete bodyPartArray[i];
420 bodyPartArray.Reset();