mmlibs/mmfw/tsrc/mmfunittest/MidiClnt/TestMidiClientUtility.h
changeset 0 40261b775718
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mmlibs/mmfw/tsrc/mmfunittest/MidiClnt/TestMidiClientUtility.h	Tue Feb 02 01:56:55 2010 +0200
@@ -0,0 +1,1585 @@
+// Copyright (c) 2004-2009 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:
+// Header file: Basic  tests.
+// 
+//
+
+/**
+ @file TESTMIDICLIENTUTILITY.h
+*/
+
+#ifndef TESTMIDICLIENTUTILITY_H__
+#define TESTMIDICLIENTUTILITY_H__
+
+#include <caf/caf.h>
+#include "TSU_MMFMIDICLNT.h"
+
+_LIT(KMidiFileName,"C:\\MidiClntITestData\\midi.mid");
+
+enum TMmcuoCallbacks
+{
+	EMmcuoTempoChanged,
+	EMmcuoVolumeChanged,
+	EMmcuoMuteChanged,
+	EMmcuoPolyphonyChanged,
+	EMmcuoInstrumentChanged,
+	EMmcuoSyncUpdate,
+	EMmcuoMetaDataEntryFound,
+	EMmcuoMipMessageReceived,
+	EMmcuoInvalid
+};
+
+
+/**
+ * Load and initialise a midi file.
+ *
+ * @class CTestMidiClntOpenFile
+ *
+ * Req. under test 
+ */
+class CTestMidiClntOpenFile : public CTestMmfMidiClntStep
+	{
+public:
+	CTestMidiClntOpenFile(const TDesC& aTestName, const TDesC& aSectName,const TDesC& aKeyName,const TBool aPlay);
+	~CTestMidiClntOpenFile() {};
+	static CTestMidiClntOpenFile* NewL(const TDesC& aTestName,const TDesC& aSectName,const TDesC& aKeyName,const TBool aPlay);
+	// From Base Class
+	virtual TVerdict DoTestStepL();
+	virtual TVerdict DoTestL(CMidiClientUtility* aMidi);
+
+protected:
+	TBuf<KNameBufSize> iSectName;			// Section name for retrieving filename
+	TBuf<KNameBufSize> iKeyName;			// Key name for retrieving filename
+	const TBool iPlay;						// Does this test require playing the Audio file 
+	TTimeIntervalMicroSeconds iDuration;	// Stores duration of Audio file
+
+	};
+
+/**
+ * Load and initialise a midi file.
+ *
+ * @class CTestMidiClntOpenDes
+ *
+ * Req. under test 
+ */
+class CTestMidiClntOpenDes : public CTestMmfMidiClntStep
+	{
+public:
+	CTestMidiClntOpenDes(const TDesC& aTestName, const TDesC& aSectName,const TDesC& aKeyName,const TBool aPlay);
+	~CTestMidiClntOpenDes() {};
+	static CTestMidiClntOpenDes* NewL(const TDesC& aTestName,const TDesC& aSectName,const TDesC& aKeyName,const TBool aPlay);
+	// From Base Class
+	virtual TVerdict DoTestStepL();
+	virtual TVerdict DoTestStepPreambleL();
+	virtual TVerdict DoTestStepPostambleL();
+	virtual TVerdict DoTestL(CMidiClientUtility* aMidi);
+
+protected:
+	TBuf<KNameBufSize> iSectName;			// Section name for retrieving filename
+	TBuf<KNameBufSize> iKeyName;			// Key name for retrieving filename
+	const TBool iPlay;						// Does this test require playing the Audio file 
+	TTimeIntervalMicroSeconds iDuration;	// Stores duration of Audio file
+	HBufC8* iAudio;							// Buffer for holding audio descriptor data
+	};
+
+/**
+ * Load and initialise a midi file.
+ *
+ * @class CTestMidiClntOpenUrl
+ *
+ * Req. under test 
+ */
+class CTestMidiClntOpenUrl : public CTestMmfMidiClntStep
+	{
+public:
+	CTestMidiClntOpenUrl(const TDesC& aTestName, const TDesC& aSectName,const TDesC& aKeyName,const TBool aPlay);
+	~CTestMidiClntOpenUrl() {};
+	static CTestMidiClntOpenUrl* NewL(const TDesC& aTestName,const TDesC& aSectName,const TDesC& aKeyName,const TBool aPlay);
+	// From Base Class
+	virtual TVerdict DoTestStepL();
+	virtual TVerdict DoTestL(CMidiClientUtility* aMidi);
+
+protected:
+	TBuf<KNameBufSize> iSectName;			// Section name for retrieving filename
+	TBuf<KNameBufSize> iKeyName;			// Key name for retrieving filename
+	const TBool iPlay;						// Does this test require playing the Audio file 
+	TTimeIntervalMicroSeconds iDuration;	// Stores duration of Audio file
+	};
+
+/**
+ * Close a midi file.
+ *
+ * @class CTestMidiClntClose
+ *
+ * Req. under test 
+ */
+class CTestMidiClntClose : public CTestMmfMidiClntStep
+	{
+public:
+	static CTestMidiClntClose* NewL(const TDesC& aTestName);
+	virtual TVerdict DoTestL(CMidiClientUtility* aMidi);
+private:
+	CTestMidiClntClose(const TDesC& aTestName);
+	~CTestMidiClntClose() {};
+	};
+
+/**
+ * Play a midi file.
+ *
+ * @class CTestMidiClntPlay
+ *
+ * Req. under test 
+ */
+class CTestMidiClntPlay : public CTestMmfMidiClntStep
+	{
+public:
+	static CTestMidiClntPlay* NewL(const TDesC& aTestName, const TTestStepType aTestType);
+	virtual TVerdict DoTestL(CMidiClientUtility* aMidi);
+private:
+	CTestMidiClntPlay(const TDesC& aTestName, const TTestStepType aTestType);
+	~CTestMidiClntPlay() {};
+	};
+
+/**
+ * Stop a midi file.
+ *
+ * @class CTestMidiClntStop
+ *
+ * Req. under test 
+ */
+class CTestMidiClntStop : public CTestMmfMidiClntStep
+	{
+public:
+	static CTestMidiClntStop* NewL(const TDesC& aTestName, const TTestStepType aTestType);
+	virtual TVerdict DoTestL(CMidiClientUtility* aMidi);
+private:
+	CTestMidiClntStop(const TDesC& aTestName, const TTestStepType aTestType);
+	~CTestMidiClntStop() {};
+	};
+
+/**
+ * Returns the state of the midi device.
+ *
+ * @class CTestMidiClntGetState
+ *
+ * Req. under test 
+ */
+class CTestMidiClntGetState : public CTestMidiClntOpenFile // ** N.B.
+	{
+public:
+	static CTestMidiClntGetState* NewL(const TDesC& aTestName, const TDesC& aSectName,const TDesC& aKeyName,
+									   const TTestStepType aTestType, const TBool aPlay);
+	virtual TVerdict DoTestL(CMidiClientUtility* aMidi);
+private:
+	CTestMidiClntGetState(const TDesC& aTestName, const TDesC& aSectName,const TDesC& aKeyName,
+						  const TTestStepType aTestType, const TBool aPlay);
+	~CTestMidiClntGetState() {};
+	};
+
+/**
+ * Play midi note.
+ *
+ * @class CTestMidiClntPlayNote
+ *
+ * Req. under test 
+ */
+class CTestMidiClntPlayNote : public CTestMmfMidiClntStep
+	{
+public:
+	static CTestMidiClntPlayNote* NewL(const TDesC& aTestName, const TTestStepType aTestType);
+	virtual TVerdict DoTestL(CMidiClientUtility* aMidi);
+private:
+	CTestMidiClntPlayNote(const TDesC& aTestName, const TTestStepType aTestType);
+	~CTestMidiClntPlayNote() {};
+	};
+
+/**
+ * Play midi note with start time.
+ *
+ * @class CTestMidiClntPlayNoteStartTime
+ *
+ * Req. under test 
+ */
+class CTestMidiClntPlayNoteStartTime : public CTestMmfMidiClntStep
+	{
+public:
+	static CTestMidiClntPlayNoteStartTime* NewL(const TDesC& aTestName, const TTestStepType aTestType);
+	virtual TVerdict DoTestL(CMidiClientUtility* aMidi);
+private:
+	CTestMidiClntPlayNoteStartTime(const TDesC& aTestName, const TTestStepType aTestType);
+	~CTestMidiClntPlayNoteStartTime() {};
+	};
+
+/**
+ * Stop midi note.
+ *
+ * @class CTestMidiClntStopNotes
+ *
+ * Req. under test 
+ */
+class CTestMidiClntStopNotes : public CTestMmfMidiClntStep
+	{
+public:
+	static CTestMidiClntStopNotes* NewL(const TDesC& aTestName, const TTestStepType aTestType);
+	virtual TVerdict DoTestL(CMidiClientUtility* aMidi);
+private:
+	CTestMidiClntStopNotes(const TDesC& aTestName, const TTestStepType aTestType);
+	~CTestMidiClntStopNotes() {};
+	};
+
+/**
+ * Midi note on.
+ *
+ * @class CTestMidiClntNoteOn
+ *
+ * Req. under test 
+ */
+class CTestMidiClntNoteOn : public CTestMmfMidiClntStep
+	{
+public:
+	static CTestMidiClntNoteOn* NewL(const TDesC& aTestName, const TTestStepType aTestType);
+	virtual TVerdict DoTestL(CMidiClientUtility* aMidi);
+private:
+	CTestMidiClntNoteOn(const TDesC& aTestName, const TTestStepType aTestType);
+	~CTestMidiClntNoteOn() {};
+	};
+
+/**
+ * Midi note off.
+ *
+ * @class CTestMidiClntNoteOff
+ *
+ * Req. under test 
+ */
+class CTestMidiClntNoteOff : public CTestMmfMidiClntStep
+	{
+public:
+	static CTestMidiClntNoteOff* NewL(const TDesC& aTestName, const TTestStepType aTestType);
+	virtual TVerdict DoTestL(CMidiClientUtility* aMidi);
+private:
+	CTestMidiClntNoteOff(const TDesC& aTestName, const TTestStepType aTestType);
+	~CTestMidiClntNoteOff() {};
+	};
+
+/**
+ * Returns play back rate of the midi device.
+ *
+ * @class CTestMidiClntReturnPlaybackRate
+ *
+ * Req. under test 
+ */
+class CTestMidiClntReturnPlaybackRate : public CTestMmfMidiClntStep
+	{
+public:
+	static CTestMidiClntReturnPlaybackRate* NewL(const TDesC& aTestName, const TTestStepType aTestType);
+	virtual TVerdict DoTestL(CMidiClientUtility* aMidi);
+private:
+	CTestMidiClntReturnPlaybackRate(const TDesC& aTestName, const TTestStepType aTestType);
+	~CTestMidiClntReturnPlaybackRate() {};
+	};
+
+/**
+ * Sets the play back rate of the midi device.
+ *
+ * @class CTestMidiClntSetPlaybackRate
+ *
+ * Req. under test 
+ */
+class CTestMidiClntSetPlaybackRate : public CTestMmfMidiClntStep
+	{
+public:
+	static CTestMidiClntSetPlaybackRate* NewL(const TDesC& aTestName, const TTestStepType aTestType);
+	virtual TVerdict DoTestL(CMidiClientUtility* aMidi);
+private:
+	CTestMidiClntSetPlaybackRate(const TDesC& aTestName, const TTestStepType aTestType);
+	~CTestMidiClntSetPlaybackRate() {};
+	};
+
+/**
+ * Returns the max play rate of the midi device.
+ *
+ * @class CTestMidiClntReturnMaxPlayRate
+ *
+ * Req. under test 
+ */
+class CTestMidiClntReturnMaxPlayRate : public CTestMmfMidiClntStep
+	{
+public:
+	static CTestMidiClntReturnMaxPlayRate* NewL(const TDesC& aTestName, const TTestStepType aTestType);
+	virtual TVerdict DoTestL(CMidiClientUtility* aMidi);
+private:
+	CTestMidiClntReturnMaxPlayRate(const TDesC& aTestName, const TTestStepType aTestType);
+	~CTestMidiClntReturnMaxPlayRate() {};
+	};
+
+/**
+ * Returns the min play rate of the midi device.
+ *
+ * @class CTestMidiClntReturnMinPlayRate
+ *
+ * Req. under test 
+ */
+class CTestMidiClntReturnMinPlayRate : public CTestMmfMidiClntStep
+	{
+public:
+	static CTestMidiClntReturnMinPlayRate* NewL(const TDesC& aTestName, const TTestStepType aTestType);
+	virtual TVerdict DoTestL(CMidiClientUtility* aMidi);
+private:
+	CTestMidiClntReturnMinPlayRate(const TDesC& aTestName, const TTestStepType aTestType);
+	~CTestMidiClntReturnMinPlayRate() {};
+	};
+
+/**
+ * Sets the micro bpm (beats per minute)
+ *
+ * @class CTestMidiClntTempoMicroBeatsPerMinute
+ *
+ * Req. under test 
+ */
+class CTestMidiClntTempoMicroBeatsPerMinute : public CTestMmfMidiClntStep
+	{
+public:
+	static CTestMidiClntTempoMicroBeatsPerMinute* NewL(const TDesC& aTestName, const TTestStepType aTestType);
+	virtual TVerdict DoTestL(CMidiClientUtility* aMidi);
+private:
+	CTestMidiClntTempoMicroBeatsPerMinute(const TDesC& aTestName, const TTestStepType aTestType);
+	~CTestMidiClntTempoMicroBeatsPerMinute() {};
+	};
+
+/**
+ * Sets the tempo micro bpm (beats per minute)
+ *
+ * @class CTestMidiClntSetTempo
+ *
+ * Req. under test 
+ */
+class CTestMidiClntSetTempo : public CTestMmfMidiClntStep
+	{
+public:
+	static CTestMidiClntSetTempo* NewL(const TDesC& aTestName, const TTestStepType aTestType);
+	virtual TVerdict DoTestL(CMidiClientUtility* aMidi);
+private:
+	CTestMidiClntSetTempo(const TDesC& aTestName, const TTestStepType aTestType);
+	~CTestMidiClntSetTempo() {};
+	};
+
+/**
+ * Get Pitch Transposition in Cents
+ *
+ * @class CTestMidiClntGetPitchTranspositionCents
+ *
+ * Req. under test 
+ */
+class CTestMidiClntGetPitchTranspositionCents : public CTestMmfMidiClntStep
+	{
+public:
+	static CTestMidiClntGetPitchTranspositionCents* NewL(const TDesC& aTestName, const TTestStepType aTestType);
+	virtual TVerdict DoTestL(CMidiClientUtility* aMidi);
+private:
+	CTestMidiClntGetPitchTranspositionCents(const TDesC& aTestName, const TTestStepType aTestType);
+	~CTestMidiClntGetPitchTranspositionCents() {};
+private:
+	TInt iTestType;
+	};
+
+/**
+ * Set Pitch Transposition in Cents
+ *
+ * @class CTestMidiClntSetPitchTransposition
+ *
+ * Req. under test 
+ */
+class CTestMidiClntSetPitchTransposition : public CTestMmfMidiClntStep
+	{
+public:
+	static CTestMidiClntSetPitchTransposition* NewL(const TDesC& aTestName, const TTestStepType aTestType);
+	virtual TVerdict DoTestL(CMidiClientUtility* aMidi);
+private:
+	CTestMidiClntSetPitchTransposition(const TDesC& aTestName, const TTestStepType aTestType);
+	~CTestMidiClntSetPitchTransposition() {};
+	};
+
+/**
+ * Return duration in micro seconds
+ *
+ * @class CTestMidiClntDurationMicroSeconds
+ *
+ * Req. under test 
+ */
+class CTestMidiClntDurationMicroSeconds : public CTestMmfMidiClntStep
+	{
+public:
+	static CTestMidiClntDurationMicroSeconds* NewL(const TDesC& aTestName, const TTestStepType aTestType);
+	virtual TVerdict DoTestL(CMidiClientUtility* aMidi);
+private:
+	CTestMidiClntDurationMicroSeconds(const TDesC& aTestName, const TTestStepType aTestType);
+	~CTestMidiClntDurationMicroSeconds() {};
+	};
+
+/**
+ * Return duration in micro beats
+ *
+ * @class CTestMidiClntDurationMicroBeats
+ *
+ * Req. under test 
+ */
+class CTestMidiClntDurationMicroBeats : public CTestMmfMidiClntStep
+	{
+public:
+	static CTestMidiClntDurationMicroBeats* NewL(const TDesC& aTestName, const TTestStepType aTestType);
+	virtual TVerdict DoTestL(CMidiClientUtility* aMidi);
+private:
+	CTestMidiClntDurationMicroBeats(const TDesC& aTestName, const TTestStepType aTestType);
+	~CTestMidiClntDurationMicroBeats() {};
+	};
+
+/**
+ * Return number of tracks
+ *
+ * @class CTestMidiClntNumTracks
+ *
+ * Req. under test 
+ */
+class CTestMidiClntNumTracks : public CTestMmfMidiClntStep
+	{
+public:
+	static CTestMidiClntNumTracks* NewL(const TDesC& aTestName, const TTestStepType aTestType);
+	virtual TVerdict DoTestL(CMidiClientUtility* aMidi);
+private:
+	CTestMidiClntNumTracks(const TDesC& aTestName, const TTestStepType aTestType);
+	~CTestMidiClntNumTracks() {};
+	};
+
+/**
+ * Mute track
+ *
+ * @class CTestMidiClntSetTrackMute
+ *
+ * Req. under test 
+ */
+class CTestMidiClntSetTrackMute : public CTestMmfMidiClntStep
+	{
+public:
+	static CTestMidiClntSetTrackMute* NewL(const TDesC& aTestName, const TTestStepType aTestType);
+	virtual TVerdict DoTestL(CMidiClientUtility* aMidi);
+private:
+	CTestMidiClntSetTrackMute(const TDesC& aTestName, const TTestStepType aTestType);
+	~CTestMidiClntSetTrackMute() {};
+	};
+
+/**
+ * Returns MimeType
+ *
+ * @class CTestMidiClntMimeType
+ *
+ * Req. under test 
+ */
+class CTestMidiClntMimeType : public CTestMmfMidiClntStep
+	{
+public:
+	static CTestMidiClntMimeType* NewL(const TDesC& aTestName, const TTestStepType aTestType);
+	virtual TVerdict DoTestL(CMidiClientUtility* aMidi);
+private:
+	CTestMidiClntMimeType(const TDesC& aTestName, const TTestStepType aTestType);
+	~CTestMidiClntMimeType() {};
+	};
+
+/**
+ * Returns MimeTypes Supported
+ *
+ * @class CTestMidiClntGetMimeTypesSupported
+ *
+ * Req. under test 
+ */
+class CTestMidiClntGetMimeTypesSupported : public CTestMmfMidiClntStep
+	{
+public:
+	static CTestMidiClntGetMimeTypesSupported* NewL(const TDesC& aTestName, const TTestStepType aTestType);
+	virtual TVerdict DoTestL(CMidiClientUtility* aMidi);
+private:
+	CTestMidiClntGetMimeTypesSupported(const TDesC& aTestName, const TTestStepType aTestType);
+	~CTestMidiClntGetMimeTypesSupported() {};
+	};
+
+/**
+ * Sets position in micro seconds
+ *
+ * @class CTestMidiClntPositionMicroSeconds
+ *
+ * Req. under test 
+ */
+class CTestMidiClntPositionMicroSeconds : public CTestMmfMidiClntStep
+	{
+public:
+	static CTestMidiClntPositionMicroSeconds* NewL(const TDesC& aTestName, const TTestStepType aTestType);
+	virtual TVerdict DoTestL(CMidiClientUtility* aMidi);
+private:
+	CTestMidiClntPositionMicroSeconds(const TDesC& aTestName, const TTestStepType aTestType);
+	~CTestMidiClntPositionMicroSeconds() {};
+	};
+
+/**
+ * Returns position in micro seconds
+ *
+ * @class CTestMidiClntReturnPositionMicroSeconds
+ *
+ * Req. under test 
+ */
+class CTestMidiClntReturnPositionMicroSeconds : public CTestMmfMidiClntStep
+	{
+public:
+	static CTestMidiClntReturnPositionMicroSeconds* NewL(const TDesC& aTestName, const TTestStepType aTestType);
+	virtual TVerdict DoTestL(CMidiClientUtility* aMidi);
+private:
+	CTestMidiClntReturnPositionMicroSeconds(const TDesC& aTestName, const TTestStepType aTestType);
+	~CTestMidiClntReturnPositionMicroSeconds() {};
+	};
+
+/**
+ * Sets position in micro seconds
+ *
+ * @class CTestMidiClntSetPositionMicroSeconds
+ *
+ * Req. under test 
+ */
+class CTestMidiClntSetPositionMicroSeconds : public CTestMmfMidiClntStep
+	{
+public:
+	static CTestMidiClntSetPositionMicroSeconds* NewL(const TDesC& aTestName, const TTestStepType aTestType);
+	virtual TVerdict DoTestL(CMidiClientUtility* aMidi);
+private:
+	CTestMidiClntSetPositionMicroSeconds(const TDesC& aTestName, const TTestStepType aTestType);
+	~CTestMidiClntSetPositionMicroSeconds() {};
+	};
+
+/**
+ * Returns position in micro beats
+ *
+ * @class CTestMidiClntReturnsPositionMicroBeats
+ *
+ * Req. under test 
+ */
+class CTestMidiClntReturnsPositionMicroBeats : public CTestMmfMidiClntStep
+	{
+public:
+	static CTestMidiClntReturnsPositionMicroBeats* NewL(const TDesC& aTestName, const TTestStepType aTestType);
+	virtual TVerdict DoTestL(CMidiClientUtility* aMidi);
+private:
+	CTestMidiClntReturnsPositionMicroBeats(const TDesC& aTestName, const TTestStepType aTestType);
+	~CTestMidiClntReturnsPositionMicroBeats() {};
+	};
+
+/**
+ * Sets position in micro beats
+ *
+ * @class CTestMidiClntSetPositionMicroBeats
+ *
+ * Req. under test 
+ */
+class CTestMidiClntSetPositionMicroBeats : public CTestMmfMidiClntStep
+	{
+public:
+	static CTestMidiClntSetPositionMicroBeats* NewL(const TDesC& aTestName, const TTestStepType aTestType);
+	virtual TVerdict DoTestL(CMidiClientUtility* aMidi);
+private:
+	CTestMidiClntSetPositionMicroBeats(const TDesC& aTestName, const TTestStepType aTestType);
+	~CTestMidiClntSetPositionMicroBeats() {};
+	};
+
+/**
+ * Sets the sync update call back interval
+ *
+ * @class CTestSetSyncUpdateCallbackInterval
+ *
+ * Req. under test 
+ */
+class CTestSetSyncUpdateCallbackInterval : public CTestMmfMidiClntStep
+	{
+public:
+	static CTestSetSyncUpdateCallbackInterval* NewL(const TDesC& aTestName, const TTestStepType aTestType);
+	virtual TVerdict DoTestL(CMidiClientUtility* aMidi);
+private:
+	CTestSetSyncUpdateCallbackInterval(const TDesC& aTestName, const TTestStepType aTestType);
+	~CTestSetSyncUpdateCallbackInterval() {};
+	};
+
+// -----------------------------------------------------------------------------------------------
+
+/**
+ * Send a midi message
+ *
+ * @class CTestSendMessage
+ *
+ * Req. under test 
+ */
+class CTestSendMessage : public CTestMmfMidiClntStep
+	{
+public:
+	static CTestSendMessage* NewL(const TDesC& aTestName,
+								  const TTestStepType aTestType, const TDesC8& aMessage);
+	virtual TVerdict DoTestL(CMidiClientUtility* aMidi);
+private:
+	CTestSendMessage(const TDesC& aTestName,
+					 const TTestStepType aTestType, const TDesC8& aMessage);
+	~CTestSendMessage() {};
+
+private:
+	TBuf8<KNameBufSize> iMessage;
+	};
+
+// class CTestSendMessageTime incorporated in CTestSendMessage
+
+/**
+ * Send a Mip (Maximum Instantenous Polyphony) message
+ *
+ * @class CTestSendMipMessage
+ *
+ * Req. under test 
+ */
+class CTestSendMipMessage : public CTestMmfMidiClntStep
+	{
+public:
+	static CTestSendMipMessage* NewL(const TDesC& aTestName,
+								  const TTestStepType aTestType);
+	virtual TVerdict DoTestL(CMidiClientUtility* aMidi);
+private:
+	CTestSendMipMessage(const TDesC& aTestName,
+					 const TTestStepType aTestType);
+	~CTestSendMipMessage() {};
+
+	};
+
+/**
+ * Number of banks
+ *
+ * @class CTestNumberOfBanks
+ *
+ * Req. under test 
+ */
+class CTestNumberOfBanks : public CTestMmfMidiClntStep
+	{
+public:
+	static CTestNumberOfBanks* NewL(const TDesC& aTestName,
+								  const TTestStepType aTestType);
+	virtual TVerdict DoTestL(CMidiClientUtility* aMidi);
+private:
+	CTestNumberOfBanks(const TDesC& aTestName,
+								  const TTestStepType aTestType);
+	~CTestNumberOfBanks() {};
+	};
+
+/**
+ * Return bank id
+ *
+ * @class CTestGetBankId
+ *
+ * Req. under test 
+ */
+class CTestGetBankId : public CTestMmfMidiClntStep
+	{
+public:
+	static CTestGetBankId* NewL(const TDesC& aTestName,
+								  const TTestStepType aTestType);
+	virtual TVerdict DoTestL(CMidiClientUtility* aMidi);
+private:
+	CTestGetBankId(const TDesC& aTestName,
+								  const TTestStepType aTestType);
+	~CTestGetBankId() {};
+	};
+
+/**
+ * Load custom bank
+ *
+ * @class CTestLoadCustomBank
+ *
+ * Req. under test 
+ */
+class CTestLoadCustomBank : public CTestMmfMidiClntStep
+	{
+public:
+	static CTestLoadCustomBank* NewL(const TDesC& aTestName,
+								  const TTestStepType aTestType);
+	virtual TVerdict DoTestL(CMidiClientUtility* aMidi);
+private:
+	CTestLoadCustomBank(const TDesC& aTestName,
+								  const TTestStepType aTestType);
+	~CTestLoadCustomBank() {};
+	};
+
+/**
+ * Unload custom bank
+ *
+ * @class CTestUnloadCustomBank
+ *
+ * Req. under test 
+ */
+class CTestUnloadCustomBank : public CTestMmfMidiClntStep
+	{
+public:
+	static CTestUnloadCustomBank* NewL(const TDesC& aTestName, const TTestStepType aTestType);
+	virtual TVerdict DoTestL(CMidiClientUtility* aMidi);
+private:
+	CTestUnloadCustomBank(const TDesC& aTestName, const TTestStepType aTestType);
+	~CTestUnloadCustomBank() {};
+	};
+
+/**
+ * Unload all custom banks
+ *
+ * @class CTestUnloadAllCustomBanks
+ *
+ * Req. under test 
+ */
+class CTestUnloadAllCustomBanks : public CTestMmfMidiClntStep
+	{
+public:
+	static CTestUnloadAllCustomBanks* NewL(const TDesC& aTestName, const TTestStepType aTestType);
+	virtual TVerdict DoTestL(CMidiClientUtility* aMidi);
+private:
+	CTestUnloadAllCustomBanks(const TDesC& aTestName, const TTestStepType aTestType);
+	~CTestUnloadAllCustomBanks() {};
+	};
+
+/**
+ * Return the number of instruments
+ *
+ * @class CTestNumberOfInstruments
+ *
+ * Req. under test 
+ */
+class CTestNumberOfInstruments : public CTestMmfMidiClntStep
+	{
+public:
+	static CTestNumberOfInstruments* NewL(const TDesC& aTestName, const TTestStepType aTestType);
+	virtual TVerdict DoTestL(CMidiClientUtility* aMidi);
+private:
+	CTestNumberOfInstruments(const TDesC& aTestName, const TTestStepType aTestType);
+	~CTestNumberOfInstruments() {};
+	};
+
+/**
+ * Returns instrument id
+ *
+ * @class CTestGetInstrumentId
+ *
+ * Req. under test 
+ */
+class CTestGetInstrumentId : public CTestMmfMidiClntStep
+	{
+public:
+	static CTestGetInstrumentId* NewL(const TDesC& aTestName, const TTestStepType aTestType);
+	virtual TVerdict DoTestL(CMidiClientUtility* aMidi);
+private:
+	CTestGetInstrumentId(const TDesC& aTestName, const TTestStepType aTestType);
+	~CTestGetInstrumentId() {};
+	};
+
+/**
+ * Returns instrument name
+ *
+ * @class CTestReturnsInstrumentName
+ *
+ * Req. under test 
+ */
+class CTestReturnsInstrumentName : public CTestMmfMidiClntStep
+	{
+public:
+	static CTestReturnsInstrumentName* NewL(const TDesC& aTestName, const TTestStepType aTestType);
+	virtual TVerdict DoTestL(CMidiClientUtility* aMidi);
+private:
+	CTestReturnsInstrumentName(const TDesC& aTestName, const TTestStepType aTestType);
+	~CTestReturnsInstrumentName() {};
+	};
+
+/**
+ * Returns instrument
+ *
+ * @class CTestGetInstrument
+ *
+ * Req. under test 
+ */
+class CTestGetInstrument : public CTestMmfMidiClntStep
+	{
+public:
+	static CTestGetInstrument* NewL(const TDesC& aTestName, const TTestStepType aTestType);
+	virtual TVerdict DoTestL(CMidiClientUtility* aMidi);
+private:
+	CTestGetInstrument(const TDesC& aTestName, const TTestStepType aTestType);
+	~CTestGetInstrument() {};
+	};
+
+/**
+ * Set instrument
+ *
+ * @class CTestSetInstrument
+ *
+ * Req. under test 
+ */
+class CTestSetInstrument : public CTestMmfMidiClntStep
+	{
+public:
+	static CTestSetInstrument* NewL(const TDesC& aTestName, const TTestStepType aTestType);
+	virtual TVerdict DoTestL(CMidiClientUtility* aMidi);
+private:
+	CTestSetInstrument(const TDesC& aTestName, const TTestStepType aTestType);
+	~CTestSetInstrument() {};
+	};
+
+/**
+ * Load custom instrument
+ *
+ * @class CTestLoadCustomInstrument
+ *
+ * Req. under test 
+ */
+class CTestLoadCustomInstrument : public CTestMmfMidiClntStep
+	{
+public:
+	static CTestLoadCustomInstrument* NewL(const TDesC& aTestName, const TTestStepType aTestType);
+	virtual TVerdict DoTestL(CMidiClientUtility* aMidi);
+private:
+	CTestLoadCustomInstrument(const TDesC& aTestName, const TTestStepType aTestType);
+	~CTestLoadCustomInstrument() {};
+	};
+
+
+/**
+ * Load custom instrument data
+ *
+ * @class CTestLoadCustomInstrumentData
+ *
+ * Req. under test 
+ */
+class CTestLoadCustomInstrumentData : public CTestMmfMidiClntStep
+	{
+public:
+	static CTestLoadCustomInstrumentData* NewL(const TDesC& aTestName, const TTestStepType aTestType);
+	virtual TVerdict DoTestL(CMidiClientUtility* aMidi);
+private:
+	CTestLoadCustomInstrumentData(const TDesC& aTestName, const TTestStepType aTestType);
+	~CTestLoadCustomInstrumentData() {};
+	};
+
+
+/**
+ * Unload custom instrument
+ *
+ * @class CTestUnloadCustomInstrument
+ *
+ * Req. under test 
+ */
+class CTestUnloadCustomInstrument : public CTestMmfMidiClntStep
+	{
+public:
+	static CTestUnloadCustomInstrument* NewL(const TDesC& aTestName, const TTestStepType aTestType);
+	virtual TVerdict DoTestL(CMidiClientUtility* aMidi);
+private:
+	CTestUnloadCustomInstrument(const TDesC& aTestName, const TTestStepType aTestType);
+	~CTestUnloadCustomInstrument() {};
+	};
+
+/**
+ * Get percussion key name
+ *
+ * @class CTestPercussionKeyName
+ *
+ * Req. under test 
+ */
+class CTestPercussionKeyName : public CTestMmfMidiClntStep
+	{
+public:
+	static CTestPercussionKeyName* NewL(const TDesC& aTestName, const TTestStepType aTestType);
+	virtual TVerdict DoTestL(CMidiClientUtility* aMidi);
+private:
+	CTestPercussionKeyName(const TDesC& aTestName, const TTestStepType aTestType);
+	~CTestPercussionKeyName() {};
+	};
+
+/**
+ * Stop time
+ *
+ * @class CTestStopTime
+ *
+ * Req. under test 
+ */
+class CTestStopTime : public CTestMmfMidiClntStep
+	{
+public:
+	static CTestStopTime* NewL(const TDesC& aTestName, const TTestStepType aTestType);
+	virtual TVerdict DoTestL(CMidiClientUtility* aMidi);
+private:
+	CTestStopTime(const TDesC& aTestName, const TTestStepType aTestType);
+	~CTestStopTime() {};
+	};
+
+/**
+ * Set stop time
+ *
+ * @class CTestSetStopTime
+ *
+ * Req. under test 
+ */
+class CTestSetStopTime : public CTestMmfMidiClntStep
+	{
+public:
+	static CTestSetStopTime* NewL(const TDesC& aTestName, const TTestStepType aTestType);
+	virtual TVerdict DoTestL(CMidiClientUtility* aMidi);
+private:
+	CTestSetStopTime(const TDesC& aTestName, const TTestStepType aTestType);
+	~CTestSetStopTime() {};
+	};
+
+/**
+ * Set the number of repeats
+ *
+ * @class CTestSetRepeats
+ *
+ * Req. under test 
+ */
+class CTestSetRepeats : public CTestMmfMidiClntStep
+	{
+public:
+	static CTestSetRepeats* NewL(const TDesC& aTestName, const TTestStepType aTestType);
+	virtual TVerdict DoTestL(CMidiClientUtility* aMidi);
+private:
+	CTestSetRepeats(const TDesC& aTestName, const TTestStepType aTestType);
+	~CTestSetRepeats() {};
+	};
+
+/**
+ * Returns the number of simultaneous voices a synth is able to play (polyphony)
+ *
+ * @class CTestPolyphony
+ *
+ * Req. under test 
+ */
+class CTestPolyphony : public CTestMmfMidiClntStep
+	{
+public:
+	static CTestPolyphony* NewL(const TDesC& aTestName, const TTestStepType aTestType);
+	virtual TVerdict DoTestL(CMidiClientUtility* aMidi);
+private:
+	CTestPolyphony(const TDesC& aTestName, const TTestStepType aTestType);
+	~CTestPolyphony() {};
+	};
+
+/**
+ * Returns channels supported
+ *
+ * @class CTestChannelsSupported
+ *
+ * Req. under test 
+ */
+class CTestChannelsSupported : public CTestMmfMidiClntStep
+	{
+public:
+	static CTestChannelsSupported* NewL(const TDesC& aTestName, const TTestStepType aTestType);
+	virtual TVerdict DoTestL(CMidiClientUtility* aMidi);
+private:
+	CTestChannelsSupported(const TDesC& aTestName, const TTestStepType aTestType);
+	~CTestChannelsSupported() {};
+	};
+
+/**
+ * Returns channel volume
+ *
+ * @class CTestReturnChannelVolume
+ *
+ * Req. under test 
+ */
+class CTestReturnChannelVolume : public CTestMmfMidiClntStep
+	{
+public:
+	static CTestReturnChannelVolume* NewL(const TDesC& aTestName, const TTestStepType aTestType);
+	virtual TVerdict DoTestL(CMidiClientUtility* aMidi);
+private:
+	CTestReturnChannelVolume(const TDesC& aTestName, const TTestStepType aTestType);
+	~CTestReturnChannelVolume() {};
+	};
+
+/**
+ * Returns max channel volume
+ *
+ * @class CTestMaxChannelVolume
+ *
+ * Req. under test 
+ */
+class CTestMaxChannelVolume : public CTestMmfMidiClntStep
+	{
+public:
+	static CTestMaxChannelVolume* NewL(const TDesC& aTestName, const TTestStepType aTestType);
+	virtual TVerdict DoTestL(CMidiClientUtility* aMidi);
+private:
+	CTestMaxChannelVolume(const TDesC& aTestName, const TTestStepType aTestType);
+	~CTestMaxChannelVolume() {};
+	};
+
+/**
+ * Sets channel volume
+ *
+ * @class CTestSetChannelVolume
+ *
+ * Req. under test 
+ */
+class CTestSetChannelVolume : public CTestMmfMidiClntStep
+	{
+public:
+	static CTestSetChannelVolume* NewL(const TDesC& aTestName, const TTestStepType aTestType);
+	virtual TVerdict DoTestL(CMidiClientUtility* aMidi);
+private:
+	CTestSetChannelVolume(const TDesC& aTestName, const TTestStepType aTestType);
+	~CTestSetChannelVolume() {};
+	};
+
+/**
+ * Mute channel volume
+ *
+ * @class CTestSetChannelMute
+ *
+ * Req. under test 
+ */
+class CTestSetChannelMute : public CTestMmfMidiClntStep
+	{
+public:
+	static CTestSetChannelMute* NewL(const TDesC& aTestName, const TTestStepType aTestType);
+	virtual TVerdict DoTestL(CMidiClientUtility* aMidi);
+private:
+	CTestSetChannelMute(const TDesC& aTestName, const TTestStepType aTestType);
+	~CTestSetChannelMute() {};
+	};
+
+/**
+ * Return volume
+ *
+ * @class CTestReturnVolume
+ *
+ * Req. under test 
+ */
+class CTestReturnVolume : public CTestMmfMidiClntStep
+	{
+public:
+	static CTestReturnVolume* NewL(const TDesC& aTestName, const TTestStepType aTestType);
+	virtual TVerdict DoTestL(CMidiClientUtility* aMidi);
+private:
+	CTestReturnVolume(const TDesC& aTestName, const TTestStepType aTestType);
+	~CTestReturnVolume() {};
+	};
+
+/**
+ * Return Max volume
+ *
+ * @class CTestMaxVolume
+ *
+ * Req. under test 
+ */
+class CTestReturnMaxVolume : public CTestMmfMidiClntStep
+	{
+public:
+	static CTestReturnMaxVolume* NewL(const TDesC& aTestName, const TTestStepType aTestType);
+	virtual TVerdict DoTestL(CMidiClientUtility* aMidi);
+private:
+	CTestReturnMaxVolume(const TDesC& aTestName, const TTestStepType aTestType);
+	~CTestReturnMaxVolume() {};
+	};
+
+/**
+ * Set volume
+ *
+ * @class CTestSetVolume
+ *
+ * Req. under test 
+ */
+class CTestSetVolume : public CTestMmfMidiClntStep
+	{
+public:
+	static CTestSetVolume* NewL(const TDesC& aTestName, const TTestStepType aTestType);
+	virtual TVerdict DoTestL(CMidiClientUtility* aMidi);
+private:
+	CTestSetVolume(const TDesC& aTestName, const TTestStepType aTestType);
+	~CTestSetVolume() {};
+	};
+
+/**
+ * Set volume ramp
+ *
+ * @class CTestSetVolumeRamp
+ *
+ * Req. under test 
+ */
+class CTestSetVolumeRamp : public CTestMmfMidiClntStep
+	{
+public:
+	static CTestSetVolumeRamp* NewL(const TDesC& aTestName, const TTestStepType aTestType);
+	virtual TVerdict DoTestL(CMidiClientUtility* aMidi);
+private:
+	CTestSetVolumeRamp(const TDesC& aTestName, const TTestStepType aTestType);
+	~CTestSetVolumeRamp() {};
+	};
+
+/**
+ * Returns balance
+ *
+ * @class CTestGetBalance
+ *
+ * Req. under test 
+ */
+class CTestGetBalance : public CTestMmfMidiClntStep
+	{
+public:
+	static CTestGetBalance* NewL(const TDesC& aTestName, const TTestStepType aTestType);
+	virtual TVerdict DoTestL(CMidiClientUtility* aMidi);
+private:
+	CTestGetBalance(const TDesC& aTestName, const TTestStepType aTestType);
+	~CTestGetBalance() {};
+	};
+
+/**
+ * Set balance
+ *
+ * @class CTestSetBalance
+ *
+ * Req. under test 
+ */
+class CTestSetBalance : public CTestMmfMidiClntStep
+	{
+public:
+	static CTestSetBalance* NewL(const TDesC& aTestName, const TTestStepType aTestType);
+	virtual TVerdict DoTestL(CMidiClientUtility* aMidi);
+private:
+	CTestSetBalance(const TDesC& aTestName, const TTestStepType aTestType);
+	~CTestSetBalance() {};
+	};
+
+/**
+ * Set priority
+ *
+ * @class CTestSetPriority
+ *
+ * Req. under test 
+ */
+class CTestSetPriority : public CTestMmfMidiClntStep
+	{
+public:
+	static CTestSetPriority* NewL(const TDesC& aTestName, const TTestStepType aTestType);
+	virtual TVerdict DoTestL(CMidiClientUtility* aMidi);
+private:
+	CTestSetPriority(const TDesC& aTestName, const TTestStepType aTestType);
+	~CTestSetPriority() {};
+	};
+
+/**
+ * Returns number of xmf meta data entries
+ *
+ * @class CTestNumberOfXmfMetaDataEntries
+ *
+ * Req. under test 
+ */
+class CTestNumberOfXmfMetaDataEntries : public CTestMmfMidiClntStep
+	{
+public:
+	static CTestNumberOfXmfMetaDataEntries* NewL(const TDesC& aTestName, const TTestStepType aTestType);
+	virtual TVerdict DoTestL(CMidiClientUtility* aMidi);
+private:
+	CTestNumberOfXmfMetaDataEntries(const TDesC& aTestName, const TTestStepType aTestType);
+	~CTestNumberOfXmfMetaDataEntries() {};
+	};
+
+/**
+ * Returns xmf meta data entry
+ *
+ * @class CTestGetXmfMetaDataEntry
+ *
+ * Req. under test 
+ */
+class CTestGetXmfMetaDataEntry : public CTestMmfMidiClntStep
+	{
+public:
+	static CTestGetXmfMetaDataEntry* NewL(const TDesC& aTestName, const TTestStepType aTestType);
+	virtual TVerdict DoTestL(CMidiClientUtility* aMidi);
+private:
+	CTestGetXmfMetaDataEntry(const TDesC& aTestName, const TTestStepType aTestType);
+	~CTestGetXmfMetaDataEntry() {};
+	};
+
+/**
+ * Loads instrument data
+ *
+ * @class CTestLoadInstrumentData
+ *
+ * Req. under test 
+ */
+class CTestLoadInstrumentData : public CTestMmfMidiClntStep
+	{
+public:
+	static CTestLoadInstrumentData* NewL(const TDesC& aTestName, const TTestStepType aTestType);
+	virtual TVerdict DoTestL(CMidiClientUtility* aMidi);
+private:
+	CTestLoadInstrumentData(const TDesC& aTestName, const TTestStepType aTestType);
+	~CTestLoadInstrumentData() {};
+	};
+
+
+/**
+ * Checks that we call the right function in the Midi test controller
+ *
+ * @class CTestCheckInterface
+ *
+ * Req. under test 
+ */
+class CTestCheckInterface : public CTestMmfMidiClntStep
+	{
+public:
+	static CTestCheckInterface* NewL(const TDesC& aTestName, const TTestStepType aTestType);
+	virtual TVerdict DoTestL(CMidiClientUtility* aMidi);
+private:
+	CTestCheckInterface(const TDesC& aTestName, const TTestStepType aTestType);
+	~CTestCheckInterface();
+	void Close();
+	TInt CompareInterface(const TDesC8& aInterfaceName);
+	void ConstructL(void);
+private:
+	RChunk iChunk;
+	RSemaphore iSemaphore;
+	};
+
+/**
+ * Load and initialise a midi file.
+ *
+ * @class CTestMidiClntOpenFileByHandle
+ *
+ * Req. under test 
+ */
+class CTestMidiClntOpenFileByHandle : public CTestMmfMidiClntStep
+	{
+public:
+	~CTestMidiClntOpenFileByHandle() {};
+	static CTestMidiClntOpenFileByHandle* NewL(const TDesC& aTestName,const TDesC& aSectName,const TDesC& aKeyName,const TBool aPlay, const TTestStepType aTestType);
+	// From Base Class
+	virtual TVerdict DoTestStepL();
+private:
+	CTestMidiClntOpenFileByHandle(const TDesC& aTestName, const TDesC& aSectName,const TDesC& aKeyName,const TBool aPlay, const TTestStepType aTestType);
+protected:
+	TBuf<KNameBufSize> iSectName;			// Section name for retrieving filename
+	TBuf<KNameBufSize> iKeyName;			// Key name for retrieving filename
+	const TBool iPlay;						// Does this test require playing the Audio file 
+	TTimeIntervalMicroSeconds iDuration;	// Stores duration of Audio file
+	};
+
+/**
+ * Play a midi file.
+ *
+ * @class CTestMidiClntPlayFileByHandle
+ *
+ * Req. under test 
+ */
+class CTestMidiClntPlayFileByHandle : public CTestMmfMidiClntStep
+	{
+public:
+	~CTestMidiClntPlayFileByHandle() {};
+	static CTestMidiClntPlayFileByHandle* NewL(const TDesC& aTestName);
+	// From Base Class
+	virtual TVerdict DoTestL(CMidiClientUtility* aMidi);
+private:
+	CTestMidiClntPlayFileByHandle(const TDesC& aTestName);
+	};
+	
+	
+/**
+ * Play a midi file and verify that no events are getting lost
+ *
+ * @class CTestMidiClntThirteenMidiEvents
+ *
+ * Req. under test 
+ */
+class CTestMidiClntThirteenMidiEvents : public CTestMmfMidiClntStep
+	{
+public:
+	static CTestMidiClntThirteenMidiEvents* NewL(const TDesC& aTestName, const TTestStepType aTestType);
+	virtual TVerdict DoTestL(CMidiClientUtility* aMidi);
+	
+	virtual void MmcuoTempoChanged(TInt aMicroBeatsPerMinute);
+	virtual void MmcuoVolumeChanged(TInt aChannel,TReal32 aVolumeInDecibels);
+	virtual void MmcuoMuteChanged(TInt aChannel,TBool aMuted);
+	virtual void MmcuoMetaDataEntryFound(const TInt aMetaDataEntryId,const TTimeIntervalMicroSeconds& aPosition);
+	virtual void MmcuoMipMessageReceived(const RArray<TMipMessageEntry>& aEntry);
+	virtual void MmcuoPolyphonyChanged(TInt aNewPolyphony);
+	virtual void MmcuoInstrumentChanged(TInt aChannel,TInt aBankId,TInt aInstrumentId);
+
+	void InitialiseExpectedTransArrayL();
+private:
+	CTestMidiClntThirteenMidiEvents(const TDesC& aTestName, const TTestStepType aTestType);
+	~CTestMidiClntThirteenMidiEvents() {};
+	
+	RArray<TMmcuoCallbacks> expectedTransitions;
+	TUint8 iCurrentTransion;
+	};
+	
+	
+/**
+ * Test the MIDI pluging state machine: transition from EMidiStateClosedDisengaged to EMidiStateClosedEngaged
+ *
+ * @class CTestTrasitionFromEClosedToEClosedEngaged
+ *
+ * Req. under test 
+ */
+class CTestTrasitionFromEClosedToEClosedEngaged : public CTestMmfMidiClntStep
+	{
+public:
+	static CTestTrasitionFromEClosedToEClosedEngaged* NewL(const TDesC& aTestName, const TTestStepType aTestType);
+	virtual TVerdict DoTestL(CMidiClientUtility* aMidi);
+	
+private:
+	CTestTrasitionFromEClosedToEClosedEngaged(const TDesC& aTestName, const TTestStepType aTestType);
+	~CTestTrasitionFromEClosedToEClosedEngaged() {};
+	};
+	
+
+/**
+ * Test the MIDI pluging state machine: transition from EMidiStateClosedDisengaged to EMidiStateOpenEngaged
+ *
+ * @class CTestTrasitionFromEClosedToEOpenEngaged
+ *
+ * Req. under test 
+ */
+class CTestTrasitionFromEClosedToEOpenEngaged : public CTestMmfMidiClntStep
+	{
+public:
+	static CTestTrasitionFromEClosedToEOpenEngaged* NewL(const TDesC& aTestName, const TTestStepType aTestType);
+	virtual TVerdict DoTestL(CMidiClientUtility* aMidi);
+	
+private:
+	CTestTrasitionFromEClosedToEOpenEngaged(const TDesC& aTestName, const TTestStepType aTestType);
+	~CTestTrasitionFromEClosedToEOpenEngaged() {};
+	};
+
+
+	
+/**
+ * Test the MIDI pluging state machine: transition from EMidiStateOpenEngaged to EMidiStateClosedEngaged
+ *
+ * @class CTestTrasitionFromEOpenEngagedToEClosedEngaged
+ *
+ * Req. under test 
+ */
+class CTestTrasitionFromEOpenEngagedToEClosedEngaged : public CTestMmfMidiClntStep
+	{
+public:
+	static CTestTrasitionFromEOpenEngagedToEClosedEngaged* NewL(const TDesC& aTestName, const TTestStepType aTestType);
+	virtual TVerdict DoTestL(CMidiClientUtility* aMidi);
+	
+private:
+	CTestTrasitionFromEOpenEngagedToEClosedEngaged(const TDesC& aTestName, const TTestStepType aTestType);
+	~CTestTrasitionFromEOpenEngagedToEClosedEngaged() {};
+	};
+
+
+/**
+ * Test the MIDI pluging state machine: transition from EMidiStateClosedEngaged to EMidiStateClosedDisengaged
+ *
+ * @class CTestTrasitionFromEClosedEngagedToEClosed
+ *
+ * Req. under test 
+ */
+class CTestTrasitionFromEClosedEngagedToEClosed : public CTestMmfMidiClntStep
+	{
+public:
+	static CTestTrasitionFromEClosedEngagedToEClosed* NewL(const TDesC& aTestName, const TTestStepType aTestType);
+	virtual TVerdict DoTestL(CMidiClientUtility* aMidi);
+	
+private:
+	CTestTrasitionFromEClosedEngagedToEClosed(const TDesC& aTestName, const TTestStepType aTestType);
+	~CTestTrasitionFromEClosedEngagedToEClosed() {};
+	};
+
+struct TDrmTestParams
+	{
+	enum 
+		{
+		KNoIntent=-1
+		};
+		
+	enum TSourceType
+		{
+		EFileName=0,
+		EFileHandle
+		};
+	enum TTestMode
+		{
+		ENormal = 0,
+		EAlloc
+		};
+		
+	const TText*			iFileNameKey;
+	const TText*			iUniqueId;
+	ContentAccess::TIntent	iIntent;
+	TInt					iExpectedError;	
+	TSourceType				iSourceType;
+	TInt					iNumPlayLoops;
+	TTestMode				iTestMode;
+	};
+	
+class CCallbackTimer;	
+	
+class CTestStepDrm : public CTestMmfMidiClntStep 
+	{
+protected:
+
+	virtual void OnTimer();
+
+	virtual TVerdict DoTestStepPreambleL();
+	virtual TVerdict DoTestStepPostambleL();
+	virtual TVerdict DoTestStepL();
+	TVerdict OpenFileL(CMidiClientUtility* aMidi);
+	CTestStepDrm(const TDesC& aTestName, const TTestStepType aTestType, const TDrmTestParams& aDrmParams);
+	
+	const TDrmTestParams& iDrmParams;
+	RFs iFs;
+	RFile iFile;
+	CCallbackTimer* iTimer;
+private:
+static TInt TimerGate(TAny* aPtr);	
+	};
+/**
+ * DRM-related negative test 
+ *
+ *
+ * Req. under test 
+ */
+class CTestDrmNegative : public CTestStepDrm
+	{
+public:
+	static CTestDrmNegative* NewL(const TDesC& aTestName, const TTestStepType aTestType, const TDrmTestParams& aDrmParams);
+	virtual TVerdict DoTestL(CMidiClientUtility* aMidi);
+	virtual void MmcuoStateChanged(TMidiState /*aOldState*/,TMidiState /*aNewState*/,const TTimeIntervalMicroSeconds& /*aTime*/,TInt aError);
+private:
+	CTestDrmNegative(const TDesC& aTestName, const TTestStepType aTestType, const TDrmTestParams& aDrmParams);
+	};
+
+class CTestDrmPlay : public CTestStepDrm
+	{
+public:
+	static CTestDrmPlay* NewL(const TDesC& aTestName, const TTestStepType aTestType, const TDrmTestParams& aDrmParams);
+	
+	virtual TVerdict PlayL(CMidiClientUtility* aMidi, TTimeIntervalMicroSeconds32 aStopAfter);
+	virtual TVerdict DoTestL(CMidiClientUtility* aMidi);
+	virtual void MmcuoStateChanged(TMidiState /*aOldState*/,TMidiState /*aNewState*/,const TTimeIntervalMicroSeconds& /*aTime*/,TInt aError);
+	
+protected:
+	CTestDrmPlay(const TDesC& aTestName, const TTestStepType aTestType, const TDrmTestParams& aDrmParams);
+
+protected:
+	TMidiState iLatestState; 	
+	
+	};
+
+
+class CTestDrmPlayStop : public CTestDrmPlay
+	{
+public:
+	static CTestDrmPlayStop* NewL(const TDesC& aTestName, const TTestStepType aTestType, const TDrmTestParams& aDrmParams);
+	
+	virtual void OnTimer();
+	virtual TVerdict DoTestL(CMidiClientUtility* aMidi);
+private:
+	CTestDrmPlayStop(const TDesC& aTestName, const TTestStepType aTestType, const TDrmTestParams& aDrmParams);
+	CMidiClientUtility* iMidi;
+	TBool iStopping;
+	};
+		
+
+class CTestDrmPlayWithUI : public CTestStepDrm
+	{
+public:
+	static CTestDrmPlayWithUI* NewL(const TDesC& aTestName, const TTestStepType aTestType, const TDrmTestParams& aDrmParams);
+	
+	virtual TVerdict PlayL(CMidiClientUtility* aMidi, TTimeIntervalMicroSeconds32 aStopAfter);
+	virtual TVerdict DoTestL(CMidiClientUtility* aMidi);
+	virtual void MmcuoStateChanged(TMidiState /*aOldState*/,TMidiState /*aNewState*/,const TTimeIntervalMicroSeconds& /*aTime*/,TInt aError);
+	
+protected:
+	TMidiState iLatestState; 	
+	
+private:
+	CTestDrmPlayWithUI(const TDesC& aTestName, const TTestStepType aTestType, const TDrmTestParams& aDrmParams);
+	};
+
+/**
+ * Open a midi file more than once using FileHandle
+ *
+ * @class CTestMidiOpenFileHandleRepeat
+ *
+ * Req. under test 
+ */
+class CTestMidiOpenFileHandleRepeat : public CTestMmfMidiClntStep
+	{
+public:
+	CTestMidiOpenFileHandleRepeat(const TDesC& aTestName, const TDesC& aSectName,const TDesC& aKeyName,const TBool aPlay);
+	~CTestMidiOpenFileHandleRepeat() {};
+	static CTestMidiOpenFileHandleRepeat* NewL(const TDesC& aTestName,const TDesC& aSectName,const TDesC& aKeyName,const TBool aPlay);
+	// From Base Class
+	virtual TVerdict DoTestStepL();
+	virtual TVerdict DoTestL(CMidiClientUtility* aMidi);
+
+protected:
+	TBuf<KNameBufSize> iSectName;			// Section name for retrieving filename
+	TBuf<KNameBufSize> iKeyName;			// Key name for retrieving filename
+	const TBool iPlay;						// Does this test require playing the Audio file 
+	TTimeIntervalMicroSeconds iDuration;	// Stores duration of Audio file
+
+	};
+	
+/**
+ * Play without opening a file.
+ *
+ * @class CTestMidiClntPlayWithoutFile
+ *
+ * 
+ */
+class CTestMidiClntPlayWithoutFile : public CTestMmfMidiClntStep
+	{
+public:
+	CTestMidiClntPlayWithoutFile(const TDesC& aTestName);
+	~CTestMidiClntPlayWithoutFile() {};
+	static CTestMidiClntPlayWithoutFile * NewL(const TDesC& aTestName);
+	// From Base Class
+	virtual TVerdict DoTestStepL();
+	void MmcuoStateChanged(TMidiState aOldState,TMidiState aNewState,const TTimeIntervalMicroSeconds& aTime,TInt aError);
+protected:
+    TInt iError;
+	};
+
+
+/**
+ * Opening a midifile and playing it.
+ *
+ * @class CTestMidiClntOpenAndPlayFile
+ *
+ * 
+ */
+class CTestMidiClntOpenAndPlayFile : public CTestMmfMidiClntStep
+	{
+public:
+	CTestMidiClntOpenAndPlayFile(const TDesC& aTestName, const TDesC& aSectName,const TDesC& aKeyName);
+	~CTestMidiClntOpenAndPlayFile() {};
+	static CTestMidiClntOpenAndPlayFile* NewL(const TDesC& aTestName,const TDesC& aSectName,const TDesC& aKeyName);
+	// From Base Class
+	virtual TVerdict DoTestStepL();
+	void MmcuoStateChanged(TMidiState aOldState,TMidiState aNewState,const TTimeIntervalMicroSeconds& aTime,TInt aError);
+protected:
+    TBuf<KNameBufSize> iSectName;			// Section name for retrieving filename
+	TBuf<KNameBufSize> iKeyName;			// Key name for retrieving filename
+    TInt iError;
+	};
+#endif
+