// 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 "Symbian Foundation License v1.0"
// which accompanies this distribution, and is available
// at the URL "http://www.symbianfoundation.org/legal/sfl-v10.html".
//
// Initial Contributors:
// Nokia Corporation - initial contribution.
//
// Contributors:
//
// Description:
// This contains CTestMessBase which is the base class for all 
// messaging test steps
// 
//


#if (!defined __TEST_MESS_BASE_H__)
#define __TEST_MESS_BASE_H__

#include "Configuration.cfg"

#include <msvapi.h>
#include <SmutHdr.h>
#include <TestExecuteStepBase.h>
#include <EMSFormatIE.h>
#include <EMSSoundIE.h>
#include <EMSAnimationIE.h>
#include <IAPPrefs.h>

#include "TestMessProcessor.h"
#include "TestMessTimer.h"

#include <smut.h>
#include <Smutset.h>
#include <etelmm.h>
#if (defined CDMA_API_ENABLED)
#include <SmsMessageWrappers.h>
#include <SmsMessageSettings.h>
#endif
#include <SmutHdr.h>

#include <TestStepSmokeTest.h>
//To check whether the reply quoted is set
_LIT(KReplyQuoted,		"SmsReplyQuoted");

const TUid KUidMsvSMSHeaderStream				= {0x10001834};
const TUid KUidMsgFileInternetAccessPreferences	= {0x1000924B};
const TUid KUidMsvDefaultServices				= {0x100017FD};

const TInt	KOneSecond = 1000000;

class	CParaFormatLayer;
class 	CCharFormatLayer;
class 	CRichText;

class CTestMessBase : public CTestStepSmokeTest, private MMsvSessionObserver
	{
public:
	CTestMessBase(TBool aSetDirectory);
	virtual ~CTestMessBase();

	virtual TVerdict	doTestStepPreambleL();
	virtual TVerdict	doTestStepPostambleL();

	void							SetEntryL(TMsvId	aId);
	CMsvEntry&						EntryL();
	TBool							HasEntry() const { return iEntry!=NULL; }
	const TMsvSelectionOrdering&	SelectionOrdering() const { return iOrder; }
	CMsvSession&					Session() const { return *iSession; }
	void							PrintEntryL(CMsvEntry& aEntry);
	CEmsPreDefSoundIE*				NewPreDefSoundL(const TDesC& aPreDefType);


protected:
	//	MMsvSessionObserver
	void			HandleSessionEventL(TMsvSessionEvent, TAny*, TAny*, TAny*);

	//	Utilities
	static HBufC8*	CopyToBuf8LC(const TDesC& aPtrC);
	static HBufC*	CopyToBufLC(const TDesC8& aPtr8);
	void			PrintTreeL(TMsvId aRoot);
	void			IssueTimerRequest();


	void			PrepareSmsHeaderFromIniFileL(CSmsHeader& aSmsHeader);

	//reads the schedule time from ini file
	TTimeIntervalMinutes	ReadScheduleTime();

private:
	//	PrintEntry helper functions
	void			PrintStoreL(CMsvEntry& aEntry);
	void			PrintStoreSmtpL(CMsvEntry& aEntry);
	void			PrintStorePop3L(CMsvEntry& aEntry);
	void			PrintStoreImap4L(CMsvEntry& aEntry);
	void			PrintStoreSmsL(CMsvEntry& aEntry);

	//	PrepareSmsHeaderFromIniFileL helper functions
	void			SetAlignmentFormat(CEmsFormatIE& aEmsFormatIE, const TDesC& aAlignment);
	void			SetFontSizeFormat(CEmsFormatIE& aEmsFormatIE, const TDesC& aFontSize);

	CEmsPreDefAnimationIE*	NewPreDefAnimationL(const TDesC& aPreDefType);
	CFbsBitmap*				NewBitmapL(const TParse& aFileName, const TDesC& aObjectSize);

protected:
	CMsvSession*				iSession;
	CTestMessProcessor*			iMessageProcessor;
	CParaFormatLayer*			iParaFormatLayer;
 	CCharFormatLayer*			iCharFormatLayer;
 	CRichText*					iBodyText;
    TBool						iBodyAvailable;


private:
    TBool						iCheckForSim;
	TBool						iSetDirectory;
	CTestMessTimer*				iMessageTimer;
	CActiveScheduler*			iSchedular;
	CMsvEntry*					iEntry;
	TMsvSelectionOrdering		iOrder;
	};

#endif /* __TEST_MESS_BASE_H__ */
