mmlibs/mmfw/tsrc/mmfunittest/aclnt/TSU_MMF_ACLNT_01/TestStepPlayerVarious.cpp
changeset 0 b8ed18f6c07b
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mmlibs/mmfw/tsrc/mmfunittest/aclnt/TSU_MMF_ACLNT_01/TestStepPlayerVarious.cpp	Thu Oct 07 22:34:12 2010 +0100
@@ -0,0 +1,2831 @@
+// 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 "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:
+// This file contains an example Test step implementation 
+// This demonstrates the various functions provided
+// by the CTestStep base class which are available within
+// a test step 
+// 
+//
+
+// EPOC includes
+#include <e32base.h>
+#include <e32test.h>
+#include <e32keys.h>
+#include <c32comm.h>
+#include <f32file.h>
+#include <etel.h>
+#include <etelmm.h>
+#include <testframework.h>
+
+#include <mdaaudiosampleplayer.h>
+//#include <MdaAudioSampleEditor.h>
+//#include <MdaAudioTonePlayer.h>
+
+// Test system includes
+#include <testframework.h>
+
+// Specific includes for this test suite
+#include "TestStepUnitMMFAudClient.h"
+#include "TestSuiteUnitMMFAudClient.h"
+
+// Specific includes for these test steps
+#include "TestStepPlayerManip.h"
+
+#include "mmfclientaudioplayer.h"
+#include "../../ctlfrm/TS_Codes.h"
+
+_LIT(KAudioControllerName,"Symbian Audio Wav Test controller");
+
+// --------------------------------------------
+
+/**
+ *
+ * Static constructor for CTestStepPlayerPosition.
+ *
+ *
+ * @return	"CTestStepPlayerPosition*"
+ *			The constructed CTestStepPlayerPosition
+ *
+ * @xxxx
+ * 
+ */
+CTestStepPlayerPosition* CTestStepPlayerPosition::NewL()
+	{
+	CTestStepPlayerPosition* self = new(ELeave) CTestStepPlayerPosition;
+	return self;
+	}
+
+/**
+ *
+ * Test step constructor.
+ * Each test step initialises its own name.
+ *
+ * @xxxx
+ * 
+ */
+CTestStepPlayerPosition::CTestStepPlayerPosition() : iHasPlayed(EFalse)
+	{
+	iTestStepResult = EPass;
+	// store the name of this test case
+	// this is the name that is used by the script file
+	iTestStepName = _L("MM-MMF-ACLNT-U-0035-CP");
+	}
+
+/**
+ *
+ * Test step destructor.
+ *
+ * @xxxx
+ * 
+ */
+CTestStepPlayerPosition::~CTestStepPlayerPosition()
+	{
+	}
+/**
+ * Implementation of the MMdaAudioPlayerCallback interface functions
+ **/
+void CTestStepPlayerPosition::MapcInitComplete(TInt aError, 
+								const TTimeIntervalMicroSeconds &/*aDuration*/)
+	{
+	iError = aError;
+	CActiveScheduler::Stop();
+	}
+
+void CTestStepPlayerPosition::MapcPlayComplete(TInt aError)
+	{
+	iError = aError;
+	if (iError == KErrNone)
+		iHasPlayed = ETrue;
+	CActiveScheduler::Stop();
+	}
+
+/**
+ *
+ * Test step Preamble.
+ *
+ * @xxxx
+ * 
+ */
+ enum TVerdict CTestStepPlayerPosition::DoTestStepPreambleL(void)
+	{
+	 enum TVerdict verdict;
+	 // this installs the scheduler
+	 verdict = CTestStepUnitMMFAudClient::DoTestStepPreambleL();
+
+	// Printing to the console and log file
+	 INFO_PRINTF1(_L("MM-MMF-ACLNT-U-0035-CP"));
+	 INFO_PRINTF1(_L("this test is getting and setting the postion of a sound file after openning it, and playing it. GetPosition()"));
+
+	 iError = KErrNone; //KErrTimedOut;
+
+	 if(!GetStringFromConfig(_L("SectionOne"), _L("AudioPlayFName1"), iFileName))
+		{
+		 //INFO_PRINTF2(_L("file name %s not found..."), fileptr);
+		 return EInconclusive;
+		}
+
+	 iPlayer = CMMFMdaAudioPlayerUtility::NewFilePlayerL(iFileName, *this);
+	 CActiveScheduler::Start();
+	 User::After(1000000);
+
+	 if (iPlayer == NULL ||
+		 iError != KErrNone )
+		 return EInconclusive;
+
+	 //store Duration
+	 iDuration = iPlayer->Duration();
+	 if (iDuration <= TTimeIntervalMicroSeconds(0) )
+		 return EInconclusive;
+
+	// check if player openned the file successfully
+	TInt err1 = KErrNone;
+	TInt state = 0;
+	err1 = GetAudPlayerState(iPlayer, state);
+	if ( err1 != KErrNone ||
+		 state != CMMFMdaAudioPlayerUtility::EStopped )
+		return EInconclusive;
+
+	 return verdict;
+	}
+
+/**
+ *
+ * Test step Postamble.
+ *
+ * @xxxx
+ * 
+ */
+enum TVerdict CTestStepPlayerPosition::DoTestStepPostambleL(void)
+	{
+	delete iPlayer;
+	iPlayer = NULL;
+	//[ Destroy the scheduler ]
+	delete iPlayer;
+	return CTestStepUnitMMFAudClient::DoTestStepPostambleL();
+	}
+
+/**
+ *
+ * Do the test step.
+ * Each test step must supply an implementation for DoTestStepL.
+ *
+ * @return	"TVerdict"
+ *			The result of the test step
+ *
+ * @xxxx
+ * 
+ */
+TVerdict CTestStepPlayerPosition::DoTestStepL()
+	{
+	iTestStepResult = EPass;
+	TInt err; 
+	TTimeIntervalMicroSeconds pos;
+	//__MM_HEAP_MARK;
+
+	// check if position 0 before playing
+	err = iPlayer->GetPosition(pos);
+	if (err != KErrNone ||
+		pos != TTimeIntervalMicroSeconds(0))
+		return EFail;
+
+	// set position and check
+	iPlayer->SetPosition(TTimeIntervalMicroSeconds(500000));
+	err = iPlayer->GetPosition(pos);
+	if (err != KErrNone ||
+		pos != TTimeIntervalMicroSeconds(500000))
+		return EFail;
+
+	// set position and check
+	iPlayer->SetPosition(TTimeIntervalMicroSeconds(10000));
+	err = iPlayer->GetPosition(pos);
+	if (err != KErrNone ||
+		pos != TTimeIntervalMicroSeconds(10000))
+		return EFail;
+
+	//  play pause and check
+	iPlayer->Play();
+	CActiveScheduler::Start();
+
+
+	//INC24264
+	err = iPlayer->GetPosition(pos);
+	if ((err == KErrNone) || (pos <= TTimeIntervalMicroSeconds(0)))
+		return iTestStepResult = EPass;
+
+
+	// stop it after 200 milisecs, not accurate though
+	/*User::After(200000);
+	iPlayer->Pause();
+
+	// check position again, we don't have an accurate opsition
+	err = iPlayer->GetPosition(pos);
+	if (err != KErrNone ||
+		pos <= TTimeIntervalMicroSeconds(0) ||
+		pos > iDuration )
+		return EFail;*/
+
+	delete iPlayer;
+	iPlayer = NULL;
+	//__MM_HEAP_MARKEND;
+
+	INFO_PRINTF1(_L("finished with this test step"));
+	// test steps return a result
+	return iTestStepResult;
+	}
+
+//
+// class CTestStepPlayerPlayWindow
+// --------------------------------------------
+//
+/**
+ *
+ * Static constructor for CTestStepPlayerPlayWindow.
+ *
+ *
+ * @return	"CTestStepPlayerPlayWindow*"
+ *			The constructed CTestStepPlayerPlayWindow
+ *
+ * @xxxx
+ * 
+ */
+CTestStepPlayerPlayWindow* CTestStepPlayerPlayWindow::NewL()
+	{
+	CTestStepPlayerPlayWindow* self = new(ELeave) CTestStepPlayerPlayWindow;
+	return self;
+	}
+
+/**
+ *
+ * Test step constructor.
+ * Each test step initialises its own name.
+ *
+ * @xxxx
+ * 
+ */
+CTestStepPlayerPlayWindow::CTestStepPlayerPlayWindow() : iHasPlayed(EFalse)
+	{
+	iTestStepResult = EPass;
+	// store the name of this test case
+	// this is the name that is used by the script file
+	iTestStepName = _L("MM-MMF-ACLNT-U-0050-CP");
+	}
+
+/**
+ *
+ * Test step destructor.
+ *
+ * @xxxx
+ * 
+ */
+CTestStepPlayerPlayWindow::~CTestStepPlayerPlayWindow()
+	{
+	}
+/**
+ * Implementation of the MMdaAudioPlayerCallback interface functions
+ **/
+void CTestStepPlayerPlayWindow::MapcInitComplete(TInt aError, 
+								const TTimeIntervalMicroSeconds &/*aDuration*/)
+	{
+	iError = aError;
+	CActiveScheduler::Stop();
+	}
+
+void CTestStepPlayerPlayWindow::MapcPlayComplete(TInt aError)
+	{
+	iError = aError;
+	if (iError == KErrNone)
+		iHasPlayed = ETrue;
+	CActiveScheduler::Stop();
+	}
+
+/**
+ *
+ * Test step Preamble.
+ *
+ * @xxxx
+ * 
+ */
+ enum TVerdict CTestStepPlayerPlayWindow::DoTestStepPreambleL(void)
+	{
+	 enum TVerdict verdict;
+	 // this installs the scheduler
+	 verdict = CTestStepUnitMMFAudClient::DoTestStepPreambleL();
+
+	// Printing to the console and log file
+	 INFO_PRINTF1(_L("MM-MMF-ACLNT-U-0050-CP"));
+	 INFO_PRINTF1(_L("this test is setting and clearing the Play Window of a sound file after openning it [Set|Clear]PlayWindow()"));
+
+	 iError = KErrNone; //KErrTimedOut;
+
+	 if(!GetStringFromConfig(_L("SectionOne"), _L("AudioPlayFName1"), iFileName))
+		{
+		 //INFO_PRINTF2(_L("file name %s not found..."), fileptr);
+		 return EInconclusive;
+		}
+
+	 iPlayer = CMMFMdaAudioPlayerUtility::NewFilePlayerL(iFileName, *this);
+	 CActiveScheduler::Start();
+	 User::After(1000000);
+
+	 if (iPlayer == NULL ||
+		 iError != KErrNone )
+		 return EInconclusive;
+
+	 //store Duration
+	 iDuration = iPlayer->Duration();
+	 if (iDuration <= TTimeIntervalMicroSeconds(0) )
+		 return EInconclusive;
+
+	iBeginning = TTimeIntervalMicroSeconds( 0 );
+	iMiddle = TTimeIntervalMicroSeconds( iPlayer->Duration().Int64() / 2 );
+	iEnd = iPlayer->Duration();
+
+	// check if player openned the file successfully
+	TInt err1 = KErrNone;
+	TInt state = 0;
+	err1 = GetAudPlayerState(iPlayer, state);
+	if ( err1 != KErrNone ||
+		 state != CMMFMdaAudioPlayerUtility::EStopped )
+		return EInconclusive;
+
+	 return verdict;
+	}
+
+/**
+ *
+ * Test step Postamble.
+ *
+ * @xxxx
+ * 
+ */
+enum TVerdict CTestStepPlayerPlayWindow::DoTestStepPostambleL(void)
+	{
+	delete iPlayer;
+	iPlayer = NULL;
+	//[ Destroy the scheduler ]
+	return CTestStepUnitMMFAudClient::DoTestStepPostambleL();
+	}
+
+/**
+ *
+ * Do the test step.
+ * Each test step must supply an implementation for DoTestStepL.
+ *
+ * @return	"TVerdict"
+ *			The result of the test step
+ *
+ * @xxxx
+ * 
+ */
+TVerdict CTestStepPlayerPlayWindow::DoTestStepL()
+	{
+	TInt err; 
+	//__MM_HEAP_MARK;
+
+
+	TRAP(err, iPlayer->SetPlayWindow(iBeginning, iMiddle) ); 
+	iPlayer->Play();
+	// Wait for a MapcPlayComplete() callback
+	// calling User::After(1200000) is no good because the active scheduler
+	// is not running so no RunL()'s can work 
+	// i.e. nothing can come back from controller & the AudioPlayer utility's
+	// state will not get updated.
+	//User::After(1200000); // wrong 
+	CActiveScheduler::Start();
+	if (err != KErrNone) // no way to check programmatically without access to the controller
+		//|| iPlayer->Duration() != TTimeIntervalMicroSeconds(iMiddle.Int64()-iBeginning.Int64()) )
+		return EInconclusive;
+
+	TRAP(err, iPlayer->ClearPlayWindow() );
+	if (err != KErrNone ) 
+		return EFail;
+	iPlayer->Play();
+	CActiveScheduler::Start();
+
+	if (iError!= KErrNone)
+		{
+		INFO_PRINTF2(_L("iPlayer->Play() failed, iError = %d"), iError);
+		return EFail;
+		}
+
+	delete iPlayer;
+	iPlayer = NULL;
+	//__MM_HEAP_MARKEND;
+
+	INFO_PRINTF1(_L("finished with this test step"));
+	// test steps return a result
+	return iTestStepResult;
+	}
+
+//
+// class CTestStepPlayerBalance
+// --------------------------------------------
+//
+/**
+ *
+ * Static constructor for CTestStepPlayerBalance.
+ *
+ *
+ * @return	"CTestStepPlayerBalance*"
+ *			The constructed CTestStepPlayerBalance
+ *
+ * @xxxx
+ * 
+ */
+CTestStepPlayerBalance* CTestStepPlayerBalance::NewL()
+	{
+	CTestStepPlayerBalance* self = new(ELeave) CTestStepPlayerBalance;
+	return self;
+	}
+
+/**
+ *
+ * Test step constructor.
+ * Each test step initialises its own name.
+ *
+ * @xxxx
+ * 
+ */
+CTestStepPlayerBalance::CTestStepPlayerBalance()
+	{
+	iTestStepResult = EPass;
+	// store the name of this test case
+	// this is the name that is used by the script file
+	iTestStepName = _L("MM-MMF-ACLNT-U-0052-HP");
+	}
+
+/**
+ *
+ * Test step destructor.
+ *
+ * @xxxx
+ * 
+ */
+CTestStepPlayerBalance::~CTestStepPlayerBalance()
+	{
+	}
+/**
+ * Implementation of the MMdaAudioPlayerCallback interface functions
+ **/
+void CTestStepPlayerBalance::MapcInitComplete(TInt aError, 
+											  const TTimeIntervalMicroSeconds &/*aDuration*/)
+	{
+	iError = aError;
+	CActiveScheduler::Stop();
+	}
+
+void CTestStepPlayerBalance::MapcPlayComplete(TInt aError)
+	{
+	iError = aError;
+	CActiveScheduler::Stop();
+	}
+
+/**
+ *
+ * Test step Preamble.
+ *
+ * @xxxx
+ * 
+ */
+ enum TVerdict CTestStepPlayerBalance::DoTestStepPreambleL(void)
+	{
+	 enum TVerdict verdict;
+	 // this installs the scheduler
+	 verdict = CTestStepUnitMMFAudClient::DoTestStepPreambleL();
+
+	// Printing to the console and log file
+	 INFO_PRINTF1(_L("MM-MMF-ACLNT-U-0052-HP"));
+	 INFO_PRINTF1(_L("this test is setting and getting the balance of a sound: [Set|Get]Balance()"));
+
+	 iError = KErrNone; //KErrTimedOut;
+
+	 if(!GetStringFromConfig(_L("SectionOne"), _L("AudioPlayFName1"), iFileName))
+		{
+		 //INFO_PRINTF2(_L("file name %s not found..."), fileptr);
+		 return EInconclusive;
+		}
+
+	 iPlayer = CMMFMdaAudioPlayerUtility::NewFilePlayerL(iFileName, *this);
+	 CActiveScheduler::Start();
+	 User::After(1000000);
+
+	 if (iPlayer == NULL ||
+		 iError != KErrNone )
+		 return EInconclusive;
+
+	 //store Duration
+	 iDuration = iPlayer->Duration();
+	 if (iDuration <= TTimeIntervalMicroSeconds(0) )
+		 return EInconclusive;
+
+
+	 return verdict;
+	}
+
+/**
+ *
+ * Test step Postamble.
+ *
+ * @xxxx
+ * 
+ */
+enum TVerdict CTestStepPlayerBalance::DoTestStepPostambleL(void)
+	{
+	delete iPlayer;
+	iPlayer = NULL;
+	//[ Destroy the scheduler ]
+	return CTestStepUnitMMFAudClient::DoTestStepPostambleL();
+	}
+
+/**
+ *
+ * Do the test step.
+ * Each test step must supply an implementation for DoTestStepL.
+ *
+ * @return	"TVerdict"
+ *			The result of the test step
+ *
+ * @xxxx
+ * 
+ */
+TVerdict CTestStepPlayerBalance::DoTestStepL()
+	{
+	TInt err; 
+	TInt balance = 0; // KMMFBalanceCenter
+	
+	// test 1
+	err = iPlayer->SetBalance(); // default KMMFBalanceCenter = 0
+	if (err != KErrNone)	// we expect this to return KErrNone in Typhoon
+		return EFail;
+
+	err = iPlayer->GetBalance(balance);
+	if (err != KErrNone ||
+		balance != 0)
+		return EFail;
+
+
+	// test 2
+	err = iPlayer->SetBalance(KMMFBalanceMaxLeft); // -100
+	if (err != KErrNone)
+		return EFail;
+
+	err = iPlayer->GetBalance(balance);
+	if (err != KErrNone ||
+		balance != KMMFBalanceMaxLeft)
+		return EFail;
+
+	// test 3
+	err = iPlayer->SetBalance(KMMFBalanceMaxRight);
+	if (err != KErrNone)
+		return EFail;
+
+	err = iPlayer->GetBalance(balance);
+	if (err != KErrNone ||
+		balance != KMMFBalanceMaxRight)
+		return EFail;
+
+	// test 4
+	err = iPlayer->SetBalance(KMMFBalanceMaxRight/2);
+	if (err != KErrNone)
+		return EFail;
+
+	err = iPlayer->GetBalance(balance);
+	if (err != KErrNone ||
+		balance != KMMFBalanceMaxRight/2)
+		return EFail;
+
+
+	// test 4 out of bounds
+	/* until we check the return codes...
+	TRAP(err, iPlayer->SetBalance(KMMFBalanceMaxRight+5));
+	if (err != KErrArgument ||
+		err != KErrTooBig )
+		return EFail;
+	*/
+
+	INFO_PRINTF1(_L("finished with this test step"));
+	// test steps return a result
+	return iTestStepResult;	}
+
+//
+// class CTestStepPlayerClose
+// --------------------------------------------
+//
+/**
+ *
+ * Static constructor for CTestStepPlayerClose.
+ *
+ *
+ * @return	"CTestStepPlayerClose*"
+ *			The constructed CTestStepPlayerClose
+ *
+ * @xxxx
+ * 
+ */
+CTestStepPlayerClose* CTestStepPlayerClose::NewL()
+	{
+	CTestStepPlayerClose* self = new(ELeave) CTestStepPlayerClose;
+	return self;
+	}
+
+/**
+ *
+ * Test step constructor.
+ * Each test step initialises its own name.
+ *
+ * @xxxx
+ * 
+ */
+CTestStepPlayerClose::CTestStepPlayerClose()
+	{
+	iTestStepResult = EPass;
+	// store the name of this test case
+	// this is the name that is used by the script file
+	iTestStepName = _L("MM-MMF-ACLNT-U-0044-CP");
+	}
+
+/**
+ *
+ * Test step destructor.
+ *
+ * @xxxx
+ * 
+ */
+CTestStepPlayerClose::~CTestStepPlayerClose()
+	{
+	}
+/**
+ * Implementation of the MMdaAudioPlayerCallback interface functions
+ **/
+void CTestStepPlayerClose::MapcInitComplete(TInt aError, 
+								const TTimeIntervalMicroSeconds &/*aDuration*/)
+	{
+	iError = aError;
+	CActiveScheduler::Stop();
+	}
+
+void CTestStepPlayerClose::MapcPlayComplete(TInt aError)
+	{
+	iError = aError;
+	CActiveScheduler::Stop();
+	}
+
+/**
+ *
+ * Test step Preamble.
+ *
+ * @xxxx
+ * 
+ */
+ enum TVerdict CTestStepPlayerClose::DoTestStepPreambleL(void)
+	{
+	 enum TVerdict verdict;
+	 // this installs the scheduler
+	 verdict = CTestStepUnitMMFAudClient::DoTestStepPreambleL();
+
+	// Printing to the console and log file
+	 INFO_PRINTF1(_L("MM-MMF-ACLNT-U-0044-CP"));
+	 INFO_PRINTF1(_L("this test is closing an open sound: Close()"));
+
+	 iError = KErrNone; //KErrTimedOut;
+
+	 if(!GetStringFromConfig(_L("SectionOne"), _L("AudioPlayFName1"), iFileName))
+		{
+		 //INFO_PRINTF2(_L("file name %s not found..."), fileptr);
+		 return EInconclusive;
+		}
+
+	 iPlayer = CMMFMdaAudioPlayerUtility::NewFilePlayerL(iFileName, *this);
+	 CActiveScheduler::Start();
+	 User::After(1000000);
+
+	 if (iPlayer == NULL ||
+		 iError != KErrNone )
+		 return EInconclusive;
+
+	 //store Duration
+	 iDuration = iPlayer->Duration();
+	 if (iDuration <= TTimeIntervalMicroSeconds(0) )
+		 return EInconclusive;
+
+
+	 return verdict;
+	}
+
+/**
+ *
+ * Test step Postamble.
+ *
+ * @xxxx
+ * 
+ */
+enum TVerdict CTestStepPlayerClose::DoTestStepPostambleL(void)
+	{
+	delete iPlayer;
+	iPlayer = NULL;
+	//User::After(1000000);
+	//[ Destroy the scheduler ]
+	return CTestStepUnitMMFAudClient::DoTestStepPostambleL();
+	}
+
+/**
+ *
+ * Do the test step.
+ * Each test step must supply an implementation for DoTestStepL.
+ *
+ * @return	"TVerdict"
+ *			The result of the test step
+ *
+ * @xxxx
+ * 
+ */
+TVerdict CTestStepPlayerClose::DoTestStepL()
+	{
+	TInt err; 
+	
+	// test 1
+	TRAP(err, iPlayer->Close());
+	if (iPlayer == NULL ||  // better check condition?
+		err != KErrNone)
+		return EFail;
+
+	// re-open file
+	iPlayer->OpenFileL(iFileName);
+	CActiveScheduler::Start();
+	User::After(1000000);
+	// check
+	if (iPlayer == NULL ||
+		iError != KErrNone )
+		return EInconclusive;
+
+	// test 2
+	//TRAP(err, iPlayer->Close());
+	if (iPlayer == NULL || // better check condition?
+		err != KErrNone)
+		return EFail;
+
+
+	INFO_PRINTF1(_L("finished with this test step"));
+	// test steps return a result
+	return iTestStepResult;
+	
+	}
+
+//
+// class CTestStepPlayerMeta
+// --------------------------------------------
+//
+/**
+ *
+ * Static constructor for CTestStepPlayerMeta.
+ *
+ *
+ * @return	"CTestStepPlayerMeta*"
+ *			The constructed CTestStepPlayerMeta
+ *
+ * @xxxx
+ * 
+ */
+CTestStepPlayerMeta* CTestStepPlayerMeta::NewL()
+	{
+	CTestStepPlayerMeta* self = new(ELeave) CTestStepPlayerMeta;
+	return self;
+	}
+
+/**
+ *
+ * Test step constructor.
+ * Each test step initialises its own name.
+ *
+ * @xxxx
+ * 
+ */
+CTestStepPlayerMeta::CTestStepPlayerMeta()
+	{
+	iTestStepResult = EPass;
+	// store the name of this test case
+	// this is the name that is used by the script file
+	iTestStepName = _L("MM-MMF-ACLNT-U-0045-HP");
+	}
+
+/**
+ *
+ * Test step destructor.
+ *
+ * @xxxx
+ * 
+ */
+CTestStepPlayerMeta::~CTestStepPlayerMeta()
+	{
+	}
+/**
+ * Implementation of the MMdaAudioPlayerCallback interface functions
+ **/
+void CTestStepPlayerMeta::MapcInitComplete(TInt aError, 
+								const TTimeIntervalMicroSeconds &/*aDuration*/)
+	{
+	iError = aError;
+	CActiveScheduler::Stop();
+	}
+
+void CTestStepPlayerMeta::MapcPlayComplete(TInt aError)
+	{
+	iError = aError;
+	CActiveScheduler::Stop();
+	}
+
+/**
+ *
+ * Test step Preamble.
+ *
+ * @xxxx
+ * 
+ */
+ enum TVerdict CTestStepPlayerMeta::DoTestStepPreambleL(void)
+	{
+	 enum TVerdict verdict;
+	 // this installs the scheduler
+	 verdict = CTestStepUnitMMFAudClient::DoTestStepPreambleL();
+
+	// Printing to the console and log file
+	 INFO_PRINTF1(_L("MM-MMF-ACLNT-U-0045-HP"));
+	 INFO_PRINTF1(_L("this test is about metadata manipulation"));
+
+	 iError = KErrNone; //KErrTimedOut;
+
+	 if(!GetStringFromConfig(_L("SectionOne"), _L("AudioFNameMeta"), iFileName))
+		{
+		 //INFO_PRINTF2(_L("file name %s not found..."), fileptr);
+		 return EInconclusive;
+		}
+
+	 iPlayer = CMMFMdaAudioPlayerUtility::NewFilePlayerL(iFileName, *this);
+	 CActiveScheduler::Start();
+	 User::After(1000000);
+
+	 if (iPlayer == NULL ||
+		 iError != KErrNone )
+		 return EInconclusive;
+
+	 return verdict;
+	}
+
+/**
+ *
+ * Test step Postamble.
+ *
+ * @xxxx
+ * 
+ */
+enum TVerdict CTestStepPlayerMeta::DoTestStepPostambleL(void)
+	{
+	delete iPlayer;
+	iPlayer = NULL;
+	//[ Destroy the scheduler ]
+	return CTestStepUnitMMFAudClient::DoTestStepPostambleL();
+	}
+
+/**
+ *
+ * Do the test step.
+ * Each test step must supply an implementation for DoTestStepL.
+ *
+ * @return	"TVerdict"
+ *			The result of the test step
+ *
+ * @xxxx
+ * 
+ */
+TVerdict CTestStepPlayerMeta::DoTestStepL()
+	{
+	iTestStepResult = EPass;
+	TInt err, num; 
+	
+	err = iPlayer->GetNumberOfMetaDataEntries(iNum);
+
+#ifdef _TYPHOON_TEST_
+	if (err != KErrNotSupported)
+		return EFail;
+#endif
+
+#ifndef _TYPHOON_TEST_
+	if (err != KErrNone || iNum == 0 )
+		return EFail;  // check a known number of meta data
+#endif
+
+	_LIT(KMetaName, "To be changed N");
+	_LIT(KMetaValue, "To be changed V");
+	CMMFMetaDataEntry* meta = CMMFMetaDataEntry::NewL(KMetaName, KMetaValue);
+	CleanupStack::PushL(meta);
+
+	for (num = 0; num <iNum; num++)
+		{
+		TRAP(err, meta = iPlayer->GetMetaDataEntryL(num) ); // check if they count from 0
+		#ifdef _TYPHOON_TEST_
+			if (err != KErrNotSupported)
+				return EFail;
+		#endif
+
+		#ifndef _TYPHOON_TEST_
+			if (err != KErrNone ||
+				meta->Name() == KMetaName || 
+				meta->Value() == KMetaValue )
+				return EFail;
+		#endif
+		}
+
+	CleanupStack::PopAndDestroy(meta);
+
+
+	INFO_PRINTF1(_L("finished with this test step"));
+	// test steps return a result
+	return iTestStepResult;
+	
+	}
+
+//
+// class CTestStepPlayerPriority
+// --------------------------------------------
+//
+/**
+ *
+ * Static constructor for CTestStepPlayerPriority.
+ *
+ *
+ * @return	"CTestStepPlayerPriority*"
+ *			The constructed CTestStepPlayerPriority
+ *
+ * @xxxx
+ * 
+ */
+CTestStepPlayerPriority* CTestStepPlayerPriority::NewL()
+	{
+	CTestStepPlayerPriority* self = new(ELeave) CTestStepPlayerPriority;
+	return self;
+	}
+
+/**
+ *
+ * Test step constructor.
+ * Each test step initialises its own name.
+ *
+ * @xxxx
+ * 
+ */
+CTestStepPlayerPriority::CTestStepPlayerPriority()
+	{
+	iTestStepResult = EPass;
+	// store the name of this test case
+	// this is the name that is used by the script file
+	iTestStepName = _L("MM-MMF-ACLNT-U-0053-HP");
+	}
+
+/**
+ *
+ * Test step destructor.
+ *
+ * @xxxx
+ * 
+ */
+CTestStepPlayerPriority::~CTestStepPlayerPriority()
+	{
+	}
+/**
+ * Implementation of the MMdaAudioPlayerCallback interface functions
+ **/
+void CTestStepPlayerPriority::MapcInitComplete(TInt aError, 
+								const TTimeIntervalMicroSeconds &/*aDuration*/)
+	{
+	iError = aError;
+	CActiveScheduler::Stop();
+	}
+
+void CTestStepPlayerPriority::MapcPlayComplete(TInt aError)
+	{
+	iError = aError;
+	CActiveScheduler::Stop();
+	}
+
+/**
+ *
+ * Test step Preamble.
+ *
+ * @xxxx
+ * 
+ */
+ enum TVerdict CTestStepPlayerPriority::DoTestStepPreambleL(void)
+	{
+	 enum TVerdict verdict;
+	 // this installs the scheduler
+	 verdict = CTestStepUnitMMFAudClient::DoTestStepPreambleL();
+
+	// Printing to the console and log file
+	 INFO_PRINTF1(_L("MM-MMF-ACLNT-U-0053-HP"));
+	 INFO_PRINTF1(_L("this test is about the priority of the audio player"));
+
+	 iError = KErrNone; //KErrTimedOut;
+
+	 if(!GetStringFromConfig(_L("SectionOne"), _L("AudioFNameMeta"), iFileName))
+		{
+		 //INFO_PRINTF2(_L("file name %s not found..."), fileptr);
+		 return EInconclusive;
+		}
+
+	 iPlayer = CMMFMdaAudioPlayerUtility::NewFilePlayerL(iFileName, *this);
+	 CActiveScheduler::Start();
+	 User::After(1000000);
+
+	 if (iPlayer == NULL ||
+		 iError != KErrNone )
+		 return EInconclusive;
+
+	 return verdict;
+	}
+
+/**
+ *
+ * Test step Postamble.
+ *
+ * @xxxx
+ * 
+ */
+enum TVerdict CTestStepPlayerPriority::DoTestStepPostambleL(void)
+	{
+	delete iPlayer;
+	iPlayer = NULL;
+	//[ Destroy the scheduler ]
+	return CTestStepUnitMMFAudClient::DoTestStepPostambleL();
+	}
+
+/**
+ *
+ * Do the test step.
+ * Each test step must supply an implementation for DoTestStepL.
+ *
+ * @return	"TVerdict"
+ *			The result of the test step
+ *
+ * @xxxx
+ * 
+ */
+TVerdict CTestStepPlayerPriority::DoTestStepL()
+	{
+	iTestStepResult = EPass;
+	TInt err = KErrNone; 
+	
+	iPlayer->SetPriority(EMdaPriorityNormal, EMdaPriorityPreferenceQuality);
+
+	TMMFPrioritySettings priorSets;
+	err = GetAudPlayerPriority(iPlayer, priorSets);
+	if (err != KErrNone ||
+		priorSets.iPriority != EMdaPriorityNormal ||
+		priorSets.iPref != EMdaPriorityPreferenceQuality)
+		return EFail;
+
+	iPlayer->SetPriority(EMdaPriorityNormal, EMdaPriorityPreferenceTime);
+	err = GetAudPlayerPriority(iPlayer, priorSets);
+	if (err != KErrNone ||
+		priorSets.iPriority != EMdaPriorityNormal ||
+		priorSets.iPref != EMdaPriorityPreferenceTime)
+		return EFail;
+
+	iPlayer->SetPriority(EMdaPriorityMin, EMdaPriorityPreferenceTimeAndQuality);
+	err = GetAudPlayerPriority(iPlayer, priorSets);
+	if (err != KErrNone ||
+		priorSets.iPriority != EMdaPriorityMin ||
+		priorSets.iPref != EMdaPriorityPreferenceTimeAndQuality)
+		return EFail;
+
+	iPlayer->SetPriority(EMdaPriorityMin, EMdaPriorityPreferenceTimeAndQuality);
+	err = GetAudPlayerPriority(iPlayer, priorSets);
+	if (err != KErrNone ||
+		priorSets.iPriority != EMdaPriorityMin ||
+		priorSets.iPref != EMdaPriorityPreferenceTimeAndQuality)
+		return EFail;
+
+	iPlayer->SetPriority(EMdaPriorityMax, EMdaPriorityPreferenceTimeAndQuality);
+	err = GetAudPlayerPriority(iPlayer, priorSets);
+	if (err != KErrNone ||
+		priorSets.iPriority != EMdaPriorityMax ||
+		priorSets.iPref != EMdaPriorityPreferenceTimeAndQuality)
+		return EFail;
+
+	iPlayer->SetPriority(EMdaPriorityMax, EMdaPriorityPreferenceTimeAndQuality);
+	err = GetAudPlayerPriority(iPlayer, priorSets);
+	if (err != KErrNone ||
+		priorSets.iPriority != EMdaPriorityMax ||
+		priorSets.iPref != EMdaPriorityPreferenceTimeAndQuality)
+		return EFail;
+
+	
+	INFO_PRINTF1(_L("finished with this test step"));
+	// test steps return a result
+	return iTestStepResult;
+	
+	}
+
+// CTestStepPlayerPauseSetPosPlay
+CTestStepPlayerPauseSetPosPlay* CTestStepPlayerPauseSetPosPlay::NewL()
+	{
+	CTestStepPlayerPauseSetPosPlay* self = new(ELeave) CTestStepPlayerPauseSetPosPlay();
+	return self;
+	}
+
+CTestStepPlayerPauseSetPosPlay::CTestStepPlayerPauseSetPosPlay()
+	{
+	iTestStepName = _L("MM-MMF-ACLNT-U-0054-HP");
+	}
+
+CTestStepPlayerPauseSetPosPlay::~CTestStepPlayerPauseSetPosPlay()
+	{
+	}
+
+void CTestStepPlayerPauseSetPosPlay::Close()
+	{
+	delete iPlayer;
+	}
+
+TVerdict CTestStepPlayerPauseSetPosPlay::DoTestStepL()
+	{
+	INFO_PRINTF1(_L("MM-MMF-ACLNT-U-0054-HP"));
+	INFO_PRINTF1(_L("This test is playing, then pausing, setting the position and playing again."));
+	INFO_PRINTF1(_L("Audio should start playing immediately from the second position after the pause."));
+
+	TPtrC filename;
+	if (!GetStringFromConfig(_L("SectionOne"), _L("AudioPlayFName2"), filename))
+		{
+		INFO_PRINTF1(_L("Audio test filename not found in INI file"));
+		return EInconclusive;
+		}
+
+	iPlayer = CMMFMdaAudioPlayerUtility::NewFilePlayerL(filename, *this);
+	CActiveScheduler::Start();
+
+	if (iError != KErrNone)
+		{
+		INFO_PRINTF2(_L("Error creating file player %d"), iError);
+		return EInconclusive;
+		}
+
+	// Start playing...
+	iPlayer->Play();
+	User::After(1000000);
+
+	// Pause after 2 secs
+	iPlayer->Pause();
+	User::After(2000000);
+
+	// Set new position
+	TTimeIntervalMicroSeconds newPos(4000000);
+	iPlayer->SetPosition(newPos);
+
+	// Play to the end
+	iPlayer->Play();
+	CActiveScheduler::Start();
+
+	if (iError != KErrNone)
+		{
+		INFO_PRINTF2(_L("Error playing back sound %d"), iError);
+		return EFail;
+		}
+
+	return EPass;
+	}
+
+// from MMdaAudioPlayerCallback
+void CTestStepPlayerPauseSetPosPlay::MapcInitComplete(TInt aError, const TTimeIntervalMicroSeconds& /*aDuration*/)
+	{
+	iError = aError;
+	CActiveScheduler::Stop();
+	}
+
+void CTestStepPlayerPauseSetPosPlay::MapcPlayComplete(TInt aError)
+	{
+	iError = aError;
+	CActiveScheduler::Stop();
+	}
+
+
+//
+//  CTestStepPlayerPlayWaitSetPos
+//
+
+CTestStepPlayerPlayWaitSetPos* CTestStepPlayerPlayWaitSetPos::NewL()
+	{
+	return new (ELeave) CTestStepPlayerPlayWaitSetPos();
+	}
+
+CTestStepPlayerPlayWaitSetPos::CTestStepPlayerPlayWaitSetPos()
+	{
+	iTestStepName = _L("MM-MMF-ACLNT-U-0989-CP");
+	}
+	
+CTestStepPlayerPlayWaitSetPos::~CTestStepPlayerPlayWaitSetPos()
+	{
+	delete iPlayer;	
+	delete iSetPositionCountDown;
+	}
+
+
+/* 
+ *
+ * Stages:
+ * 1) Setup the utility and timer objects.
+ * 2) Start the playback and start the countdown of 6 seconds.
+ * 3) Upon countdown completion set the playback position to the 2 second point.
+ * 4) Check the file playback completed.
+ * 
+ */
+TVerdict CTestStepPlayerPlayWaitSetPos::DoTestStepL()
+	{
+	INFO_PRINTF1(_L("MM-MMF-ACLNT-U-0984-CP"));
+	INFO_PRINTF1(_L("This test is playing an audio file then after 6 seconds setting the position to the 2 second point."));
+	INFO_PRINTF1(_L("Audio should play to completion after the call to SetPosition()."));
+	
+	//Stage 1
+	TCallBack callbackFunction(TimerCallback, this);
+	iSetPositionCountDown = CPeriodic::NewL(CActive::EPriorityHigh);
+	
+	TPtrC filename;
+	if (!GetStringFromConfig(_L("SectionOne"), _L("AudioPlayFName2"), filename))
+		{
+		ERR_PRINTF1(_L("Audio test filename not found in INI file"));
+		return EInconclusive;
+		}
+
+	iPlayer = CMMFMdaAudioPlayerUtility::NewFilePlayerL(filename, *this);
+	CActiveScheduler::Start();
+
+	if (iError != KErrNone)
+		{
+		ERR_PRINTF2(_L("Error creating file player %d"), iError);
+		return EFail;
+		}
+
+	//Stage 2	
+	INFO_PRINTF1(_L("Starting file playback."));
+	iSetPositionCountDown->Start(6000000, 6000000, callbackFunction);
+	iPlayer->Play();
+	
+	CActiveScheduler::Start();
+	
+	//Stage 4
+	if (iError != KErrNone)
+		{
+		ERR_PRINTF2(_L("Error during file playback %d"), iError);
+		return EFail;
+		}
+	else
+		{
+		INFO_PRINTF1(_L("File playback completed."));
+		return EPass;
+		}		
+	
+	}
+
+void CTestStepPlayerPlayWaitSetPos::MapcInitComplete(TInt aError, const TTimeIntervalMicroSeconds& /*aDuration*/)
+	{
+	iError = aError;
+	CActiveScheduler::Stop();
+	}
+
+void CTestStepPlayerPlayWaitSetPos::MapcPlayComplete(TInt aError)
+	{
+	iError = aError;
+	CActiveScheduler::Stop();
+	}
+
+TInt CTestStepPlayerPlayWaitSetPos::TimerCallback(TAny* aParentObject)
+	{
+	CTestStepPlayerPlayWaitSetPos* target = static_cast<CTestStepPlayerPlayWaitSetPos*>(aParentObject);
+	target->DoTimerCallback();
+	return 0;
+	}
+
+void CTestStepPlayerPlayWaitSetPos::DoTimerCallback()
+	{
+	//Stage 3
+	INFO_PRINTF1(_L("Setting the position to 2 seconds in."));
+	iSetPositionCountDown->Cancel();
+	iPlayer->SetPosition(2000000);
+	}
+
+//
+//
+// --------------------------------------------
+//
+/**
+ *
+ * Static constructor for CTestStepPlayerGetImplementationInfo.
+ *
+ *
+ * @return	"CTestStepPlayerGetImplementationInfo*"
+ *			The constructed CTestStepPlayerGetImplementationInfo
+ *
+ * @xxxx
+ * 
+ */
+CTestStepPlayerGetImplementationInfo* CTestStepPlayerGetImplementationInfo::NewL()
+	{
+	CTestStepPlayerGetImplementationInfo* self = new(ELeave) CTestStepPlayerGetImplementationInfo;
+	return self;
+	}
+
+/**
+ *
+ * Test step constructor.
+ * Each test step initialises its own name.
+ *
+ * @xxxx
+ * 
+ */
+CTestStepPlayerGetImplementationInfo::CTestStepPlayerGetImplementationInfo() 
+	{
+	iTestStepResult = EPass;
+	// store the name of this test case
+	// this is the name that is used by the script file
+	iTestStepName = _L("MM-MMF-ACLNT-U-0061-HP");
+	}
+
+/**
+ *
+ * Test step destructor.
+ *
+ * @xxxx
+ * 
+ */
+CTestStepPlayerGetImplementationInfo::~CTestStepPlayerGetImplementationInfo()
+	{
+	}
+
+/**
+ * Implementation of the MMdaAudioPlayerCallback interface functions
+ **/
+void CTestStepPlayerGetImplementationInfo::MapcInitComplete(TInt aError, 
+								const TTimeIntervalMicroSeconds &/*aDuration*/)
+	{
+	iError = aError;
+	CActiveScheduler::Stop();
+	}
+
+void CTestStepPlayerGetImplementationInfo::MapcPlayComplete(TInt aError)
+	{
+	iError = aError;
+	CActiveScheduler::Stop();
+	}
+
+/**
+ *
+ * Test step Preamble.
+ *
+ * @xxxx
+ * 
+ */
+enum TVerdict CTestStepPlayerGetImplementationInfo::DoTestStepPreambleL(void)
+	{
+	enum TVerdict verdict;
+	// this installs the scheduler
+	verdict = CTestStepUnitMMFAudClient::DoTestStepPreambleL();
+	if (verdict != EPass)
+		return verdict;
+
+	 if(!GetStringFromConfig(_L("SectionOne"), _L("AudioPlayFName1"), iFileName))
+		{
+		 //INFO_PRINTF2(_L("file name %s not found..."), fileptr);
+		 return EInconclusive;
+		}
+
+	// Printing to the console and log file
+	INFO_PRINTF1(iTestStepName);
+	INFO_PRINTF1(_L("this test tests CMMFMdaAudioPlayerUtility::ControllerImplementationInformationL()"));
+
+	return verdict;
+	}
+
+/**
+ *
+ * Test step Postamble.
+ *
+ * @xxxx
+ * 
+ */
+enum TVerdict CTestStepPlayerGetImplementationInfo::DoTestStepPostambleL(void)
+	{
+	delete iPlayer;
+	iPlayer = NULL;
+	//[ Destroy the scheduler ]
+	return CTestStepUnitMMFAudClient::DoTestStepPostambleL();
+	}
+
+/**
+ *
+ * Do the test step.
+ * Each test step must supply an implementation for DoTestStepL.
+ *
+ * @return	"TVerdict"
+ *			The result of the test step
+ *
+ * @xxxx
+ * 
+ */
+TVerdict CTestStepPlayerGetImplementationInfo::DoTestStepL()
+	{
+	TInt err;
+	err = KErrNone;
+	iTestStepResult = EFail;
+
+	iPlayer = CMMFMdaAudioPlayerUtility::NewFilePlayerL(iFileName, *this);
+	CActiveScheduler::Start();
+
+	if (iError != KErrNone) 
+		return EInconclusive;
+
+	const CMMFControllerImplementationInformation* info = NULL;
+	
+	TRAP(err, info = &iPlayer->ControllerImplementationInformationL());
+	if (err != KErrNone)
+		return EFail;
+
+	if (info->DisplayName().Compare(KAudioControllerName)!=0)
+		iTestStepResult = EFail;
+	else
+		iTestStepResult = EPass;
+	
+	delete iPlayer;
+	iPlayer = NULL;
+
+	INFO_PRINTF1(_L("finished with this test step"));
+	// test steps return a result
+	return iTestStepResult;
+	}
+
+//
+//
+//
+// --------------------------------------------
+//
+/**
+ *
+ * Static constructor for CTestStepPlayerSendCustomCommandSync.
+ *
+ *
+ * @return	"CTestStepPlayerSendCustomCommandSync*"
+ *			The constructed CTestStepPlayerSendCustomCommandSync
+ *
+ * @xxxx
+ * 
+ */
+CTestStepPlayerSendCustomCommandSync* CTestStepPlayerSendCustomCommandSync::NewL()
+	{
+	CTestStepPlayerSendCustomCommandSync* self = new(ELeave) CTestStepPlayerSendCustomCommandSync;
+	return self;
+	}
+
+/**
+ *
+ * Test step constructor.
+ * Each test step initialises its own name.
+ *
+ * @xxxx
+ * 
+ */
+CTestStepPlayerSendCustomCommandSync::CTestStepPlayerSendCustomCommandSync()
+	{
+	iTestStepResult = EPass;
+	// store the name of this test case
+	// this is the name that is used by the script file
+	iTestStepName = _L("MM-MMF-ACLNT-U-0062-HP");
+	}
+
+/**
+ *
+ * Test step destructor.
+ *
+ * @xxxx
+ * 
+ */
+CTestStepPlayerSendCustomCommandSync::~CTestStepPlayerSendCustomCommandSync()
+	{
+	}
+
+/**
+ * Implementation of the MVideoRecorderUtilityObserver interface functions
+ **/
+void CTestStepPlayerSendCustomCommandSync::MapcInitComplete(TInt aError, const TTimeIntervalMicroSeconds& /*aDuration*/)
+	{
+	iError = aError;
+	CActiveScheduler::Stop(); 
+	}
+
+void CTestStepPlayerSendCustomCommandSync::MapcPlayComplete(TInt aError)
+	{
+	iError = aError;
+	CActiveScheduler::Stop(); 
+	}
+	
+/**
+ *
+ * Test step Preamble.
+ *
+ * @xxxx
+ * 
+ */
+enum TVerdict CTestStepPlayerSendCustomCommandSync::DoTestStepPreambleL(void)
+	{
+	enum TVerdict verdict;
+	// this installs the scheduler
+	verdict = CTestStepUnitMMFAudClient::DoTestStepPreambleL();
+	if (verdict != EPass)
+		return verdict;
+
+	if(!GetStringFromConfig(_L("SectionOne"), _L("AudioFNameTestController"), iFileName))
+		{
+		 //INFO_PRINTF2(_L("file name %s not found..."), fileptr);
+		 return EInconclusive;
+		}
+
+	// Printing to the console and log file
+	INFO_PRINTF1(iTestStepName);
+	INFO_PRINTF1(_L("this test is a test of CMMFMdaAudioPlayerUtility::CustomCommandSync()"));
+
+	return verdict;
+	}
+
+/**
+ *
+ * Test step Postamble.
+ *
+ * @xxxx
+ * 
+ */
+enum TVerdict CTestStepPlayerSendCustomCommandSync::DoTestStepPostambleL(void)
+	{
+	delete iPlayer;
+	iPlayer = NULL;
+	//[ Destroy the scheduler ]
+	return CTestStepUnitMMFAudClient::DoTestStepPostambleL();
+	}
+
+/**
+ *
+ * Do the test step.
+ * Each test step must supply an implementation for DoTestStepL.
+ *
+ * @return	"TVerdict"
+ *			The result of the test step
+ *
+ * @xxxx
+ * 
+ */
+TVerdict CTestStepPlayerSendCustomCommandSync::DoTestStepL()
+	{
+	TInt err;
+	err = KErrNone;
+	iTestStepResult = EFail;
+
+	iPlayer = CMMFMdaAudioPlayerUtility::NewL(*this);
+	
+	// special command to open the test controller, since it uses a different Media ID and will not be found with the normal Open
+	err = OpenFileWithTestControllerL(iPlayer,iFileName);
+	// no callback, since we skipped this
+	if (err!=KErrNone)
+		return EInconclusive;	
+
+	TUid uid;
+	uid = TUid::Uid(0x101f72B4);
+	TMMFMessageDestinationPckg destPckg(uid);
+	// test without a return value
+	err = iPlayer->CustomCommandSync(destPckg,
+								EMMFTestCustomCommandGeneralSynchronous,
+								KFirstParameter,
+								KSecondParameter);
+								
+	if (err!=KTestCustomCommandSuccess)
+		return EFail;
+		
+	TBuf8<256> buf;
+		
+	err = iPlayer->CustomCommandSync(destPckg,
+								EMMFTestCustomCommandGeneralSynchronousWithReturn,
+								KFirstParameter,
+								KSecondParameter,
+								buf);
+	
+	if (err!=KTestCustomCommandSuccess)
+		return EFail;
+		
+	if (buf.Compare(KReturnParameter)==0)
+		iTestStepResult = EPass;
+	else
+		iTestStepResult = EFail;
+
+	delete iPlayer;
+	iPlayer = NULL;
+
+	INFO_PRINTF1(_L("finished with this test step"));
+	// test steps return a result
+	return iTestStepResult;
+	}
+	
+	
+//
+//
+//
+// --------------------------------------------
+//
+/**
+ *
+ * Static constructor for CTestStepPlayerSendCustomCommandAsync.
+ *
+ *
+ * @return	"CTestStepPlayerSendCustomCommandAsync*"
+ *			The constructed CTestStepPlayerSendCustomCommandAsync
+ *
+ * @xxxx
+ * 
+ */
+CTestStepPlayerSendCustomCommandAsync* CTestStepPlayerSendCustomCommandAsync::NewL()
+	{
+	CTestStepPlayerSendCustomCommandAsync* self = new(ELeave) CTestStepPlayerSendCustomCommandAsync;
+	return self;
+	}
+
+/**
+ *
+ * Test step constructor.
+ * Each test step initialises its own name.
+ *
+ * @xxxx
+ * 
+ */
+CTestStepPlayerSendCustomCommandAsync::CTestStepPlayerSendCustomCommandAsync()
+	{
+	iTestStepResult = EPass;
+	// store the name of this test case
+	// this is the name that is used by the script file
+	iTestStepName = _L("MM-MMF-ACLNT-U-0063-HP");
+	}
+
+/**
+ *
+ * Test step destructor.
+ *
+ * @xxxx
+ * 
+ */
+CTestStepPlayerSendCustomCommandAsync::~CTestStepPlayerSendCustomCommandAsync()
+	{
+	}
+
+/**
+ *
+ * Test step Close
+ * handles all deletion
+ * @xxxx
+ * 
+ */
+void CTestStepPlayerSendCustomCommandAsync::Close()
+	{
+	delete iAsyncObserver;
+	}
+
+/**
+ * Implementation of the MVideoRecorderUtilityObserver interface functions
+ **/
+void CTestStepPlayerSendCustomCommandAsync::MapcInitComplete(TInt aError, const TTimeIntervalMicroSeconds& /*aDuration*/)
+	{
+	iError = aError;
+	CActiveScheduler::Stop(); 
+	}
+
+void CTestStepPlayerSendCustomCommandAsync::MapcPlayComplete(TInt aError)
+	{
+	iError = aError;
+	CActiveScheduler::Stop(); 
+	}
+	
+/**
+ *
+ * Test step Preamble.
+ *
+ * @xxxx
+ * 
+ */
+enum TVerdict CTestStepPlayerSendCustomCommandAsync::DoTestStepPreambleL(void)
+	{
+	enum TVerdict verdict;
+	// this installs the scheduler
+	verdict = CTestStepUnitMMFAudClient::DoTestStepPreambleL();
+	if (verdict != EPass)
+		return verdict;
+
+	if(!GetStringFromConfig(_L("SectionOne"), _L("AudioFNameTestController"), iFileName))
+		{
+		 //INFO_PRINTF2(_L("file name %s not found..."), fileptr);
+		 return EInconclusive;
+		}
+		
+	iAsyncObserver = new (ELeave) CAsyncObserver;
+
+	// Printing to the console and log file
+	INFO_PRINTF1(iTestStepName);
+	INFO_PRINTF1(_L("this test tests CMMFMdaAudioPlayerUtility::CustomCommandAsync"));
+
+	return verdict;
+	}
+
+/**
+ *
+ * Test step Postamble.
+ *
+ * @xxxx
+ * 
+ */
+enum TVerdict CTestStepPlayerSendCustomCommandAsync::DoTestStepPostambleL(void)
+	{
+	delete iPlayer;
+	iPlayer = NULL;
+	//[ Destroy the scheduler ]
+	return CTestStepUnitMMFAudClient::DoTestStepPostambleL();
+	}
+
+/**
+ *
+ * Do the test step.
+ * Each test step must supply an implementation for DoTestStepL.
+ *
+ * @return	"TVerdict"
+ *			The result of the test step
+ *
+ * @xxxx
+ * 
+ */
+TVerdict CTestStepPlayerSendCustomCommandAsync::DoTestStepL()
+	{
+	TInt err;
+	err = KErrNone;
+	iTestStepResult = EFail;
+
+	iPlayer = CMMFMdaAudioPlayerUtility::NewL(*this);
+	
+	// special command to open the test controller, since it uses a different Media ID and will not be found with the normal Open
+	err = OpenFileWithTestControllerL(iPlayer,iFileName);
+	// no callback, since we skipped this
+	if (err!=KErrNone)
+		return EInconclusive;	
+
+	TUid uid;
+	uid = TUid::Uid(0x101f72B4);
+	// destinationPckg can be temporary as the asynchronous custom command returns before the temporary variable goes out of scope
+	TMMFMessageDestinationPckg destinationPckg(uid);
+	
+	// test without a return value
+	iPlayer->CustomCommandAsync(destinationPckg,
+								EMMFTestCustomCommandGeneralAsynchronous,
+								KFirstParameter,
+								KSecondParameter,
+								iAsyncObserver->ActiveStatus());
+
+	CActiveScheduler::Start();	
+	if (iAsyncObserver->iStatus.Int() !=KTestCustomCommandSuccess)
+		return EFail;
+								
+	TBuf8<256> buf;
+		
+	iPlayer->CustomCommandAsync(destinationPckg,
+								EMMFTestCustomCommandGeneralAsynchronousWithReturn,
+								KFirstParameter,
+								KSecondParameter,
+								buf,
+								iAsyncObserver->ActiveStatus());
+
+	CActiveScheduler::Start();	
+	if (iAsyncObserver->iStatus.Int() !=KTestCustomCommandSuccess)
+		return EFail;
+		
+	if (buf.Compare(KReturnParameter)==0)
+		iTestStepResult = EPass;
+	else
+		iTestStepResult = EFail;
+
+	INFO_PRINTF1(_L("finished with this test step"));
+	// test steps return a result
+	return iTestStepResult;
+	}
+
+//
+//
+// --------------------------------------------
+//
+/**
+ *
+ * Static constructor for CTestStepPlayerReloadingTest.
+ *
+ *
+ * @return	"CTestStepPlayerReloadingTest*"
+ *			The constructed CTestStepPlayerReloadingTest
+ *
+ * @xxxx
+ * 
+ */
+CTestStepPlayerReloadingTest* CTestStepPlayerReloadingTest::NewL()
+	{
+	CTestStepPlayerReloadingTest* self = new(ELeave) CTestStepPlayerReloadingTest;
+	return self;
+	}
+
+/**
+ *
+ * Test step constructor.
+ * Each test step initialises its own name.
+ *
+ * @xxxx
+ * 
+ */
+CTestStepPlayerReloadingTest::CTestStepPlayerReloadingTest()
+	{
+	iTestStepResult = EPass;
+	// store the name of this test case
+	// this is the name that is used by the script file
+	iTestStepName = _L("MM-MMF-ACLNT-U-0064-HP");
+	}
+
+/**
+ *
+ * Test step destructor.
+ *
+ * @xxxx
+ * 
+ */
+CTestStepPlayerReloadingTest::~CTestStepPlayerReloadingTest()
+	{
+	}
+
+void CTestStepPlayerReloadingTest::MapcInitComplete(TInt aError, const TTimeIntervalMicroSeconds& /*aDuration*/)
+	{
+	iError = aError;
+	CActiveScheduler::Stop(); 
+	}
+
+void CTestStepPlayerReloadingTest::MapcPlayComplete(TInt aError)
+	{
+	iError = aError;
+	CActiveScheduler::Stop(); 
+	}
+	
+void CTestStepPlayerReloadingTest::MaloLoadingStarted()
+	{
+	iLoadingStarted = ETrue;
+	CActiveScheduler::Stop();
+	}
+	
+void CTestStepPlayerReloadingTest::MaloLoadingComplete()
+	{
+	iLoadingComplete = ETrue;
+	CActiveScheduler::Stop();
+	}
+
+
+
+
+/**
+ *
+ * Test step Preamble.
+ *
+ * @xxxx
+ * 
+ */
+enum TVerdict CTestStepPlayerReloadingTest::DoTestStepPreambleL(void)
+	{
+	enum TVerdict verdict;
+	// this installs the scheduler
+	verdict = CTestStepUnitMMFAudClient::DoTestStepPreambleL();
+	if (verdict != EPass)
+		return verdict;
+
+	if(!GetStringFromConfig(_L("SectionOne"), _L("AudioFNameTestController"), iFileName))
+		{
+		 //INFO_PRINTF2(_L("file name %s not found..."), fileptr);
+		 return EInconclusive;
+		}
+
+	// Printing to the console and log file
+	INFO_PRINTF1(iTestStepName);
+	INFO_PRINTF1(_L("this test simulates Audio Reloading and tests CMMFMdaAudioPlayerUtility::GetAudioLoadingProgressL"));
+
+	return verdict;
+	}
+
+/**
+ *
+ * Test step Postamble.
+ *
+ * @xxxx
+ * 
+ */
+enum TVerdict CTestStepPlayerReloadingTest::DoTestStepPostambleL(void)
+	{
+	delete iPlayer;
+	iPlayer = NULL;
+	//[ Destroy the scheduler ]
+	return CTestStepUnitMMFAudClient::DoTestStepPostambleL();
+	}
+
+/**
+ *
+ * Do the test step.
+ * Each test step must supply an implementation for DoTestStepL.
+ *
+ * @return	"TVerdict"
+ *			The result of the test step
+ *
+ * @xxxx
+ * 
+ */
+TVerdict CTestStepPlayerReloadingTest::DoTestStepL()
+	{
+	TInt err;
+	err = KErrNone;
+	iTestStepResult = EFail;
+
+	iPlayer = CMMFMdaAudioPlayerUtility::NewL(*this);
+
+	err = OpenFileWithTestControllerL(iPlayer, iFileName);
+
+	if (err!=KErrNone)
+		return EInconclusive;
+		
+	iPlayer->RegisterForAudioLoadingNotification(*this);
+
+	TUid uid;
+	uid = TUid::Uid(0x101f72B4);
+	TMMFMessageDestinationPckg destPckg(uid);
+	// test without a return value
+	err = iPlayer->CustomCommandSync(destPckg,
+								EMMFTestCustomCommandSimulateReloading,
+								KNullDesC8,
+								KNullDesC8);
+								
+	if (err!=KErrNone)
+		return EInconclusive;
+		
+	CActiveScheduler::Start();
+	
+	if (!iLoadingStarted)
+		return EFail;
+		
+	TInt percentageComplete = 0;
+	TInt oldPercentageComplete =0;
+	while (percentageComplete!=100 && percentageComplete>=oldPercentageComplete)
+		{
+		oldPercentageComplete = percentageComplete;
+		iPlayer->GetAudioLoadingProgressL(percentageComplete);
+		INFO_PRINTF2(_L("Loading progress: %d"),percentageComplete);
+		User::After(100);
+		}
+
+	CActiveScheduler::Start();
+		
+	if (iLoadingComplete && percentageComplete==100)
+		iTestStepResult = EPass;
+	else
+		iTestStepResult = EFail;
+
+	delete iPlayer;
+	iPlayer = NULL;
+
+	INFO_PRINTF1(_L("finished with this test step"));
+	// test steps return a result
+	return iTestStepResult;
+	}
+
+/**
+ *
+ * Static constructor for CTestStepPlayerPlayStopFFPlayNext.
+ *
+ *
+ * @return	"CTestStepPlayerPlayStopFFPlayNext*"
+ *			The constructed CTestStepPlayerPlayStopFFPlayNext
+ *
+ * @xxxx
+ * 
+ */
+CTestStepPlayerPlayStopFFPlayNext* CTestStepPlayerPlayStopFFPlayNext::NewL()
+	{
+	CTestStepPlayerPlayStopFFPlayNext* self = new(ELeave) CTestStepPlayerPlayStopFFPlayNext;
+	return self;
+	}
+
+
+/**
+ *
+ * Test step constructor.
+ * Each test step initialises its own name.
+ *
+ * @xxxx
+ * 
+ */
+
+CTestStepPlayerPlayStopFFPlayNext::CTestStepPlayerPlayStopFFPlayNext()
+	{
+	// store the name of this test case
+	// this is the name that is used by the script file
+	iTestStepName = _L("MM-MMF-ACLNT-U-0856-HP");
+
+	}
+
+/**
+ *
+ * Test step destructor.
+ *
+ * @xxxx
+ * 
+ */
+
+CTestStepPlayerPlayStopFFPlayNext::~CTestStepPlayerPlayStopFFPlayNext()
+	{
+	}
+
+/**
+ *
+ * Test step Preamble.
+ *
+ * @xxxx
+ * 
+ */
+
+TVerdict CTestStepPlayerPlayStopFFPlayNext::DoTestStepPreambleL(void)
+	{
+	TVerdict verdict=EPass;
+	 // this installs the scheduler
+	if((verdict = CTestStepUnitMMFAudClient::DoTestStepPreambleL())	!= EPass)
+		{
+		return EInconclusive;
+		}
+
+	// Printing to the console and log file
+	INFO_PRINTF2(_L("%S"), &iTestStepName);
+	INFO_PRINTF1(_L("this is a test of calling Play, Stop fast forward close"));
+	INFO_PRINTF1(_L("and then open the next song playing again & verifying the clip is played from the start"));
+
+	if(!GetStringFromConfig(_L("SectionOne"), _L("AudioPlayFName10"), iFileName)) 
+		{
+		return EInconclusive;
+		}
+	// create a play utility
+	TRAPD(error, iPlayerUtility = CMdaAudioPlayerUtility::NewL(*this));
+	if (error != KErrNone)
+		{
+		return EInconclusive;
+		}
+	return verdict;
+	}
+
+/**
+ *
+ * Test step Postamble.
+ *
+ * @xxxx
+ * 
+ */
+TVerdict CTestStepPlayerPlayStopFFPlayNext::DoTestStepPostambleL(void)	
+	{
+	delete iPlayerUtility;
+	iPlayerUtility = NULL;
+
+	//[ Destroy the scheduler ]
+	return CTestStepUnitMMFAudClient::DoTestStepPostambleL();
+	}
+
+/**
+ *
+ * Callback Handle.
+ *
+ * @xxxx
+ * 
+ */
+void CTestStepPlayerPlayStopFFPlayNext::MapcInitComplete(TInt aError, const TTimeIntervalMicroSeconds& /*aDuration*/)
+	{
+	INFO_PRINTF2(_L("MapcInitComplete(): error = %d"), aError);
+	iError = aError;
+	CActiveScheduler::Stop();
+	}
+
+void CTestStepPlayerPlayStopFFPlayNext::MapcPlayComplete(TInt aError)
+	{
+	INFO_PRINTF2(_L("MapcPlayComplete(): error = %d"), aError);
+	iError = aError;
+	CActiveScheduler::Stop();
+	}
+
+
+TVerdict CTestStepPlayerPlayStopFFPlayNext::DoTestStepL()
+	{
+	iTestStepResult = EPass;
+
+	INFO_PRINTF1(_L("Opening file using player utility..."));
+	
+	// open the sound file
+	TRAP(iError, iPlayerUtility->OpenFileL(iFileName));
+	if (iError != KErrNone)
+		{
+		return EInconclusive;
+		}
+	// wait for open to complete
+	CActiveScheduler::Start(); 
+	if (iError != KErrNone)
+		{
+		return EFail;
+		}
+
+	TTimeIntervalMicroSeconds playStart = TTimeIntervalMicroSeconds(0);
+	TTimeIntervalMicroSeconds playEnd = iPlayerUtility->Duration();
+	// SetPlayWindow, Play & verify we play from start of window
+	INFO_PRINTF1(_L("calling SetPlayWindow..."));
+	iPlayerUtility->SetPlayWindow(playStart, playEnd);
+	
+	INFO_PRINTF1(_L("calling play..."));
+	iPlayerUtility->Play();
+		
+	if (iError != KErrNone)
+		{
+		  return EFail;
+		}
+	const TInt KTwoSeconds = 2000000;
+	User::After(KTwoSeconds);
+
+	TTimeIntervalMicroSeconds position = TTimeIntervalMicroSeconds(0);
+	iPlayerUtility->GetPosition(position);
+	INFO_PRINTF1(_L("calling stop..."));
+	iPlayerUtility->Stop();
+	FastForward(position);
+	iPlayerUtility->GetPosition(position);
+	FastForward(position);
+	iPlayerUtility->GetPosition(position);
+	FastForward(position);
+	Next();
+	if (iError != KErrNone)
+		{
+		return EFail;
+		}
+	iPlayerUtility->Play();
+	User::After(KTwoSeconds);
+	position = 0;	
+	iPlayerUtility->GetPosition(position);
+	TInt64 halfSecond = playEnd.Int64() / 2;
+	if (position.Int64() > halfSecond)
+		{
+		INFO_PRINTF2(_L("play position is not at start of clip - %d"), position.Int64());
+		return EFail;
+		}
+	iPlayerUtility->Close();
+	return iTestStepResult;
+	}
+
+void CTestStepPlayerPlayStopFFPlayNext::FastForward(const TTimeIntervalMicroSeconds aPosition)
+	{
+	TTimeIntervalMicroSeconds step = TTimeIntervalMicroSeconds(200000);
+	iPlayerUtility->SetPosition(aPosition.Int64() + step.Int64());
+	}
+
+void CTestStepPlayerPlayStopFFPlayNext::Next()
+	{
+	iPlayerUtility->Close();
+	iError = KErrNone;
+	TRAP(iError, iPlayerUtility->OpenFileL(iFileName));
+	}
+
+
+//
+// class CTestStepMultipleSetPlayerPriority
+// --------------------------------------------
+//
+/**
+ *
+ * Static constructor for CTestStepMultipleSetPlayerPriority.
+ *
+ *
+ * @return	"CTestStepMultipleSetPlayerPriority*"
+ *			The constructed CTestStepMultipleSetPlayerPriority
+ *
+ * @xxxx
+ * 
+ */
+CTestStepMultipleSetPlayerPriority* CTestStepMultipleSetPlayerPriority::NewL()
+	{
+	CTestStepMultipleSetPlayerPriority* self = new(ELeave) CTestStepMultipleSetPlayerPriority;
+	return self;
+	}
+
+/**
+ *
+ * Test step constructor.
+ * Each test step initialises its own name.
+ *
+ * @xxxx
+ * 
+ */
+CTestStepMultipleSetPlayerPriority::CTestStepMultipleSetPlayerPriority()
+	{
+	iTestStepResult = EPass;
+	// store the name of this test case
+	// this is the name that is used by the script file
+	iTestStepName = _L("MM-MMF-ACLNT-U-0957-HP");
+	}
+
+/**
+ *
+ * Test step destructor.
+ *
+ * @xxxx
+ * 
+ */
+CTestStepMultipleSetPlayerPriority::~CTestStepMultipleSetPlayerPriority()
+	{
+	}
+/**
+ * Implementation of the MMdaAudioPlayerCallback interface functions
+ **/
+void CTestStepMultipleSetPlayerPriority::MapcInitComplete(TInt aError, 
+								const TTimeIntervalMicroSeconds &/*aDuration*/)
+	{
+	iError = aError;
+	CActiveScheduler::Stop();
+	}
+
+void CTestStepMultipleSetPlayerPriority::MapcPlayComplete(TInt aError)
+	{
+	iError = aError;
+	CActiveScheduler::Stop();
+	}
+
+/**
+ *
+ * Test step Preamble.
+ *
+ * @xxxx
+ * 
+ */
+ enum TVerdict CTestStepMultipleSetPlayerPriority::DoTestStepPreambleL(void)
+	{
+	 enum TVerdict verdict;
+	 // this installs the scheduler
+	 verdict = CTestStepUnitMMFAudClient::DoTestStepPreambleL();
+
+	// Printing to the console and log file
+	 INFO_PRINTF1(_L("MM-MMF-ACLNT-U-0957-HP"));
+	 INFO_PRINTF1(_L("This test checks for setting the priorities more than once, as part of  DEF067052"));
+
+	 iError = KErrNone; //KErrTimedOut;
+
+	 if(!GetStringFromConfig(_L("SectionOne"), _L("AudioFNameMeta"), iFileName))
+		{
+		 return EInconclusive;
+		}
+
+	 iPlayer = CMMFMdaAudioPlayerUtility::NewFilePlayerL(iFileName, *this);
+	 CActiveScheduler::Start();
+	 User::After(1000000);
+
+	 if (iPlayer == NULL ||
+		 iError != KErrNone )
+		 return EInconclusive;
+	 
+	 return verdict;
+	}
+
+/**
+ *
+ * Test step Postamble.
+ *
+ * @xxxx
+ * 
+ */
+enum TVerdict CTestStepMultipleSetPlayerPriority::DoTestStepPostambleL(void)
+	{
+	delete iPlayer;
+	iPlayer = NULL;
+	//[ Destroy the scheduler ]
+	return CTestStepUnitMMFAudClient::DoTestStepPostambleL();
+	}
+
+/**
+ *
+ * Do the test step.
+ * Each test step must supply an implementation for DoTestStepL.
+ *
+ * @return	"TVerdict"
+ *			The result of the test step
+ *
+ * @xxxx
+ * 
+ */
+TVerdict CTestStepMultipleSetPlayerPriority::DoTestStepL()
+	{
+	iTestStepResult = EPass;
+	TInt err = KErrNone; 
+	
+	iPlayer->SetPriority(EMdaPriorityNormal, EMdaPriorityPreferenceQuality);
+
+	TMMFPrioritySettings priorSets;
+	err = GetAudPlayerPriority(iPlayer, priorSets);
+	if (err != KErrNone ||
+		priorSets.iPriority != EMdaPriorityNormal ||
+		priorSets.iPref != EMdaPriorityPreferenceQuality)
+		{
+		return EFail;
+		}
+	iPlayer->Play();
+	User::After(1000000);
+	iPlayer->Pause();
+	iPlayer->SetPriority(EMdaPriorityMin, EMdaPriorityPreferenceTimeAndQuality);
+	err = GetAudPlayerPriority(iPlayer, priorSets);
+	if (err != KErrNone ||
+		priorSets.iPriority != EMdaPriorityMin ||
+		priorSets.iPref != EMdaPriorityPreferenceTimeAndQuality)
+		{
+		return EFail;
+		}
+	iPlayer->Play();
+	INFO_PRINTF1(_L("finished with this test step"));
+	// test steps return a result
+	return iTestStepResult;
+	}
+
+
+
+//
+// class CTestStepPlayerPlayPausePlay
+// --------------------------------------------
+//
+/**
+ *
+ * Static constructor for CTestStepPlayerPlayPausePlay.
+ *
+ *
+ * @return	"CTestStepPlayerPlayPausePlay*"
+ *			The constructed CTestStepPlayerPlayPausePlay
+ *
+ * @xxxx
+ * 
+ */
+CTestStepPlayerPlayPausePlay* CTestStepPlayerPlayPausePlay::NewL()
+	{
+	CTestStepPlayerPlayPausePlay* self = new(ELeave) CTestStepPlayerPlayPausePlay;
+	return self;
+	}
+
+/**
+ *
+ * Test step constructor.
+ * Each test step initialises its own name.
+ *
+ * @xxxx
+ * 
+ */
+CTestStepPlayerPlayPausePlay::CTestStepPlayerPlayPausePlay()
+	{
+	iTestStepResult = EPass;
+	// store the name of this test case
+	// this is the name that is used by the script file
+	iTestStepName = _L("MM-MMF-ACLNT-U-0958-HP");
+	}
+
+/**
+ *
+ * Test step destructor.
+ *
+ * @xxxx
+ * 
+ */
+CTestStepPlayerPlayPausePlay::~CTestStepPlayerPlayPausePlay()
+	{
+	}
+/**
+ * Implementation of the MMdaAudioPlayerCallback interface functions
+ **/
+void CTestStepPlayerPlayPausePlay::MapcInitComplete(TInt aError, 
+								const TTimeIntervalMicroSeconds &/*aDuration*/)
+	{
+	iError = aError;
+	CActiveScheduler::Stop();
+	}
+
+void CTestStepPlayerPlayPausePlay::MapcPlayComplete(TInt aError)
+	{
+	INFO_PRINTF1(_L("finished with this test step"));
+	iError = aError;
+	
+	if (!iError)
+		iTestStepResult = EPass;
+	
+	CActiveScheduler::Stop();
+	}
+
+/**
+ *
+ * Test step Preamble.
+ *
+ * @xxxx
+ * 
+ */
+ enum TVerdict CTestStepPlayerPlayPausePlay::DoTestStepPreambleL(void)
+	{
+	 enum TVerdict verdict;
+	 // this installs the scheduler
+	 verdict = CTestStepUnitMMFAudClient::DoTestStepPreambleL();
+
+	// Printing to the console and log file
+	 INFO_PRINTF1(_L("MM-MMF-ACLNT-U-0958-HP"));
+	 INFO_PRINTF1(_L("This test checks that a paused playback at position 0 will resume and complete, as part of DEF070060"));	 
+
+	 iError = KErrNone; //KErrTimedOut;
+
+	 if(!GetStringFromConfig(_L("SectionOne"), _L("AudioFNameMeta"), iFileName))
+		{
+		 return EInconclusive;
+		}
+
+	 iPlayer = CMMFMdaAudioPlayerUtility::NewFilePlayerL(iFileName, *this);
+	 CActiveScheduler::Start();
+	 User::After(1000000);
+
+	 if (iPlayer == NULL ||
+		 iError != KErrNone )
+		 return EInconclusive;
+	 
+	 return verdict;
+	}
+
+/**
+ *
+ * Test step Postamble.
+ *
+ * @xxxx
+ * 
+ */
+enum TVerdict CTestStepPlayerPlayPausePlay::DoTestStepPostambleL(void)
+	{
+	delete iPlayer;
+	iPlayer = NULL;
+	//[ Destroy the scheduler ]
+	return CTestStepUnitMMFAudClient::DoTestStepPostambleL();
+	}
+
+/**
+ *
+ * Do the test step.
+ * Each test step must supply an implementation for DoTestStepL.
+ *
+ * @return	"TVerdict"
+ *			The result of the test step
+ *
+ * @xxxx
+ * 
+ */
+TVerdict CTestStepPlayerPlayPausePlay::DoTestStepL()
+	{
+	iTestStepResult = EFail;
+	
+	iPlayer->Play();
+	iPlayer->Pause();
+	iPlayer->Play();
+	CActiveScheduler::Start();
+	// test steps return a result
+	return iTestStepResult;
+	}
+	
+
+//
+// class CTestStepPlaybackDurationInformation
+//
+
+/**
+ *
+ * Static constructor for CTestStepPlaybackDurationInformation.
+ *
+ *
+ * @return	"CTestStepPlaybackDurationInformation*"
+ *			The constructed CTestStepPlaybackDurationInformation
+ *
+ * @xxxx
+ * 
+ */
+CTestStepPlaybackDurationInformation* CTestStepPlaybackDurationInformation::NewL()
+	{
+	CTestStepPlaybackDurationInformation* self = new(ELeave) CTestStepPlaybackDurationInformation;
+	return self;
+	}
+
+/**
+ *
+ * Test step constructor.
+ * Each test step initialises its own name.
+ *
+ * @xxxx
+ * 
+ */
+CTestStepPlaybackDurationInformation::CTestStepPlaybackDurationInformation()
+	{
+	iTestStepResult = EPass;
+	// store the name of this test case
+	// this is the name that is used by the script file
+	iTestStepName = _L("MM-MMF-ACLNT-U-0960-HP");
+	}
+
+/**
+ *
+ * Test step destructor.
+ *
+ * @xxxx
+ * 
+ */
+CTestStepPlaybackDurationInformation::~CTestStepPlaybackDurationInformation()
+	{
+	}
+	
+/**
+ * Implementation of the MMdaAudioPlayerCallback interface functions
+ **/
+void CTestStepPlaybackDurationInformation::MapcInitComplete(TInt aError, 
+								const TTimeIntervalMicroSeconds &/*aDuration*/)
+	{
+	iError = aError;
+	CActiveScheduler::Stop();
+	}
+
+void CTestStepPlaybackDurationInformation::MapcPlayComplete(TInt)
+	{
+	}
+
+/**
+ *
+ * Test step Preamble.
+ *
+ * @xxxx
+ * 
+ */
+enum TVerdict CTestStepPlaybackDurationInformation::DoTestStepPreambleL(void)
+	{
+	enum TVerdict verdict;
+	// this installs the scheduler
+	verdict = CTestStepUnitMMFAudClient::DoTestStepPreambleL();
+
+	// Printing to the console and log file
+	INFO_PRINTF1(_L("MM-MMF-ACLNT-U-0960-HP"));
+	
+	INFO_PRINTF1(_L("This test checks that CMdaAudioPlayerUtility::Duration(TTimeIntervalMicroSeconds &) returns TMMFDurationInfo::EMMFDurationInfoValid"));
+	
+	iError = KErrNone;
+
+	if(!GetStringFromConfig(_L("SectionOne"), _L("AudioFNameMeta"), iFileName))
+		{
+		return EInconclusive;
+		}
+
+	//
+	// Setup player with dummy file
+	iPlayer = CMdaAudioPlayerUtility::NewFilePlayerL(iFileName, *this);
+	
+	CActiveScheduler::Start();
+	User::After(1000000);
+
+	if (iPlayer == NULL ||
+	 	iError != KErrNone )
+	 	return EInconclusive;
+	 
+	return verdict;
+	}
+
+/**
+ *
+ * Test step Postamble.
+ *
+ * @xxxx
+ * 
+ */
+enum TVerdict CTestStepPlaybackDurationInformation::DoTestStepPostambleL(void)
+	{
+	delete iPlayer;
+	iPlayer = NULL;
+	//[ Destroy the scheduler ]
+	return CTestStepUnitMMFAudClient::DoTestStepPostambleL();
+	}
+
+/**
+ *
+ * Do the test step.
+ * Each test step must supply an implementation for DoTestStepL.
+ *
+ * @return	"TVerdict"
+ *			The result of the test step
+ *
+ * @xxxx
+ * 
+ */
+TVerdict CTestStepPlaybackDurationInformation::DoTestStepL()
+	{
+	iTestStepResult = EFail;
+	
+	// Check that the duration state is TMMFDurationInfo::EMMFDurationInfoValid - known.
+	TTimeIntervalMicroSeconds  result2 = 0;
+	TMMFDurationInfo result = iPlayer->Duration(result2);
+	
+	if ( result == EMMFDurationInfoValid )
+		{
+		iTestStepResult = EPass;		
+		}
+	else
+		{
+		iTestStepResult = EFail;
+		}
+	
+	// test steps return a result
+	return iTestStepResult;
+	}
+
+
+//
+//
+// --------------------------------------------
+//
+/**
+ *
+ * Static constructor for CTestStepPlayerCheckImplementationInfo.
+ *
+ *
+ * @return	"CTestStepPlayerCheckImplementationInfo*"
+ *			The constructed CTestStepPlayerCheckImplementationInfo
+ *
+ * @xxxx
+ * 
+ */
+CTestStepPlayerCheckImplementationInfo* CTestStepPlayerCheckImplementationInfo::NewL()
+	{
+	CTestStepPlayerCheckImplementationInfo* self = new(ELeave) CTestStepPlayerCheckImplementationInfo;
+	return self;
+	}
+
+/**
+ *
+ * Test step constructor.
+ * Each test step initialises its own name.
+ *
+ * @xxxx
+ * 
+ */
+CTestStepPlayerCheckImplementationInfo::CTestStepPlayerCheckImplementationInfo() 
+	{
+	iTestStepResult = EPass;
+	// store the name of this test case
+	// this is the name that is used by the script file
+	iTestStepName = _L("MM-MMF-ACLNT-U-1004-HP");
+	}
+
+/**
+ *
+ * Test step destructor.
+ *
+ * @xxxx
+ * 
+ */
+CTestStepPlayerCheckImplementationInfo::~CTestStepPlayerCheckImplementationInfo()
+	{
+	}
+
+/**
+ * Implementation of the MMdaAudioPlayerCallback interface functions
+ **/
+void CTestStepPlayerCheckImplementationInfo::MapcInitComplete(TInt aError, 
+								const TTimeIntervalMicroSeconds &/*aDuration*/)
+	{
+	iError = aError;
+	CActiveScheduler::Stop();
+	}
+
+void CTestStepPlayerCheckImplementationInfo::MapcPlayComplete(TInt aError)
+	{
+	iError = aError;
+	CActiveScheduler::Stop();
+	}
+
+/**
+ *
+ * Test step Preamble.
+ *
+ * @xxxx
+ * 
+ */
+TVerdict CTestStepPlayerCheckImplementationInfo::DoTestStepPreambleL(void)
+	{
+	// this installs the scheduler
+	TVerdict verdict = CTestStepUnitMMFAudClient::DoTestStepPreambleL();
+	if (verdict != EPass)
+		{
+		return verdict;	
+		}
+
+	 if(!GetStringFromConfig(_L("SectionOne"), _L("AudioPlayFName1"), iFileName))
+		{
+		return EInconclusive;
+		}
+
+	// Printing to the console and log file
+	INFO_PRINTF1(iTestStepName);
+	INFO_PRINTF1(_L("this test tests CMMFMdaAudioPlayerUtility::ControllerImplementationInformationL()"));
+
+	return verdict;
+	}
+
+/**
+ *
+ * Test step Postamble.
+ *
+ * @xxxx
+ * 
+ */
+TVerdict CTestStepPlayerCheckImplementationInfo::DoTestStepPostambleL(void)
+	{
+	//[ Destroy the scheduler ]
+	return CTestStepUnitMMFAudClient::DoTestStepPostambleL();
+	}
+
+/**
+ *
+ * Do the test step.
+ * Each test step must supply an implementation for DoTestStepL.
+ *
+ * @return	"TVerdict"
+ *			The result of the test step
+ *
+ * @xxxx
+ * 
+ */
+TVerdict CTestStepPlayerCheckImplementationInfo::DoTestStepL()
+	{
+	TInt err = KErrNone;
+	iTestStepResult = EFail;
+	
+	iPlayer = CMMFMdaAudioPlayerUtility::NewFilePlayerL(iFileName, *this);
+	CActiveScheduler::Start();
+
+	if (iError != KErrNone) 
+		{
+		return EInconclusive;	
+		}
+
+	const CMMFControllerImplementationInformation* info = NULL;
+	
+	TRAP(err, info = &iPlayer->ControllerImplementationInformationL());
+	if (err != KErrNone)
+		{
+		return EFail;	
+		}
+	
+	TBuf<40> displayName;
+	displayName.Copy(info->DisplayName());
+	
+	iPlayer->Close(); 
+
+	if(!GetStringFromConfig(_L("SectionOne"), _L("AudioFNameTestController"), iFileName))
+		{ 
+		return EInconclusive;
+		}
+		
+	err = OpenFileWithTestControllerL(iPlayer,iFileName);
+	// no callback, since we skipped this
+	if (err != KErrNone)
+		{
+		return EInconclusive;		
+		}
+			
+	TRAP(err, info = &iPlayer->ControllerImplementationInformationL());
+	
+	if(info->DisplayName().Compare(displayName) != 0)
+		{
+		iTestStepResult = EPass;	
+		}
+	else
+		{
+		iTestStepResult = EFail;	
+		}
+		
+	delete iPlayer;
+	iPlayer = NULL;
+	
+	INFO_PRINTF1(_L("finished with this test step"));
+	// test steps return a result
+	return iTestStepResult;
+	}
+