filehandling/htmltorichtextconverter/tsrc/profilingtest.cpp
author Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
Mon, 03 May 2010 12:40:23 +0300
changeset 28 b0b858956ed5
parent 0 2e3d3ce01487
permissions -rw-r--r--
Revision: 201015 Kit: 201018

// Copyright (c) 2003-2010 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:
// CHtmlToCrtConverter profiling test code
// profiles conversion of files of size 0.1kb - 2kb in 0.1kb increments
// and then 2kb - 20kb in 1kb increments
// The results are written to the file results.csv
// 
//

#include <e32std.h>
#include <e32test.h>
#include <f32file.h>
#include <e32math.h>
#include <e32def_private.h>
#include "CHtmlToCrtConverter.h"
#include "CHtmlToCrtConvActive.h"

_LIT(KTestName,"CHtmlToCrtConverter");

LOCAL_D RTest test(KTestName);

//=================================================================================
//synchronousConversionL
//tests synchronous conversion
//=================================================================================
void synchronousConversionL(TDesC& aSourceFile, TDesC& aTargetFile)
	{
	CHtmlToCrtConverter* converter = new(ELeave) CHtmlToCrtConverter;
	CleanupStack::PushL(converter);
	converter->ConvertL(aSourceFile, aTargetFile);		

	CleanupStack::PopAndDestroy(converter);
	}
//================================================================================
//getPath
//================================================================================
TBool getPath(TDes& aPath, RFs& aFs)
	{
	// Generate the folder spec to search in
	TFileName searchSpec;
	TChar driveLetter = 'C';
	searchSpec.Append(driveLetter);
	searchSpec.Append(aPath);

	CDir* entryList = NULL;
	TFindFile finder(aFs);
	TInt ret = finder.FindWildByPath(searchSpec, NULL, entryList);
	if(ret<KErrNone)
		{
		//try z drive
		driveLetter = 'Z';
		searchSpec.Zero();
		searchSpec.Append(driveLetter);
		searchSpec.Append(aPath);
		delete entryList;
		entryList = NULL;

		ret = finder.FindWildByPath(searchSpec, NULL, entryList);
		if	(ret < KErrNone)
			{
			//path not found
			delete entryList;
			test.Printf(_L("files not found\n"));
			return EFalse;
			}
		}

	//set path
	delete entryList;
	aPath.Copy(searchSpec);
	return ETrue;
	}
//=================================================================================
//doProfilingL
//=================================================================================
void doProfilingL(TDesC& aPath, TDesC& aPathName, RFs& aFs, TDesC& aTargetFile, TDesC& aResultFile)
	{
	TBuf<24> sourceFile;

	CDir* entryList = NULL;
	TInt error = aFs.GetDir(aPath,KEntryAttMatchMask,ESortByName,entryList);
	User::LeaveIfError(error);

	TInt numberOfEntries = entryList->Count();
	TBuf<11>sourceFileName;
	_LIT8(KCSVHeadings,"size,time\r\n");
	HBufC8* temp=HBufC8::NewLC(500);
	TPtr8 resultBuffer(temp->Des());
	resultBuffer.Append(KCSVHeadings);

	for (TInt i=0; i<numberOfEntries; i++)
		{
		//get file name
		sourceFileName = (*entryList)[i].iName;
		sourceFile = aPathName;
		sourceFile.Append(sourceFileName);
		__PROFILE_RESET(1);
		__PROFILE_START(0);
		synchronousConversionL(sourceFile, aTargetFile);
		__PROFILE_END(0);
		__PROFILE_DISPLAY(1);
		}

	//write result to file
	_LIT(KPath,"c:\\");
	_LIT(KExtension,".csv");
	TBuf<256> result(KPath);
	result.Append(aResultFile);
	result.Append(KExtension);

	RFs theFs;
	User::LeaveIfError(theFs.Connect());
	CleanupClosePushL(theFs);
	RFile file;
	TInt err=file.Replace(theFs, result,
	EFileWrite+EFileShareAny+EFileStreamText);
	User::LeaveIfError(err);
	CleanupClosePushL(file);
	file.Write(resultBuffer);
	CleanupStack::PopAndDestroy(3);

	delete entryList;
	}
//=================================================================================
	
/**
@SYMTestCaseID PIM-PROFILINGTEST-0001
*/
void doMainL()
	{
	test.Start(_L("@SYMTestCaseID PIM-PROFILINGTEST-0001 CHtmlToCrtConverter profiling test"));

	RFs		fs;
	User::LeaveIfError(fs.Connect());
	CleanupClosePushL(fs);

	TBufC<11> targetFile(_L("target file"));

//path to be profiled
	TBuf<18> path(_L(":\\profiling\\*.*"));

//file to write results to
	_LIT(KResultFile,"results");
	TBufC<7> resultFile(KResultFile);

	if(getPath(path, fs))
		{
		TBuf<18> pathName(path);
		pathName.SetLength(pathName.Length()-3);

		doProfilingL(path, pathName, fs, targetFile, resultFile);
		}

	CleanupStack::PopAndDestroy(&fs);

	test.End();
	test.Close();
	}

GLDEF_C TInt E32Main()
	{	
	__UHEAP_MARK;

	CTrapCleanup* theCleanup=CTrapCleanup::New();
	TRAPD(ret,doMainL());		
	test(ret==KErrNone);
	delete theCleanup;	

	__UHEAP_MARKEND;
	return(KErrNone);
	}