Bug 3673 - Seeking via grabbing the Music Player progress bar does not work.
// 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 program is designed the test of the MMF_ACLNT.
//
//
/**
@file TestPlayerUtils.cpp
*/
#include "TestPlayerUtils.h"
#include <caf/caf.h>
// constant table of parameters for tests
const TRepeatParameters KTestParameters[] =
{
{ _S("playerAudioFile"), 1, 1},
{ _S("Pcm16Mono12khz"), 3, 3},
{ _S("PCM8"), 3, 3},
{ _S("PCM8-6144bytes"), 1, 1},
{ _S("ALAW"), 3, 3},
{ _S("PCM16"), 1, 1},
{ _S("PCMU8"), 2, 2},
{ _S("PCMU16BE"), 3, 3},
{ _S("PCMU16"), 1, 1},
{ _S("MULAW"), 2, 2},
{ _S("Sequence1"), 2, 2},
{ _S("Sequence2"), 3, 3},
{ _S("IMAD"), 3, 3},
{ _S("GSM610"), 1, 1},
{ _S("Pcm8Mono44khz"), 2, 2},
{ _S("Pcm16Mono44khz"), 3, 3},
{ _S("Pcm16Mono48khz"), 1, 1},
{ _S("100khzSRate1KhzTone"), 2, 2},
{ _S("Pcm16Mono24khz"), 3, 3},
{ _S("playerAudioFile2"), 2, 2}
};
const TInt KNoOfTestFiles = 20;
TAny GetDriveName(TDes& aFileName)
{
#ifdef __WINS__
aFileName = _L("c:");
#elif defined(__MARM__) || defined(__X86GCC__)
#ifdef __TEST_FILES_ON_C_DRIVE__
aFileName = _L("c:");
#else
aFileName = _L("z:");
#endif // __TEST_FILES_ON_C_DRIVE__
#endif
}
#define STOP_TEST_GEN_ERROR ERR_PRINTF1(_L("State machine error")), StopTest(KErrGeneral, EFail)
/**
* Constructor
*/
CTestMmfAclntFile::CTestMmfAclntFile(const TDesC& aTestName,const TDesC& aSectName,
const TDesC& aKeyName,const TBool aPlay,
const TInt aExpectedError)
:iPlay (aPlay)
,iExpectedError (aExpectedError)
{
// store the name of this test case
// this is the name that is used by the script file
// Each test step initialises it's own name
iTestStepName = aTestName;
iSectName = aSectName;
iKeyName = aKeyName;
}
CTestMmfAclntFile* CTestMmfAclntFile::NewL(const TDesC& aTestName, const TDesC& aSectName,
const TDesC& aKeyName,const TBool aPlay,
const TInt aExpectedError = KErrNone)
{
CTestMmfAclntFile* self = new (ELeave) CTestMmfAclntFile(aTestName,aSectName,aKeyName,aPlay,aExpectedError);
return self;
}
CTestMmfAclntFile* CTestMmfAclntFile::NewLC(const TDesC& aTestName, const TDesC& aSectName,
const TDesC& aKeyName,
const TBool aPlay,
const TInt aExpectedError)
{
CTestMmfAclntFile* self = CTestMmfAclntFile::NewL(aTestName,aSectName,aKeyName,aPlay,aExpectedError);
CleanupStack::PushL(self);
return self;
}
void CTestMmfAclntFile::MapcInitComplete(TInt aError, const TTimeIntervalMicroSeconds &aDuration)
{
iError = aError;
iDuration = aDuration;
INFO_PRINTF1( _L("MMdaAudioPlayerCallback Init Complete"));
CActiveScheduler::Stop();
}
void CTestMmfAclntFile::MapcPlayComplete(TInt aError)
{
iError = aError;
INFO_PRINTF1(_L("MMdaAudioPlayerCallback Play Complete"));
CActiveScheduler::Stop();
}
/** Load and initialise an audio file.
*/
TVerdict CTestMmfAclntFile::DoTestStepL( void )
{
INFO_PRINTF1( _L("TestPlayerUtils : File"));
TVerdict ret = EFail;
iError = KErrTimedOut;
TBuf<KSizeBuf> filename;
TPtrC filename1;
if(!GetStringFromConfig(iSectName,iKeyName,filename1))
{
return EInconclusive;
}
GetDriveName(filename);
filename.Append(filename1);
CMdaAudioPlayerUtility* player = NULL;
INFO_PRINTF2(_L("CMdaAudioPlayerUtility::NewFilePlayerL() - %S"), &filename);
player = CMdaAudioPlayerUtility::NewFilePlayerL(filename, *this);
if (iTestStepName.Compare(_L("MM-MMF-ACLNT-I-2001-HP"))==0)
{
// Check file size is more than 0
RFs fs;
TInt err = fs.Connect();
if (err != KErrNone)
{
INFO_PRINTF2(_L("Error connecting to file session (%d)"), err);
return EInconclusive;
}
CleanupClosePushL(fs);
TEntry fileEntry;
err = fs.Entry(filename, fileEntry);
if (err != KErrNone)
{
INFO_PRINTF2(_L("Error getting file entry (%d)"), err);
fs.Close();
return EInconclusive;
}
if (fileEntry.iSize <= 0)
{
INFO_PRINTF2(_L("Test file '%S' has size %d"), fileEntry.iSize);
fs.Close();
return EInconclusive;
}
CleanupStack::PopAndDestroy(); // fs
}
#ifndef __WINS__
if (iTestStepName.Compare(_L("MM-MMF-ACLNT-I-2014-LP")) == 0)
{
// this test should not be run on Lubbock
INFO_PRINTF1(_L("Lubbock hardware is not fast enough to convert 100KHz audio."));
INFO_PRINTF1(_L("This test has been skipped for this reason..."));
delete player;
User::After(KOneSecond); // wait for deletion to shut down devsound
return EPass;
}
#endif
// Wait for initialisation callback
INFO_PRINTF1( _L("Initialise CMdaAudioPlayerUtility"));
CActiveScheduler::Start();
if(iError != KErrNone && (iExpectedError == iError))
{
if (iTestStepName.Compare(_L("MM-MMF-ACLNT-I-1008-HP")) == 0)
{
// Test is for non-existent file - check that the file has not been created
RFs fs;
TInt err = fs.Connect();
if (err != KErrNone)
{
ret = EInconclusive;
}
else
{
TEntry entry;
if (fs.Entry(filename, entry) == KErrNone)
{
ret = EFail; // file exists - test fails
}
else
ret = EPass;
fs.Close();
}
}
else
{
ret = EPass; // all other tests pass
}
delete player;
User::After(KOneSecond); // wait for deletion to shut down devsound
ERR_PRINTF2( _L("CMdaAudioPlayerUtility failed with expectable error %d"),iError );
return ret;
}
// Check for errors.
if (iError == KErrNone && player != NULL)
{
if(iPlay)
{
iError = KErrTimedOut;
player->Play();
// Wait for init callback
INFO_PRINTF1( _L("Play CMdaAudioPlayerUtility"));
CActiveScheduler::Start();
//can't use iExpected Error as is doesn't distinguish between
//error from NewFilePlayerL or PlayL.
if ((iTestStepName.Compare(_L("MM-MMF-ACLNT-I-2015-LP")) == 0))
{
if(iError == KErrNotSupported)
{
ret = EPass;
}
}
else if(iError == KErrNone)
ret = EPass;
}
else
ret = EPass;
}
delete player;
User::After(KOneSecond); // wait for deletion to shut down devsound
if(iError != KErrNone)
{
if ((iTestStepName.Compare(_L("MM-MMF-ACLNT-I-2014-LP")) == 0) && iError==KErrNotSupported)
{
//Sampling Rate greater than 96000 Hz is not expected in data , and we dont support this.
//This test has been changed to expect KErrNotSupported due to fix in PDEF131534
INFO_PRINTF1( _L("CMdaAudiPlayerUtility returned KErrNotSupported as expected"));
ret= EPass;
}
else
{
ERR_PRINTF2( _L("CMdaAudioPlayerUtility failed with error %d"),iError );
}
}
return ret;
}
/**
* Constructor
*/
CTestMmfAclntSEQNFile::CTestMmfAclntSEQNFile(const TDesC& aTestName,const TDesC& aSectName,
const TDesC& aKeyName,
const TBool aPlay,
const TBool aIsFile)
:iPlay (aPlay)
,iIsFile (aIsFile)
{
// store the name of this test case
// this is the name that is used by the script file
// Each test step initialises it's own name
iTestStepName = aTestName;
iSectName = aSectName;
iKeyName = aKeyName;
}
CTestMmfAclntSEQNFile* CTestMmfAclntSEQNFile::NewL(const TDesC& aTestName, const TDesC& aSectName,
const TDesC& aKeyName,
const TBool aPlay,
const TBool aIsFile)
{
CTestMmfAclntSEQNFile* self = new (ELeave) CTestMmfAclntSEQNFile(aTestName,aSectName,aKeyName,aPlay,aIsFile);
return self;
}
CTestMmfAclntSEQNFile* CTestMmfAclntSEQNFile::NewLC(const TDesC& aTestName, const TDesC& aSectName,
const TDesC& aKeyName,
const TBool aPlay,
const TBool aIsFile)
{
CTestMmfAclntSEQNFile* self = CTestMmfAclntSEQNFile::NewL(aTestName,aSectName,aKeyName,aPlay,aIsFile);
CleanupStack::PushL(self);
return self;
}
void CTestMmfAclntSEQNFile::MapcInitComplete(TInt aError, const TTimeIntervalMicroSeconds &aDuration)
{
iError = aError;
iDuration = aDuration;
INFO_PRINTF1( _L("MMdaAudioPlayerCallback Init Complete"));
CActiveScheduler::Stop();
}
void CTestMmfAclntSEQNFile::MapcPlayComplete(TInt aError)
{
iError = aError;
INFO_PRINTF1( _L("MMdaAudioPlayerCallback Play Complete"));
CActiveScheduler::Stop();
}
//This method is used to stop playing the file 1 second after we started
void CTestMmfAclntSEQNFile::DelayedMethodCallL()
{
CActiveScheduler::Stop();
}
/** Load and play an audio sequence file.
*/
TVerdict CTestMmfAclntSEQNFile::DoTestStepL( void )
{
INFO_PRINTF1( _L("TestPlayerUtils : File"));
TVerdict ret = EFail;
iError = KErrTimedOut;
TBuf<KSizeBuf> filename;
TPtrC filename1;
if(!GetStringFromConfig(iSectName,iKeyName,filename1))
{
return EInconclusive;
}
GetDriveName(filename);
filename.Append(filename1);
CMdaAudioPlayerUtility* player = NULL;
HBufC8* seqnDesc = NULL;
RFile file;
RFs fs;
if(iIsFile)
{
player = CMdaAudioPlayerUtility::NewFilePlayerL(filename, *this);
}
else
{
User::LeaveIfError(fs.Connect());
//TIMB
User::LeaveIfError(file.Open(fs, filename, EFileShareReadersOnly | EFileStream));
CleanupClosePushL(file);
TInt size;
User::LeaveIfError(file.Size(size));
seqnDesc = HBufC8::NewMaxLC(size);
TPtr8 bufferDes(seqnDesc->Des());
User::LeaveIfError(file.Read(bufferDes));
player = CMdaAudioPlayerUtility::NewDesPlayerL(bufferDes, *this);
}
CleanupStack::PushL(player);
// Wait for initialisation callback
INFO_PRINTF1( _L("Initialise CMdaAudioPlayerUtility"));
CActiveScheduler::Start();
if(iError == KErrNone)
{
TInt maxVol = player->MaxVolume();
player->SetVolume(maxVol/2);
TInt gotVol;
iError = player->GetVolume(gotVol);
if((iError != KErrNone) || (maxVol/2 != gotVol))
{
ERR_PRINTF1( _L("CMdaAudioPlayerUtility failed volume tests"));
if(iError == KErrNone)
iError = KErrGeneral;
}
}
if(iError == KErrNone)
{
TTimeIntervalMicroSeconds t(0);
TTimeIntervalMicroSeconds zeroUs(0);
t = player->Duration();
if(t != zeroUs)
{
ERR_PRINTF1( _L("CMdaAudioPlayerUtility failed duration test"));
iError = KErrGeneral;
}
player->SetPosition(zeroUs);
iError = player->GetPosition(t);
if((t != zeroUs) || (iError != KErrNone))
{
ERR_PRINTF1( _L("CMdaAudioPlayerUtility failed duration test"));
if(iError == KErrNone)
iError = KErrGeneral;
}
}
if(iError == KErrNone)
{
TInt entries;
TInt metaErr = KErrNone;
metaErr = player->GetNumberOfMetaDataEntries(entries);
if(metaErr != KErrNotSupported)
{
ERR_PRINTF1( _L("CMdaAudioPlayerUtility failed volume tests"));
iError = metaErr;
}
else
{
CMMFMetaDataEntry* metaEntry = NULL; // EABI warning removal - "metaEntry was set but never used"
TRAP(metaErr, metaEntry = player->GetMetaDataEntryL(0)); // EABI warning removal - "metaEntry was set but never used"
if(metaErr != KErrNotSupported)
{
ERR_PRINTF1( _L("CMdaAudioPlayerUtility failed volume tests"));
iError = metaErr;
if (metaErr==KErrNone)
{
delete metaEntry;
}
}
}
}
if(iError == KErrNone)
{
player->SetBalance(KMMFBalanceMaxLeft);
TInt bal = KMMFBalanceCenter;
iError = player->GetBalance(bal);
if(bal != KMMFBalanceMaxLeft)
{
ERR_PRINTF1( _L("CMdaAudioPlayerUtility failed balance tests"));
if(iError == KErrNone)
iError = KErrGeneral;
}
else
player->SetBalance(KMMFBalanceCenter);
}
if(iError == KErrNone)
{
TInt priErr = player->SetPriority(EMdaPriorityMin, EMdaPriorityPreferenceNone);
if(priErr != KErrNone)
{
ERR_PRINTF1( _L("CMdaAudioPlayerUtility failed priority tests"));
iError = KErrGeneral;
}
else
player->SetPriority(EMdaPriorityNormal, EMdaPriorityPreferenceNone);
}
if(iError == KErrNone)
{
iError = KErrTimedOut;
player->Play();
//Stop the player after one second and restart
CDelayedMethodCall* delayedMethodCall = CDelayedMethodCall::NewL(this);
CleanupStack::PushL(delayedMethodCall);
delayedMethodCall->After(KOneSecond);
CActiveScheduler::Start();
CleanupStack::PopAndDestroy(delayedMethodCall);
player->Stop();
player->Play();
CActiveScheduler::Start();
}
CleanupStack::PopAndDestroy(player);
if(iIsFile == EFalse)
{
CleanupStack::PopAndDestroy(seqnDesc);
CleanupStack::PopAndDestroy(&file);
}
User::After(KOneSecond); // wait for deletion to shut down devsound
if(iError == KErrNone)
{
ret = EPass;
}
else
ERR_PRINTF2( _L("CMdaAudioPlayerUtility failed with error %d"),iError );
return ret;
}
//------------------------------------------------------------------
/**
* Constructor
*/
CTestMmfAclntDesc::CTestMmfAclntDesc(const TDesC& aTestName,const TDesC& aSectName,const TDesC& aKeyName, const TBool aPlay, const TInt aExpectedError)
:iPlay (aPlay),
iExpectedError(aExpectedError)
{
// store the name of this test case
// this is the name that is used by the script file
// Each test step initialises it's own name
iTestStepName = aTestName;
iSectName = aSectName;
iKeyName = aKeyName;
}
CTestMmfAclntDesc* CTestMmfAclntDesc::NewL(const TDesC& aTestName, const TDesC& aSectName,const TDesC& aKeyName,const TBool aPlay, const TInt aExpectedError)
{
CTestMmfAclntDesc* self = new (ELeave) CTestMmfAclntDesc(aTestName,aSectName,aKeyName,aPlay,aExpectedError);
return self;
}
CTestMmfAclntDesc* CTestMmfAclntDesc::NewLC(const TDesC& aTestName, const TDesC& aSectName,const TDesC& aKeyName,const TBool aPlay, const TInt aExpectedError = KErrNone)
{
CTestMmfAclntDesc* self = CTestMmfAclntDesc::NewLC(aTestName,aSectName,aKeyName,aPlay, aExpectedError);
CleanupStack::PushL(self);
return self;
}
void CTestMmfAclntDesc::MapcInitComplete(TInt aError,
const TTimeIntervalMicroSeconds &aDuration)
{
iError = aError;
iDuration = aDuration;
INFO_PRINTF1( _L("MMdaAudioPlayerCallback Init Complete"));
CActiveScheduler::Stop();
}
void CTestMmfAclntDesc::MapcPlayComplete(TInt aError)
{
iError = aError;
INFO_PRINTF1( _L("MMdaAudioPlayerCallback Play Complete"));
CActiveScheduler::Stop();
}
TVerdict CTestMmfAclntDesc::DoTestStepPreambleL()
{
TBuf<KSizeBuf> filename;
TPtrC filename1;
if(!GetStringFromConfig(iSectName, iKeyName, filename1))
{
return EInconclusive;
}
GetDriveName(filename);
filename.Append(filename1);
RFs fs;
RFile file;
TInt size = 0;
TInt returnCode = 0;
// connect to file system and open file
CleanupClosePushL(file);
returnCode = fs.Connect();
if (returnCode != KErrNone)
{
ERR_PRINTF2(_L("Failed to connect to file server, error %d"), returnCode);
fs.Close();
return EFail;
}
returnCode = file.Open(fs,filename,EFileRead);
if (returnCode != KErrNone)
{
ERR_PRINTF2(_L("Failed to Open the file, error %d"), returnCode);
file.Close();
return EFail;
}
INFO_PRINTF2( _L("File opened successfully %S"), &filename);
// Set HBuf size
User::LeaveIfError(file.Size(size));
INFO_PRINTF2(_L("size of file = %d\n"),size); //Statement Changed under DEF105143
iAudio = HBufC8::NewMaxL(size);
// read data into Hbuf
TPtr8 bufferDes(iAudio->Des());
User::LeaveIfError(file.Read(bufferDes));
CleanupStack::PopAndDestroy(); //file
return CTestMmfAclntStep::DoTestStepPreambleL();
}
TVerdict CTestMmfAclntDesc::DoTestStepPostambleL()
{
delete iAudio;
delete iPlayer;
iPlayer = NULL;
return CTestMmfAclntStep::DoTestStepPostambleL();
}
/**
* Load and initialise an audio descriptor.
*/
TVerdict CTestMmfAclntDesc::DoTestStepL( void )
{
INFO_PRINTF1( _L("TestPlayerUtils : Desc"));
TVerdict ret = EFail;
iError = KErrTimedOut;
TPtr8 bufferDes(iAudio->Des());
iPlayer = CMdaAudioPlayerUtility::NewDesPlayerL(bufferDes, *this);
// Wait for init callback
INFO_PRINTF1( _L("Initialise CMdaAudioPlayerUtility"));
CActiveScheduler::Start();
if(iError != KErrNone && iError == iExpectedError)
{
delete iPlayer;
iPlayer = NULL;
ERR_PRINTF2( _L("CMdaAudioPlayerUtility failed with expected error %d"),iError );
return EPass;
}
if (iError == KErrNone && iPlayer != NULL)
{
if(iPlay)
{
iError = KErrTimedOut;
iPlayer->Play();
// Wait for init callback
INFO_PRINTF1( _L("Play CMdaAudioPlayerUtility"));
CActiveScheduler::Start();
if(iError == KErrNone)
{
ret = EPass;
}
}
else
ret = EPass;
}
if(iError != KErrNone)
ERR_PRINTF2( _L("CMdaAudioPlayerUtility failed with error %d"),iError );
return ret;
}
//------------------------------------------------------------------
/**
* Load and initialise an audio descriptor - read-only
*/
CTestMmfAclntDescReadOnly::CTestMmfAclntDescReadOnly(const TDesC& aTestName,const TDesC& aSectName,const TDesC& aKeyName, const TBool aPlay, const TInt aExpectedError)
:CTestMmfAclntDesc(aTestName, aSectName, aKeyName, aPlay, aExpectedError)
{
}
CTestMmfAclntDescReadOnly* CTestMmfAclntDescReadOnly::NewL(const TDesC& aTestName, const TDesC& aSectName,const TDesC& aKeyName,const TBool aPlay, const TInt aExpectedError)
{
CTestMmfAclntDescReadOnly* self = new (ELeave) CTestMmfAclntDescReadOnly(aTestName,aSectName,aKeyName,aPlay,aExpectedError);
return self;
}
CTestMmfAclntDescReadOnly* CTestMmfAclntDescReadOnly::NewLC(const TDesC& aTestName, const TDesC& aSectName,const TDesC& aKeyName,const TBool aPlay, const TInt aExpectedError = KErrNone)
{
CTestMmfAclntDescReadOnly* self = CTestMmfAclntDescReadOnly::NewLC(aTestName,aSectName,aKeyName,aPlay, aExpectedError);
CleanupStack::PushL(self);
return self;
}
TVerdict CTestMmfAclntDescReadOnly::DoTestStepL( void )
{
INFO_PRINTF1( _L("TestPlayerUtils : Desc (Read-Only)"));
TVerdict ret = EFail;
iError = KErrTimedOut;
TPtr8 bufferDes(iAudio->Des());
iPlayer = CMdaAudioPlayerUtility::NewDesPlayerReadOnlyL(bufferDes, *this);
// Wait for init callback
INFO_PRINTF1( _L("Initialise CMdaAudioPlayerUtility"));
CActiveScheduler::Start();
if(iError != KErrNone && iError == iExpectedError)
{
delete iPlayer;
iPlayer = NULL;
ERR_PRINTF2( _L("CMdaAudioPlayerUtility failed with expected error %d"),iError );
return EPass;
}
if (iError == KErrNone && iPlayer != NULL)
{
if(iPlay)
{
iError = KErrTimedOut;
iPlayer->Play();
// Wait for init callback
INFO_PRINTF1( _L("Play CMdaAudioPlayerUtility"));
CActiveScheduler::Start();
if(iError == KErrNone)
{
ret = EPass;
}
}
else
ret = EPass;
}
delete iPlayer;
iPlayer = NULL;
if(iError != KErrNone)
{
ERR_PRINTF2( _L("CMdaAudioPlayerUtility failed with error %d"),iError );
}
return ret;
}
//------------------------------------------------------------------
/**
* Load and initialise an audio descriptor, using Open only
*/
CTestMmfAclntDescOpen::CTestMmfAclntDescOpen(const TDesC& aTestName,const TDesC& aSectName,const TDesC& aKeyName, const TBool aPlay, const TInt aExpectedError)
:CTestMmfAclntDesc(aTestName, aSectName, aKeyName, aPlay, aExpectedError)
{
}
CTestMmfAclntDescOpen* CTestMmfAclntDescOpen::NewL(const TDesC& aTestName, const TDesC& aSectName,const TDesC& aKeyName,const TBool aPlay, const TInt aExpectedError)
{
CTestMmfAclntDescOpen* self = new (ELeave) CTestMmfAclntDescOpen(aTestName,aSectName,aKeyName,aPlay,aExpectedError);
return self;
}
CTestMmfAclntDescOpen* CTestMmfAclntDescOpen::NewLC(const TDesC& aTestName, const TDesC& aSectName,const TDesC& aKeyName,const TBool aPlay, const TInt aExpectedError = KErrNone)
{
CTestMmfAclntDescOpen* self = CTestMmfAclntDescOpen::NewLC(aTestName,aSectName,aKeyName,aPlay, aExpectedError);
CleanupStack::PushL(self);
return self;
}
TVerdict CTestMmfAclntDescOpen::DoTestStepL( void )
{
INFO_PRINTF1( _L("TestPlayerUtils : Desc (Open)"));
TVerdict ret = EFail;
TPtr8 bufferDes(iAudio->Des());
TRAPD(err, iPlayer = CMdaAudioPlayerUtility::NewL(*this));
if(err != KErrNone)
{
delete iPlayer;
iPlayer = NULL;
ERR_PRINTF2( _L("CMdaAudioPlayerUtility failed with expected error %d"),iError );
return EFail;
}
if (err == KErrNone && iPlayer != NULL)
{
iError = KErrTimedOut;
TRAP_IGNORE(iPlayer->OpenDesL(bufferDes));
// Wait for init callback
INFO_PRINTF1( _L("OpenDesL CMdaAudioPlayerUtility"));
CActiveScheduler::Start();
if(iError == KErrNone)
{
ret = EPass;
}
}
delete iPlayer;
iPlayer = NULL;
if(iError != KErrNone)
{
ERR_PRINTF2( _L("CMdaAudioPlayerUtility failed with error %d"),iError );
}
return ret;
}
//------------------------------------------------------------------
/**
* Constructor
*/
CTestMmfAclntUrl::CTestMmfAclntUrl(const TDesC& aTestName, const TDesC& aSectName,const TDesC& aKeyName,const TBool aPlay)
:iPlay (aPlay)
{
// store the name of this test case
// this is the name that is used by the script file
// Each test step initialises it's own name
iTestStepName = aTestName;
iSectName = aSectName;
iKeyName = aKeyName;
}
CTestMmfAclntUrl* CTestMmfAclntUrl::NewL(const TDesC& aTestName, const TDesC& aSectName,const TDesC& aKeyName,const TBool aPlay)
{
CTestMmfAclntUrl* self = new (ELeave) CTestMmfAclntUrl(aTestName,aSectName,aKeyName,aPlay);
return self;
}
CTestMmfAclntUrl* CTestMmfAclntUrl::NewLC(const TDesC& aTestName, const TDesC& aSectName,const TDesC& aKeyName,const TBool aPlay)
{
CTestMmfAclntUrl* self = CTestMmfAclntUrl::NewLC(aTestName,aSectName,aKeyName,aPlay);
CleanupStack::PushL(self);
return self;
}
void CTestMmfAclntUrl::MapcInitComplete(TInt aError,
const TTimeIntervalMicroSeconds &aDuration)
{
iError = aError;
iDuration = aDuration;
INFO_PRINTF1( _L("MMdaAudioPlayerCallback Init Complete"));
CActiveScheduler::Stop();
}
void CTestMmfAclntUrl::MapcPlayComplete(TInt aError)
{
iError = aError;
INFO_PRINTF1( _L("MMdaAudioPlayerCallback Play Complete"));
CActiveScheduler::Stop();
}
/**
* Open audio from a URL and play.
*/
TVerdict CTestMmfAclntUrl::DoTestStepL()
{
INFO_PRINTF1( _L("TestPlayerUtils : URL"));
TVerdict ret = EFail;
iError = KErrTimedOut;
TPtrC urlname;
if(!GetStringFromConfig(iSectName,iKeyName,urlname))
{
return EInconclusive;
}
CMdaAudioPlayerUtility* player = CMdaAudioPlayerUtility::NewL(*this);
CleanupStack::PushL(player);
TRAPD(err, player->OpenUrlL(urlname));
if(err)
{
if(err != KErrNotSupported)
{
ERR_PRINTF2( _L("OpenUrlL left with error %d"), err);
CleanupStack::PopAndDestroy(player);
return EFail;
}
else
{
INFO_PRINTF2( _L("OpenUrlL left with expected error %d"), err);
CleanupStack::PopAndDestroy(player);
return EPass;
}
}
INFO_PRINTF1( _L("Initialise CMdaAudioPlayerUtility"));
CActiveScheduler::Start();
if (iError == KErrNotSupported)
{
ret = EPass;
}
CleanupStack::PopAndDestroy(player);
if(iError != KErrNone)
{
ERR_PRINTF2( _L("CMdaAudioPlayerUtility failed with error %d"),iError );
}
return ret;
}
//------------------------------------------------------------------
/**
* Constructor
*/
CTestMmfAclntAudioPlayerUtil::CTestMmfAclntAudioPlayerUtil(const TDesC& aTestName, const TDesC& aSectName)
{
// store the name of this test case
// this is the name that is used by the script file
// Each test step initialises it's own name
iTestStepName=aTestName;
iStop = ETrue;
iSectName = aSectName;
}
void CTestMmfAclntAudioPlayerUtil::MapcInitComplete(TInt aError,
const TTimeIntervalMicroSeconds &aDuration)
{
iError = aError;
iDuration = aDuration;
INFO_PRINTF1( _L("MMdaAudioPlayerCallback Init Complete"));
CActiveScheduler::Stop();
}
void CTestMmfAclntAudioPlayerUtil::MapcPlayComplete(TInt aError)
{
iError = aError;
INFO_PRINTF1( _L("MMdaAudioPlayerCallback Play Complete"));
if(iStop)
{
CActiveScheduler::Stop();
}
}
/**
* Pause play and continue play.
*/
TVerdict CTestMmfAclntAudioPlayerUtil::DoTestStepL( void )
{
INFO_PRINTF1( _L("TestPlayerUtils : Audio Player Util"));
TVerdict ret = EFail;
iError = KErrTimedOut;
TBuf<KSizeBuf> filename;
TPtrC filename1;
if(!GetStringFromConfig(iSectName, _L("playerAudioFile"), filename1))
{
return EInconclusive;
}
GetDriveName(filename);
filename.Append(filename1);
INFO_PRINTF2(_L("CMdaAudioPlayerUtility::NewFilePlayerL() - %S"), &filename);
CMdaAudioPlayerUtility* player = CMdaAudioPlayerUtility::NewFilePlayerL(filename,*this);
CleanupStack::PushL(player);
// wait for initilisation callback
INFO_PRINTF1( _L("Initialise CMdaAudioPlayerUtility"));
CActiveScheduler::Start();
// Attempt to wait out the in use error message!!!
// It may just be that we have the file locked.
if(iError == KErrInUse)
{
if(!GetStringFromConfig(iSectName, _L("playerAudioFile2"), filename1))
{
return EInconclusive;
}
GetDriveName(filename);
filename.Append(filename1);
User::After(KTwoSeconds);
CleanupStack::PopAndDestroy(player);
User::After(KTwoSeconds);
INFO_PRINTF2(_L("CMdaAudioPlayerUtility::NewFilePlayerL() - %S"), &filename);
player = CMdaAudioPlayerUtility::NewFilePlayerL(filename,*this);
CleanupStack::PushL(player);
// wait for initilisation callback
INFO_PRINTF1( _L("Initialise CMdaAudioPlayerUtility"));
CActiveScheduler::Start();
}
if (iError == KErrNone)
{
// no errors so far, Do Test!
ret = DoTestL(player);
}
CleanupStack::PopAndDestroy(player);
User::After(KOneSecond);
if (iError != KErrNone)
{
ERR_PRINTF2( _L("CMdaAudioPlayerUtility failed with error %d"),iError );
}
return ret;
}
//=======================================================================================
/**
* Constructor
*/
CAsyncTestMmfAclntAudioPlayerUtil::CAsyncTestMmfAclntAudioPlayerUtil ( const TDesC& aTestName, const TDesC& aSectName, const TDesC& aKeyName)
{
// store the name of this test case
// this is the name that is used by the script file
// Each test step initialises it's own name
iTestStepName=aTestName;
iSectName = aSectName;
iKeyName = aKeyName;
}
void CAsyncTestMmfAclntAudioPlayerUtil::MapcInitComplete(TInt aError,
const TTimeIntervalMicroSeconds &aDuration)
{
iError = aError;
iClipDuration = aDuration;
if (aError != KErrNone)
{
ERR_PRINTF2(_L("*MapcInitComplete* Error: %d."), aError);
StopTest(aError, EFail);
}
else
{
INFO_PRINTF2(_L("*MapcInitComplete* Error: %d."), aError);
iTrigger->Cancel(); // ensure assert in StartTimer always succeeds
iTrigger->StartTimer(500000);
iTestState = EStateOpened;
iPlayerState = EOpened;
}
}
void CAsyncTestMmfAclntAudioPlayerUtil::MapcPlayComplete(TInt aError)
{
if(aError == KErrNone)
{
INFO_PRINTF2(_L("*MapcPlayComplete* Error: %d."), iError);
iTrigger->Cancel(); // ensure assert in StartTimer always succeeds
iTrigger->StartTimer(500000);
iTestState = EStateStopTest;
}
else
{
ERR_PRINTF2(_L("*MapcPlayComplete* Error: %d."), aError);
StopTest(aError, EFail);
}
}
/**
*
*/
void CAsyncTestMmfAclntAudioPlayerUtil::KickoffTestL( void )
{
INFO_PRINTF1( _L("TestPlayerUtils : Audio Player Util"));
TPtrC filename1;
TInt repeatCount;
TInt silence;
if(!GetStringFromConfig(iSectName, iKeyName, filename1))
{
INFO_PRINTF1(_L("GetStringFromConfig Failed"));
StopTest(KErrGeneral, EInconclusive);
return;
}
if(!GetIntFromConfig(_L("SectionRepeatCount"), _L("numOfRepeat"), repeatCount))
{
INFO_PRINTF1(_L("GetIntFromConfig Failed"));
StopTest(KErrGeneral, EInconclusive);
return;
}
if(!GetIntFromConfig(_L("SectionSilence"), _L("silence"), silence))
{
INFO_PRINTF1(_L("GetIntFromConfig Failed"));
StopTest(KErrGeneral, EInconclusive);
return;
}
iNumOfRepeatsSet = repeatCount;
iSilence = silence;
GetDriveName(iFileName);
iFileName.Append(filename1);
INFO_PRINTF2(_L("CMdaAudioPlayerUtility::NewFilePlayerL() - %S"), &iFileName);
iTrigger = CFsmTrigger::NewL(*this);
iPlayer = CMdaAudioPlayerUtility::NewFilePlayerL(iFileName,*this);
iPlayerState = EOpening;
}
/**
* Time comparison utility function
*
* @param "const TUint aActual"
* The actual timer value produced
* @param "const TUint aExpected"
* Expected timer value
* @param "const TUint aDeviation"
* Allowed deviation of the expected value
* from the actual value.
* @return "TBool"
* Did actual timed value fall within deviation limits
*/
TBool CAsyncTestMmfAclntAudioPlayerUtil::TimeComparison(const TUint aActual, const TUint aExpected, const TUint aDeviation)
{
// save unnessary conditions
if(aActual == aExpected)
return ETrue;
// Prevent unsigned wrapping errors
TUint difference;
if(aActual > aExpected)
difference = aActual - aExpected;
else
difference = aExpected - aActual;
// comapare
if(difference < aDeviation)
return ETrue;
return EFalse;
}
void CAsyncTestMmfAclntAudioPlayerUtil::CloseTest()
{
if (iTrigger)
{
iTrigger->Cancel();
delete iTrigger;
}
if (iPlayer)
{
delete iPlayer;
}
}
//
/**
* Implementation of AO timer used to invoke test processing at desired intervals (i.e. State Machine)
**/
CFsmTrigger* CFsmTrigger::NewL(CAsyncTestMmfAclntAudioPlayerUtil& aObserver)
{
CFsmTrigger* self = new (ELeave) CFsmTrigger(aObserver);
CleanupStack::PushL(self);
self->ConstructL();
CleanupStack::Pop(self);
return self;
}
CFsmTrigger::CFsmTrigger(CAsyncTestMmfAclntAudioPlayerUtil& aObserver)
: CActive(CActive::EPriorityStandard),
iObserver (aObserver)
{
// nothing to do
}
void CFsmTrigger::ConstructL()
{
User::LeaveIfError (iTimer.CreateLocal());
CActiveScheduler::Add (this);
}
CFsmTrigger::~CFsmTrigger()
{
Cancel();
iTimer.Close();
}
void CFsmTrigger::RunL()
{
// need to call Fsm
iObserver.FsmL();
}
void CFsmTrigger::DoCancel()
{
iTimer.Cancel();
}
void CFsmTrigger::StartTimer(TTimeIntervalMicroSeconds32 aDelay)
{
__ASSERT_ALWAYS(!IsActive(), User::Panic(_L("CFsmTrigger"), 1));
iTimer.After(iStatus, aDelay);
SetActive();
}
//============================================================================================================
//------------------------------------------------------------------
CTestMmfAclntAudioPlayStopStart::CTestMmfAclntAudioPlayStopStart(const TDesC& aTestName, const TDesC& aSectName)
: CTestMmfAclntAudioPlayerUtil(aTestName, aSectName)
{}
CTestMmfAclntAudioPlayStopStart* CTestMmfAclntAudioPlayStopStart::NewL(const TDesC& aTestName, const TDesC& aSectName)
{
CTestMmfAclntAudioPlayStopStart* self = new (ELeave) CTestMmfAclntAudioPlayStopStart(aTestName, aSectName);
return self;
}
TVerdict CTestMmfAclntAudioPlayStopStart::DoTestL(CMdaAudioPlayerUtility* aPlayer)
{
INFO_PRINTF1( _L("TestPlayerUtils : Audio Play Stop/Start"));
TVerdict ret = EFail;
TInt duration = I64INT(aPlayer->Duration().Int64());
// Tests pause functionality
aPlayer->Play();
INFO_PRINTF1( _L("Play CMdaAudioPlayerUtility"));
User::After(KTwoSeconds);
INFO_PRINTF1( _L("Stop CMdaAudioPlayerUtility"));
aPlayer->Stop();
User::After(KTwoSeconds);
// only wait for second call to play.
iError = KErrTimedOut;
INFO_PRINTF1( _L("Play CMdaAudioPlayerUtility"));
aPlayer->Play();
TTime start;
start.HomeTime();
CActiveScheduler::Start();
TTime stop;
stop.HomeTime();
TUint actualDuration = I64INT(stop.MicroSecondsFrom(start).Int64());
INFO_PRINTF6(_L("Error : %d Start = %d Stop = %d Duration = %d ActualDuration = %d"),
iError, I64INT(start.Int64()), I64INT(stop.Int64()),
duration, actualDuration);
if((iError == KErrNone) &&
(TimeComparison(actualDuration, duration , KExpectedDeviation)))
{
ret = EPass;
}
return ret;
}
//------------------------------------------------------------------
// same as above, but with Pause instead of Stop
CTestMmfAclntAudioPlayPauseStart::CTestMmfAclntAudioPlayPauseStart(const TDesC& aTestName, const TDesC& aSectName)
: CTestMmfAclntAudioPlayerUtil(aTestName, aSectName)
{}
CTestMmfAclntAudioPlayPauseStart* CTestMmfAclntAudioPlayPauseStart::NewL(const TDesC& aTestName, const TDesC& aSectName)
{
CTestMmfAclntAudioPlayPauseStart* self = new (ELeave) CTestMmfAclntAudioPlayPauseStart(aTestName, aSectName);
return self;
}
TVerdict CTestMmfAclntAudioPlayPauseStart::DoTestL(CMdaAudioPlayerUtility* aPlayer)
{
INFO_PRINTF1( _L("TestPlayerUtils : Audio Play Pause/Start"));
TVerdict ret = EFail;
TInt duration = I64INT(aPlayer->Duration().Int64());
// Tests pause functionality
// NB we must take the duration from the time at PAUSE, as pause (unlike stop)
// does not reset the clip to start
INFO_PRINTF1( _L("Play CMdaAudioPlayerUtility"));
aPlayer->Play();
TTime start;
start.HomeTime();
User::After(KTwoSeconds);
INFO_PRINTF1( _L("Pause CMdaAudioPlayerUtility"));
INFO_PRINTF1(_L("Pause()"));//Statement Changed under DEF105143
aPlayer->Pause();
TTime stop;
stop.HomeTime();
TUint beforeDuration = I64INT(stop.MicroSecondsFrom(start).Int64());
User::After(KTwoSeconds);
// wait for second call to play.
iError = KErrTimedOut;
INFO_PRINTF1( _L("Play CMdaAudioPlayerUtility"));
INFO_PRINTF1(_L("Play()"));//Statement Changed under DEF105143
aPlayer->Play();
start.HomeTime();
CActiveScheduler::Start();
stop.HomeTime();
TUint afterDuration = I64INT(stop.MicroSecondsFrom(start).Int64());
INFO_PRINTF7(_L("Error : %d Start = %u Stop = %u Duration = %u ActualDuration = %u + %u"),
iError, I64INT(start.Int64()), I64INT(stop.Int64()),
duration, beforeDuration, afterDuration);
if((iError == KErrNone) &&
(TimeComparison(beforeDuration+afterDuration, duration, KExpectedDeviation*2)))
{
ret = EPass;
}
return ret;
}
//------------------------------------------------------------------
// Play, pause, play
CTestMmfAclntAudioPlayPausePlayTest::CTestMmfAclntAudioPlayPausePlayTest(const TDesC& aTestName, const TDesC& aSectName)
: CTestMmfAclntAudioPlayerUtil(aTestName, aSectName)
{}
CTestMmfAclntAudioPlayPausePlayTest* CTestMmfAclntAudioPlayPausePlayTest::NewL(const TDesC& aTestName, const TDesC& aSectName)
{
CTestMmfAclntAudioPlayPausePlayTest* self = new (ELeave) CTestMmfAclntAudioPlayPausePlayTest(aTestName, aSectName);
return self;
}
TVerdict CTestMmfAclntAudioPlayPausePlayTest::DoTestL(CMdaAudioPlayerUtility* aPlayer)
{
INFO_PRINTF1( _L("TestPlayerUtils : Audio Play-Pause-Play"));
TVerdict ret = EFail;
// Play #1
INFO_PRINTF1( _L("Play CMdaAudioPlayerUtility"));
aPlayer->Play();
User::After(KTwoSeconds);
// Pause #1
INFO_PRINTF1( _L("Pause CMdaAudioPlayerUtility"));
aPlayer->Pause();
User::After(KTwoSeconds);
// Play #2
iError = KErrTimedOut;
INFO_PRINTF1( _L("Play CMdaAudioPlayerUtility"));
aPlayer->Play();
User::After(KOneSecond);
// Pause #2
INFO_PRINTF1( _L("Pause CMdaAudioPlayerUtility"));
aPlayer->Pause();
User::After(KOneSecond);
// Play #3
iError = KErrTimedOut;
INFO_PRINTF1( _L("Play CMdaAudioPlayerUtility"));
aPlayer->Play();
User::After(KOneSecond);
// Pause #3
INFO_PRINTF1( _L("Pause CMdaAudioPlayerUtility"));
aPlayer->Pause();
User::After(400000);
// Play #4
iError = KErrTimedOut;
INFO_PRINTF1( _L("Play CMdaAudioPlayerUtility"));
aPlayer->Play();
CActiveScheduler::Start(); // play to end
if (iError == KErrNone)
{
ret = EPass;
}
return ret;
}
//------------------------------------------------------------------
CTestMmfAclntAudioPlayVolume::CTestMmfAclntAudioPlayVolume(const TDesC& aTestName, const TDesC& aSectName, const TInt aVolume,TBool aNegativeTest)
: CTestMmfAclntAudioPlayerUtil(aTestName, aSectName), iVolume(aVolume) , iNegativeTest(aNegativeTest)
{}
CTestMmfAclntAudioPlayVolume* CTestMmfAclntAudioPlayVolume::NewL(const TDesC& aTestName, const TDesC& aSectName, const TInt aVolume,TBool aNegativeTest)
{
CTestMmfAclntAudioPlayVolume* self = new (ELeave) CTestMmfAclntAudioPlayVolume(aTestName, aSectName, aVolume, aNegativeTest);
return self;
}
TVerdict CTestMmfAclntAudioPlayVolume::DoTestL(CMdaAudioPlayerUtility* aPlayer)
{
INFO_PRINTF1( _L("TestPlayerUtils : Audio Play Volume"));
TVerdict ret = EFail;
// Check maxvolume function
if(iVolume == -1)
{
INFO_PRINTF1( _L("Volume CHK 1"));
iVolume = aPlayer->MaxVolume();
INFO_PRINTF2( _L("Volume: Max Volume = %d"),iVolume);
//on device & emulator KMaxVolume have different values
//if(iVolume != KMaxVolume) // TODO: how to cross ref. this appears to be random values at the moment
// {
// INFO_PRINTF3( _L("Expected volume: %d, received volume : %d"),
// KMaxVolume, iVolume);
// return EFail;
// }
}
// Volume is truncated to maxvolume
if(iVolume > aPlayer->MaxVolume())
{
INFO_PRINTF1( _L("Volume CHK 2"));
TInt volume;
INFO_PRINTF2( _L("Volume: SetVolume(%d)"),iVolume);
aPlayer->SetVolume(iVolume);
aPlayer->GetVolume(volume);
INFO_PRINTF2( _L("Volume: GetVolume() returned"),volume);
if(volume == aPlayer->MaxVolume())
{
ret = EPass;
}
}
// Volume is truncated to 0
else if(iVolume < 0)
{
INFO_PRINTF1( _L("Volume CHK 3"));
TInt volume;
INFO_PRINTF2( _L("Volume: SetVolume(%d)"),iVolume);
aPlayer->SetVolume(iVolume);
aPlayer->GetVolume(volume);
INFO_PRINTF2( _L("Volume: GetVolume() returned"),volume);
if(volume == 0)
{
ret = EPass;
}
}
// Set volume and check
else
{
INFO_PRINTF1( _L("Volume CHK 4"));
INFO_PRINTF2( _L("Volume: SetVolume(%d)"),iVolume);
TInt volume;
aPlayer->SetVolume(iVolume);
aPlayer->GetVolume(volume);
INFO_PRINTF2( _L("Volume: GetVolume() returned"),volume);
if(volume == iVolume)
{
ret = EPass;
}
else
INFO_PRINTF3( _L("Expected volume: %d, received volume : %d"), iVolume, volume);
}
return ret;
}
//------------------------------------------------------------------
CTestMmfAclntAudioRepeat::CTestMmfAclntAudioRepeat(const TDesC& aTestName, const TDesC& aSectName)
: CTestMmfAclntAudioPlayerUtil(aTestName, aSectName)
{}
CTestMmfAclntAudioRepeat* CTestMmfAclntAudioRepeat::NewL(const TDesC& aTestName, const TDesC& aSectName)
{
CTestMmfAclntAudioRepeat* self = new (ELeave) CTestMmfAclntAudioRepeat(aTestName, aSectName);
return self;
}
TVerdict CTestMmfAclntAudioRepeat::DoTestL(CMdaAudioPlayerUtility* aPlayer)
{
INFO_PRINTF1( _L("TestPlayerUtils : Repeats"));
TVerdict ret = EFail;
TTimeIntervalMicroSeconds silence(0); // silence gap
TInt duration = I64INT(aPlayer->Duration().Int64());
aPlayer->SetRepeats(NUMBER_OF_REPEATS,silence);
iError = KErrTimedOut;
INFO_PRINTF1( _L("Play CMdaAudioPlayerUtility"));
aPlayer->Play();
TTime start;
start.HomeTime();
CActiveScheduler::Start();
TTime stop;
stop.HomeTime();
TUint actualDuration = I64INT(stop.MicroSecondsFrom(start).Int64());
INFO_PRINTF2( _L("Repeats : %d"), NUMBER_OF_REPEATS);
INFO_PRINTF6(_L("Error : %d Start = %d Stop = %d Duration = %d ActualDuration = %d"),
iError, I64INT(start.Int64()), I64INT(stop.Int64()), duration, actualDuration);
if((iError == KErrNone) && (TimeComparison(actualDuration, duration * (NUMBER_OF_REPEATS + 1),
KExpectedDeviation * NUMBER_OF_REPEATS)))
{
ret = EPass;
}
return ret;
}
//-------------------------------------------------
CTestMmfAclntAudioBalance::CTestMmfAclntAudioBalance(const TDesC& aTestName, const TDesC& aSectName,const TInt aValue, const TInt aExpectedError)
: CTestMmfAclntAudioPlayerUtil(aTestName,aSectName), iBalance(aValue),
iExpectedError(aExpectedError)
{}
CTestMmfAclntAudioBalance* CTestMmfAclntAudioBalance::NewL(const TDesC& aTestName, const TDesC& aSectName,const TInt aValue, const TInt aExpectedError)
{
CTestMmfAclntAudioBalance* self = new (ELeave) CTestMmfAclntAudioBalance(aTestName,aSectName,aValue, aExpectedError);
return self;
}
TVerdict CTestMmfAclntAudioBalance::DoTestL(CMdaAudioPlayerUtility* aPlayer)
{
TVerdict verdict = EFail;
INFO_PRINTF1( _L("TestPlayerUtils : Audio Balance"));
TInt theErr = KErrNone;
if (iBalance < KMinBalance)
{
theErr = aPlayer->SetBalance(iBalance);
if(theErr != KErrNone)
{
return EFail;
}
theErr = aPlayer->GetBalance(iBalance);
if(theErr != iExpectedError)
{
return EFail;
}
INFO_PRINTF2( _L("Test finished with expectable error: %d"), iExpectedError);
return EPass;
}
else if (iBalance > KMaxBalance)
{
theErr = aPlayer->SetBalance(iBalance);
if(theErr != KErrNone)
{
return EFail;
}
theErr = aPlayer->GetBalance(iBalance);
if(theErr != iExpectedError)
{
return EFail;
}
INFO_PRINTF2( _L("Test finished with expectable error: %d"), iExpectedError);
return EPass;
}
else
{
theErr = aPlayer->SetBalance(iBalance);
if(theErr != iExpectedError)
{
return EFail;
}
theErr = aPlayer->GetBalance(iBalance);
if(theErr != iExpectedError)
{
return EFail;
}
INFO_PRINTF2( _L("Test finished with expectable error: %d"), iExpectedError);
verdict = EPass;
}
return verdict;
}
CTestMmfAclntAudioDuration::CTestMmfAclntAudioDuration(const TDesC& aTestName, const TDesC& aSectName)
: CTestMmfAclntAudioPlayerUtil(aTestName, aSectName)
{}
CTestMmfAclntAudioDuration* CTestMmfAclntAudioDuration::NewL(const TDesC& aTestName, const TDesC& aSectName)
{
CTestMmfAclntAudioDuration* self = new (ELeave) CTestMmfAclntAudioDuration(aTestName, aSectName);
return self;
}
TVerdict CTestMmfAclntAudioDuration::DoTestL(CMdaAudioPlayerUtility* aPlayer)
{
INFO_PRINTF1( _L("TestPlayerUtils : Audio Duration"));
TVerdict ret = EFail;
if (iDuration == aPlayer->Duration())
{
ret = EPass;
}
return ret;
}
//------------------------------------------------------------------
CDelayedMethodCall* CDelayedMethodCall::NewL(MDelayedMethodCall* aThat)
{
__ASSERT_ALWAYS(aThat, User::Leave(KErrArgument));
CDelayedMethodCall* self = new (ELeave) CDelayedMethodCall(aThat);
CleanupStack::PushL(self);
self->ConstructL();
CleanupStack::Pop(self);
return self;
};
void CDelayedMethodCall::RunL()
{
iThat->DelayedMethodCallL();
}
TInt CDelayedMethodCall::RunError(TInt aError)
{
RDebug::Print( _L("CDelayedMethodCall::RunL Left %d\n"), aError);
return KErrNone;
}
CDelayedMethodCall::CDelayedMethodCall(MDelayedMethodCall* aThat) : CTimer(0), iThat(aThat)
{
CActiveScheduler::Add(this);
}
//------------------------------------------------------------------
/**
* Constructor
*/
CTestMmfAclntPriority::CTestMmfAclntPriority(const TDesC& aTestName, const TDesC& aSectName, const TMdaPriority aPriority)
{
// store the name of this test case
// this is the name that is used by the script file
// Each test step initialises it's own name
iTestStepName = aTestName;
iPriority = aPriority;
iPriorityManual = ETrue;
iSectName = aSectName;
}
CTestMmfAclntPriority* CTestMmfAclntPriority::NewL(const TDesC& aTestName, const TDesC& aSectName, const TMdaPriority aPriority)
{
CTestMmfAclntPriority* self = new (ELeave) CTestMmfAclntPriority(aTestName, aSectName, aPriority);
return self;
}
// overridden constructor for no priority setting
CTestMmfAclntPriority::CTestMmfAclntPriority(const TDesC& aTestName, const TDesC& aSectName)
{
// store the name of this test case
// this is the name that is used by the script file
// Each test step initialises it's own name
iTestStepName = aTestName;
iPriority = EMdaPriorityNormal;
iPriorityManual = EFalse;
iSectName = aSectName;
}
CTestMmfAclntPriority* CTestMmfAclntPriority::NewL(const TDesC& aTestName, const TDesC& aSectName)
{
CTestMmfAclntPriority* self = new (ELeave) CTestMmfAclntPriority(aTestName, aSectName);
return self;
}
void CTestMmfAclntPriority::MchoComplete(TInt aID, TInt aError)
{
INFO_PRINTF3( _L("Callback for CMdaAudioPlayerUtility called : ID %d, error %d"), aID, aError);
iError = aError;
iCallbackError[aID] = aError;
if(iFirstCallback == -1)
{
iFirstCallback = aID;
}
if((--iCallbackCount) <= 0)
{
CActiveScheduler::Stop();
}
}
//This method is used to start playing file 0 after file 1 has started
void CTestMmfAclntPriority::DelayedMethodCallL()
{
audioUtil[0]->Play();
if(iError == KErrNone)
{
INFO_PRINTF1( _L("Play CMdaAudioPlayerUtility 0"));
}
}
/**
* Audio priority.
*/
TVerdict CTestMmfAclntPriority::DoTestStepL()
{
INFO_PRINTF1( _L("TestPlayerUtils : Priority"));
TBuf<KSizeBuf> filename0, filename1;
TPtrC file;
if(!GetStringFromConfig(iSectName, _L("playerAudioFile"), file))
{
return EInconclusive;
}
GetDriveName(filename0);
filename0.Append(file);
if(!GetStringFromConfig(iSectName, _L("playerAudioFile2"), file))
{
return EInconclusive;
}
GetDriveName(filename1);
filename1.Append(file);
TVerdict ret=EFail;
CPlayerCallbackHandler* callback[2];
iError = KErrNone;
for(TInt i=0; i<2; i++)
{
callback[i] = new (ELeave) CPlayerCallbackHandler(i,this);
CleanupStack::PushL(callback[i]);
}
audioUtil[0] = CMdaAudioPlayerUtility::NewFilePlayerL(filename0,*callback[0],EMdaPriorityNormal);
CleanupStack::PushL(audioUtil[0]);
audioUtil[1] = CMdaAudioPlayerUtility::NewFilePlayerL(filename1,*callback[1],EMdaPriorityNormal);
CleanupStack::PushL(audioUtil[1]);
INFO_PRINTF2( _L("Initialise CMdaAudioPlayerUtility 0 - %S"), &filename0);
INFO_PRINTF2( _L("Initialise CMdaAudioPlayerUtility 1 - %S"), &filename1);
iCallbackCount = 2;
// wait for initilisation callback
CActiveScheduler::Start();
if(iError == KErrNone && iCallbackCount == 0)
{
// set manual priority on audioUtil[0] ?
if(iPriorityManual)
{
TInt priErr = audioUtil[0]->SetPriority(iPriority, EMdaPriorityPreferenceNone);
INFO_PRINTF3(_L("Priority set manually to %d - return %d"), iPriority, priErr);
}
audioUtil[1]->Play();
if(iError == KErrNone)
{
INFO_PRINTF1( _L("Play CMdaAudioPlayerUtility 1"));
}
iCallbackCount = 2;
iFirstCallback = -1;
CDelayedMethodCall* delayedMethodCall = CDelayedMethodCall::NewL(this);
CleanupStack::PushL(delayedMethodCall);
delayedMethodCall->After(KOneSecond);
// wait for play to complete
INFO_PRINTF1( _L("Play CMdaAudioPlayerUtility"));
CActiveScheduler::Start();
CleanupStack::PopAndDestroy(delayedMethodCall); //delayedMethodCall
if(iError == KErrNone && iCallbackCount == 0)
{
if( ((iPriority < EMdaPriorityNormal) && (iFirstCallback == 0 ) && (iCallbackError[0]==KErrInUse) && (iCallbackError[1]==KErrNone)) ||
((iPriority == EMdaPriorityNormal) && (iFirstCallback == 0 ) && (iCallbackError[0]==KErrInUse) && (iCallbackError[1]==KErrNone)) ||
((iPriority > EMdaPriorityNormal) && (iFirstCallback == 1 ) && (iCallbackError[0]==KErrNone) && (iCallbackError[1]==KErrInUse))
)
{
ret = EPass;
}
INFO_PRINTF2( _L("First callback with Id: %d"), iFirstCallback);
INFO_PRINTF3( _L("Error codes - file 0 = %d file 1 = %d"), iCallbackError[0], iCallbackError[1]);
}
}
if(iError != 0)
{
ERR_PRINTF2( _L("CMdaAudioPlayerUtility failed with error %d"),iError );
}
CleanupStack::PopAndDestroy(4); // audioUtil , callback
User::After(KOneSecond);
return ret;
}
//------------------------------------------------------------------
CTestMmfAclntAudioPosition::CTestMmfAclntAudioPosition(const TDesC& aTestName, const TDesC& aSectName, const TTimeIntervalMicroSeconds& aPosition)
: CTestMmfAclntAudioPlayerUtil(aTestName,aSectName), iPosition(aPosition)
{}
CTestMmfAclntAudioPosition* CTestMmfAclntAudioPosition::NewL(const TDesC& aTestName, const TDesC& aSectName, const TTimeIntervalMicroSeconds& aPosition)
{
CTestMmfAclntAudioPosition* self = new (ELeave) CTestMmfAclntAudioPosition(aTestName,aSectName,aPosition);
return self;
}
TVerdict CTestMmfAclntAudioPosition::DoTestL(CMdaAudioPlayerUtility* aPlayer)
{
INFO_PRINTF1( _L("TestPlayerUtils : Audio Position"));
TVerdict ret = EFail;
TTimeIntervalMicroSeconds position;
TBool validPosition = EFalse;
INFO_PRINTF3(_L("Set Position %d Duration = %d"),
I64INT(iPosition.Int64()), I64INT(aPlayer->Duration().Int64()));
// Set position: middle of clip.
if (I64INT(iPosition.Int64()) == 0)
{
iPosition = I64INT(aPlayer->Duration().Int64())/2;
}
// Set position: end of clip.
if (I64INT(iPosition.Int64()) == -1)
{
iPosition = aPlayer->Duration();
}
// Position is beyond the end of the clips duration.
// so check that the value is clipped.
if(aPlayer->Duration() < iPosition)
{
aPlayer->SetPosition(iPosition);
//aPlayer->Play(); // Playing the clip will reset the position to 0 when finished.
//CActiveScheduler::Start();
/*TInt theRes1 = */aPlayer->GetPosition(position);
INFO_PRINTF2(_L("Longer than duration : Setting position to %d"), I64INT(iPosition.Int64()));
INFO_PRINTF3(_L("Set : position = %d (if clipped : %d)"),
I64INT(position.Int64()), I64INT(aPlayer->Duration().Int64()));
TInt theRes = aPlayer->GetPosition(position);
if(theRes == KErrNone && (position.Int64() == aPlayer->Duration().Int64()))
{
validPosition = ETrue;
}
}
// Position is before the end of the clips duration.
// so check that the value is clipped to 0
// *** added by JW after discussion re. expected behaviour -
// for test 1009
else if(iPosition < TTimeIntervalMicroSeconds(0))
{
aPlayer->SetPosition(iPosition);
aPlayer->Play();
CActiveScheduler::Start();
/*TInt theRes1 = */aPlayer->GetPosition(position);
INFO_PRINTF2(_L("Shorter than 0 : Setting position to %d"), I64INT(iPosition.Int64()));
INFO_PRINTF2(_L("Set : position = %d (if clipped : 0)"),
I64INT(position.Int64()));
TInt theRes = aPlayer->GetPosition(position);
if(theRes == KErrNone && I64INT(position.Int64()) == 0)
{
validPosition = ETrue;
}
}
else
{
aPlayer->SetPosition(iPosition);
aPlayer->GetPosition(position);
INFO_PRINTF3(_L("Set : position = %d, duration = %d)"),
I64INT(position.Int64()), I64INT(aPlayer->Duration().Int64()));
aPlayer->Play();
CActiveScheduler::Start();
// For test 1009, we check that the expected error code was returned
// *** removed by JW after discussion re. expected behaviour
/*
if (iPosition < TTimeIntervalMicroSeconds(0))
{
TVerdict ret = EFail;
if (iError == KErrArgument)
{
if (position != TTimeIntervalMicroSeconds(0))
{
INFO_PRINTF2(_L("ERROR: KErrArgument returned, but position was %d, expected position = 0"),position);
ret = EFail;
}
else
{
// Test passed
ret = EPass;
}
}
else
{
INFO_PRINTF3(_L("Expected error not returned, expecting %d, got %d"), KErrArgument, iError);
ret = EFail;
}
return ret;
}
*/
aPlayer->Stop();
//TInt64 temp = (iPosition.Int64() / KPcm16FrameInterval) - 1; // -1 for DevSound
aPlayer->GetPosition(position);
// returned position should equal the original position or number of frames * frame intervals.
// The above comment is invalid, one the clip has played the position should be reset to 0. - INC24264
if (position.Int64() == 0)
//if(position.Int64() == (temp * KPcm16FrameInterval) || (position == iPosition))
{
validPosition = ETrue;
}
//else
INFO_PRINTF3( _L("Expected position : %f, received position : %f"),
I64REAL(iPosition.Int64()), I64REAL(position.Int64()));
}
// Postion was set to a valid value.
if(validPosition)
{
aPlayer->Play();
// wait for play to complete
INFO_PRINTF1( _L("Play CMdaAudioPlayerUtility"));
CActiveScheduler::Start();
INFO_PRINTF2( _L("Error : %d"), iError);
if (iError == KErrNone)
ret = EPass;
}
return ret;
}
//------------------------------------------------------------------
CTestMmfAclntAudioPlayWindow::CTestMmfAclntAudioPlayWindow(const TDesC& aTestName, const TDesC& aSectName, const TBool aNegative)
: CTestMmfAclntAudioPlayerUtil(aTestName, aSectName), iNegative(aNegative)
{}
CTestMmfAclntAudioPlayWindow* CTestMmfAclntAudioPlayWindow::NewL(const TDesC& aTestName, const TDesC& aSectName, const TBool aNegative)
{
CTestMmfAclntAudioPlayWindow* self = new (ELeave) CTestMmfAclntAudioPlayWindow(aTestName, aSectName, aNegative);
return self;
}
TVerdict CTestMmfAclntAudioPlayWindow::DoTestL(CMdaAudioPlayerUtility* aPlayer)
{
INFO_PRINTF1( _L("TestPlayerUtils : Audio Play Window"));
TVerdict ret = EFail;
TInt64 temp1, temp2;
TInt duration = I64INT(aPlayer->Duration().Int64());
TInt windowDuration = 0;
if(iNegative)
{
INFO_PRINTF1( _L("Attempting to set an invalid play window"));
temp1 = -KInvalidNumber;
temp2 = aPlayer->Duration().Int64() + KInvalidNumber;
windowDuration = I64INT(aPlayer->Duration().Int64());
}
else
{
temp1 = aPlayer->Duration().Int64()/2;
temp2 = aPlayer->Duration().Int64();
windowDuration = (I64INT(temp2) - I64INT(temp1));
}
TTimeIntervalMicroSeconds startTime(temp1);
TTimeIntervalMicroSeconds endTime(temp2);
INFO_PRINTF4(_L("StartTime = %d EndTime = %d WindowDuration = %d"),
I64INT(startTime.Int64()), I64INT(endTime.Int64()), windowDuration);
TInt windowSet = aPlayer->SetPlayWindow(startTime,endTime);
if (iNegative && (windowSet == KErrArgument))
{
INFO_PRINTF1( _L("Correct return from SetPlayWindow (KErrArgument) when attempting to set an invalid window range"));
return EPass;
}
if (windowSet != KErrNone)
{
INFO_PRINTF2( _L("Unexpected error returned from SetPlayWindow - %d"),windowSet);
return EFail;
}
iError = KErrTimedOut;
INFO_PRINTF1( _L("Play CMdaAudioPlayerUtility"));
aPlayer->Play();
TTime start;
start.HomeTime();
CActiveScheduler::Start();
TTime stop;
stop.HomeTime();
TUint actualDuration = I64INT(stop.MicroSecondsFrom(start).Int64());
INFO_PRINTF6(_L("Error : %d Start = %d Stop = %d WindowDuration = %d ActualDuration = %d"),
iError, I64INT(start.Int64()), I64INT(stop.Int64()), windowDuration, actualDuration);
if((iError == KErrNone) && (TimeComparison(actualDuration, windowDuration, KExpectedDeviation)))
{
aPlayer->ClearPlayWindow();
iError = KErrTimedOut;
INFO_PRINTF1( _L("Play CMdaAudioPlayerUtility"));
aPlayer->Play();
TTime start;
start.HomeTime();
CActiveScheduler::Start();
TTime stop;
stop.HomeTime();
TUint actualDuration = I64INT(stop.MicroSecondsFrom(start).Int64());
INFO_PRINTF6(_L("Error : %d Start = %d Stop = %d Duration = %d ActualDuration = %d"),
iError, I64INT(start.Int64()), I64INT(stop.Int64()), duration, actualDuration);
ret = EPass;
}
return ret;
}
//------------------------------------------------------------------
CTestMmfAclntAudioType::CTestMmfAclntAudioType(const TDesC& aTestName, const TDesC& aSectName)
: CTestMmfAclntAudioPlayerUtil(aTestName, aSectName)
{}
CTestMmfAclntAudioType* CTestMmfAclntAudioType::NewL(const TDesC& aTestName, const TDesC& aSectName)
{
CTestMmfAclntAudioType* self = new (ELeave) CTestMmfAclntAudioType(aTestName, aSectName);
return self;
}
TVerdict CTestMmfAclntAudioType::DoTestL(CMdaAudioPlayerUtility* /*aPlayer*/)
{
INFO_PRINTF1( _L("TestPlayerUtils : Audio Type"));
INFO_PRINTF1( _L("#######################################################"));
INFO_PRINTF1( _L("No Audio Type API call for class CMdaAudioPlayerUtility"));
INFO_PRINTF1( _L("This test is therefore inconclusive."));
INFO_PRINTF1( _L("#######################################################"));
TVerdict ret = EInconclusive;
// what code should/might look like.
//CMdaAudioType* type = aPlayer->TypeL();
// CMdaAudioType class incomplete:
// TODO check data returned is valid???
return ret;
}
//--------------------------------------------------------------
CTestMmfAclntAudioRamp::CTestMmfAclntAudioRamp(const TDesC& aTestName, const TDesC& aSectName)
: CTestMmfAclntAudioPlayerUtil(aTestName, aSectName)
{}
CTestMmfAclntAudioRamp* CTestMmfAclntAudioRamp::NewL(const TDesC& aTestName, const TDesC& aSectName)
{
CTestMmfAclntAudioRamp* self = new (ELeave) CTestMmfAclntAudioRamp(aTestName, aSectName);
return self;
}
TVerdict CTestMmfAclntAudioRamp::DoTestL(CMdaAudioPlayerUtility* aPlayer)
{
INFO_PRINTF1( _L("TestPlayerUtils : Audio Ramp"));
TVerdict ret = EFail;
TTimeIntervalMicroSeconds ramp(100);
aPlayer->SetVolumeRamp(ramp);
aPlayer->Play();
// wait for open to complete
iError = KErrTimedOut;
CActiveScheduler::Start();
if(iError == KErrNone)
ret = EPass;
return ret;
}
//------------------------------------------------------------------
CTestMmfAclntAudioMeta::CTestMmfAclntAudioMeta(const TDesC& aTestName, const TDesC& aSectName)
: CTestMmfAclntAudioPlayerUtil(aTestName, aSectName)
{}
CTestMmfAclntAudioMeta* CTestMmfAclntAudioMeta::NewL(const TDesC& aTestName, const TDesC& aSectName)
{
CTestMmfAclntAudioMeta* self = new (ELeave) CTestMmfAclntAudioMeta(aTestName, aSectName);
return self;
}
_LIT(name,"Title");
_LIT(data,"Symbian");
TVerdict CTestMmfAclntAudioMeta::DoTestL(CMdaAudioPlayerUtility* aPlayer)
{
INFO_PRINTF1( _L("TestPlayerUtils : Audio Metadata"));
TInt numEntries;
TInt theErr = aPlayer->GetNumberOfMetaDataEntries(numEntries);
INFO_PRINTF3(_L("Error : %d NumEntries : %d"), theErr, numEntries);
if(theErr && theErr != KErrNotSupported) // Audio Controller doesn't support - this is ok
{
ERR_PRINTF2(_L("GetNumberOfMetaDataEntries returned unexpected error %d"), theErr);
return EFail;
}
CMMFMetaDataEntry* testData = NULL;
TRAPD(theErr2, testData = aPlayer->GetMetaDataEntryL(0));
if(!theErr2)
{
if((testData->Name() == name) && (testData->Value() == data))
return EPass;
}
else
{
if(theErr == KErrNotSupported) // Audio Controller doesn't support - this is ok
{
INFO_PRINTF1(_L("Note : Audio Controller does not support metadata"));
return EPass;
}
else if(numEntries == 0)
{
INFO_PRINTF1(_L("No metadata entries found"));
return EPass;
}
else
{
ERR_PRINTF2(_L("GetMetaDataEntryL left with unexpected error %d"), theErr2);
return EFail;
}
}
return EPass;
}
//------------------------------------------------------------------
CTestMmfAclntAudioCloseOpen::CTestMmfAclntAudioCloseOpen(const TDesC& aTestName, const TDesC& aSectName)
: CTestMmfAclntAudioPlayerUtil(aTestName, aSectName)
{}
CTestMmfAclntAudioCloseOpen* CTestMmfAclntAudioCloseOpen::NewL(const TDesC& aTestName, const TDesC& aSectName)
{
CTestMmfAclntAudioCloseOpen* self = new (ELeave) CTestMmfAclntAudioCloseOpen(aTestName, aSectName);
return self;
}
TVerdict CTestMmfAclntAudioCloseOpen::DoTestL(CMdaAudioPlayerUtility* aPlayer)
{
INFO_PRINTF1( _L("TestPlayerUtils : Audio Close/Open"));
TVerdict ret = EFail;
aPlayer->Close();
// get second file name
TBuf<KSizeBuf> filename2;
TPtrC filename;
if(!GetStringFromConfig(iSectName, _L("playerAudioFile"), filename))
{
return EInconclusive;
}
GetDriveName(filename2);
filename2.Append(filename);
// Open second file
aPlayer->OpenFileL(filename2);
// wait for open to complete
INFO_PRINTF1( _L("Initialise CMdaAudioPlayerUtility"));
CActiveScheduler::Start();
TInt openErr = iError;
INFO_PRINTF2( _L("OpenFileL completed with error %d"), iError);
if (iError == KErrNone && openErr == KErrNone)
{
ret = EPass;
}
return ret;
}
//------------------------------------------------------------------
CTestMmfAclntAudioBitRate::CTestMmfAclntAudioBitRate(const TDesC& aTestName,const TDesC& aKeyName1, const TDesC& aKeyName2)
{
// store the name of this test case
// this is the name that is used by the script file
// Each test step initialises it's own name
iTestStepName = aTestName;
iKeyFileName = aKeyName1;
iKeyBitRateName = aKeyName2;
}
CTestMmfAclntAudioBitRate* CTestMmfAclntAudioBitRate::NewL(const TDesC& aTestName,const TDesC& aKeyName1, const TDesC& aKeyName2)
{
CTestMmfAclntAudioBitRate* self = new (ELeave) CTestMmfAclntAudioBitRate(aTestName,aKeyName1,aKeyName2);
return self;
}
void CTestMmfAclntAudioBitRate::MapcInitComplete(TInt aError,
const TTimeIntervalMicroSeconds & /*aDuration*/)
{
iError = aError;
INFO_PRINTF1( _L("MMdaAudioPlayerCallback Init Complete"));
CActiveScheduler::Stop();
}
void CTestMmfAclntAudioBitRate::MapcPlayComplete(TInt aError)
{
iError = aError;
INFO_PRINTF1( _L("MMdaAudioPlayerCallback Play Complete"));
CActiveScheduler::Stop();
}
TVerdict CTestMmfAclntAudioBitRate::DoTestStepL( void )
{
INFO_PRINTF1( _L("TestPlayerUtils : Audio Bit Rate"));
iError = KErrTimedOut;
TUint bitRate = 0;
TVerdict res = EFail;
TBuf<KSizeBuf> filename;
TPtrC filename1;
if(!GetStringFromConfig(_L("SectionNine"),iKeyFileName,filename1))
{
return EInconclusive;
}
if(!GetIntFromConfig(_L("SectionNine"),iKeyBitRateName,iExpectedBitRate))
{
return EInconclusive;
}
INFO_PRINTF2(_L("Expected bit rate: %d"), iExpectedBitRate);
GetDriveName(filename);
filename.Append(filename1);
CMdaAudioPlayerUtility* player = CMdaAudioPlayerUtility::NewFilePlayerL(filename1,*this);
CleanupStack::PushL(player);
CActiveScheduler::Start();
if (iError == KErrNone)
{
player->Play();
CActiveScheduler::Start();
if(iError == KErrNone)
{
TInt err = player->GetBitRate(bitRate);
if(err == KErrNone)
{
INFO_PRINTF2(_L("Retrieved bit rate: %d"), bitRate);
if(static_cast<TInt>(bitRate) == iExpectedBitRate)
{
INFO_PRINTF1(_L("The Expected bit rate and retrieved bit rate matched"));
res = EPass;
}
else
{
INFO_PRINTF1(_L("The Expected bit rate and retrieved bit rate does not match"));
}
}
else
{
INFO_PRINTF2(_L("Failed with error %d while getting the bit rate"), err);
}
}
else
{
INFO_PRINTF1(_L("Failed during playing the audio"));
}
}
else
{
INFO_PRINTF2(_L("Failed during opening the file. Error = %d "), iError);
}
CleanupStack::PopAndDestroy(player);
return res;
}
//------------------------------------------------------------------
CTestMmfAclntAudioQuery::CTestMmfAclntAudioQuery(const TDesC& aTestName, const TDesC& aSectName)
: CTestMmfAclntAudioPlayerUtil(aTestName, aSectName)
{}
CTestMmfAclntAudioQuery* CTestMmfAclntAudioQuery::NewL(const TDesC& aTestName, const TDesC& aSectName)
{
CTestMmfAclntAudioQuery* self = new (ELeave) CTestMmfAclntAudioQuery(aTestName, aSectName);
return self;
}
TVerdict CTestMmfAclntAudioQuery::DoTestL(CMdaAudioPlayerUtility* /*aPlayer*/)
{
INFO_PRINTF1( _L("TestPlayerUtils : Audio Query"));
TVerdict ret = EFail;
// enhanced - to use CMMFControllerPluginSelectionParameters
INFO_PRINTF1(_L("Querying play formats..."));
CMMFControllerPluginSelectionParameters* cSelect = CMMFControllerPluginSelectionParameters::NewLC();
CMMFFormatSelectionParameters* fSelect = CMMFFormatSelectionParameters::NewLC();
RArray<TUid> mediaIds;
mediaIds.Append(KUidMediaTypeAudio);
cSelect->SetMediaIdsL(mediaIds, CMMFPluginSelectionParameters::EAllowOtherMediaIds);
cSelect->SetRequiredPlayFormatSupportL(*fSelect);
RMMFControllerImplInfoArray controllers; // Array to hold all the controllers support the match data
CleanupResetAndDestroyPushL(controllers);
cSelect->ListImplementationsL(controllers); // Populates the array with all the suitable controllers
TInt numControllers = controllers.Count();
if(!numControllers)
{
ERR_PRINTF1(_L("Could not find any controllers"));
}
else
{
INFO_PRINTF2(_L("Found %d controllers"), numControllers);
for(int i = 0; i < numControllers; i++)
{
RMMFFormatImplInfoArray cFormats = controllers[i]->PlayFormats();
const CDesC8Array* fileExtensions = &cFormats[0]->SupportedMimeTypes();
INFO_PRINTF3(_L("- Controller: %d Extensions : %d"), i, fileExtensions->Count());
for(int j = 0; j < fileExtensions->Count(); j++)
{
TBuf<24> ext16;
ext16.Copy(fileExtensions->MdcaPoint(j));
INFO_PRINTF2(_L("-- %S"), &ext16);
}
}
ret = EPass;
}
CleanupStack::PopAndDestroy(3);//controllers, fSelect, cSelect
return ret;
}
//--------------------------------------------------------------------
// Negative tests
//--------------------------------------------------------------------
/**
* Constructor
*/
CTestMmfAclntNoLoad::CTestMmfAclntNoLoad(const TDesC& aTestName, const TDesC& aSectName)
:CTestMmfAclntAudioPlayerUtil(aTestName, aSectName)
{
}
CTestMmfAclntNoLoad* CTestMmfAclntNoLoad::NewL(const TDesC& aTestName, const TDesC& aSectName)
{
CTestMmfAclntNoLoad* self = new (ELeave) CTestMmfAclntNoLoad(aTestName, aSectName);
return self;
}
TVerdict CTestMmfAclntNoLoad::DoTestL(CMdaAudioPlayerUtility* /*aPlayer*/)
{
return EPass;
}
/**
* Play with no loaded sound file.
*/
TVerdict CTestMmfAclntNoLoad::DoTestStepL()
{
INFO_PRINTF1( _L("TestPlayerUtils : No Load"));
iError = KErrTimedOut;
iStop = ETrue;
CMdaAudioPlayerUtility* player = CMdaAudioPlayerUtility::NewL(*this);
CleanupStack::PushL(player);
player->Play();
CActiveScheduler::Start();
if(iError == KErrNotReady)
{
CleanupStack::PopAndDestroy(player);
return EPass;
}
ERR_PRINTF2( _L("CMdaAudioPlayerUtility failed with error %d (expected KErrNotReady)"),iError );
CleanupStack::PopAndDestroy(player);
return EFail;
}
//------------------------------------------------------------------
CTestMmfAclntDeletePlay::CTestMmfAclntDeletePlay(const TDesC& aTestName, const TDesC& aSectName)
: CTestMmfAclntAudioPlayerUtil(aTestName, aSectName)
{}
CTestMmfAclntDeletePlay* CTestMmfAclntDeletePlay::NewL(const TDesC& aTestName, const TDesC& aSectName)
{
CTestMmfAclntDeletePlay* self = new (ELeave) CTestMmfAclntDeletePlay(aTestName, aSectName);
return self;
}
/**
* Audio clip - Delete object before play operation has completed.
*/
TVerdict CTestMmfAclntDeletePlay::DoTestL(CMdaAudioPlayerUtility* /*aPlayer*/)
{
INFO_PRINTF1( _L("TestPlayerUtils : Delete/Play"));
TBuf<KSizeBuf> filename;
TPtrC filename1;
if(!GetStringFromConfig(iSectName, _L("playerAudioFile"), filename1))
{
return EInconclusive;
}
GetDriveName(filename);
filename.Append(filename1);
iError = KErrTimedOut;
__MM_HEAP_MARK;
CMdaAudioPlayerUtility* player = CMdaAudioPlayerUtility::NewFilePlayerL(filename,*this);
CleanupStack::PushL(player);
// wait for open to complete
CActiveScheduler::Start();
if(iError == KErrNone)
{
player->Play();
CleanupStack::PopAndDestroy(player); // destroy player before play has completed
__MM_HEAP_MARKEND;
User::Heap().Check();
return EPass;
}
CleanupStack::PopAndDestroy(player);
ERR_PRINTF2( _L("CMdaAudioRecorderUtility failed with error %d"),iError );
__MM_HEAP_MARKEND;
return EFail;
}
//------------------------------------------------------------------
CTestMmfAclntPlayPlay::CTestMmfAclntPlayPlay(const TDesC& aTestName, const TDesC& aSectName, const TDesC& aKeyName)
: CTestMmfAclntAudioPlayerUtil(aTestName, aSectName), iKeyName(aKeyName)
{}
CTestMmfAclntPlayPlay* CTestMmfAclntPlayPlay::NewL(const TDesC& aTestName, const TDesC& aSectName, const TDesC& aKeyName)
{
CTestMmfAclntPlayPlay* self = new (ELeave) CTestMmfAclntPlayPlay(aTestName, aSectName, aKeyName);
return self;
}
/**
* Open new file while audio player is playing.
*/
TVerdict CTestMmfAclntPlayPlay::DoTestL(CMdaAudioPlayerUtility* aPlayer)
{
INFO_PRINTF1( _L("TestPlayerUtils : Play/Play"));
TVerdict ret = EFail;
iError = KErrTimedOut;
TBuf<KSizeBuf> filename;
TPtrC filename1;
//if(!GetStringFromConfig(_L("SectionOne"), _L("playerAudioFile"), filename1))
if(!GetStringFromConfig(iSectName, iKeyName, filename1))
{
return EInconclusive;
}
GetDriveName(filename);
filename.Append(filename1);
aPlayer->Play();
TInt error = KErrNone;
TRAP(error,aPlayer->OpenFileL(filename));
// wait for open to complete
CActiveScheduler::Start();
aPlayer->Play();
CActiveScheduler::Start();
if(error == KErrNone)
ret = EPass;
return ret;
}
//------------------------------------------------------------------
/**
* Constructor
*/
CTestMmfAclntCorruptDes::CTestMmfAclntCorruptDes(const TDesC& aTestName,const TDesC& aSectName)
{
// store the name of this test case
// this is the name that is used by the script file
// Each test step initialises it's own name
iTestStepName = aTestName;
iSectName = aSectName;
}
void CTestMmfAclntCorruptDes::MapcInitComplete(TInt aError,
const TTimeIntervalMicroSeconds &/*aDuration*/)
{
iError = aError;
INFO_PRINTF1( _L("MMdaAudioPlayerCallback Init Complete"));
CActiveScheduler::Stop();
}
void CTestMmfAclntCorruptDes::MapcPlayComplete(TInt aError)
{
iError = aError;
INFO_PRINTF1( _L("MMdaAudioPlayerCallback Play Complete"));
CActiveScheduler::Stop();
}
TVerdict CTestMmfAclntCorruptDes::DoTestStepPreambleL()
{
RFs fs;
RFile file;
TInt size = 0;
TBuf<KSizeBuf> filename;
TPtrC filename1;
if(!GetStringFromConfig(iSectName, _L("playerAudioFile"), filename1))
{
return EInconclusive;
}
GetDriveName(filename);
filename.Append(filename1);
User::LeaveIfError(fs.Connect());
User::LeaveIfError(file.Open(fs,filename,EFileRead));
CleanupClosePushL(file);
INFO_PRINTF2( _L("File under test - %S"), &filename);
User::LeaveIfError(file.Size(size));
INFO_PRINTF2(_L("size of file = %d\n"),size);//Statement Changed under DEF105143
iAudio = HBufC8::NewMaxL(size);
// Buffer has not been init with data.
CleanupStack::PopAndDestroy(); //file
return CTestMmfAclntStep::DoTestStepPreambleL();
}
TVerdict CTestMmfAclntCorruptDes::DoTestStepPostambleL()
{
delete iAudio;
return CTestMmfAclntStep::DoTestStepPostambleL();
}
/**
* Play using a corrupt descriptor.
*/
TVerdict CTestMmfAclntCorruptDes::DoTestStepL( void )
{
INFO_PRINTF1( _L("TestPlayerUtils : Corrupt Des"));
iError = KErrTimedOut;
TPtr8 bufferDes(iAudio->Des());
CMdaAudioPlayerUtility * player = CMdaAudioPlayerUtility::NewDesPlayerL(bufferDes, *this);
CleanupStack::PushL(player);
// Wait for init callback
INFO_PRINTF1( _L("Initialise CMdaAudioPlayerUtility"));
CActiveScheduler::Start();
if (iError == KErrBadDescriptor || iError == KErrNotSupported)
{
CleanupStack::PopAndDestroy(player);
return EPass;
}
if (iError == KErrNone)
{
iError = KErrTimedOut;
player->Play();
// wait for play.
if (iError == KErrNone)
{
CleanupStack::PopAndDestroy(player);
return EPass;
}
}
CleanupStack::PopAndDestroy(player);
return EFail;
}
//
//=============================================================================================
//
CAsyncTestMmfAclntAudioRepeatPlayPausePlay* CAsyncTestMmfAclntAudioRepeatPlayPausePlay::NewL( const TDesC& aTestName, const TDesC& aSectName, const TDesC& aKeyName)
{
return new (ELeave) CAsyncTestMmfAclntAudioRepeatPlayPausePlay( aTestName, aSectName, aKeyName);
}
CAsyncTestMmfAclntAudioRepeatPlayPausePlay::CAsyncTestMmfAclntAudioRepeatPlayPausePlay( const TDesC& aTestName, const TDesC& aSectName, const TDesC& aKeyName)
: CAsyncTestMmfAclntAudioPlayerUtil( aTestName, aSectName, aKeyName)
{
}
void CAsyncTestMmfAclntAudioRepeatPlayPausePlay::FsmL()
{
switch (iTestState)
{
case EStateOpened:
{
INFO_PRINTF1( _L("TestPlayerUtils : Audio Repeat/Play/Pause/Play"));
iDuration = I64INT(iPlayer->Duration().Int64());
INFO_PRINTF1( _L("SetRepeats CMdaAudioPlayerUtility"));
INFO_PRINTF2( _L("Trailing silence = %ld\n"),iSilence.Int64());
INFO_PRINTF2( _L("Repeats = %d\n"),iNumOfRepeatsSet);
iPlayer->SetRepeats(iNumOfRepeatsSet,iSilence);
iTrigger->Cancel(); // ensure assert in StartTimer always succeeds
iTrigger->StartTimer(500000);
iTestState = EStatePlay;
break;
}
case EStatePlay:
{
INFO_PRINTF1( _L("Play CMdaAudioPlayerUtility"));
if(iPlayerState == EOpened)
{
iPlayer->Play();
iPlayerState = EPlaying;
iStart.HomeTime();// start the timer
iTrigger->Cancel(); // ensure assert in StartTimer always succeeds
iTrigger->StartTimer(KTwoSeconds); // Call Pause for this test case after two sec
iTestState = EStatePause;
}
else if(iPlayerState == EPaused || iPlayerState == EStopped )
{
iPlayer->Play();
iStart.HomeTime();// start the timer for resuming playback
iPlayerState = EPlaying;
}
break;
}
case EStatePause:
{
if(iPlayerState == EPlaying)
{
INFO_PRINTF1( _L("Pause CMdaAudioPlayerUtility"));
iPlayer->Pause();
iStop.HomeTime();
iPausedDuration = I64INT(iStop.MicroSecondsFrom(iStart).Int64());
iTrigger->Cancel(); // ensure assert in StartTimer always succeeds
iTrigger->StartTimer(KTwoSeconds); // Resume after two seconds
iPlayerState = EPaused;
iTestState = EStatePlay;
}
break;
}
case EStateStopTest:
{
if(iDuration)
{
iStop.HomeTime();
iResumedDuration = I64INT(iStop.MicroSecondsFrom(iStart).Int64());
iActualDuration = iPausedDuration + iResumedDuration;
INFO_PRINTF2( _L("Clip Duration = %d "),iDuration);
INFO_PRINTF2( _L("Actual Duration = %u "),iActualDuration);
INFO_PRINTF2( _L("Expected Duration = %d "),iDuration *(iNumOfRepeatsSet+1));
#ifdef SYMBIAN_MULTIMEDIA_A3FDEVSOUND
if(TimeComparison(iActualDuration, iDuration * (iNumOfRepeatsSet + 1),
2*KExpectedDeviation))//more because of the latency during pausing
{
StopTest(); // success
break;
}
else
{
STOP_TEST_GEN_ERROR;
break;
}
#else
if(TimeComparison(iActualDuration, iDuration * (iNumOfRepeatsSet + 1),
2*iNumOfRepeatsSet*KExpectedDeviation))
{
StopTest(); // success
break;
}
else
{
STOP_TEST_GEN_ERROR;
break;
}
#endif
}
else // In case of .sqn file there will be no duration
{
StopTest();
break;
}
}
default:
STOP_TEST_GEN_ERROR;
break;
}
}
CAsyncTestMmfAclntAudioRepeatPlayRepositionPlay* CAsyncTestMmfAclntAudioRepeatPlayRepositionPlay::NewL( const TDesC& aTestName, const TDesC& aSectName, const TDesC& aKeyName, const TTimeIntervalMicroSeconds aPosition)
{
return new (ELeave) CAsyncTestMmfAclntAudioRepeatPlayRepositionPlay( aTestName, aSectName, aKeyName, aPosition);
}
CAsyncTestMmfAclntAudioRepeatPlayRepositionPlay::CAsyncTestMmfAclntAudioRepeatPlayRepositionPlay( const TDesC& aTestName, const TDesC& aSectName, const TDesC& aKeyName, const TTimeIntervalMicroSeconds aPosition)
: CAsyncTestMmfAclntAudioPlayerUtil( aTestName, aSectName, aKeyName), iPosition(aPosition)
{
}
void CAsyncTestMmfAclntAudioRepeatPlayRepositionPlay::FsmL()
{
switch (iTestState)
{
case EStateOpened:
{
INFO_PRINTF1( _L("TestPlayerUtils : Audio Play/Reposition/Play"));
iDuration = I64INT(iPlayer->Duration().Int64());
INFO_PRINTF1( _L("SetRepeats CMdaAudioPlayerUtility"));
INFO_PRINTF2( _L("Repeats = %d\n"),iNumOfRepeatsSet);
iPlayer->SetRepeats(iNumOfRepeatsSet,iSilence);
iTrigger->Cancel(); // ensure assert in StartTimer always succeeds
iTrigger->StartTimer(500000);
iTestState = EStatePlay;
break;
}
case EStatePlay:
{
INFO_PRINTF1( _L("Play CMdaAudioPlayerUtility"));
if(iPlayerState == EOpened)
{
iPlayer->Play();
iPlayerState = EPlaying;
iStart.HomeTime();// start the timer
iTrigger->Cancel(); // ensure assert in StartTimer always succeeds
iTrigger->StartTimer(KOneSecond); // Call Setposition for this test case after two sec
iTestState = EStateSetPosition;
}
break;
}
case EStateSetPosition:
{
if(iPlayerState == EPlaying)
{
INFO_PRINTF1( _L("SetPosition CMdaAudioPlayerUtility"));
iPlayer->SetPosition(iPosition);
iTrigger->Cancel(); // ensure assert in StartTimer always succeeds
}
break;
}
case EStateStopTest:
{
if(iDuration)
{
iStop.HomeTime();
iResumedDuration = I64INT(iStop.MicroSecondsFrom(iStart).Int64());
iActualDuration = iPausedDuration + iResumedDuration;
INFO_PRINTF2( _L("Clip Duration = %d "),iDuration);
INFO_PRINTF2( _L("Actual Duration = %u "),iActualDuration);
INFO_PRINTF2( _L("Expected Duration = %d "),iDuration *(iNumOfRepeatsSet+1));
#ifdef SYMBIAN_MULTIMEDIA_A3FDEVSOUND
if(TimeComparison(iActualDuration, (iDuration * (iNumOfRepeatsSet + 1))+1,
2*KExpectedDeviation))//more because of the latency during repositioning
{
StopTest(); // success
}
else
{
STOP_TEST_GEN_ERROR;
}
#else
if(TimeComparison(iActualDuration, (iDuration * (iNumOfRepeatsSet + 1))+1,
2*iNumOfRepeatsSet*KExpectedDeviation))//more because of the latency during repositioning
{
StopTest(); // success
}
else
{
STOP_TEST_GEN_ERROR;
}
#endif
break;
}
else // In case of .sqn file there will be no duration
{
StopTest();
break;
}
}
default:
STOP_TEST_GEN_ERROR;
break;
}
}
//============================================================================================================
CAsyncTestMmfAclntAudioRepeatPlayPauseRepeatPlay* CAsyncTestMmfAclntAudioRepeatPlayPauseRepeatPlay::NewL( const TDesC& aTestName, const TDesC& aSectName, const TDesC& aKeyName)
{
return new (ELeave) CAsyncTestMmfAclntAudioRepeatPlayPauseRepeatPlay( aTestName, aSectName, aKeyName);
}
CAsyncTestMmfAclntAudioRepeatPlayPauseRepeatPlay::CAsyncTestMmfAclntAudioRepeatPlayPauseRepeatPlay( const TDesC& aTestName, const TDesC& aSectName, const TDesC& aKeyName)
: CAsyncTestMmfAclntAudioPlayerUtil( aTestName, aSectName, aKeyName)
{
}
void CAsyncTestMmfAclntAudioRepeatPlayPauseRepeatPlay::FsmL()
{
switch (iTestState)
{
case EStateOpened:
{
INFO_PRINTF1( _L("TestPlayerUtils : Audio Repeat/Play/Pause/Repeat/Play"));
iDuration = I64INT(iPlayer->Duration().Int64());
INFO_PRINTF1( _L("SetRepeats CMdaAudioPlayerUtility"));
INFO_PRINTF2( _L("Repeats = %d\n"),iNumOfRepeatsSet );
iPlayer->SetRepeats(iNumOfRepeatsSet,iSilence);
iTrigger->Cancel(); // ensure assert in StartTimer always succeeds
iTrigger->StartTimer(500000);
iTestState = EStatePlay;
break;
}
case EStatePlay:
{
INFO_PRINTF1( _L("Play CMdaAudioPlayerUtility"));
if(iPlayerState == EOpened)
{
iPlayer->Play();
iPlayerState = EPlaying;
iStart.HomeTime();
iTrigger->Cancel(); // ensure assert in StartTimer always succeeds
iTrigger->StartTimer(KTwoSeconds); // Call Pause for this test case after two sec
iTestState = EStatePause;
}
else if(iPlayerState == EPaused || iPlayerState == EStopped )
{
iPlayer->Play(); // wait till play completes
iStart.HomeTime();// start the timer after resuming playback
iPlayerState = EPlaying;
}
break;
}
case EStatePause:
{
if(iPlayerState == EPlaying)
{
INFO_PRINTF1( _L("Pause CMdaAudioPlayerUtility"));
iPlayer->Pause();
iStop.HomeTime();
iPausedDuration = I64INT(iStop.MicroSecondsFrom(iStart).Int64());
//Now Set New Repeat Value
if(!GetIntFromConfig(_L("SectionRepeatCount"), _L("newRepeatValue"), iNumOfRepeatsSet))
{
ERR_PRINTF1(_L("GetIntFromConfig Failed"));
StopTest(KErrGeneral, EInconclusive);
return;
}
INFO_PRINTF1( _L("SetRepeats CMdaAudioPlayerUtility"));
INFO_PRINTF2( _L("Repeats = %d\n"),iNumOfRepeatsSet);
iPlayer->SetRepeats(iNumOfRepeatsSet,iSilence);
iTrigger->Cancel(); // ensure assert in StartTimer always succeeds
iTrigger->StartTimer(KTwoSeconds); // Resume after two seconds
iPlayerState = EPaused;
iTestState = EStatePlay;
}
break;
}
case EStateStopTest:
{
if(iDuration)
{
iStop.HomeTime();
iResumedDuration = I64INT(iStop.MicroSecondsFrom(iStart).Int64());
iActualDuration = iPausedDuration + iResumedDuration;
INFO_PRINTF2( _L("Clip Duration = %d "),iDuration);
INFO_PRINTF2( _L("Actual Duration = %u "),iActualDuration);
INFO_PRINTF2( _L("Expected Duration = %d "),iDuration *(iNumOfRepeatsSet+1));
#ifdef SYMBIAN_MULTIMEDIA_A3FDEVSOUND
if(TimeComparison(iActualDuration, iDuration * (iNumOfRepeatsSet + 1),
KExpectedDeviation * 2))//more because of latency during Pausing
{
StopTest(); // success
}
else
{
STOP_TEST_GEN_ERROR;
}
#else
if(TimeComparison(iActualDuration, iDuration * (iNumOfRepeatsSet + 1),
KExpectedDeviation * 2*iNumOfRepeatsSet))//more because of latency during Pausing
{
StopTest(); // success
}
else
{
STOP_TEST_GEN_ERROR;
}
#endif
break;
}
else
{
StopTest(); // success
break;
}
}
default:
ERR_PRINTF1(_L("State machine error"));
STOP_TEST_GEN_ERROR;
break;
}
}
//============================================================================================================
CAsyncTestMmfAclntAudioPlayPauseRepeatPlay* CAsyncTestMmfAclntAudioPlayPauseRepeatPlay::NewL( const TDesC& aTestName, const TDesC& aSectName, const TDesC& aKeyName)
{
return new (ELeave) CAsyncTestMmfAclntAudioPlayPauseRepeatPlay( aTestName, aSectName, aKeyName);
}
CAsyncTestMmfAclntAudioPlayPauseRepeatPlay::CAsyncTestMmfAclntAudioPlayPauseRepeatPlay( const TDesC& aTestName, const TDesC& aSectName, const TDesC& aKeyName)
: CAsyncTestMmfAclntAudioPlayerUtil( aTestName, aSectName, aKeyName)
{
}
void CAsyncTestMmfAclntAudioPlayPauseRepeatPlay::FsmL()
{
switch (iTestState)
{
case EStateOpened:
{
INFO_PRINTF1( _L("TestPlayerUtils : Audio Play/Pause/Repeat/Play"));
iDuration = I64INT(iPlayer->Duration().Int64());
iTrigger->Cancel(); // ensure assert in StartTimer always succeeds
iTrigger->StartTimer(500000);
iTestState = EStatePlay;
break;
}
case EStatePlay:
{
INFO_PRINTF1( _L("Play CMdaAudioPlayerUtility"));
if(iPlayerState == EOpened)
{
iPlayer->Play();
iPlayerState = EPlaying;
iStart.HomeTime();
iTrigger->Cancel(); // ensure assert in StartTimer always succeeds
iTrigger->StartTimer(KOneSecond); // Call Pause for this test case after two sec
iTestState = EStatePause;
}
else if(iPlayerState == EPaused || iPlayerState == EStopped )
{
iPlayer->Play(); // wait till play completes
iStart.HomeTime();//start the timer after resuming playback
iPlayerState = EPlaying;
}
break;
}
case EStatePause:
{
if(iPlayerState == EPlaying)
{
INFO_PRINTF1(_L("Pause CMdaAudioPlayerUtility"));
iPlayer->Pause();
iStop.HomeTime();
iPausedDuration = I64INT(iStop.MicroSecondsFrom(iStart).Int64());
iPlayerState = EPaused;
INFO_PRINTF1( _L("SetRepeats CMdaAudioPlayerUtility"));
INFO_PRINTF2( _L("Repeats = %d\n"),iNumOfRepeatsSet);
iPlayer->SetRepeats(iNumOfRepeatsSet,iSilence);
iTrigger->Cancel(); // ensure assert in StartTimer always succeeds
iTrigger->StartTimer(KOneSecond); // Resume after one seconds
iTestState = EStatePlay;
}
break;
}
case EStateStopTest:
{
if(iDuration)
{
iStop.HomeTime();
iResumedDuration = I64INT(iStop.MicroSecondsFrom(iStart).Int64());
iActualDuration = iPausedDuration + iResumedDuration;
INFO_PRINTF2( _L("Clip Duration = %d "),iDuration);
INFO_PRINTF2( _L("Actual Duration = %u "),iActualDuration);
INFO_PRINTF2( _L("Expected Duration = %d "),iDuration *(iNumOfRepeatsSet+1));
#ifdef SYMBIAN_MULTIMEDIA_A3FDEVSOUND
if(TimeComparison(iActualDuration, iDuration * (iNumOfRepeatsSet + 1),
KExpectedDeviation * 2))//more because of latency during pausing
{
StopTest(); // success
break;
}
else
{
STOP_TEST_GEN_ERROR;
}
#else
if(TimeComparison(iActualDuration, iDuration * (iNumOfRepeatsSet + 1),
KExpectedDeviation *iNumOfRepeatsSet* 2))//more because of latency during pausing
{
StopTest(); // success
}
else
{
STOP_TEST_GEN_ERROR;
}
#endif
break;
}
else
{
StopTest(); // success
break;
}
}
default:
STOP_TEST_GEN_ERROR;
break;
}
}
//============================================================================================================
CAsyncTestMmfAclntAudioPlayRepeat* CAsyncTestMmfAclntAudioPlayRepeat::NewL( const TDesC& aTestName, const TDesC& aSectName, const TDesC& aKeyName)
{
return new (ELeave) CAsyncTestMmfAclntAudioPlayRepeat( aTestName, aSectName, aKeyName);
}
CAsyncTestMmfAclntAudioPlayRepeat::CAsyncTestMmfAclntAudioPlayRepeat( const TDesC& aTestName, const TDesC& aSectName, const TDesC& aKeyName)
: CAsyncTestMmfAclntAudioPlayerUtil( aTestName, aSectName, aKeyName)
{
}
void CAsyncTestMmfAclntAudioPlayRepeat::FsmL()
{
switch (iTestState)
{
case EStateOpened:
{
INFO_PRINTF1( _L("TestPlayerUtils : Audio Play/Repeat"));
iDuration = I64INT(iPlayer->Duration().Int64());
iTrigger->Cancel(); // ensure assert in StartTimer always succeeds
iTrigger->StartTimer(500000);
iTestState = EStatePlay;
break;
}
case EStatePlay:
{
INFO_PRINTF1( _L("Play CMdaAudioPlayerUtility"));
if(iPlayerState == EOpened)
{
iPlayer->Play();
iPlayerState = EPlaying;
iStart.HomeTime();// Start the timer
TTimeIntervalMicroSeconds silence(0); // silence gap
INFO_PRINTF1( _L("SetRepeats with higher value CMdaAudioPlayerUtility"));
if(!GetIntFromConfig(_L("SectionRepeatCount"), _L("maxRepeatValue"), iNumOfRepeatsSet))
{
ERR_PRINTF1(_L("GetIntFromConfig Failed"));
StopTest(KErrGeneral, EInconclusive);
break;
}
INFO_PRINTF2( _L("Repeats = %d\n"),iNumOfRepeatsSet);
iPlayer->SetRepeats(iNumOfRepeatsSet,iSilence);
}
break;
}
case EStateStopTest:
{
if(iDuration)
{
iStop.HomeTime();
iActualDuration = I64INT(iStop.MicroSecondsFrom(iStart).Int64());
INFO_PRINTF2( _L("Clip Duration = %d "),iDuration);
INFO_PRINTF2( _L("Actual Duration = %u "),iActualDuration);
INFO_PRINTF2( _L("Expected Duration = %d "),iDuration *(iNumOfRepeatsSet+1));
#ifdef SYMBIAN_MULTIMEDIA_A3FDEVSOUND
if(TimeComparison(iActualDuration, iDuration * (iNumOfRepeatsSet + 1),
KExpectedDeviation))
{
StopTest(); // success
}
else
{
if(TimeComparison(iActualDuration, (iDuration + 100000) * (iNumOfRepeatsSet + 1),
KExpectedDeviation))
{
StopTest(KErrGeneral, EKnownFailure);
}
else
{
STOP_TEST_GEN_ERROR;
}
}
#else
if(TimeComparison(iActualDuration, iDuration * (iNumOfRepeatsSet + 1),
KExpectedDeviation*iNumOfRepeatsSet))
{
StopTest(); // success
}
else
{
STOP_TEST_GEN_ERROR;
}
#endif
break;
}
else
{
StopTest(); // success
break;
}
}
default:
STOP_TEST_GEN_ERROR;
break;
}
}
//============================================================================================================
CAsyncTestMmfAclntAudioRepeatBeforeOpen* CAsyncTestMmfAclntAudioRepeatBeforeOpen::NewL( const TDesC& aTestName, const TDesC& aSectName, const TDesC& aKeyName)
{
return new (ELeave) CAsyncTestMmfAclntAudioRepeatBeforeOpen( aTestName, aSectName, aKeyName);
}
CAsyncTestMmfAclntAudioRepeatBeforeOpen::CAsyncTestMmfAclntAudioRepeatBeforeOpen( const TDesC& aTestName, const TDesC& aSectName, const TDesC& aKeyName)
: CAsyncTestMmfAclntAudioPlayerUtil( aTestName, aSectName, aKeyName)
{
}
void CAsyncTestMmfAclntAudioRepeatBeforeOpen::KickoffTestL( void )
{
INFO_PRINTF1( _L("TestPlayerUtils : Audio Player Util"));
TPtrC filename1;
TInt repeatCount;
if(!GetStringFromConfig(iSectName, iKeyName, filename1))
{
ERR_PRINTF1(_L("GetStringFromConfig Failed"));
StopTest(KErrGeneral, EInconclusive);
return;
}
if(!GetIntFromConfig(_L("SectionRepeatCount"), _L("numOfRepeat"), repeatCount))
{
ERR_PRINTF1(_L("GetIntFromConfig Failed"));
StopTest(KErrGeneral, EInconclusive);
return;
}
iNumOfRepeatsSet = repeatCount;
GetDriveName(iFileName);
iFileName.Append(filename1);
INFO_PRINTF2(_L("CMdaAudioPlayerUtility::NewFilePlayerL() - %S"), &iFileName);
iTrigger = CFsmTrigger::NewL(*this);
iPlayer = CMdaAudioPlayerUtility::NewL(*this);
TTimeIntervalMicroSeconds trailingSilence(1);
INFO_PRINTF1( _L("SetRepeats CMdaAudioPlayerUtility before opening the clip"));
iNumOfRepeatsSet = NUMBER_OF_REPEATS;
INFO_PRINTF2( _L("Repeats = %d\n"),iNumOfRepeatsSet);
iPlayer->SetRepeats(iNumOfRepeatsSet,trailingSilence);
iPlayer->OpenFileL(iFileName);
iPlayerState = EOpening;
}
void CAsyncTestMmfAclntAudioRepeatBeforeOpen::FsmL()
{
switch (iTestState)
{
case EStateOpened:
{
iDuration = I64INT(iPlayer->Duration().Int64());
INFO_PRINTF1( _L("Play CMdaAudioPlayerUtility"));
if(iPlayerState == EOpened)
{
iPlayer->Play();
iPlayerState = EPlaying;
iStart.HomeTime();// Start the timer
}
break;
}
case EStateStopTest:
{
if(iDuration)
{
iStop.HomeTime();
iActualDuration = I64INT(iStop.MicroSecondsFrom(iStart).Int64());
INFO_PRINTF2( _L("Clip Duration = %d "),iDuration);
INFO_PRINTF2( _L("Actual Duration = %u "),iActualDuration);
INFO_PRINTF2( _L("Expected Duration = %d "),iDuration *(iNumOfRepeatsSet+1));
#ifdef SYMBIAN_MULTIMEDIA_A3FDEVSOUND
if(TimeComparison(iActualDuration, iDuration * (iNumOfRepeatsSet + 1),
KExpectedDeviation))
{
StopTest(); // success
}
else
{
STOP_TEST_GEN_ERROR;
}
#else
if(TimeComparison(iActualDuration, iDuration * (iNumOfRepeatsSet + 1),
KExpectedDeviation*iNumOfRepeatsSet))
{
StopTest(); // success
}
else
{
STOP_TEST_GEN_ERROR;
}
#endif
break;
}
else
{
StopTest(); // success
break;
}
}
default:
STOP_TEST_GEN_ERROR;
break;
}
}
//============================================================================================================
CAsyncTestMmfAclntAudioPlayRepeatPauseRepeatPlay* CAsyncTestMmfAclntAudioPlayRepeatPauseRepeatPlay::NewL( const TDesC& aTestName, const TDesC& aSectName, const TDesC& aKeyName)
{
return new (ELeave) CAsyncTestMmfAclntAudioPlayRepeatPauseRepeatPlay( aTestName, aSectName, aKeyName);
}
CAsyncTestMmfAclntAudioPlayRepeatPauseRepeatPlay::CAsyncTestMmfAclntAudioPlayRepeatPauseRepeatPlay( const TDesC& aTestName, const TDesC& aSectName, const TDesC& aKeyName)
: CAsyncTestMmfAclntAudioPlayerUtil( aTestName, aSectName, aKeyName)
{
}
void CAsyncTestMmfAclntAudioPlayRepeatPauseRepeatPlay::FsmL()
{
switch (iTestState)
{
case EStateOpened:
{
INFO_PRINTF1( _L("TestPlayerUtils : Audio Play/Repeat/Pause/Repeat/Play"));
iDuration = I64INT(iPlayer->Duration().Int64());
iTrigger->Cancel(); // ensure assert in StartTimer always succeeds
iTrigger->StartTimer(500000);
iTestState = EStatePlay;
break;
}
case EStateSetRepeat:
{
INFO_PRINTF1( _L("SetRepeats CMdaAudioPlayerUtility"));
INFO_PRINTF2( _L("Repeats = %d"),iNumOfRepeatsSet);
iPlayer->SetRepeats(iNumOfRepeatsSet,iSilence);
iTrigger->Cancel(); // ensure assert in StartTimer always succeeds
iTrigger->StartTimer(KOneSecond);// Call Pause after two seconds
iTestState = EStatePause;
break;
}
case EStatePlay:
{
INFO_PRINTF1( _L("Play CMdaAudioPlayerUtility"));
if(iPlayerState == EOpened)
{
iPlayer->Play();
iPlayerState = EPlaying;
iStart.HomeTime();
iTrigger->Cancel(); // ensure assert in StartTimer always succeeds
iTrigger->StartTimer(500000);
iTestState = EStateSetRepeat;
}
else if(iPlayerState == EPaused || iPlayerState == EStopped )
{
iPlayer->Play(); // wait till play completes
iStart.HomeTime();
iPlayerState = EPlaying;
}
break;
}
case EStatePause:
{
if(iPlayerState == EPlaying)
{
INFO_PRINTF1( _L("Pause CMdaAudioPlayerUtility"));
iPlayer->Pause();
iStop.HomeTime();
iPausedDuration = I64INT(iStop.MicroSecondsFrom(iStart).Int64());
//Now Set New Repeat Value
if(!GetIntFromConfig(_L("SectionRepeatCount"), _L("newRepeatValue"), iNumOfRepeatsSet))
{
ERR_PRINTF1(_L("GetIntFromConfig Failed"));
StopTest(KErrGeneral, EInconclusive);
break;
}
INFO_PRINTF1( _L("SetRepeats CMdaAudioPlayerUtility"));
INFO_PRINTF2( _L("Repeats = %d"),iNumOfRepeatsSet);
iPlayer->SetRepeats(iNumOfRepeatsSet,iSilence);
iTrigger->Cancel(); // ensure assert in StartTimer always succeeds
iTrigger->StartTimer(KTwoSeconds); // Resume after two seconds
iPlayerState = EPaused;
iTestState = EStatePlay;
}
break;
}
case EStateStopTest:
{
if(iDuration)
{
iStop.HomeTime();
iResumedDuration = I64INT(iStop.MicroSecondsFrom(iStart).Int64());
iActualDuration = iPausedDuration + iResumedDuration;
INFO_PRINTF2( _L("Clip Duration = %d "),iDuration);
INFO_PRINTF2( _L("Actual Duration = %u "),iActualDuration);
INFO_PRINTF2( _L("Expected Duration = %d "),iDuration *(iNumOfRepeatsSet+1));
#ifdef SYMBIAN_MULTIMEDIA_A3FDEVSOUND
if(TimeComparison(iActualDuration, iDuration * (iNumOfRepeatsSet + 1),
KExpectedDeviation * 2))
{
StopTest(); // success
}
else
{
STOP_TEST_GEN_ERROR;
}
#else
if(TimeComparison(iActualDuration, iDuration * (iNumOfRepeatsSet + 1),
KExpectedDeviation * iNumOfRepeatsSet* 2))
{
StopTest(); // success
}
else
{
STOP_TEST_GEN_ERROR;
}
#endif
break;
}
else
{
StopTest(); // success
break;
}
}
default:
STOP_TEST_GEN_ERROR;
break;
}
}
//============================================================================================================
CAsyncTestMmfAclntAudioRepeatPlayStopPlay* CAsyncTestMmfAclntAudioRepeatPlayStopPlay::NewL( const TDesC& aTestName, const TDesC& aSectName, const TDesC& aKeyName)
{
return new (ELeave) CAsyncTestMmfAclntAudioRepeatPlayStopPlay( aTestName, aSectName, aKeyName);
}
CAsyncTestMmfAclntAudioRepeatPlayStopPlay::CAsyncTestMmfAclntAudioRepeatPlayStopPlay( const TDesC& aTestName, const TDesC& aSectName, const TDesC& aKeyName)
: CAsyncTestMmfAclntAudioPlayerUtil( aTestName, aSectName, aKeyName)
{
}
void CAsyncTestMmfAclntAudioRepeatPlayStopPlay::FsmL()
{
switch (iTestState)
{
case EStateOpened:
{
INFO_PRINTF1( _L("TestPlayerUtils : Audio Repeat/Play/Stop/Play"));
iDuration = I64INT(iPlayer->Duration().Int64());
INFO_PRINTF1( _L("SetRepeats CMdaAudioPlayerUtility"));
INFO_PRINTF2( _L("Repeats = %d\n"),iNumOfRepeatsSet);
iPlayer->SetRepeats(iNumOfRepeatsSet,iSilence);
iTrigger->Cancel(); // ensure assert in StartTimer always succeeds
iTrigger->StartTimer(500000);
iTestState = EStatePlay;
break;
}
case EStatePlay:
{
INFO_PRINTF1( _L("Play CMdaAudioPlayerUtility"));
if(iPlayerState == EOpened)
{
iPlayer->Play();
iStart.HomeTime();
iPlayerState = EPlaying;
iTrigger->Cancel(); // ensure assert in StartTimer always succeeds
iTrigger->StartTimer(KOneSecond); // Call Stop for this test case after two sec
iTestState = EStateStop;
}
else if(iPlayerState == EPaused || iPlayerState == EStopped )
{
iPlayer->Play(); // wait till play completes
iStart.HomeTime();
iPlayerState = EPlaying;
}
break;
}
case EStateStop:
{
INFO_PRINTF1( _L("Stop CMdaAudioPlayerUtility"));
iPlayer->Stop();
iPlayerState = EStopped;
iTrigger->Cancel(); // ensure assert in StartTimer always succeeds
iTrigger->StartTimer(KTwoSeconds); // Call Pause for this test case after two sec
iTestState = EStatePlay;
break;
}
case EStateStopTest:
{
if(iDuration)
{
iStop.HomeTime();
iActualDuration = I64INT(iStop.MicroSecondsFrom(iStart).Int64());
INFO_PRINTF2( _L("Clip Duration = %d "),iDuration);
INFO_PRINTF2( _L("Actual Duration = %u "),iActualDuration);
INFO_PRINTF2( _L("Expected Duration = %d "),iDuration*(iNumOfRepeatsSet+1));
#ifdef SYMBIAN_MULTIMEDIA_A3FDEVSOUND
if(TimeComparison(iActualDuration, iDuration*(iNumOfRepeatsSet+1), KExpectedDeviation))
{
StopTest(); // success
}
else
{
STOP_TEST_GEN_ERROR;
}
#else
if(TimeComparison(iActualDuration, iDuration*(iNumOfRepeatsSet+1), KExpectedDeviation*iNumOfRepeatsSet))
{
StopTest(); // success
}
else
{
STOP_TEST_GEN_ERROR;
}
#endif
break;
}
else
{
StopTest();
break;
}
}
default:
STOP_TEST_GEN_ERROR;
break;
}
}
//============================================================================================================
CAsyncTestMmfAclntAudioRepeatPlayRepeatPlay* CAsyncTestMmfAclntAudioRepeatPlayRepeatPlay::NewL( const TDesC& aTestName, const TDesC& aSectName, const TDesC& aKeyName)
{
return new (ELeave) CAsyncTestMmfAclntAudioRepeatPlayRepeatPlay( aTestName, aSectName, aKeyName);
}
CAsyncTestMmfAclntAudioRepeatPlayRepeatPlay::CAsyncTestMmfAclntAudioRepeatPlayRepeatPlay( const TDesC& aTestName, const TDesC& aSectName, const TDesC& aKeyName)
: CAsyncTestMmfAclntAudioPlayerUtil( aTestName, aSectName, aKeyName)
{
}
void CAsyncTestMmfAclntAudioRepeatPlayRepeatPlay::FsmL()
{
switch (iTestState)
{
case EStateOpened:
{
INFO_PRINTF1( _L("TestPlayerUtils : Audio Repeat/Play/Repeat/Play"));
iDuration = I64INT(iPlayer->Duration().Int64());
INFO_PRINTF1( _L("SetRepeats CMdaAudioPlayerUtility"));
INFO_PRINTF2( _L("Repeats = %d\n"),iNumOfRepeatsSet);
iPlayer->SetRepeats(iNumOfRepeatsSet,iSilence);
INFO_PRINTF1( _L("Play CMdaAudioPlayerUtility"));
if(iPlayerState == EOpened)
{
iPlayer->Play();
iPlayerState = EPlaying;
iStart.HomeTime();
INFO_PRINTF1( _L("SetRepeats CMdaAudioPlayerUtility"));
if(!GetIntFromConfig(_L("SectionRepeatCount"), _L("newRepeatValue"), iNumOfRepeatsSet))
{
ERR_PRINTF1(_L("GetIntFromConfig Failed"));
StopTest(KErrGeneral, EInconclusive);
break;
}
INFO_PRINTF2( _L("Repeats = %d\n"),iNumOfRepeatsSet );
iPlayer->SetRepeats(iNumOfRepeatsSet, iSilence);
}
break;
}
case EStateStopTest:
{
if(iDuration)
{
iStop.HomeTime();
iActualDuration = I64INT(iStop.MicroSecondsFrom(iStart).Int64());
INFO_PRINTF2( _L("Clip Duration = %d "),iDuration);
INFO_PRINTF2( _L("Actual Duration = %u "),iActualDuration);
INFO_PRINTF2( _L("Expected Duration = %d "),iDuration *(iNumOfRepeatsSet+1));
#ifdef SYMBIAN_MULTIMEDIA_A3FDEVSOUND
if(TimeComparison(iActualDuration, iDuration *(iNumOfRepeatsSet+1),
KExpectedDeviation))
{
StopTest(); // success
}
else
{
STOP_TEST_GEN_ERROR;
}
#else
if(TimeComparison(iActualDuration, iDuration *(iNumOfRepeatsSet+1),
KExpectedDeviation*iNumOfRepeatsSet))
{
StopTest(); // success
}
else
{
STOP_TEST_GEN_ERROR;
}
#endif
break;
}
else
{
StopTest(); // success
break;
}
}
default:
STOP_TEST_GEN_ERROR;
break;
}
}
//============================================================================================================
CAsyncTestMmfAclntAudioPlayRepeatRepeatPlay* CAsyncTestMmfAclntAudioPlayRepeatRepeatPlay::NewL( const TDesC& aTestName, const TDesC& aSectName, const TDesC& aKeyName)
{
return new (ELeave) CAsyncTestMmfAclntAudioPlayRepeatRepeatPlay( aTestName, aSectName, aKeyName);
}
CAsyncTestMmfAclntAudioPlayRepeatRepeatPlay::CAsyncTestMmfAclntAudioPlayRepeatRepeatPlay( const TDesC& aTestName, const TDesC& aSectName, const TDesC& aKeyName)
: CAsyncTestMmfAclntAudioPlayerUtil( aTestName, aSectName, aKeyName)
{
}
void CAsyncTestMmfAclntAudioPlayRepeatRepeatPlay::FsmL()
{
switch (iTestState)
{
case EStateOpened:
{
INFO_PRINTF1( _L("TestPlayerUtils : Audio Play/Repeat/Repeat/Play"));
iDuration = I64INT(iPlayer->Duration().Int64());
if(iPlayerState == EOpened)
{
iPlayer->Play();
iPlayerState = EPlaying;
iStart.HomeTime();
INFO_PRINTF1( _L("SetRepeats CMdaAudioPlayerUtility"));
INFO_PRINTF2( _L("Repeats = %d"),iNumOfRepeatsSet);
iPlayer->SetRepeats(iNumOfRepeatsSet,iSilence);
INFO_PRINTF1( _L("SetRepeats CMdaAudioPlayerUtility"));
if(!GetIntFromConfig(_L("SectionRepeatCount"), _L("newRepeatValue"), iNumOfRepeatsSet))
{
ERR_PRINTF1(_L("GetIntFromConfig Failed"));
StopTest(KErrGeneral, EInconclusive);
break;
}
INFO_PRINTF2( _L("Repeats = %d"),iNumOfRepeatsSet);
iPlayer->SetRepeats(iNumOfRepeatsSet,iSilence);
}
break;
}
case EStateStopTest:
{
if(iDuration)
{
iStop.HomeTime();
iActualDuration = I64INT(iStop.MicroSecondsFrom(iStart).Int64());
INFO_PRINTF2( _L("Clip Duration = %d "),iDuration);
INFO_PRINTF2( _L("Actual Duration = %u "),iActualDuration);
INFO_PRINTF2( _L("Expected Duration = %d "),iDuration *(iNumOfRepeatsSet+1));
#ifdef SYMBIAN_MULTIMEDIA_A3FDEVSOUND
if(TimeComparison(iActualDuration, iDuration *(iNumOfRepeatsSet+1),KExpectedDeviation))
// since we setting repeats during first playback of first repeat, we need to take into consideration of first playback
{
StopTest(); // success
}
else
{
STOP_TEST_GEN_ERROR;
}
#else
if(TimeComparison(iActualDuration, iDuration *(iNumOfRepeatsSet+1),KExpectedDeviation*iNumOfRepeatsSet))
// since we setting repeats during first playback of first repeat, we need to take into consideration of first playback
{
StopTest(); // success
}
else
{
STOP_TEST_GEN_ERROR;
}
#endif
break;
}
else
{
StopTest(); // success
break;
}
}
default:
STOP_TEST_GEN_ERROR;
break;
}
}
//============================================================================================================
CAsyncTestMmfAclntAudioPlayRepeatRamp* CAsyncTestMmfAclntAudioPlayRepeatRamp::NewL( const TDesC& aTestName, const TDesC& aSectName, const TDesC& aKeyName)
{
return new (ELeave) CAsyncTestMmfAclntAudioPlayRepeatRamp( aTestName, aSectName, aKeyName);
}
CAsyncTestMmfAclntAudioPlayRepeatRamp::CAsyncTestMmfAclntAudioPlayRepeatRamp( const TDesC& aTestName, const TDesC& aSectName, const TDesC& aKeyName)
: CAsyncTestMmfAclntAudioPlayerUtil( aTestName, aSectName, aKeyName)
{
}
void CAsyncTestMmfAclntAudioPlayRepeatRamp::FsmL()
{
switch (iTestState)
{
case EStateOpened:
{
INFO_PRINTF1( _L("TestPlayerUtils : Audio Repeat/SetVolumeRamp/Play"));
iDuration = I64INT(iPlayer->Duration().Int64());
INFO_PRINTF1( _L("Play CMdaAudioPlayerUtility"));
iPlayer->Play();
iPlayerState = EPlaying;
iStart.HomeTime();
INFO_PRINTF1( _L("SetRepeats CMdaAudioPlayerUtility"));
INFO_PRINTF2( _L("Repeats = %d\n"),iNumOfRepeatsSet);
iPlayer->SetRepeats(iNumOfRepeatsSet,iSilence);
INFO_PRINTF1( _L("SetVolumeRamp CMdaAudioPlayerUtility"));
iPlayer->SetVolumeRamp(TTimeIntervalMicroSeconds(5000000));
break;
}
case EStateStopTest:
{
if(iDuration)
{
iStop.HomeTime();
iActualDuration = I64INT(iStop.MicroSecondsFrom(iStart).Int64());
INFO_PRINTF2( _L("Clip Duration = %d "),iDuration);
INFO_PRINTF2( _L("Actual Duration = %u "),iActualDuration);
INFO_PRINTF2( _L("Expected Duration = %d "),iDuration *(iNumOfRepeatsSet+1));
#ifdef SYMBIAN_MULTIMEDIA_A3FDEVSOUND
if(TimeComparison(iActualDuration, iDuration *(iNumOfRepeatsSet+1),
KExpectedDeviation))
{
StopTest(); // success
}
else
{
STOP_TEST_GEN_ERROR;
}
#else
if(TimeComparison(iActualDuration, iDuration *(iNumOfRepeatsSet+1),
KExpectedDeviation*iNumOfRepeatsSet))
{
StopTest(); // success
}
else
{
STOP_TEST_GEN_ERROR;
}
#endif
break;
}
else
{
StopTest(); // success
break;
}
}
default:
STOP_TEST_GEN_ERROR;
break;
}
}
//============================================================================================================
CAsyncTestMmfAclntAudioRepeatForeverPlay* CAsyncTestMmfAclntAudioRepeatForeverPlay::NewL( const TDesC& aTestName, const TDesC& aSectName, const TDesC& aKeyName, TTimeIntervalMicroSeconds aTrailingSilence)
{
return new (ELeave) CAsyncTestMmfAclntAudioRepeatForeverPlay( aTestName, aSectName, aKeyName, aTrailingSilence);
}
CAsyncTestMmfAclntAudioRepeatForeverPlay::CAsyncTestMmfAclntAudioRepeatForeverPlay( const TDesC& aTestName, const TDesC& aSectName, const TDesC& aKeyName, TTimeIntervalMicroSeconds aTrailingSilence)
: CAsyncTestMmfAclntAudioPlayerUtil( aTestName, aSectName, aKeyName)
{
iTrailingSilence = aTrailingSilence;
}
void CAsyncTestMmfAclntAudioRepeatForeverPlay::FsmL()
{
switch (iTestState)
{
case EStateOpened:
{
INFO_PRINTF1( _L("TestPlayerUtils : Audio RepeatForever/Play"));
iDuration = I64INT(iPlayer->Duration().Int64());
INFO_PRINTF1( _L("SetRepeats CMdaAudioPlayerUtility"));
INFO_PRINTF2( _L("Repeats (KMdaRepeatForever) = %d\n"),KMdaRepeatForever);
INFO_PRINTF2( _L("Trailing silence = %ld\n"),iTrailingSilence.Int64());
iPlayer->SetRepeats(KMdaRepeatForever,iTrailingSilence);
if(iPlayerState == EOpened)
{
iPlayer->Play();
iPlayerState = EPlaying;
if(iDuration)
{
iTrigger->Cancel(); // ensure assert in StartTimer always succeeds
iTrigger->StartTimer(iDuration * 6); // Wait till complettion of 5 repeats then issue stop
}
else
{
iTrigger->Cancel(); // ensure assert in StartTimer always succeeds
iTrigger->StartTimer(KOneSecond * 40); // Wait for 40 sec of playback and then issue stop
}
iTestState = EStateStop;
}
break;
}
case EStateStop:
{
INFO_PRINTF1( _L("Stop CMdaAudioPlayerUtility"));
iPlayer->Stop();
iPlayerState = EStopped;
iTrigger->Cancel(); // ensure assert in StartTimer always succeeds
iTrigger->StartTimer(500000); // Call Pause for this test case after two sec
iTestState = EStateStopTest;
break;
}
case EStateStopTest:
{
StopTest(); // success
break;
}
default:
STOP_TEST_GEN_ERROR;
break;
}
}
//============================================================================================================
CAsyncTestMmfAclntAudioRepeatPlayGetPosition* CAsyncTestMmfAclntAudioRepeatPlayGetPosition::NewL( const TDesC& aTestName, const TDesC& aSectName, const TDesC& aKeyName)
{
return new (ELeave) CAsyncTestMmfAclntAudioRepeatPlayGetPosition( aTestName, aSectName, aKeyName);
}
CAsyncTestMmfAclntAudioRepeatPlayGetPosition::CAsyncTestMmfAclntAudioRepeatPlayGetPosition( const TDesC& aTestName, const TDesC& aSectName, const TDesC& aKeyName)
: CAsyncTestMmfAclntAudioPlayerUtil( aTestName, aSectName, aKeyName)
{
}
void CAsyncTestMmfAclntAudioRepeatPlayGetPosition::FsmL()
{
switch (iTestState)
{
case EStateOpened:
{
INFO_PRINTF1( _L("TestPlayerUtils : Audio Repeat/Play/GetPosition"));
iDuration = I64INT(iPlayer->Duration().Int64());
INFO_PRINTF1( _L("SetRepeats CMdaAudioPlayerUtility"));
INFO_PRINTF2( _L("Repeats = %d\n"),iNumOfRepeatsSet);
iPlayer->SetRepeats(iNumOfRepeatsSet,iSilence);
INFO_PRINTF1( _L("Play CMdaAudioPlayerUtility"));
if(iPlayerState == EOpened)
{
iPlayer->Play();
iPlayerState = EPlaying;
iTrigger->Cancel(); // ensure assert in StartTimer always succeeds
iTrigger->StartTimer(KOneSecond); // Call GetPosition (during Playback of Second repeat) for every 2 sec
iTestState = EStateGetPosition;
}
break;
}
case EStateGetPosition:
{
INFO_PRINTF1( _L("GetPosition CMdaAudioPlayerUtility"));
TInt err = iPlayer->GetPosition(iPosition);
if(err == KErrNone && iPosition <= iDuration * (iNumOfRepeatsSet+1) )
{
INFO_PRINTF2(_L("GetPosition = %d"),I64INT(iPosition.Int64()));
INFO_PRINTF2(_L("TotalClip Duration Including Repeats = %d"),iDuration * (iNumOfRepeatsSet+1));
iTrigger->Cancel(); // ensure assert in StartTimer always succeeds
iTrigger->StartTimer(KOneSecond); // Call GetPosition (during Playback of Second repeat) for every 2 sec
iTestState = EStateGetPosition;
break;
}
else
{
StopTest(err, EFail);
break;
}
}
case EStateStopTest:
{
StopTest(); // success
break;
}
default:
STOP_TEST_GEN_ERROR;
break;
}
}
//============================================================================================================
CAsyncTestMmfAclntDRMRepeatPlay* CAsyncTestMmfAclntDRMRepeatPlay::NewL( const TDesC& aTestName, const TDesC& aSectName, const TDesC& aKeyName, const TDesC& aUniqueId, const TInt aRepeatCount)
{
return new (ELeave) CAsyncTestMmfAclntDRMRepeatPlay( aTestName, aSectName, aKeyName, aUniqueId, aRepeatCount);
}
CAsyncTestMmfAclntDRMRepeatPlay::CAsyncTestMmfAclntDRMRepeatPlay( const TDesC& aTestName, const TDesC& aSectName, const TDesC& aKeyName, const TDesC& aUniqueId,const TInt aRepeatCount)
: CAsyncTestMmfAclntAudioPlayerUtil( aTestName, aSectName, aKeyName)
{
iUniqueId = aUniqueId;
iNumOfRepeatsSet = aRepeatCount;
}
void CAsyncTestMmfAclntDRMRepeatPlay::KickoffTestL()
{
INFO_PRINTF1( _L("TestPlayerUtils : Audio Player Util"));
TPtrC filename1;
TInt repeatCount;
TInt silence;
if(!GetStringFromConfig(iSectName, iKeyName, filename1))
{
ERR_PRINTF1(_L("GetStringFromConfig Failed"));
StopTest(KErrGeneral, EInconclusive);
return;
}
if(!GetIntFromConfig(_L("SectionRepeatCount"), _L("numOfRepeat"), repeatCount))
{
ERR_PRINTF1(_L("GetIntFromConfig Failed"));
StopTest(KErrGeneral, EInconclusive);
return;
}
if(!GetIntFromConfig(_L("SectionSilence"), _L("silence"), silence))
{
ERR_PRINTF1(_L("GetIntFromConfig Failed"));
StopTest(KErrGeneral, EInconclusive);
return;
}
iSilence = silence;
iNumOfRepeatsSet = repeatCount;
GetDriveName(iFileName);
iFileName.Append(filename1);
INFO_PRINTF2(_L("CMdaAudioPlayerUtility::NewFilePlayerL() - %S"), &iFileName);
iTrigger = CFsmTrigger::NewL(*this);
INFO_PRINTF1( _L("TestPlayerUtils : DRM Audio Repeat/Play"));
iPlayer = CMdaAudioPlayerUtility::NewL(*this);
iPlayer->OpenFileL(TMMFileSource(iFileName, iUniqueId, ContentAccess::EPlay));
iPlayerState = EOpening;
}
void CAsyncTestMmfAclntDRMRepeatPlay::MapcInitComplete(TInt aError,
const TTimeIntervalMicroSeconds &aDuration)
{
iError = aError;
iClipDuration = aDuration;
if (aError == KErrNone)
{
INFO_PRINTF2(_L("*MapcInitComplete* Error: %d."), aError);
iTrigger->Cancel(); // ensure assert in StartTimer always succeeds
iTrigger->StartTimer(500000);
iTestState = EStateStopTest;
}
else if(aError == KErrCANoPermission)
{
INFO_PRINTF2(_L("*MapcInitComplete* Error: %d Rights expired"), aError);
iTrigger->Cancel(); // ensure assert in StartTimer always succeeds
iTrigger->StartTimer(500000);
iTestState = EStateStopTest;
}
else
{
StopTest(aError, EFail);
}
}
void CAsyncTestMmfAclntDRMRepeatPlay::MapcPlayComplete(TInt aError)
{
if(aError == KErrNone )
{
INFO_PRINTF2(_L("*MapcPlayComplete* Error: %d"), aError);
iTrigger->Cancel(); // ensure assert in StartTimer always succeeds
iTrigger->StartTimer(500000);
iTestState = EStateStopTest;
}
else if(aError == KErrCANoPermission)
{
INFO_PRINTF2(_L("*MapcPlayComplete* Error: %d Rights expired"), aError);
iTrigger->Cancel(); // ensure assert in StartTimer always succeeds
iTrigger->StartTimer(500000);
iTestState = EStateStopTest;
}
else
{
StopTest(aError, EFail);
}
}
void CAsyncTestMmfAclntDRMRepeatPlay::FsmL()
{
switch (iTestState)
{
case EStateOpened:
{
iDuration = I64INT(iPlayer->Duration().Int64());
INFO_PRINTF1( _L("SetRepeats CMdaAudioPlayerUtility"));
INFO_PRINTF2( _L("Repeats = %d\n"),iNumOfRepeatsSet);
iPlayer->SetRepeats(iNumOfRepeatsSet,iSilence);
INFO_PRINTF1( _L("Play CMdaAudioPlayerUtility"));
if(iPlayerState == EOpened)
{
iPlayer->Play();
iPlayerState = EPlaying;
}
break;
}
case EStateStopTest:
{
StopTest(); // success
break;
}
default:
STOP_TEST_GEN_ERROR;
break;
}
}
//=============================================================================================================
//RAsync Negative tests
//==============================================================================================================
CAsyncTestMmfAclntAudioNegativeRepeatPlay* CAsyncTestMmfAclntAudioNegativeRepeatPlay::NewL( const TDesC& aTestName, const TDesC& aSectName, const TDesC& aKeyName)
{
return new (ELeave) CAsyncTestMmfAclntAudioNegativeRepeatPlay( aTestName, aSectName, aKeyName);
}
CAsyncTestMmfAclntAudioNegativeRepeatPlay::CAsyncTestMmfAclntAudioNegativeRepeatPlay( const TDesC& aTestName, const TDesC& aSectName, const TDesC& aKeyName)
: CAsyncTestMmfAclntAudioPlayerUtil( aTestName, aSectName, aKeyName)
{
}
void CAsyncTestMmfAclntAudioNegativeRepeatPlay::FsmL()
{
switch (iTestState)
{
case EStateOpened:
{
INFO_PRINTF1( _L("TestPlayerUtils : Audio NegativeRepeat/Play"));
iDuration = I64INT(iPlayer->Duration().Int64());
INFO_PRINTF1( _L("SetRepeats CMdaAudioPlayerUtility"));
INFO_PRINTF2( _L("Repeats = %d\n"),KNegativeRepeat);
iPlayer->SetRepeats(KNegativeRepeat,iSilence);
INFO_PRINTF1( _L("Play CMdaAudioPlayerUtility"));
if(iPlayerState == EOpened)
{
iPlayer->Play();
iPlayerState = EPlaying;
iStart.HomeTime();
}
break;
}
case EStateStopTest:
{
if(iDuration)
{
iStop.HomeTime();
iActualDuration = I64INT(iStop.MicroSecondsFrom(iStart).Int64());
INFO_PRINTF2( _L("Clip Duration = %d "),iDuration);
INFO_PRINTF2( _L("Actual Duration = %u "),iActualDuration);
INFO_PRINTF2( _L("Expected Duration = %d "),iDuration);
if(TimeComparison(iActualDuration, iDuration,
KExpectedDeviation))
{
StopTest(); // success
break;
}
else
{
STOP_TEST_GEN_ERROR;
break;
}
}
else
{
StopTest();
break;
}
}
default:
STOP_TEST_GEN_ERROR;
break;
}
}
//============================================================================================================
CAsyncTestMmfAclntAudioPlayNegativeRepeat* CAsyncTestMmfAclntAudioPlayNegativeRepeat::NewL( const TDesC& aTestName, const TDesC& aSectName, const TDesC& aKeyName)
{
return new (ELeave) CAsyncTestMmfAclntAudioPlayNegativeRepeat( aTestName, aSectName, aKeyName);
}
CAsyncTestMmfAclntAudioPlayNegativeRepeat::CAsyncTestMmfAclntAudioPlayNegativeRepeat( const TDesC& aTestName, const TDesC& aSectName, const TDesC& aKeyName)
: CAsyncTestMmfAclntAudioPlayerUtil( aTestName, aSectName, aKeyName)
{
}
void CAsyncTestMmfAclntAudioPlayNegativeRepeat::FsmL()
{
switch (iTestState)
{
case EStateOpened:
{
INFO_PRINTF1( _L("TestPlayerUtils : Audio Play/NegativeRepeat"));
iDuration = I64INT(iPlayer->Duration().Int64());
INFO_PRINTF1( _L("Play CMdaAudioPlayerUtility"));
iPlayer->Play();
iPlayerState = EPlaying;
iStart.HomeTime();
INFO_PRINTF1( _L("SetRepeats CMdaAudioPlayerUtility"));
INFO_PRINTF2( _L("Repeats = %d\n"),KNegativeRepeat);
iPlayer->SetRepeats(KNegativeRepeat,iSilence);
break;
}
case EStateStopTest:
{
if(iDuration)
{
iStop.HomeTime();
iActualDuration = I64INT(iStop.MicroSecondsFrom(iStart).Int64());
INFO_PRINTF2( _L("Clip Duration = %d "),iDuration);
INFO_PRINTF2( _L("Actual Duration = %u "),iActualDuration);
INFO_PRINTF2( _L("Expected Duration = %d "),iDuration);
if(TimeComparison(iActualDuration, iDuration,
KExpectedDeviation))
{
StopTest(); // success
break;
}
else
{
STOP_TEST_GEN_ERROR;
break;
}
}
else
{
StopTest();
break;
}
}
default:
STOP_TEST_GEN_ERROR;
break;
}
}
//============================================================================================================
CAsyncTestMmfAclntRepeatMultipleFiles* CAsyncTestMmfAclntRepeatMultipleFiles::NewL( const TDesC& aTestName, const TDesC& aSectName)
{
return new (ELeave) CAsyncTestMmfAclntRepeatMultipleFiles( aTestName, aSectName);
}
CAsyncTestMmfAclntRepeatMultipleFiles::CAsyncTestMmfAclntRepeatMultipleFiles( const TDesC& aTestName, const TDesC& aSectName)
: CAsyncTestMmfAclntAudioPlayerUtil( aTestName, aSectName, KNullDesC), iCount(0)
{
}
void CAsyncTestMmfAclntRepeatMultipleFiles::KickoffTestL()
{
INFO_PRINTF1( _L("TestPlayerUtils : Audio Player Util"));
TInt repeatCount;
if(!GetIntFromConfig(_L("SectionRepeatCount"), _L("numOfRepeat"), repeatCount))
{
ERR_PRINTF1(_L("GetIntFromConfig Failed"));
StopTest(KErrGeneral, EInconclusive);
return;
}
iTrigger = CFsmTrigger::NewL(*this);
iPlayer = CMdaAudioPlayerUtility::NewL(*this);
iTrigger->Cancel(); // ensure assert in StartTimer always succeeds
iTrigger->StartTimer(500000);
}
void CAsyncTestMmfAclntRepeatMultipleFiles::FsmL()
{
switch (iTestState)
{
case EStateOpen:
{
INFO_PRINTF1( _L("TestPlayerUtils :Audio Repeat/Play for multiple files"));
TPtrC fileName;
iFileName = KTestParameters[iCount].iFilename;
if(!GetStringFromConfig(iSectName, iFileName, fileName))
{
//return EInconclusive;
ERR_PRINTF1(_L("GetStringFromConfig Failed"));
StopTest(KErrGeneral, EInconclusive);
return;
}
GetDriveName(iFileName);
iFileName.Append(fileName);
INFO_PRINTF2(_L("CMdaAudioPlayerUtility::NewFilePlayerL() - %S"), &iFileName);
iPlayer->OpenFileL(iFileName);
iPlayerState = EOpening;
break;
}
case EStateOpened:
{
iDuration = I64INT(iPlayer->Duration().Int64());
iPlayer->SetRepeats(KTestParameters[iCount].iRepeatCount, TTimeIntervalMicroSeconds(KTestParameters[iCount].iSilence));
iTrigger->Cancel(); // ensure assert in StartTimer always succeeds
iTrigger->StartTimer(500000);
iTestState = EStatePlay;
break;
}
case EStatePlay:
{
if(iPlayerState == EOpened)
{
INFO_PRINTF1( _L("Play CMdaAudioPlayerUtility"));
iPlayer->Play();
iPlayerState = EPlaying;
}
break;
}
case EStateStopTest:
{
if(iCount == KNoOfTestFiles-1)
{
StopTest(); // success
}
else
{
iCount++;
iTrigger->Cancel(); // ensure assert in StartTimer always succeeds
iTrigger->StartTimer(KOneSecond); // Call SetRepeat for this test case after two sec
iTestState = EStateOpen;
}
break;
}
default:
STOP_TEST_GEN_ERROR;
break;
}
}
// PDEF131534 SPPR_PERF: Music player crashes when opening corrupted wav file.
// WAV file of 96000 Hz is not supported.
void CAsyncTestMmfAclntRepeatMultipleFiles::MapcInitComplete(TInt aError,
const TTimeIntervalMicroSeconds &aDuration)
{
iError = aError;
iClipDuration = aDuration;
if (aError != KErrNone)
{
TInt match = iFileName.Match(_L("*100khzSRate1KhzTone.wav"));
if (aError == KErrNotSupported && match != KErrNotFound)
{
INFO_PRINTF1( _L("WAV file of frequency more than 96 KHz is not supported."));
INFO_PRINTF1( _L("*MapcInitComplete* Expected Error: KErrNotSupported(-5)"));
INFO_PRINTF2(_L("*MapcInitComplete* Actual Error: %d."), aError);
StopTest(aError, EPass);
}
else
{
ERR_PRINTF2(_L("*MapcInitComplete* Error: %d."), aError);
StopTest(aError, EFail);
}
}
else
{
INFO_PRINTF2(_L("*MapcInitComplete* Error: %d."), aError);
iTrigger->Cancel(); // ensure assert in StartTimer always succeeds
iTrigger->StartTimer(500000);
iTestState = EStateOpened;
iPlayerState = EOpened;
}
}
//============================================================================================================
CAsyncTestMmfAclntAudioSetPlayWindowRepeatPlay* CAsyncTestMmfAclntAudioSetPlayWindowRepeatPlay::NewL( const TDesC& aTestName, const TDesC& aSectName, const TDesC& aKeyName)
{
return new (ELeave) CAsyncTestMmfAclntAudioSetPlayWindowRepeatPlay( aTestName, aSectName, aKeyName);
}
CAsyncTestMmfAclntAudioSetPlayWindowRepeatPlay::CAsyncTestMmfAclntAudioSetPlayWindowRepeatPlay( const TDesC& aTestName, const TDesC& aSectName, const TDesC& aKeyName)
: CAsyncTestMmfAclntAudioPlayerUtil( aTestName, aSectName, aKeyName)
{
}
void CAsyncTestMmfAclntAudioSetPlayWindowRepeatPlay::FsmL()
{
switch (iTestState)
{
case EStateOpened:
{
INFO_PRINTF1( _L("TestPlayerUtils : SetPlayWindow Repeat Play"));
iDuration = I64INT(iPlayer->Duration().Int64());
TInt64 temp1, temp2;
temp1 = iPlayer->Duration().Int64()/2;
temp2 = iPlayer->Duration().Int64();
iWindowDuration = (I64INT(temp2) - I64INT(temp1));
TTimeIntervalMicroSeconds startTime(temp1);
TTimeIntervalMicroSeconds endTime(temp2);
INFO_PRINTF4(_L("StartTime = %d EndTime = %d WindowDuration = %d"),
I64INT(startTime.Int64()), I64INT(endTime.Int64()), iWindowDuration);
TInt windowSet = iPlayer->SetPlayWindow(startTime,endTime);
if (windowSet != KErrNone)
{
ERR_PRINTF2( _L("Unexpected error returned from SetPlayWindow - %d"),windowSet);
StopTest(windowSet, EFail);
break;
}
INFO_PRINTF1( _L("SetRepeats CMdaAudioPlayerUtility"));
INFO_PRINTF2( _L("Repeats = %d\n"),iNumOfRepeatsSet);
iPlayer->SetRepeats(iNumOfRepeatsSet,iSilence);
INFO_PRINTF1( _L("Play CMdaAudioPlayerUtility"));
if(iPlayerState == EOpened)
{
iPlayer->Play();
iPlayerState = EPlaying;
iStart.HomeTime();
}
break;
}
case EStateStopTest:
{
if(iDuration)
{
iStop.HomeTime();
iActualDuration = I64INT(iStop.MicroSecondsFrom(iStart).Int64());
INFO_PRINTF2( _L("Clip Duration = %d "),iDuration);
INFO_PRINTF2( _L("Actual Duration = %u "),iActualDuration);
INFO_PRINTF2( _L("Window Duration = %d "),iWindowDuration);
#ifdef SYMBIAN_MULTIMEDIA_A3FDEVSOUND
if(TimeComparison(iActualDuration, iWindowDuration*(iNumOfRepeatsSet+1),
KExpectedDeviation))
{
StopTest(); // success
}
else
{
STOP_TEST_GEN_ERROR;
}
#else
if(TimeComparison(iActualDuration, iWindowDuration*(iNumOfRepeatsSet+1),
KExpectedDeviation*iNumOfRepeatsSet))
{
StopTest(); // success
}
else
{
STOP_TEST_GEN_ERROR;
}
#endif
break;
}
else
{
StopTest();
break;
}
}
default:
STOP_TEST_GEN_ERROR;
break;
}
}