/*
* Copyright (c) 2002-2009 Nokia Corporation and/or its subsidiary(-ies).
* All rights reserved.
* This component and the accompanying materials are made available
* under the terms of the License "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: 
*
*/




#if (!defined __CAF_STEP_H__)
#define __CAF_STEP_H__
#include <test/testexecutestepbase.h>

class CCAFServer;
class CApaDataRecognizerType;


//Base class used to provide utility functions availble to test step classes
class CCAFStep : public CTestStep
	{
public:
	CCAFStep();
	virtual ~CCAFStep();

	/* 
	* Convert a 16-bit descriptor to an 8-bit descriptor
	* A new HBufC8 is allocated to store the new version of the descriptor
	* @param source a descriptor derived from TDesC16 
	* @return a new HBufC8 with a copy of the data in source
	*/
	HBufC8* ConvertDes16toHBufC8LC(TDesC& source);

	/* 
	* Convert a 8-bit descriptor to an 16-bit descriptor
	* A new HBufC16 is allocated to store the new version of the descriptor
	* @param source a descriptor derived from TDesC8 
	* @return a new HBufC16 with a copy of the data in source
	*/
	HBufC16* ConvertDes8toHBufC16LC(TDesC8& source);

	/* 
	* Load CAFRECOGNIZER.MDL and create an instance of CApaCafRecognizer that can be used
	* by derived classes
	*/
	void LoadCafRecognizerL();

	/* 
	* Delete the instance of CApaCafRecognizer and unload the CAFRECOGNIZER.MDL library 
	*/
	void UnLoadCafRecognizer();

	/* 
	* Implementation of CTestStep virtual functions, create and install a CActiveScheduler
	*/
	virtual TVerdict doTestStepPreambleL();

	/* 
	* Implementation of CTestStep virtual functions, uninstalls and removes the CActiveScheduler
	*/
	virtual TVerdict doTestStepPostambleL();

	/* delete a file */
	TInt Delete(const TDesC& aFile);

protected:
	/* 
	* Open the file and read data into the buffer up until the length of the buffer
	* aBuffer.Length() will be set to the length of data read
	* @param aFileName the file to read from
	* @param aBuffer the buffer to read into
	*/
	void ReadBufferL(TDesC16& aFileName, TDes8& aBuffer);

	/* Starts the Apparc server (for use by CSupplier tests)
	*/
	void StartApparcServerL();

	CApaDataRecognizerType *iRecognizer;
	
	/** Is called to initialise the following parameters
	 */ 
	void  InitialiseFileHandleParametersL();
	
	RFs		iFs;
	RFile	iFile;
	TPtrC	iUri;
	TPtrC	iUniqueId;
	TInt	iExpectedResult;
	
private:
	CActiveScheduler *iActiveScheduler;
	TUid iDtorIDKey;
	};

#endif
