diff -r 000000000000 -r 40261b775718 mmlibs/mmfw/tsrc/mmfintegrationtest/ACLNT/TestMultiClientARN.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/mmlibs/mmfw/tsrc/mmfintegrationtest/ACLNT/TestMultiClientARN.cpp Tue Feb 02 01:56:55 2010 +0200 @@ -0,0 +1,2334 @@ +// Copyright (c) 2005-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: +// CPP file: Audio Resource Notification tests for Multiple Audio Clients. +// +// + +/** + @file TestMultiClientARN.cpp +*/ + +#include "TestAudioClientUtilitiesARN.h" + +//------------------------------------------------------------------------------ +//********************PREQ 797 - Audio Resource Notification******************** +//------------------------------------------------------------------------------ + +// +//CTestMdaAudioMultiClientCallbackSupport +// + +/** + * NewL + */ +CTestMdaAudioMultiClientCallbackSupport* CTestMdaAudioMultiClientCallbackSupport::NewL(MTestAudioResourceNotificationCallback& aCallback) + { + return new(ELeave) CTestMdaAudioMultiClientCallbackSupport(aCallback); + } + +/** + * MarncResourceAvailable + */ +void CTestMdaAudioMultiClientCallbackSupport::MarncResourceAvailable(TUid aNotificationEventId, const TDesC8& aNotificationData) + { + iCallback.MarncResourceAvailableTest(aNotificationEventId, aNotificationData, *this); + } + +/** + * Constructor + */ +CTestMdaAudioMultiClientCallbackSupport::CTestMdaAudioMultiClientCallbackSupport(MTestAudioResourceNotificationCallback& aCallback):iCallback(aCallback) + { + + } + +// +//CTestMmfAclntMultiClientARN +// + +/** + * Constructor + */ +CTestMmfAclntMultiClientARN::CTestMmfAclntMultiClientARN(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; + iHeapSize = 800000; + iSectName = aSectName; + } + +/** + * MarncResourceAvailableTest + */ +void CTestMmfAclntMultiClientARN::MarncResourceAvailableTest(TUid aNotificationEventId, const TDesC8& aNotificationData, CTestMdaAudioMultiClientCallbackSupport& aMdaAudioMultiClientCallbackSupport) + { + if (aNotificationEventId == KMMFEventCategoryAudioResourceAvailable) + { + INFO_PRINTF1(_L("iAudioOutputStream::MMMFAudioResourceNotificationCallback -> KMMFEventCategoryAudioResourceAvailable")); + + //Convert TDesc8 to TInt64 + TMMFTimeIntervalMicroSecondsPckg timeIntvbuf; + timeIntvbuf.Copy(aNotificationData); + TTimeIntervalMicroSeconds intPos = timeIntvbuf(); + iPosition = intPos; + + if (&aMdaAudioMultiClientCallbackSupport == iMdaAudioPlayerCallbackSupport) + { + INFO_PRINTF1(_L("iAudioPlayer -> MMMFAudioResourceNotificationCallback NotificationReceived")); + TRAP(iError, FsmL(EMarncResourceAvailablePlayer)); + } + else if (&aMdaAudioMultiClientCallbackSupport == iMdaAudioRecorderCallbackSupport) + { + INFO_PRINTF1(_L("iAudioRecorder -> MMMFAudioResourceNotificationCallback NotificationReceived")); + TRAP(iError, FsmL(EMarncResourceAvailableRecorder)); + } + else if (&aMdaAudioMultiClientCallbackSupport == iMdaAudioOutputStreamCallbackSupport) + { + INFO_PRINTF1(_L("iAudioOutputStream -> MMMFAudioResourceNotificationCallback NotificationReceived")); + TRAP(iError, FsmL(EMarncResourceAvailableOS)); + } + } + else + { + INFO_PRINTF1(_L("MMMFAudioResourceNotificationCallback, but NOT KMMFEventCategoryAudioResourceAvailable")); + } + } + +/** + * MapcInitCompleteTest + */ +void CTestMmfAclntMultiClientARN::MapcInitComplete(TInt aError, const TTimeIntervalMicroSeconds& aDuration) + { + iDuration = aDuration; + INFO_PRINTF2(_L("iAudioPlayer -> MMdaAudioPlayerCallback InitComplete (%d)"),aError); + TRAP(iError, FsmL(EMapcInitComplete, aError)); + } + +/** + * MapcPlayCompleteTest + */ +void CTestMmfAclntMultiClientARN::MapcPlayComplete(TInt aError) + { + INFO_PRINTF2(_L("iAudioPlayer -> MMdaAudioPlayerCallback PlayComplete (%d)"), aError); + TRAP(iError, FsmL(EMapcPlayComplete, aError)); + } + +/** + * MoscoStateChangeEventTest + */ +void CTestMmfAclntMultiClientARN::MoscoStateChangeEvent(CBase* /*aObject*/, TInt aPreviousState, TInt aCurrentState, TInt aErrorCode) + { + INFO_PRINTF1(_L("iAudioRecorder -> MMdaObjectStateChangeObserver StateChanged")); + INFO_PRINTF4(_L("iTestAudioRecorder -> aErrorCode : %d, aPreviousState : %d, aCurrentState : %d"), aErrorCode, aPreviousState, aCurrentState); + TRAP(iError, FsmL(EMoscoStateChangeEvent, aErrorCode, iTestAudioRecorder->State())); + } + +/** + * MMdaAudioOutputStreamCallback->MaoscOpenComplete + */ +void CTestMmfAclntMultiClientARN::MaoscOpenComplete(TInt aError) + { + INFO_PRINTF2(_L("iAudioOutputStream -> MMdaAudioOutputStreamCallback : MaoscOpenComplete (%d)"),aError); + TRAP(iError, FsmL(EMaoscOpenComplete, aError)); + } + +/** + * MMdaAudioOutputStreamCallback->MaoscBufferCopied + */ +void CTestMmfAclntMultiClientARN::MaoscBufferCopied(TInt aError, const TDesC8& /*aBuffer*/) + { + INFO_PRINTF2(_L("iAudioOutputStream -> MMdaAudioOutputStreamCallback : MaoscBufferCopied (%d)"), aError); + TRAP(iError, FsmL(EMaoscBufferCopied, aError)); + } + +/** + * MMdaAudioOutputStreamCallback->MaoscPlayComplete + */ +void CTestMmfAclntMultiClientARN::MaoscPlayComplete(TInt aError) + { + INFO_PRINTF2(_L("iAudioOutputStream -> MMdaAudioOutputStreamCallback : MaoscPlayComplete (%d)"), aError); + TRAP(iError, FsmL(EMaoscPlayComplete, aError)); + } + +/** + * DoTestStepPreambleL + */ +TVerdict CTestMmfAclntMultiClientARN::DoTestStepPreambleL() + { + iError = KErrTimedOut; + TPtrC filename; + TVerdict verdict; + + // Install the scheduler - Call base DoTestStepPreambleL() + verdict = CTestMmfAclntStep::DoTestStepPreambleL(); + if (verdict == EFail) + { + return verdict; + } + + iEventChecker = CMultiEventChecker::NewL(); + //************** Initialise CMdaAudioPlayerUtility*************** + INFO_PRINTF1(_L("Initialise CMdaAudioPlayerUtility : EMdaPriorityNormal")); + // Get file name + if(!GetStringFromConfig(iSectName, _L("playerAudioFile1"), filename)) + { + return EInconclusive; + } + GetDriveName(iFilenamePlayer); + iFilenamePlayer.Append(filename); + + // Callback Handler + iMdaAudioPlayerCallbackSupport = CTestMdaAudioMultiClientCallbackSupport::NewL(*this); + + // Initialise Audio Player + iTestAudioPlayer = CMdaAudioPlayerUtility::NewL(*this, EMdaPriorityNormal); + + //************** Initialise CMdaAudioRecorderUtility************* + INFO_PRINTF1(_L("Initialise CMdaAudioRecorderUtility : EMdaPriorityMax")); + // Get file name + if(!GetStringFromConfig(iSectName, _L("playerAudioFile2"), filename)) + { + return EInconclusive; + } + GetDriveName(iFilenameRecorder); + iFilenameRecorder.Append(filename); + + // Callback Handler + iMdaAudioRecorderCallbackSupport = CTestMdaAudioMultiClientCallbackSupport::NewL(*this); + + // Initialise Audio Recorder + iTestAudioRecorder = CMdaAudioRecorderUtility::NewL(*this, NULL, EMdaPriorityMax); + + //************** Initialise CMdaAudioOutputStream**************** + INFO_PRINTF1(_L("Initialise CMdaAudioOutputStream : EMdaPriorityMin")); + // Connect RFs session + TInt err = iFs.Connect(); + if (err != KErrNone) + { + INFO_PRINTF2(_L("Error connecting to File session (RFs) = %d"), err); + return EFail; + } + // Callback Handler + iMdaAudioOutputStreamCallbackSupport = CTestMdaAudioMultiClientCallbackSupport::NewL(*this); + + // Initialise iTestAudioOutputStream + TRAP(err, iTestAudioOutputStream = CMdaAudioOutputStream::NewL(*this, EMdaPriorityMin, EMdaPriorityPreferenceTimeAndQuality)); + if (err != KErrNone || iTestAudioOutputStream == NULL ) + { + INFO_PRINTF2(_L("Error Creating iTestAudioOutputStream = %d"), err); + return EInconclusive; + } + // Open RFile + err = iFile.Open(iFs, KStreamRawFile1, EFileRead); + if (err != KErrNone) + { + INFO_PRINTF2(_L("Error opening iFile = %d"), err); + return EFail; + } + // Get size of iFile + err = iFile.Size(iFileSize); + if (err != KErrNone) + { + INFO_PRINTF2(_L("Error getting size of iFile = %d"), err); + return EFail; + } + // Initialise iBuf + iBuf.CreateMaxL(iFileSize); + + // Initialise the CCallBackTimer. + iCallBackTimer = CCallBackTimer::NewL(TCallBack(stopActiveScheduler)); + + return verdict; + } + +/** + * DoTestStepPostambleL + */ +TVerdict CTestMmfAclntMultiClientARN::DoTestStepPostambleL() + { + // Delete all the Audio Client utilities. + if (iTestAudioPlayer) + iTestAudioPlayer->Close(); + delete iTestAudioPlayer; + iTestAudioPlayer = NULL; + iTestAudioRecorder->Close(); + delete iTestAudioRecorder; + iTestAudioRecorder = NULL; + delete iTestAudioOutputStream; + iTestAudioOutputStream = NULL; + // Delete CTestMdaAudioRecorderCallbackSupport + delete iMdaAudioPlayerCallbackSupport; + delete iMdaAudioRecorderCallbackSupport; + delete iMdaAudioOutputStreamCallbackSupport; + // Close RBuf8 + iBuf.Close(); + // Delete the CCallBackTimer. + delete iCallBackTimer; + iCallBackTimer=NULL; + // Close the File Handles + iFile.Close(); + iFs.Close(); + delete iEventChecker; + + return CTestMmfAclntStep::DoTestStepPostambleL(); + } + +/** + * DoTestStepL + */ +TVerdict CTestMmfAclntMultiClientARN::DoTestStepL() + { + return( DoTestL() ); + } + +/** + * StateInit + */ +void CTestMmfAclntMultiClientARN::StateInit() + { + iExpectedEvent=EIdleMulti; + iExpectedRecorderState=CMdaAudioClipUtility::ENotReady; + iExpectedError=KErrNone; + iState=0; + } + +/** + * StateChange + */ +void CTestMmfAclntMultiClientARN::StateChange(TMmfAudioMultiClientEvents aExpectedEvent, TInt aExpectedError, CMdaAudioClipUtility::TState aExpectedRecorderState) + { + iExpectedEvent=aExpectedEvent; + iExpectedRecorderState=aExpectedRecorderState; + iExpectedError=aExpectedError; + iState++; + } + +/** + * FsmCheck + */ +TBool CTestMmfAclntMultiClientARN::FsmCheck(TMmfAudioMultiClientEvents aEventCode, TInt aError, CMdaAudioClipUtility::TState aRecorderState) + { + TBool retFsmCheck = EFalse; + if ((iExpectedError !=KErrUnderflow) && (aError == KErrUnderflow)) + { + INFO_PRINTF1(_L("Underflow !")); + } + else if (iExpectedEvent != aEventCode) + { + ERR_PRINTF3(_L("ExpectedEvent : %d, ActualEvent : %d"), iExpectedEvent, aEventCode); + iTestStepResult = EFail; + CActiveScheduler::Stop(); + } + else if (iExpectedError != aError) + { + ERR_PRINTF3(_L("ExpectedError : %d, ActualError : %d"), iExpectedError, aError); + iTestStepResult = EFail; + CActiveScheduler::Stop(); + } + else if (iExpectedRecorderState != aRecorderState) + { + ERR_PRINTF3(_L("ExpectedRecorderState : %d, ActualRecorderState : %d"), iExpectedRecorderState, aRecorderState); + iTestStepResult = EFail; + CActiveScheduler::Stop(); + } + else + { + retFsmCheck = ETrue; + } + return retFsmCheck; + } + +// +//CTestMmfAclntARN9001 +// + +/** + * Constructor + */ +CTestMmfAclntARN9001::CTestMmfAclntARN9001(const TDesC& aTestName, const TDesC& aSectName) + : CTestMmfAclntMultiClientARN(aTestName, aSectName) + {} + +/** + * NewL + */ +CTestMmfAclntARN9001* CTestMmfAclntARN9001::NewL(const TDesC& aTestName, const TDesC& aSectName) + { + CTestMmfAclntARN9001* self = new (ELeave) CTestMmfAclntARN9001(aTestName, aSectName); + return self; + } + +/** + * DoTestL + */ +TVerdict CTestMmfAclntARN9001::DoTestL() + { + return( PerformTestL() ); + } + +/** + * FsmCheck + */ +TBool CTestMmfAclntARN9001::FsmCheck(TMmfAudioMultiClientEvents aEventCode, TInt aError, CMdaAudioClipUtility::TState aRecorderState) + { + TBool retFsmCheck = EFalse; + if ((iExpectedError !=KErrUnderflow) && (aError == KErrUnderflow)) + { + INFO_PRINTF1(_L("Underflow !")); + } + else if (iExpectedEvent != aEventCode) + { + if ((aEventCode == EMoscoStateChangeEvent)) + { + retFsmCheck = ETrue; + if (iEventOccured == EMarncResourceAvailableOS) + { + return retFsmCheck; + } + else + { + iEventOccured = EMoscoStateChangeEvent; + } + } + else if (aEventCode == EMarncResourceAvailableOS) + { + retFsmCheck = ETrue; + if (iEventOccured == EMoscoStateChangeEvent) + { + return retFsmCheck; + } + else + { + iEventOccured = EMarncResourceAvailableOS; + } + } + else + { + ERR_PRINTF3(_L("ExpectedEvent : %d, ActualEvent : %d"), iExpectedEvent, aEventCode); + iTestStepResult = EFail; + CActiveScheduler::Stop(); + } + } + else if (iExpectedError != aError) + { + ERR_PRINTF3(_L("ExpectedError : %d, ActualError : %d"), iExpectedError, aError); + iTestStepResult = EFail; + CActiveScheduler::Stop(); + } + else if (iExpectedRecorderState != aRecorderState) + { + ERR_PRINTF3(_L("ExpectedRecorderState : %d, ActualRecorderState : %d"), iExpectedRecorderState, aRecorderState); + iTestStepResult = EFail; + CActiveScheduler::Stop(); + } + else + { + retFsmCheck = ETrue; + } + return retFsmCheck; + } + +/** + * FsmL + */ +void CTestMmfAclntARN9001::FsmL(TMmfAudioMultiClientEvents aEventCode, TInt aError, CMdaAudioClipUtility::TState aRecorderState) + { + if (FsmCheck(aEventCode, aError, aRecorderState)) + { + TInt err = KErrNone; + switch (iState) + { + case 0: + // Open iTestAudioPlayer + iTestAudioPlayer->OpenFileL(iFilenamePlayer); + INFO_PRINTF1(_L("iTestAudioPlayer->OpenFileL()")); + // Set ExpectedEvent, ExpectedError, ExpectedRecorderState and change the State + StateChange(EMapcInitComplete); + break; + case 1: + // Play iTestAudioPlayer + iTestAudioPlayer->Play(); + INFO_PRINTF1(_L("iTestAudioPlayer->Play()")); + // Open iTestAudioRecorder + iTestAudioRecorder->OpenFileL(iFilenameRecorder); + INFO_PRINTF1(_L("iTestAudioRecorder->OpenFileL()")); + // Set ExpectedEvent, ExpectedError, ExpectedRecorderState and change the State + StateChange(EMoscoStateChangeEvent, KErrNone, CMdaAudioClipUtility::EOpen); + break; + case 2: + // Play iTestAudioRecorder + iTestAudioRecorder->PlayL(); + INFO_PRINTF1(_L("iTestAudioRecorder->PlayL()")); + // Set ExpectedEvent and change the State + StateChange(EMoscoStateChangeEvent, KErrNone, CMdaAudioClipUtility::EPlaying); + break; + case 3: + // iTestAudioPlayer gets PlayError. + StateChange(EMapcPlayComplete, KErrInUse); + break; + case 4: + // Register iTestAudioPlayer for Notification + err = iTestAudioPlayer->RegisterAudioResourceNotification(*iMdaAudioPlayerCallbackSupport, KMMFEventCategoryAudioResourceAvailable); + INFO_PRINTF2(_L("iTestAudioPlayer->RegisterAudioResourceNotification : Status - %d "), err); + if( err != KErrNone ) + { + ERR_PRINTF2(_L("iTestAudioPlayer->RegisterAudioResourceNotification - Failed with Error : %d"), err); + iTestStepResult = EFail; + CActiveScheduler::Stop(); + break; + } + // Register iTestAudioOutputStream for Notification + err = iTestAudioOutputStream->RegisterAudioResourceNotification(*iMdaAudioOutputStreamCallbackSupport, KMMFEventCategoryAudioResourceAvailable); + INFO_PRINTF2(_L("iTestAudioOutputStream->RegisterAudioResourceNotification : Status - %d "), err); + if( err != KErrNone ) + { + ERR_PRINTF2(_L("iTestAudioOutputStream->RegisterAudioResourceNotification - Failed with Error : %d"), err); + iTestStepResult = EFail; + CActiveScheduler::Stop(); + break; + } + // Open iTestAudioOutputStream + iTestAudioOutputStream->Open(NULL); + INFO_PRINTF1(_L("iTestAudioOutputStream->Open()")); + // Set ExpectedEvent, ExpectedError, ExpectedRecorderState and change the State + StateChange(EMaoscOpenComplete); + break; + case 5: + // iFile->Read() + err = iFile.Read(iBuf); //-synchronous + if (err != KErrNone) + { + INFO_PRINTF2(_L("Error reading iFile %d"), err); + User::Leave(err); + } + // iTestAudioOutputStream->WriteL() + INFO_PRINTF1(_L("iTestAudioOutputStream->WriteL()")); + iTestAudioOutputStream->WriteL(iBuf); //-Should get Play Error. + // Set ExpectedEvent & ExpectedError and change the State + StateChange(EMaoscBufferCopied, KErrInUse); + break; + case 6: + // Set ExpectedEvent & ExpectedError and change the State + StateChange(EMaoscPlayComplete, KErrInUse); + break; + case 7: + // Delete the instance iTestAudioPlayer + delete iTestAudioPlayer; + iTestAudioPlayer = NULL; + INFO_PRINTF1(_L("delete iTestAudioPlayer")); + User::After(100000); + // Wait for iTestAudioRecorder to complete playing + // Set ExpectedEvent and change the State + StateChange(EMoscoStateChangeEvent, KErrNone, CMdaAudioClipUtility::EOpen); + break; + case 8: + // Timer to check if Notification Event Occurs. + iCallBackTimer->After(2000000); + // Set ExpectedEvent and change the State + StateChange(EMarncResourceAvailableOS, KErrNone); + break; + case 9: + iCallBackTimer->Cancel(); // in case something else stopped the AS + INFO_PRINTF1(_L("iTestAudioOutputStream->NotificationReceived")); + iTestStepResult = EPass; + CActiveScheduler::Stop(); + break; + } + } + } + +/** + * PerformTestL + */ +TVerdict CTestMmfAclntARN9001::PerformTestL() + { + INFO_PRINTF1(_L("Receipt of Notification (on deleting the Audio Play Client instance of a Notified Client) of a Resource Available Event.")); + iTestStepResult = EFail; + + // Initialise the state variables + StateInit(); + + // Begin the process + FsmL(EIdleMulti, CMdaAudioClipUtility::ENotReady); + + // Start the scheduler - Done only once ! + CActiveScheduler::Start(); + + return iTestStepResult; + } + + +// +//CTestMmfAclntARN9002 +// + +/** + * Constructor + */ +CTestMmfAclntARN9002::CTestMmfAclntARN9002(const TDesC& aTestName, const TDesC& aSectName) + : CTestMmfAclntMultiClientARN(aTestName, aSectName) + {} + +/** + * NewL + */ +CTestMmfAclntARN9002* CTestMmfAclntARN9002::NewL(const TDesC& aTestName, const TDesC& aSectName) + { + CTestMmfAclntARN9002* self = new (ELeave) CTestMmfAclntARN9002(aTestName, aSectName); + return self; + } + +/** + * DoTestL + */ +TVerdict CTestMmfAclntARN9002::DoTestL() + { + return( PerformTestL() ); + } + +void CTestMmfAclntARN9002::InitTest() + { + iEventChecker = CMultiEventChecker::NewL(); + //Keep adding handlers + iStateHandlers[EStateApInitComplete] = &CTestMmfAclntARN9002::HandleStateApInitComplete; + iStateHandlers[EStateRecoderOpen] = &CTestMmfAclntARN9002::HandleStateRecorderOpen; + iStateHandlers[EStateRecoderPlaying] = &CTestMmfAclntARN9002::HandleStateRecorderPlaying; + iStateHandlers[EStateApPlayCompleteKErrInUse] = &CTestMmfAclntARN9002::HandleApPlayCompleteKErrInUse; + iStateHandlers[EStateAosOpenComplete] = &CTestMmfAclntARN9002::HandleStateAosOpenComplete; + iStateHandlers[EStateAosBufferCopiedKErrInUse] = &CTestMmfAclntARN9002::HandleStateAosBufferCopiedKErrInUse; + iStateHandlers[EStateAosPlayCompleteKErrInUse] = &CTestMmfAclntARN9002::HandleStateAosPlayCompleteKErrInUse; + iStateHandlers[EStateRecorderrelease] = &CTestMmfAclntARN9002::HandleStateRecorderrelease; + iStateHandlers[EStateApResourceAvailable] = &CTestMmfAclntARN9002::HandleStateApResourceAvailable; + iStateHandlers[EStateApPlayComplete] = &CTestMmfAclntARN9002::HandleStateApPlayComplete; + iStateHandlers[EStateAosResourceAvailable] = &CTestMmfAclntARN9002::HandleStateAosResourceAvailable; + } + +void CTestMmfAclntARN9002::StartTestL() + { + // Open iTestAudioPlayer + iTestAudioPlayer->OpenFileL(iFilenamePlayer); + INFO_PRINTF1(_L("iTestAudioPlayer->OpenFileL()")); + iEventChecker->SetExpectedEvent(0,EMapcInitComplete,KErrNone); + iEventChecker->SetExpectedState(EStateApInitComplete); + } + +TVerdict CTestMmfAclntARN9002::HandleStateApInitComplete() + { + iTestAudioPlayer->Play(); + INFO_PRINTF1(_L("iTestAudioPlayer->Play()")); + // Open iTestAudioRecorder + iTestAudioRecorder->OpenFileL(iFilenameRecorder); + INFO_PRINTF1(_L("iTestAudioRecorder->OpenFileL()")); + iEventChecker->SetExpectedEvent(1,EMoscoStateChangeEvent, KErrNone,CMdaAudioClipUtility::EOpen); + iEventChecker->SetExpectedState(EStateRecoderOpen); + return EPass; + } + +TVerdict CTestMmfAclntARN9002::HandleStateRecorderOpen() + { + iTestAudioRecorder->PlayL(); + INFO_PRINTF1(_L("iTestAudioRecorder->PlayL()")); + // Set ExpectedEvent and change the State + iEventChecker->SetExpectedEvent(1,EMoscoStateChangeEvent,KErrNone,CMdaAudioClipUtility::EPlaying); + iEventChecker->SetExpectedState(EStateRecoderPlaying); + return EPass; + } + +TVerdict CTestMmfAclntARN9002::HandleStateRecorderPlaying() + { + iEventChecker->SetExpectedEvent(0,EMapcPlayComplete,KErrInUse); + iEventChecker->SetExpectedState(EStateApPlayCompleteKErrInUse); + return EPass; + } + +TVerdict CTestMmfAclntARN9002::HandleApPlayCompleteKErrInUse() + { + TInt err = iTestAudioPlayer->RegisterAudioResourceNotification(*iMdaAudioPlayerCallbackSupport, KMMFEventCategoryAudioResourceAvailable); + INFO_PRINTF2(_L("iTestAudioPlayer->RegisterAudioResourceNotification : Status - %d "), err); + if( err != KErrNone ) + { + ERR_PRINTF2(_L("iTestAudioPlayer->RegisterAudioResourceNotification - Failed with Error : %d"), err); + iTestStepResult = EFail; + CActiveScheduler::Stop(); + } + // Register iTestAudioOutputStream for Notification + err = iTestAudioOutputStream->RegisterAudioResourceNotification(*iMdaAudioOutputStreamCallbackSupport, KMMFEventCategoryAudioResourceAvailable); + INFO_PRINTF2(_L("iTestAudioOutputStream->RegisterAudioResourceNotification : Status - %d "), err); + if( err != KErrNone ) + { + ERR_PRINTF2(_L("iTestAudioOutputStream->RegisterAudioResourceNotification - Failed with Error : %d"), err); + iTestStepResult = EFail; + CActiveScheduler::Stop(); + } + // Open iTestAudioOutputStream + iTestAudioOutputStream->Open(NULL); + INFO_PRINTF1(_L("iTestAudioOutputStream->Open()")); + // Set ExpectedEvent, ExpectedError, ExpectedRecorderState and change the State + iEventChecker->SetExpectedEvent(2,EMaoscOpenComplete,KErrNone); + iEventChecker->SetExpectedState(EStateAosOpenComplete); + return EPass; + } + +TVerdict CTestMmfAclntARN9002::HandleStateAosOpenComplete() + { + // iFile->Read() + TInt err = iFile.Read(iBuf); //-synchronous + if (err != KErrNone) + { + INFO_PRINTF2(_L("Error reading iFile %d"), err); + User::Leave(err); + } + // iTestAudioOutputStream->WriteL() + INFO_PRINTF1(_L("iTestAudioOutputStream->WriteL()")); + iTestAudioOutputStream->WriteL(iBuf); //-Should get Play Error. + // Set ExpectedEvent & ExpectedError and change the State + iEventChecker->SetExpectedEvent(2,EMaoscBufferCopied,KErrInUse); + iEventChecker->SetExpectedState(EStateAosBufferCopiedKErrInUse); + return EPass; + } + +TVerdict CTestMmfAclntARN9002::HandleStateAosBufferCopiedKErrInUse() + { + iEventChecker->SetExpectedEvent(2,EMaoscPlayComplete,KErrInUse); + iEventChecker->SetExpectedState(EStateAosPlayCompleteKErrInUse); + return EPass; + } + +TVerdict CTestMmfAclntARN9002::HandleStateAosPlayCompleteKErrInUse() + { + iEventChecker->SetExpectedEvent(1,EMoscoStateChangeEvent,KErrNone,CMdaAudioClipUtility::EOpen); + iEventChecker->SetExpectedState(EStateRecorderrelease); + return EPass; + } + +TVerdict CTestMmfAclntARN9002::HandleStateRecorderrelease() + { + // Timer to check if Notification Event Occurs. + iCallBackTimer->After(2000000); + // Set ExpectedEvent and change the State + iEventChecker->SetExpectedEvent(0,EMarncResourceAvailablePlayer,KErrNone); + iEventChecker->SetExpectedState(EStateApResourceAvailable); + return EPass; + } + +TVerdict CTestMmfAclntARN9002::HandleStateApResourceAvailable() + { + iCallBackTimer->Cancel(); // in case something else stopped the AS + INFO_PRINTF1(_L("iTestAudioPlayer->NotificationReceived")); + TInt err = iTestAudioPlayer->WillResumePlay(); + INFO_PRINTF1(_L("iTestAudioPlayer->WillResumePlay()")); + if( err != KErrNone ) + { + ERR_PRINTF2(_L("iTestAudioPlayer->WillResumePlay() - Failed with Error : %d"), err); + iTestStepResult = EFail; + CActiveScheduler::Stop(); + } + iTestAudioPlayer->SetPosition(iPosition); + INFO_PRINTF1(_L("iTestAudioPlayer->SetPosition()")); + // Play iTestAudioPlayer + iTestAudioPlayer->Play(); + // Set ExpectedEvent & ExpectedError and change the State + iEventChecker->RegisterClientEventToMonitor(0,EMapcPlayComplete,KErrNone,EStateApPlayComplete); + iEventChecker->RegisterClientEventToMonitor(2,EMarncResourceAvailableOS,KErrNone,EStateAosResourceAvailable); + iEventChecker->EnableMultipleEventMonitor(); + return EPass; + } + +TVerdict CTestMmfAclntARN9002::HandleStateApPlayComplete() + { + INFO_PRINTF1(_L("AudioPlayer->PlayComplete")); + if(iEventChecker->IsMonitoringFinished()) + { + iTestStepResult = EPass; + iCallBackTimer->Cancel(); + iEventChecker->StopTest(); + } + else + { + iEventChecker->EnableMultipleEventMonitor(); + } + return EPass; + } + +TVerdict CTestMmfAclntARN9002::HandleStateAosResourceAvailable() + { + INFO_PRINTF1(_L("iTestAudioOutputStream->NotificationReceived")); + if(iEventChecker->IsMonitoringFinished()) + { + iCallBackTimer->Cancel(); + iTestStepResult = EPass; + iEventChecker->StopTest(); + } + else + { + iEventChecker->EnableMultipleEventMonitor(); + } + return EPass; + } + +void CTestMmfAclntARN9002::DecideFsmState(TInt aClientNumber,CMultiEventChecker::TClientUtilityType aClientType, TInt aEventCode, TInt aError,CMdaAudioClipUtility::TState aRecorderState) + { + if (iEventChecker->CheckFsm(aClientNumber, aClientType, aEventCode, aError,aRecorderState)) + { + iTestStepResult = (this->*(iStateHandlers[iEventChecker->NextState()]))(); + if(iTestStepResult != EPass) + { + iEventChecker->StopTest(); + } + } + } + +void CTestMmfAclntARN9002::FsmL(TMmfAudioMultiClientEvents aEventCode, TInt aError, CMdaAudioClipUtility::TState aRecorderState) + { + if (aEventCode == EMapcInitComplete || aEventCode == EMapcPlayComplete || aEventCode == EMarncResourceAvailablePlayer) + { + DecideFsmState(0,CMultiEventChecker::EAudioPlayer,aEventCode,aError); + } + if (aEventCode == EMoscoStateChangeEvent || aEventCode == EMarncResourceAvailableRecorder) + { + DecideFsmState(1,CMultiEventChecker::EAudioRecorder,aEventCode,aError,aRecorderState); + } + if (aEventCode == EMaoscOpenComplete || aEventCode == EMaoscBufferCopied || aEventCode == EMaoscPlayComplete || aEventCode == EMarncResourceAvailableOS) + { + DecideFsmState(2,CMultiEventChecker::EAudioStream,aEventCode,aError); + } + } + +TVerdict CTestMmfAclntARN9002::PerformTestL() + { + INFO_PRINTF1(_L("Receipt of Notification (on completion of play of a Notifed Client) of a Resource Available Event.")); + iTestStepResult = EFail; + + // Initialise the handler functions + InitTest(); + + // Initiate the process + StartTestL(); + + // Start the scheduler - Done only once ! + CActiveScheduler::Start(); + + return iTestStepResult; + } + + +// +//CTestMmfAclntARN9003 +// + +/** + * Constructor + */ +CTestMmfAclntARN9003::CTestMmfAclntARN9003(const TDesC& aTestName, const TDesC& aSectName) + : CTestMmfAclntMultiClientARN(aTestName, aSectName) + {} + +/** + * NewL + */ +CTestMmfAclntARN9003* CTestMmfAclntARN9003::NewL(const TDesC& aTestName, const TDesC& aSectName) + { + CTestMmfAclntARN9003* self = new (ELeave) CTestMmfAclntARN9003(aTestName, aSectName); + return self; + } + +/** + * DoTestL + */ +TVerdict CTestMmfAclntARN9003::DoTestL() + { + return( PerformTestL() ); + } + +/** + * FsmL + */ +void CTestMmfAclntARN9003::FsmL(TMmfAudioMultiClientEvents aEventCode, TInt aError, CMdaAudioClipUtility::TState aRecorderState) + { + if (FsmCheck(aEventCode, aError, aRecorderState)) + { + TInt err = KErrNone; + switch (iState) + { + case 0: + // Open iTestAudioPlayer + iTestAudioPlayer->OpenFileL(iFilenamePlayer); + INFO_PRINTF1(_L("iTestAudioPlayer->OpenFileL()")); + // Set ExpectedEvent, ExpectedError, ExpectedRecorderState and change the State + StateChange(EMapcInitComplete); + break; + case 1: + // Play iTestAudioPlayer + iTestAudioPlayer->Play(); + INFO_PRINTF1(_L("iTestAudioPlayer->Play()")); + // Open iTestAudioRecorder + iTestAudioRecorder->OpenFileL(iFilenameRecorder); + INFO_PRINTF1(_L("iTestAudioRecorder->OpenFileL()")); + // Set ExpectedEvent, ExpectedError, ExpectedRecorderState and change the State + StateChange(EMoscoStateChangeEvent, KErrNone, CMdaAudioClipUtility::EOpen); + break; + case 2: + // Play iTestAudioRecorder + iTestAudioRecorder->PlayL(); + INFO_PRINTF1(_L("iTestAudioRecorder->PlayL()")); + // Set ExpectedEvent and change the State + StateChange(EMoscoStateChangeEvent, KErrNone, CMdaAudioClipUtility::EPlaying); + break; + case 3: + // iTestAudioPlayer gets PlayError. + StateChange(EMapcPlayComplete, KErrInUse); + break; + case 4: + // Register iTestAudioPlayer for Notification + err = iTestAudioPlayer->RegisterAudioResourceNotification(*iMdaAudioPlayerCallbackSupport, KMMFEventCategoryAudioResourceAvailable); + INFO_PRINTF2(_L("iTestAudioPlayer->RegisterAudioResourceNotification : Status - %d "), err); + if( err != KErrNone ) + { + ERR_PRINTF2(_L("iTestAudioPlayer->RegisterAudioResourceNotification - Failed with Error : %d"), err); + iTestStepResult = EFail; + CActiveScheduler::Stop(); + break; + } + // Register iTestAudioOutputStream for Notification + err = iTestAudioOutputStream->RegisterAudioResourceNotification(*iMdaAudioOutputStreamCallbackSupport, KMMFEventCategoryAudioResourceAvailable); + INFO_PRINTF2(_L("iTestAudioOutputStream->RegisterAudioResourceNotification : Status - %d "), err); + if( err != KErrNone ) + { + ERR_PRINTF2(_L("iTestAudioOutputStream->RegisterAudioResourceNotification - Failed with Error : %d"), err); + iTestStepResult = EFail; + CActiveScheduler::Stop(); + break; + } + // Open iTestAudioOutputStream + iTestAudioOutputStream->Open(NULL); + INFO_PRINTF1(_L("iTestAudioOutputStream->Open()")); + // Set ExpectedEvent, ExpectedError, ExpectedRecorderState and change the State + StateChange(EMaoscOpenComplete); + break; + case 5: + // iFile->Read() + err = iFile.Read(iBuf); //-synchronous + if (err != KErrNone) + { + INFO_PRINTF2(_L("Error reading iFile %d"), err); + User::Leave(err); + } + // iTestAudioOutputStream->WriteL() + INFO_PRINTF1(_L("iTestAudioOutputStream->WriteL()")); + iTestAudioOutputStream->WriteL(iBuf); //-Should get Play Error. + // Set ExpectedEvent & ExpectedError and change the State + StateChange(EMaoscBufferCopied, KErrInUse); + break; + case 6: + // Set ExpectedEvent & ExpectedError and change the State + StateChange(EMaoscPlayComplete, KErrInUse); + break; + case 7: + // Wait for iTestAudioRecorder to complete playing + // Set ExpectedEvent and change the State + StateChange(EMoscoStateChangeEvent, KErrNone, CMdaAudioClipUtility::EOpen); + break; + case 8: + // Timer to check if Notification Event Occurs. + iCallBackTimer->After(2000000); + // Set ExpectedEvent and change the State + StateChange(EMarncResourceAvailablePlayer, KErrNone); + break; + case 9: + iCallBackTimer->Cancel(); // in case something else stopped the AS + INFO_PRINTF1(_L("iTestAudioPlayer->NotificationReceived")); + err = iTestAudioPlayer->WillResumePlay(); + INFO_PRINTF1(_L("iTestAudioPlayer->WillResumePlay()")); + if( err != KErrNone ) + { + ERR_PRINTF2(_L("iTestAudioPlayer->WillResumePlay() - Failed with Error : %d"), err); + iTestStepResult = EFail; + CActiveScheduler::Stop(); + break; + } + iTestAudioPlayer->SetPosition(iPosition); + INFO_PRINTF1(_L("iTestAudioPlayer->SetPosition()")); + // Play iTestAudioPlayer + iTestAudioPlayer->Play(); + // Stop & Close iTestAudioPlayer + WaitWithTimeout(iRequestStatus,1000000); + iTestAudioPlayer->Stop(); + INFO_PRINTF1(_L("iTestAudioPlayer->Stop()")); + iTestAudioPlayer->Close(); + INFO_PRINTF1(_L("iTestAudioPlayer->Close()")); + // Timer to check if Notification Event Occurs. + iCallBackTimer->After(2000000); + // Set ExpectedEvent and change the State + StateChange(EMarncResourceAvailableOS); + break; + case 10: + iCallBackTimer->Cancel(); // in case something else stopped the AS + INFO_PRINTF1(_L("iTestAudioOutputStream->NotificationReceived")); + iTestStepResult = EPass; + CActiveScheduler::Stop(); + break; + } + } + } + +/** + * PerformTestL + */ +TVerdict CTestMmfAclntARN9003::PerformTestL() + { + INFO_PRINTF1(_L("Receipt of Notification (on stopping play of a Notitifed Client) of a Resource Available Event.")); + iTestStepResult = EFail; + + // Initialise the state variables + StateInit(); + + // Begin the process + FsmL(EIdleMulti, CMdaAudioClipUtility::ENotReady); + + // Start the scheduler - Done only once ! + CActiveScheduler::Start(); + + return iTestStepResult; + } + +// +//CTestMmfAclntARN9004 +// + +/** + * Constructor + */ +CTestMmfAclntARN9004::CTestMmfAclntARN9004(const TDesC& aTestName, const TDesC& aSectName) + : CTestMmfAclntMultiClientARN(aTestName, aSectName) + {} + +/** + * NewL + */ +CTestMmfAclntARN9004* CTestMmfAclntARN9004::NewL(const TDesC& aTestName, const TDesC& aSectName) + { + CTestMmfAclntARN9004* self = new (ELeave) CTestMmfAclntARN9004(aTestName, aSectName); + return self; + } + +/** + * DoTestL + */ +TVerdict CTestMmfAclntARN9004::DoTestL() + { + return( PerformTestL() ); + } + +/** + * FsmCheck + */ +TBool CTestMmfAclntARN9004::FsmCheck(TMmfAudioMultiClientEvents aEventCode, TInt aError, CMdaAudioClipUtility::TState aRecorderState) + { + TBool retFsmCheck = EFalse; + if ((iExpectedError !=KErrUnderflow) && (aError == KErrUnderflow)) + { + INFO_PRINTF1(_L("Underflow !")); + } + else if (iExpectedEvent != aEventCode) + { + if ((aEventCode == EMoscoStateChangeEvent)) + { + retFsmCheck = ETrue; +#ifdef SYMBIAN_MULTIMEDIA_A3FDEVSOUND + if (iEventOccured == EMarncResourceAvailablePlayer) +#else + if (iEventOccured == EMarncResourceAvailableOS) +#endif + { + return retFsmCheck; + } + else + { + iEventOccured = EMoscoStateChangeEvent; + } + } +#ifdef SYMBIAN_MULTIMEDIA_A3FDEVSOUND + else if (aEventCode == EMarncResourceAvailablePlayer) +#else + else if (aEventCode == EMarncResourceAvailableOS) +#endif + { + retFsmCheck = ETrue; + if (iEventOccured == EMoscoStateChangeEvent) + { + return retFsmCheck; + } + else + { +#ifdef SYMBIAN_MULTIMEDIA_A3FDEVSOUND + iEventOccured = EMarncResourceAvailablePlayer; +#else + iEventOccured = EMarncResourceAvailableOS; +#endif + } + } + else + { + ERR_PRINTF3(_L("ExpectedEvent : %d, ActualEvent : %d"), iExpectedEvent, aEventCode); + iTestStepResult = EFail; + CActiveScheduler::Stop(); + } + } + else if (iExpectedError != aError) + { + ERR_PRINTF3(_L("ExpectedError : %d, ActualError : %d"), iExpectedError, aError); + iTestStepResult = EFail; + CActiveScheduler::Stop(); + } + else if (iExpectedRecorderState != aRecorderState) + { + ERR_PRINTF3(_L("ExpectedRecorderState : %d, ActualRecorderState : %d"), iExpectedRecorderState, aRecorderState); + iTestStepResult = EFail; + CActiveScheduler::Stop(); + } + else + { + retFsmCheck = ETrue; + } + return retFsmCheck; + } + +/** + * FsmL + */ +void CTestMmfAclntARN9004::FsmL(TMmfAudioMultiClientEvents aEventCode, TInt aError, CMdaAudioClipUtility::TState aRecorderState) + { + if (FsmCheck(aEventCode, aError, aRecorderState)) + { + TInt err = KErrNone; + switch (iState) + { + case 0: + // Open iTestAudioPlayer + iTestAudioPlayer->OpenFileL(iFilenamePlayer); + INFO_PRINTF1(_L("iTestAudioPlayer->OpenFileL()")); + // Set ExpectedEvent, ExpectedError, ExpectedRecorderState and change the State + StateChange(EMapcInitComplete); + break; + case 1: + // Play iTestAudioPlayer + iTestAudioPlayer->Play(); + INFO_PRINTF1(_L("iTestAudioPlayer->Play()")); + // Open iTestAudioRecorder + iTestAudioRecorder->OpenFileL(iFilenameRecorder); + INFO_PRINTF1(_L("iTestAudioRecorder->OpenFileL()")); + // Set ExpectedEvent, ExpectedError, ExpectedRecorderState and change the State + StateChange(EMoscoStateChangeEvent, KErrNone, CMdaAudioClipUtility::EOpen); + break; + case 2: + // Play iTestAudioRecorder + iTestAudioRecorder->PlayL(); + INFO_PRINTF1(_L("iTestAudioRecorder->PlayL()")); + // Set ExpectedEvent and change the State + StateChange(EMoscoStateChangeEvent, KErrNone, CMdaAudioClipUtility::EPlaying); + break; + case 3: + // iTestAudioPlayer gets PlayError. + StateChange(EMapcPlayComplete, KErrInUse); + break; + case 4: + // Register iTestAudioOutputStream for Notification + err = iTestAudioOutputStream->RegisterAudioResourceNotification(*iMdaAudioOutputStreamCallbackSupport, KMMFEventCategoryAudioResourceAvailable); + INFO_PRINTF2(_L("iTestAudioOutputStream->RegisterAudioResourceNotification : Status - %d "), err); + if( err != KErrNone ) + { + ERR_PRINTF2(_L("iTestAudioOutputStream->RegisterAudioResourceNotification - Failed with Error : %d"), err); + iTestStepResult = EFail; + CActiveScheduler::Stop(); + break; + } + // Register iTestAudioPlayer for Notification + err = iTestAudioPlayer->RegisterAudioResourceNotification(*iMdaAudioPlayerCallbackSupport, KMMFEventCategoryAudioResourceAvailable); + INFO_PRINTF2(_L("iTestAudioPlayer->RegisterAudioResourceNotification : Status - %d "), err); + if( err != KErrNone ) + { + ERR_PRINTF2(_L("iTestAudioPlayer->RegisterAudioResourceNotification - Failed with Error : %d"), err); + iTestStepResult = EFail; + CActiveScheduler::Stop(); + break; + } + // Open iTestAudioOutputStream + iTestAudioOutputStream->Open(NULL); + INFO_PRINTF1(_L("iTestAudioOutputStream->Open()")); + // Set ExpectedEvent, ExpectedError, ExpectedRecorderState and change the State + StateChange(EMaoscOpenComplete); + break; + case 5: + // iFile->Read() + err = iFile.Read(iBuf); //-synchronous + if (err != KErrNone) + { + INFO_PRINTF2(_L("Error reading iFile %d"), err); + User::Leave(err); + } + // iTestAudioOutputStream->WriteL() + INFO_PRINTF1(_L("iTestAudioOutputStream->WriteL()")); + iTestAudioOutputStream->WriteL(iBuf); //-Should get Play Error. + // Set ExpectedEvent & ExpectedError and change the State + StateChange(EMaoscBufferCopied, KErrInUse); + break; + case 6: + // Set ExpectedEvent & ExpectedError and change the State + StateChange(EMaoscPlayComplete, KErrInUse); + break; + case 7: + // Wait for iTestAudioRecorder to complete playing + // Set ExpectedEvent and change the State + StateChange(EMoscoStateChangeEvent, KErrNone, CMdaAudioClipUtility::EOpen); + break; + case 8: + // Timer to check if Notification Event Occurs. + iCallBackTimer->After(2000000); + // Set ExpectedEvent and change the State + StateChange(EMarncResourceAvailableOS); + break; + case 9: + iCallBackTimer->Cancel(); // in case something else stopped the AS + INFO_PRINTF1(_L("iTestAudioOutputStream->NotificationReceived")); +#ifdef SYMBIAN_MULTIMEDIA_A3FDEVSOUND + StateChange(EMarncResourceAvailablePlayer); +#else + iTestStepResult = EPass; + CActiveScheduler::Stop(); +#endif + break; +#ifdef SYMBIAN_MULTIMEDIA_A3FDEVSOUND + case 10: + INFO_PRINTF1(_L("iTestAudioPlayer->NotificationReceived")); + err = iTestAudioPlayer->WillResumePlay(); + INFO_PRINTF1(_L("iTestAudioPlayer->WillResumePlay()")); + if( err != KErrNone ) + { + ERR_PRINTF2(_L("iTestAudioPlayer->WillResumePlay() - Failed with Error : %d"), err); + iTestStepResult = EFail; + CActiveScheduler::Stop(); + break; + } + iTestStepResult = EPass; + CActiveScheduler::Stop(); + break; +#endif + } + } + } + +/** + * PerformTestL + */ +TVerdict CTestMmfAclntARN9004::PerformTestL() + { + INFO_PRINTF1(_L("Receipt of Notification (chronological order for equal priority clients) of a Resource Available Event.")); + iTestStepResult = EFail; + + // Initialise the state variables + StateInit(); + + // Set the priorities + iTestAudioPlayer->SetPriority(EMdaPriorityMin, EMdaPriorityPreferenceTimeAndQuality); + INFO_PRINTF1(_L("Reset Priority for CMdaAudioPlayerUtility : EMdaPriorityMin")); + iTestAudioOutputStream->SetPriority(EMdaPriorityMin, EMdaPriorityPreferenceTimeAndQuality); + INFO_PRINTF1(_L("Reset Priority for CMdaAudioOutputStream : EMdaPriorityMin")); + + // Begin the process + FsmL(EIdleMulti, CMdaAudioClipUtility::ENotReady); + + // Start the scheduler - Done only once ! + CActiveScheduler::Start(); + + return iTestStepResult; + } + +// +//CTestMmfAclntARN9005 +// + +/** + * Constructor + */ +CTestMmfAclntARN9005::CTestMmfAclntARN9005(const TDesC& aTestName, const TDesC& aSectName) + : CTestMmfAclntMultiClientARN(aTestName, aSectName) + {} + +/** + * NewL + */ +CTestMmfAclntARN9005* CTestMmfAclntARN9005::NewL(const TDesC& aTestName, const TDesC& aSectName) + { + CTestMmfAclntARN9005* self = new (ELeave) CTestMmfAclntARN9005(aTestName, aSectName); + return self; + } + +/** + * DoTestL + */ +TVerdict CTestMmfAclntARN9005::DoTestL() + { + return( PerformTestL() ); + } + +void CTestMmfAclntARN9005::InitTest() + { + //Keep adding handlers + iStateHandlers[EStateApInitComplete] = &CTestMmfAclntARN9005::HandleStateApInitComplete; + iStateHandlers[EStateRecoderOpen] = &CTestMmfAclntARN9005::HandleStateRecorderOpen; + iStateHandlers[EStateRecoderPlaying] = &CTestMmfAclntARN9005::HandleStateRecorderPlaying; + iStateHandlers[EStateApPlayCompleteKErrInUse] = &CTestMmfAclntARN9005::HandleApPlayCompleteKErrInUse; + iStateHandlers[EStateAosOpenComplete] = &CTestMmfAclntARN9005::HandleStateAosOpenComplete; + iStateHandlers[EStateAosBufferCopiedKErrInUse] = &CTestMmfAclntARN9005::HandleStateAosBufferCopiedKErrInUse; + iStateHandlers[EStateAosPlayCompleteKErrInUse] = &CTestMmfAclntARN9005::HandleStateAosPlayCompleteKErrInUse; + iStateHandlers[EStateRecorderrelease] = &CTestMmfAclntARN9005::HandleStateRecorderrelease; + iStateHandlers[EStateApResourceAvailable] = &CTestMmfAclntARN9005::HandleStateApResourceAvailable; + iStateHandlers[EStateApPlayComplete] = &CTestMmfAclntARN9005::HandleStateApPlayComplete; + iStateHandlers[EStateAosResourceAvailable] = &CTestMmfAclntARN9005::HandleStateAosResourceAvailable; + } + +void CTestMmfAclntARN9005::DecideFsmState(TInt aClientNumber,CMultiEventChecker::TClientUtilityType aClientType, TInt aEventCode, TInt aError,CMdaAudioClipUtility::TState aRecorderState) + { + if (iEventChecker->CheckFsm(aClientNumber, aClientType, aEventCode, aError,aRecorderState)) + { + iTestStepResult = (this->*(iStateHandlers[iEventChecker->NextState()]))(); + if(iTestStepResult != EPass) + { + iEventChecker->StopTest(); + } + } + } + +void CTestMmfAclntARN9005::FsmL(TMmfAudioMultiClientEvents aEventCode, TInt aError, CMdaAudioClipUtility::TState aRecorderState) + { + if (aEventCode == EMapcInitComplete || aEventCode == EMapcPlayComplete || aEventCode == EMarncResourceAvailablePlayer) + { + DecideFsmState(0,CMultiEventChecker::EAudioPlayer,aEventCode,aError); + } + if (aEventCode == EMoscoStateChangeEvent || aEventCode == EMarncResourceAvailableRecorder) + { + DecideFsmState(1,CMultiEventChecker::EAudioRecorder,aEventCode,aError,aRecorderState); + } + if (aEventCode == EMaoscOpenComplete || aEventCode == EMaoscBufferCopied || aEventCode == EMaoscPlayComplete || aEventCode == EMarncResourceAvailableOS) + { + DecideFsmState(2,CMultiEventChecker::EAudioStream,aEventCode,aError); + } + } + +void CTestMmfAclntARN9005::StartTestL() + { + // Open iTestAudioPlayer + iTestAudioPlayer->OpenFileL(iFilenamePlayer); + INFO_PRINTF1(_L("iTestAudioPlayer->OpenFileL()")); + iEventChecker->SetExpectedEvent(0,EMapcInitComplete,KErrNone); + iEventChecker->SetExpectedState(EStateApInitComplete); + } + +TVerdict CTestMmfAclntARN9005::HandleStateApInitComplete() + { + iTestAudioPlayer->Play(); + INFO_PRINTF1(_L("iTestAudioPlayer->Play()")); + // Open iTestAudioRecorder + iTestAudioRecorder->OpenFileL(iFilenameRecorder); + INFO_PRINTF1(_L("iTestAudioRecorder->OpenFileL()")); + iEventChecker->SetExpectedEvent(1,EMoscoStateChangeEvent, KErrNone,CMdaAudioClipUtility::EOpen); + iEventChecker->SetExpectedState(EStateRecoderOpen); + return EPass; + } + +TVerdict CTestMmfAclntARN9005::HandleStateRecorderOpen() + { + iTestAudioRecorder->PlayL(); + INFO_PRINTF1(_L("iTestAudioRecorder->PlayL()")); + // Set ExpectedEvent and change the State + iEventChecker->SetExpectedEvent(1,EMoscoStateChangeEvent,KErrNone,CMdaAudioClipUtility::EPlaying); + iEventChecker->SetExpectedState(EStateRecoderPlaying); + return EPass; + } + +TVerdict CTestMmfAclntARN9005::HandleStateRecorderPlaying() + { + iEventChecker->SetExpectedEvent(0,EMapcPlayComplete,KErrInUse); + iEventChecker->SetExpectedState(EStateApPlayCompleteKErrInUse); + return EPass; + } + +TVerdict CTestMmfAclntARN9005::HandleApPlayCompleteKErrInUse() + { + TInt err = iTestAudioPlayer->RegisterAudioResourceNotification(*iMdaAudioPlayerCallbackSupport, KMMFEventCategoryAudioResourceAvailable); + INFO_PRINTF2(_L("iTestAudioPlayer->RegisterAudioResourceNotification : Status - %d "), err); + if( err != KErrNone ) + { + ERR_PRINTF2(_L("iTestAudioPlayer->RegisterAudioResourceNotification - Failed with Error : %d"), err); + iTestStepResult = EFail; + CActiveScheduler::Stop(); + } + // Register iTestAudioOutputStream for Notification + err = iTestAudioOutputStream->RegisterAudioResourceNotification(*iMdaAudioOutputStreamCallbackSupport, KMMFEventCategoryAudioResourceAvailable); + INFO_PRINTF2(_L("iTestAudioOutputStream->RegisterAudioResourceNotification : Status - %d "), err); + if( err != KErrNone ) + { + ERR_PRINTF2(_L("iTestAudioOutputStream->RegisterAudioResourceNotification - Failed with Error : %d"), err); + iTestStepResult = EFail; + CActiveScheduler::Stop(); + } + // Open iTestAudioOutputStream + iTestAudioOutputStream->Open(NULL); + INFO_PRINTF1(_L("iTestAudioOutputStream->Open()")); + // Set ExpectedEvent, ExpectedError, ExpectedRecorderState and change the State + iEventChecker->SetExpectedEvent(2,EMaoscOpenComplete,KErrNone); + iEventChecker->SetExpectedState(EStateAosOpenComplete); + return EPass; + } + +TVerdict CTestMmfAclntARN9005::HandleStateAosOpenComplete() + { + // iFile->Read() + TInt err = iFile.Read(iBuf); //-synchronous + if (err != KErrNone) + { + INFO_PRINTF2(_L("Error reading iFile %d"), err); + User::Leave(err); + } + // iTestAudioOutputStream->WriteL() + INFO_PRINTF1(_L("iTestAudioOutputStream->WriteL()")); + iTestAudioOutputStream->WriteL(iBuf); //-Should get Play Error. + // Set ExpectedEvent & ExpectedError and change the State + iEventChecker->SetExpectedEvent(2,EMaoscBufferCopied,KErrInUse); + iEventChecker->SetExpectedState(EStateAosBufferCopiedKErrInUse); + return EPass; + } + +TVerdict CTestMmfAclntARN9005::HandleStateAosBufferCopiedKErrInUse() + { + iEventChecker->SetExpectedEvent(2,EMaoscPlayComplete,KErrInUse); + iEventChecker->SetExpectedState(EStateAosPlayCompleteKErrInUse); + return EPass; + } + +TVerdict CTestMmfAclntARN9005::HandleStateAosPlayCompleteKErrInUse() + { + iEventChecker->SetExpectedEvent(1,EMoscoStateChangeEvent,KErrNone,CMdaAudioClipUtility::EOpen); + iEventChecker->SetExpectedState(EStateRecorderrelease); + return EPass; + } + +TVerdict CTestMmfAclntARN9005::HandleStateRecorderrelease() + { + // Timer to check if Notification Event Occurs. + iCallBackTimer->After(2000000); + // Set ExpectedEvent and change the State + iEventChecker->SetExpectedEvent(0,EMarncResourceAvailablePlayer,KErrNone); + iEventChecker->SetExpectedState(EStateApResourceAvailable); + return EPass; + } + +TVerdict CTestMmfAclntARN9005::HandleStateApResourceAvailable() + { + iCallBackTimer->Cancel(); // in case something else stopped the AS + INFO_PRINTF1(_L("iTestAudioPlayer->NotificationReceived")); + TInt err = iTestAudioPlayer->WillResumePlay(); + INFO_PRINTF1(_L("iTestAudioPlayer->WillResumePlay()")); + if( err != KErrNone ) + { + ERR_PRINTF2(_L("iTestAudioPlayer->WillResumePlay() - Failed with Error : %d"), err); + iTestStepResult = EFail; + CActiveScheduler::Stop(); + return EFail; + } + iTestAudioPlayer->SetPosition(iPosition); + INFO_PRINTF1(_L("iTestAudioPlayer->SetPosition()")); + // Play iTestAudioPlayer + iTestAudioPlayer->Play(); + // Set ExpectedEvent & ExpectedError and change the State + iEventChecker->RegisterClientEventToMonitor(0,EMapcPlayComplete,KErrNone,EStateApPlayComplete); + iEventChecker->RegisterClientEventToMonitor(2,EMarncResourceAvailableOS,KErrNone,EStateAosResourceAvailable); + iEventChecker->EnableMultipleEventMonitor(); + return EPass; + } + +TVerdict CTestMmfAclntARN9005::HandleStateApPlayComplete() + { + INFO_PRINTF1(_L("AudioPlayer->PlayComplete")); + if(iEventChecker->IsMonitoringFinished()) + { + iTestStepResult = EPass; + iCallBackTimer->Cancel(); + iEventChecker->StopTest(); + } + else + { + iEventChecker->EnableMultipleEventMonitor(); + } + return EPass; + } + +TVerdict CTestMmfAclntARN9005::HandleStateAosResourceAvailable() + { + INFO_PRINTF1(_L("iTestAudioOutputStream->NotificationReceived")); + if(iEventChecker->IsMonitoringFinished()) + { + iCallBackTimer->Cancel(); + iTestStepResult = EPass; + iEventChecker->StopTest(); + } + else + { + iEventChecker->EnableMultipleEventMonitor(); + } + return EPass; + } + +/** + * PerformTestL + */ +TVerdict CTestMmfAclntARN9005::PerformTestL() + { + INFO_PRINTF1(_L("Non Receipt of Notification (on calling WillResumePlay() of a notified client) of a Resource Available Event.")); + iTestStepResult = EFail; + + // Initialise the state variables + InitTest(); + + // Begin the process + StartTestL(); + + // Start the scheduler - Done only once ! + CActiveScheduler::Start(); + + return iTestStepResult; + } + +// +//CTestMmfAclntARN9006 +// + +/** + * Constructor + */ +CTestMmfAclntARN9006::CTestMmfAclntARN9006(const TDesC& aTestName, const TDesC& aSectName) + : CTestMmfAclntMultiClientARN(aTestName, aSectName) + {} + +/** + * NewL + */ +CTestMmfAclntARN9006* CTestMmfAclntARN9006::NewL(const TDesC& aTestName, const TDesC& aSectName) + { + CTestMmfAclntARN9006* self = new (ELeave) CTestMmfAclntARN9006(aTestName, aSectName); + return self; + } + +/** + * DoTestL + */ +TVerdict CTestMmfAclntARN9006::DoTestL() + { + return( PerformTestL() ); + } + +void CTestMmfAclntARN9006::DecideFsmState(TInt aClientNumber,CMultiEventChecker::TClientUtilityType aClientType, TInt aEventCode, TInt aError,CMdaAudioClipUtility::TState aRecorderState) + { + if (iEventChecker->CheckFsm(aClientNumber, aClientType, aEventCode, aError,aRecorderState)) + { + iTestStepResult = (this->*(iStateHandlers[iEventChecker->NextState()]))(); + if(iTestStepResult != EPass) + { + iEventChecker->StopTest(); + } + } + } + +void CTestMmfAclntARN9006::FsmL(TMmfAudioMultiClientEvents aEventCode, TInt aError, CMdaAudioClipUtility::TState aRecorderState) + { + if (aEventCode == EMapcInitComplete || aEventCode == EMapcPlayComplete || aEventCode == EMarncResourceAvailablePlayer) + { + DecideFsmState(0,CMultiEventChecker::EAudioPlayer,aEventCode,aError); + } + if (aEventCode == EMoscoStateChangeEvent || aEventCode == EMarncResourceAvailableRecorder) + { + DecideFsmState(1,CMultiEventChecker::EAudioRecorder,aEventCode,aError,aRecorderState); + } + if (aEventCode == EMaoscOpenComplete || aEventCode == EMaoscBufferCopied || aEventCode == EMaoscPlayComplete || aEventCode == EMarncResourceAvailableOS) + { + DecideFsmState(2,CMultiEventChecker::EAudioStream,aEventCode,aError); + } + } + +void CTestMmfAclntARN9006::InitTest() + { + //Keep adding handlers + iStateHandlers[EStateApInitComplete] = &CTestMmfAclntARN9006::HandleStateApInitComplete; + iStateHandlers[EStateRecoderOpen] = &CTestMmfAclntARN9006::HandleStateRecorderOpen; + iStateHandlers[EStateRecoderPlaying] = &CTestMmfAclntARN9006::HandleStateRecorderPlaying; + iStateHandlers[EStateApPlayCompleteKErrInUse] = &CTestMmfAclntARN9006::HandleApPlayCompleteKErrInUse; + iStateHandlers[EStateAosOpenComplete] = &CTestMmfAclntARN9006::HandleStateAosOpenComplete; + iStateHandlers[EStateAosBufferCopiedKErrInUse] = &CTestMmfAclntARN9006::HandleStateAosBufferCopiedKErrInUse; + iStateHandlers[EStateAosPlayCompleteKErrInUse] = &CTestMmfAclntARN9006::HandleStateAosPlayCompleteKErrInUse; + iStateHandlers[EStateRecorderrelease] = &CTestMmfAclntARN9006::HandleStateRecorderrelease; + iStateHandlers[EStateApResourceAvailable] = &CTestMmfAclntARN9006::HandleStateApResourceAvailable; + iStateHandlers[EStateAosResourceAvailable] = &CTestMmfAclntARN9006::HandleStateAosResourceAvailable; + } + +void CTestMmfAclntARN9006::StartTestL() + { + // Open iTestAudioPlayer + iTestAudioPlayer->OpenFileL(iFilenamePlayer); + INFO_PRINTF1(_L("iTestAudioPlayer->OpenFileL()")); + iEventChecker->SetExpectedEvent(0,EMapcInitComplete,KErrNone); + iEventChecker->SetExpectedState(EStateApInitComplete); + } + +TVerdict CTestMmfAclntARN9006::HandleStateApInitComplete() + { + iTestAudioPlayer->Play(); + INFO_PRINTF1(_L("iTestAudioPlayer->Play()")); + // Open iTestAudioRecorder + iTestAudioRecorder->OpenFileL(iFilenameRecorder); + INFO_PRINTF1(_L("iTestAudioRecorder->OpenFileL()")); + iEventChecker->SetExpectedEvent(1,EMoscoStateChangeEvent, KErrNone,CMdaAudioClipUtility::EOpen); + iEventChecker->SetExpectedState(EStateRecoderOpen); + return EPass; + } + +TVerdict CTestMmfAclntARN9006::HandleStateRecorderOpen() + { + iTestAudioRecorder->PlayL(); + INFO_PRINTF1(_L("iTestAudioRecorder->PlayL()")); + // Set ExpectedEvent and change the State + iEventChecker->SetExpectedEvent(1,EMoscoStateChangeEvent,KErrNone,CMdaAudioClipUtility::EPlaying); + iEventChecker->SetExpectedState(EStateRecoderPlaying); + return EPass; + } + +TVerdict CTestMmfAclntARN9006::HandleStateRecorderPlaying() + { + iEventChecker->SetExpectedEvent(0,EMapcPlayComplete,KErrInUse); + iEventChecker->SetExpectedState(EStateApPlayCompleteKErrInUse); + return EPass; + } + +TVerdict CTestMmfAclntARN9006::HandleApPlayCompleteKErrInUse() + { + TInt err = iTestAudioPlayer->RegisterAudioResourceNotification(*iMdaAudioPlayerCallbackSupport, KMMFEventCategoryAudioResourceAvailable); + INFO_PRINTF2(_L("iTestAudioPlayer->RegisterAudioResourceNotification : Status - %d "), err); + if( err != KErrNone ) + { + ERR_PRINTF2(_L("iTestAudioPlayer->RegisterAudioResourceNotification - Failed with Error : %d"), err); + iTestStepResult = EFail; + CActiveScheduler::Stop(); + return EFail; + } + // Register iTestAudioOutputStream for Notification + err = iTestAudioOutputStream->RegisterAudioResourceNotification(*iMdaAudioOutputStreamCallbackSupport, KMMFEventCategoryAudioResourceAvailable); + INFO_PRINTF2(_L("iTestAudioOutputStream->RegisterAudioResourceNotification : Status - %d "), err); + if( err != KErrNone ) + { + ERR_PRINTF2(_L("iTestAudioOutputStream->RegisterAudioResourceNotification - Failed with Error : %d"), err); + iTestStepResult = EFail; + CActiveScheduler::Stop(); + return EFail; + } + // Open iTestAudioOutputStream + iTestAudioOutputStream->Open(NULL); + INFO_PRINTF1(_L("iTestAudioOutputStream->Open()")); + // Set ExpectedEvent, ExpectedError, ExpectedRecorderState and change the State + iEventChecker->SetExpectedEvent(2,EMaoscOpenComplete,KErrNone); + iEventChecker->SetExpectedState(EStateAosOpenComplete); + return EPass; + } + +TVerdict CTestMmfAclntARN9006::HandleStateAosOpenComplete() + { + // iFile->Read() + TInt err = iFile.Read(iBuf); //-synchronous + if (err != KErrNone) + { + INFO_PRINTF2(_L("Error reading iFile %d"), err); + User::Leave(err); + } + // iTestAudioOutputStream->WriteL() + INFO_PRINTF1(_L("iTestAudioOutputStream->WriteL()")); + iTestAudioOutputStream->WriteL(iBuf); //-Should get Play Error. + // Set ExpectedEvent & ExpectedError and change the State + iEventChecker->SetExpectedEvent(2,EMaoscBufferCopied,KErrInUse); + iEventChecker->SetExpectedState(EStateAosBufferCopiedKErrInUse); + return EPass; + } + +TVerdict CTestMmfAclntARN9006::HandleStateAosBufferCopiedKErrInUse() + { + iEventChecker->SetExpectedEvent(2,EMaoscPlayComplete,KErrInUse); + iEventChecker->SetExpectedState(EStateAosPlayCompleteKErrInUse); + return EPass; + } + +TVerdict CTestMmfAclntARN9006::HandleStateAosPlayCompleteKErrInUse() + { + iEventChecker->SetExpectedEvent(1,EMoscoStateChangeEvent,KErrNone,CMdaAudioClipUtility::EOpen); + iEventChecker->SetExpectedState(EStateRecorderrelease); + return EPass; + } + +TVerdict CTestMmfAclntARN9006::HandleStateRecorderrelease() + { + // Timer to check if Notification Event Occurs. + iCallBackTimer->After(2000000); + // Set ExpectedEvent and change the State + iEventChecker->SetExpectedEvent(0,EMarncResourceAvailablePlayer,KErrNone); + iEventChecker->SetExpectedState(EStateApResourceAvailable); + return EPass; + } + +TVerdict CTestMmfAclntARN9006::HandleStateApResourceAvailable() + { + iCallBackTimer->Cancel(); // in case something else stopped the AS + INFO_PRINTF1(_L("iTestAudioPlayer->NotificationReceived")); + TInt err = iTestAudioPlayer->WillResumePlay(); + INFO_PRINTF1(_L("iTestAudioPlayer->WillResumePlay()")); + if( err != KErrNone ) + { + ERR_PRINTF2(_L("iTestAudioPlayer->WillResumePlay() - Failed with Error : %d"), err); + iTestStepResult = EFail; + CActiveScheduler::Stop(); + return EFail; + } + iCallBackTimer->After(10000000); + // Set ExpectedEvent & ExpectedError and change the State + iEventChecker->SetExpectedEvent(2,EMarncResourceAvailableOS,KErrNone); + iEventChecker->SetExpectedState(EStateAosResourceAvailable); + return EPass; + } + +TVerdict CTestMmfAclntARN9006::HandleStateAosResourceAvailable() + { + INFO_PRINTF1(_L("iTestAudioOutputStream->NotificationReceived")); + iCallBackTimer->Cancel(); + iTestStepResult = EPass; + iEventChecker->StopTest(); + return EPass; + } + +/** + * PerformTestL + */ +TVerdict CTestMmfAclntARN9006::PerformTestL() + { + INFO_PRINTF1(_L("Receipt of Notification (on timeout of a notified client, 1 sec assumed, call WillResumePlay() after 1 second) of a Resource Available Event.")); + iTestStepResult = EFail; + + // Initialise the handler functions + InitTest(); + + // Initiate the process + StartTestL(); + + // Start the scheduler - Done only once ! + CActiveScheduler::Start(); + + return iTestStepResult; + } + +// +//CTestMmfAclntARN9007 +// + +/** + * Constructor + */ +CTestMmfAclntARN9007::CTestMmfAclntARN9007(const TDesC& aTestName, const TDesC& aSectName) + : CTestMmfAclntMultiClientARN(aTestName, aSectName) + {} + +/** + * NewL + */ +CTestMmfAclntARN9007* CTestMmfAclntARN9007::NewL(const TDesC& aTestName, const TDesC& aSectName) + { + CTestMmfAclntARN9007* self = new (ELeave) CTestMmfAclntARN9007(aTestName, aSectName); + return self; + } + +/** + * DoTestL + */ +TVerdict CTestMmfAclntARN9007::DoTestL() + { + return( PerformTestL() ); + } + +/** + * FsmCheck + */ +TBool CTestMmfAclntARN9007::FsmCheck(TMmfAudioMultiClientEvents aEventCode, TInt aError, CMdaAudioClipUtility::TState aRecorderState) + { + TBool retFsmCheck = EFalse; + if ((iExpectedError !=KErrUnderflow) && (aError == KErrUnderflow)) + { + INFO_PRINTF1(_L("Underflow !")); + } + else if (iExpectedEvent != aEventCode) + { + if ((aEventCode == EMoscoStateChangeEvent)) + { + retFsmCheck = ETrue; + if (iEventOccured == EMarncResourceAvailableOS) + { + return retFsmCheck; + } + else + { + iEventOccured = EMoscoStateChangeEvent; + } + } + else if (aEventCode == EMarncResourceAvailableOS) + { + retFsmCheck = ETrue; + if (iEventOccured == EMoscoStateChangeEvent) + { + return retFsmCheck; + } + else + { + iEventOccured = EMarncResourceAvailableOS; + } + } + else + { + ERR_PRINTF3(_L("ExpectedEvent : %d, ActualEvent : %d"), iExpectedEvent, aEventCode); + iTestStepResult = EFail; + CActiveScheduler::Stop(); + } + } + else if (iExpectedError != aError) + { + ERR_PRINTF3(_L("ExpectedError : %d, ActualError : %d"), iExpectedError, aError); + iTestStepResult = EFail; + CActiveScheduler::Stop(); + } + else if (iExpectedRecorderState != aRecorderState) + { + ERR_PRINTF3(_L("ExpectedRecorderState : %d, ActualRecorderState : %d"), iExpectedRecorderState, aRecorderState); + iTestStepResult = EFail; + CActiveScheduler::Stop(); + } + else + { + retFsmCheck = ETrue; + } + return retFsmCheck; + } + +/** + * FsmL + */ +void CTestMmfAclntARN9007::FsmL(TMmfAudioMultiClientEvents aEventCode, TInt aError, CMdaAudioClipUtility::TState aRecorderState) + { + if (FsmCheck(aEventCode, aError, aRecorderState)) + { + TInt err = KErrNone; + switch (iState) + { + case 0: + // Open iTestAudioPlayer + iTestAudioPlayer->OpenFileL(iFilenamePlayer); + INFO_PRINTF1(_L("iTestAudioPlayer->OpenFileL()")); + // Set ExpectedEvent, ExpectedError, ExpectedRecorderState and change the State + StateChange(EMapcInitComplete); + break; + case 1: + // Play iTestAudioPlayer + iTestAudioPlayer->Play(); + INFO_PRINTF1(_L("iTestAudioPlayer->Play()")); + // Open iTestAudioRecorder + iTestAudioRecorder->OpenFileL(iFilenameRecorder); + INFO_PRINTF1(_L("iTestAudioRecorder->OpenFileL()")); + // Set ExpectedEvent, ExpectedError, ExpectedRecorderState and change the State + StateChange(EMoscoStateChangeEvent, KErrNone, CMdaAudioClipUtility::EOpen); + break; + case 2: + // Play iTestAudioRecorder + iTestAudioRecorder->PlayL(); + INFO_PRINTF1(_L("iTestAudioRecorder->PlayL()")); + // Set ExpectedEvent and change the State + StateChange(EMoscoStateChangeEvent, KErrNone, CMdaAudioClipUtility::EPlaying); + break; + case 3: + // iTestAudioPlayer gets PlayError. + StateChange(EMapcPlayComplete, KErrInUse); + break; + case 4: + // Register iTestAudioPlayer for Notification + err = iTestAudioPlayer->RegisterAudioResourceNotification(*iMdaAudioPlayerCallbackSupport, KMMFEventCategoryAudioResourceAvailable); + INFO_PRINTF2(_L("iTestAudioPlayer->RegisterAudioResourceNotification : Status - %d "), err); + if( err != KErrNone ) + { + ERR_PRINTF2(_L("iTestAudioPlayer->RegisterAudioResourceNotification - Failed with Error : %d"), err); + iTestStepResult = EFail; + CActiveScheduler::Stop(); + break; + } + // Register iTestAudioOutputStream for Notification + err = iTestAudioOutputStream->RegisterAudioResourceNotification(*iMdaAudioOutputStreamCallbackSupport, KMMFEventCategoryAudioResourceAvailable); + INFO_PRINTF2(_L("iTestAudioOutputStream->RegisterAudioResourceNotification : Status - %d "), err); + if( err != KErrNone ) + { + ERR_PRINTF2(_L("iTestAudioOutputStream->RegisterAudioResourceNotification - Failed with Error : %d"), err); + iTestStepResult = EFail; + CActiveScheduler::Stop(); + break; + } + // Open iTestAudioOutputStream + iTestAudioOutputStream->Open(NULL); + INFO_PRINTF1(_L("iTestAudioOutputStream->Open()")); + // Set ExpectedEvent, ExpectedError, ExpectedRecorderState and change the State + StateChange(EMaoscOpenComplete); + break; + case 5: + // iFile->Read() + err = iFile.Read(iBuf); //-synchronous + if (err != KErrNone) + { + INFO_PRINTF2(_L("Error reading iFile %d"), err); + User::Leave(err); + } + // iTestAudioOutputStream->WriteL() + INFO_PRINTF1(_L("iTestAudioOutputStream->WriteL()")); + iTestAudioOutputStream->WriteL(iBuf); //-Should get Play Error. + // Set ExpectedEvent & ExpectedError and change the State + StateChange(EMaoscBufferCopied, KErrInUse); + break; + case 6: + // Set ExpectedEvent & ExpectedError and change the State + StateChange(EMaoscPlayComplete, KErrInUse); + break; + case 7: + // Cancel the Notification request for iTestAudioPlayer + err = iTestAudioPlayer->CancelRegisterAudioResourceNotification(KMMFEventCategoryAudioResourceAvailable); + INFO_PRINTF2(_L("iTestAudioPlayer->CancelRegisterAudioResourceNotification : Return Code = %d"), err); + if( err != KErrNone ) + { + ERR_PRINTF2(_L("iTestAudioPlayer->CancelRegisterAudioResourceNotification - Failed with Error : %d"), err); + iTestStepResult = EFail; + CActiveScheduler::Stop(); + break; + } + // Wait for iTestAudioRecorder to complete playing + // Set ExpectedEvent and change the State + StateChange(EMoscoStateChangeEvent, KErrNone, CMdaAudioClipUtility::EOpen); + break; + case 8: + // Timer to check if Notification Event Occurs. + iCallBackTimer->After(2000000); + // Set ExpectedEvent and change the State + StateChange(EMarncResourceAvailableOS); + break; + case 9: + iCallBackTimer->Cancel(); // in case something else stopped the AS + INFO_PRINTF1(_L("iTestAudioOutputStream->NotificationReceived")); + iTestStepResult = EPass; + CActiveScheduler::Stop(); + break; + } + } + } + +/** + * PerformTestL + */ +TVerdict CTestMmfAclntARN9007::PerformTestL() + { + INFO_PRINTF1(_L("Receipt of Notification (on cancellation of the notification of a client that has requested for notification) of a Resource Available Event.")); + INFO_PRINTF1(_L("[Cancel before receipt of Notification]")); + iTestStepResult = EFail; + + // Initialise the state variables + StateInit(); + + // Begin the process + FsmL(EIdleMulti, CMdaAudioClipUtility::ENotReady); + + // Start the scheduler - Done only once ! + CActiveScheduler::Start(); + + return iTestStepResult; + } + +// +//CTestMmfAclntARN9008 +// + +/** + * Constructor + */ +CTestMmfAclntARN9008::CTestMmfAclntARN9008(const TDesC& aTestName, const TDesC& aSectName) + : CTestMmfAclntMultiClientARN(aTestName, aSectName) + {} + +/** + * NewL + */ +CTestMmfAclntARN9008* CTestMmfAclntARN9008::NewL(const TDesC& aTestName, const TDesC& aSectName) + { + CTestMmfAclntARN9008* self = new (ELeave) CTestMmfAclntARN9008(aTestName, aSectName); + return self; + } + +/** + * DoTestL + */ +TVerdict CTestMmfAclntARN9008::DoTestL() + { + return( PerformTestL() ); + } + +void CTestMmfAclntARN9008::DecideFsmState(TInt aClientNumber,CMultiEventChecker::TClientUtilityType aClientType, TInt aEventCode, TInt aError,CMdaAudioClipUtility::TState aRecorderState) + { + if (iEventChecker->CheckFsm(aClientNumber, aClientType, aEventCode, aError,aRecorderState)) + { + iTestStepResult = (this->*(iStateHandlers[iEventChecker->NextState()]))(); + if(iTestStepResult != EPass) + { + iEventChecker->StopTest(); + } + } + } + +void CTestMmfAclntARN9008::FsmL(TMmfAudioMultiClientEvents aEventCode, TInt aError, CMdaAudioClipUtility::TState aRecorderState) + { + if (aEventCode == EMapcInitComplete || aEventCode == EMapcPlayComplete || aEventCode == EMarncResourceAvailablePlayer) + { + DecideFsmState(0,CMultiEventChecker::EAudioPlayer,aEventCode,aError); + } + if (aEventCode == EMoscoStateChangeEvent || aEventCode == EMarncResourceAvailableRecorder) + { + DecideFsmState(1,CMultiEventChecker::EAudioRecorder,aEventCode,aError,aRecorderState); + } + if (aEventCode == EMaoscOpenComplete || aEventCode == EMaoscBufferCopied || aEventCode == EMaoscPlayComplete || aEventCode == EMarncResourceAvailableOS) + { + DecideFsmState(2,CMultiEventChecker::EAudioStream,aEventCode,aError); + } + } + +void CTestMmfAclntARN9008::InitTest() + { + //Keep adding handlers + iStateHandlers[EStateApInitComplete] = &CTestMmfAclntARN9008::HandleStateApInitComplete; + iStateHandlers[EStateRecoderOpen] = &CTestMmfAclntARN9008::HandleStateRecorderOpen; + iStateHandlers[EStateRecoderPlaying] = &CTestMmfAclntARN9008::HandleStateRecorderPlaying; + iStateHandlers[EStateApPlayCompleteKErrInUse] = &CTestMmfAclntARN9008::HandleApPlayCompleteKErrInUse; + iStateHandlers[EStateAosOpenComplete] = &CTestMmfAclntARN9008::HandleStateAosOpenComplete; + iStateHandlers[EStateAosBufferCopiedKErrInUse] = &CTestMmfAclntARN9008::HandleStateAosBufferCopiedKErrInUse; + iStateHandlers[EStateAosPlayCompleteKErrInUse] = &CTestMmfAclntARN9008::HandleStateAosPlayCompleteKErrInUse; + iStateHandlers[EStateRecorderrelease] = &CTestMmfAclntARN9008::HandleStateRecorderrelease; + iStateHandlers[EStateApResourceAvailable] = &CTestMmfAclntARN9008::HandleStateApResourceAvailable; + iStateHandlers[EStateApPlayComplete] = &CTestMmfAclntARN9008::HandleStateApPlayComplete; + iStateHandlers[EStateAosResourceAvailable] = &CTestMmfAclntARN9008::HandleStateAosResourceAvailable; + iStateHandlers[EStateRecorderResumePlay] = &CTestMmfAclntARN9008::HandleStateRecorderResumePlay; + iStateHandlers[EStateRecorderPlayComplete]= &CTestMmfAclntARN9008::HandleStateRecorderPlayComplete; + } + +void CTestMmfAclntARN9008::StartTestL() + { + // Open iTestAudioPlayer + iTestAudioPlayer->OpenFileL(iFilenamePlayer); + INFO_PRINTF1(_L("iTestAudioPlayer->OpenFileL()")); + iEventChecker->SetExpectedEvent(0,EMapcInitComplete,KErrNone); + iEventChecker->SetExpectedState(EStateApInitComplete); + } + +TVerdict CTestMmfAclntARN9008::HandleStateApInitComplete() + { + iTestAudioPlayer->Play(); + INFO_PRINTF1(_L("iTestAudioPlayer->Play()")); + // Open iTestAudioRecorder + iTestAudioRecorder->OpenFileL(iFilenameRecorder); + INFO_PRINTF1(_L("iTestAudioRecorder->OpenFileL()")); + iEventChecker->SetExpectedEvent(1,EMoscoStateChangeEvent, KErrNone,CMdaAudioClipUtility::EOpen); + iEventChecker->SetExpectedState(EStateRecoderOpen); + return EPass; + } + +TVerdict CTestMmfAclntARN9008::HandleStateRecorderOpen() + { + iTestAudioRecorder->PlayL(); + INFO_PRINTF1(_L("iTestAudioRecorder->PlayL()")); + // Set ExpectedEvent and change the State + iEventChecker->SetExpectedEvent(1,EMoscoStateChangeEvent,KErrNone,CMdaAudioClipUtility::EPlaying); + iEventChecker->SetExpectedState(EStateRecoderPlaying); + return EPass; + } + +TVerdict CTestMmfAclntARN9008::HandleStateRecorderPlaying() + { + iEventChecker->SetExpectedEvent(0,EMapcPlayComplete,KErrInUse); + iEventChecker->SetExpectedState(EStateApPlayCompleteKErrInUse); + return EPass; + } + +TVerdict CTestMmfAclntARN9008::HandleApPlayCompleteKErrInUse() + { + TInt err = iTestAudioPlayer->RegisterAudioResourceNotification(*iMdaAudioPlayerCallbackSupport, KMMFEventCategoryAudioResourceAvailable); + INFO_PRINTF2(_L("iTestAudioPlayer->RegisterAudioResourceNotification : Status - %d "), err); + if( err != KErrNone ) + { + ERR_PRINTF2(_L("iTestAudioPlayer->RegisterAudioResourceNotification - Failed with Error : %d"), err); + iTestStepResult = EFail; + CActiveScheduler::Stop(); + } + // Register iTestAudioOutputStream for Notification + err = iTestAudioOutputStream->RegisterAudioResourceNotification(*iMdaAudioOutputStreamCallbackSupport, KMMFEventCategoryAudioResourceAvailable); + INFO_PRINTF2(_L("iTestAudioOutputStream->RegisterAudioResourceNotification : Status - %d "), err); + if( err != KErrNone ) + { + ERR_PRINTF2(_L("iTestAudioOutputStream->RegisterAudioResourceNotification - Failed with Error : %d"), err); + iTestStepResult = EFail; + CActiveScheduler::Stop(); + } + // Open iTestAudioOutputStream + iTestAudioOutputStream->Open(NULL); + INFO_PRINTF1(_L("iTestAudioOutputStream->Open()")); + // Set ExpectedEvent, ExpectedError, ExpectedRecorderState and change the State + iEventChecker->SetExpectedEvent(2,EMaoscOpenComplete,KErrNone); + iEventChecker->SetExpectedState(EStateAosOpenComplete); + return EPass; + } + +TVerdict CTestMmfAclntARN9008::HandleStateAosOpenComplete() + { + // iFile->Read() + TInt err = iFile.Read(iBuf); //-synchronous + if (err != KErrNone) + { + INFO_PRINTF2(_L("Error reading iFile %d"), err); + User::Leave(err); + } + // iTestAudioOutputStream->WriteL() + INFO_PRINTF1(_L("iTestAudioOutputStream->WriteL()")); + iTestAudioOutputStream->WriteL(iBuf); //-Should get Play Error. + // Set ExpectedEvent & ExpectedError and change the State + iEventChecker->SetExpectedEvent(2,EMaoscBufferCopied,KErrInUse); + iEventChecker->SetExpectedState(EStateAosBufferCopiedKErrInUse); + return EPass; + } + +TVerdict CTestMmfAclntARN9008::HandleStateAosBufferCopiedKErrInUse() + { + iEventChecker->SetExpectedEvent(2,EMaoscPlayComplete,KErrInUse); + iEventChecker->SetExpectedState(EStateAosPlayCompleteKErrInUse); + return EPass; + } + +TVerdict CTestMmfAclntARN9008::HandleStateAosPlayCompleteKErrInUse() + { + iEventChecker->SetExpectedEvent(1,EMoscoStateChangeEvent,KErrNone,CMdaAudioClipUtility::EOpen); + iEventChecker->SetExpectedState(EStateRecorderrelease); + return EPass; + } + +TVerdict CTestMmfAclntARN9008::HandleStateRecorderrelease() + { + // Set ExpectedEvent and change the State + iEventChecker->SetExpectedEvent(0,EMarncResourceAvailablePlayer,KErrNone); + iEventChecker->SetExpectedState(EStateApResourceAvailable); + return EPass; + } + +TVerdict CTestMmfAclntARN9008::HandleStateApResourceAvailable() + { + // iTestAudioPlayer resumes the playback. + iTestAudioPlayer->SetPosition(iPosition); + INFO_PRINTF1(_L("iTestAudioPlayer->SetPosition()")); + iTestAudioPlayer->Play(); + INFO_PRINTF1(_L("iTestAudioPlayer->Play()")); + // Cancel the Notification request for iTestAudioPlayer + TInt err = iTestAudioPlayer->CancelRegisterAudioResourceNotification(KMMFEventCategoryAudioResourceAvailable); + INFO_PRINTF2(_L("iTestAudioPlayer->CancelRegisterAudioResourceNotification : Return Code = %d"), err); + if( err != KErrNone ) + { + ERR_PRINTF2(_L("iTestAudioPlayer->CancelRegisterAudioResourceNotification - Failed with Error : %d"), err); + iTestStepResult = EFail; + CActiveScheduler::Stop(); + return EFail; + } + // Play iTestAudioRecorder + iTestAudioRecorder->PlayL(); + INFO_PRINTF1(_L("iTestAudioRecorder->PlayL()")); + // Set ExpectedEvent and change the State + iEventChecker->SetExpectedEvent(1,EMoscoStateChangeEvent,KErrNone,CMdaAudioClipUtility::EPlaying); + iEventChecker->SetExpectedState(EStateRecorderResumePlay); + return EPass; + } +TVerdict CTestMmfAclntARN9008::HandleStateRecorderResumePlay() + { + iEventChecker->RegisterClientEventToMonitor(0,EMapcPlayComplete,KErrInUse,EStateApPlayComplete); + iEventChecker->RegisterClientEventToMonitor(2,EMarncResourceAvailableOS,KErrNone,EStateAosResourceAvailable); + iEventChecker->EnableMultipleEventMonitor(); + return EPass; + } +TVerdict CTestMmfAclntARN9008::HandleStateApPlayComplete() + { + INFO_PRINTF1(_L("AudioPlayer->PlayComplete")); + if(iEventChecker->IsMonitoringFinished()) + { + iEventChecker->SetExpectedEvent(1,EMoscoStateChangeEvent, KErrNone, CMdaAudioClipUtility::EOpen); + iEventChecker->SetExpectedState(EStateRecorderPlayComplete); + } + else + { + iEventChecker->EnableMultipleEventMonitor(); + } + return EPass; + } + +TVerdict CTestMmfAclntARN9008::HandleStateAosResourceAvailable() + { + INFO_PRINTF1(_L("AudioPlayer->PlayComplete")); + if(iEventChecker->IsMonitoringFinished()) + { + iEventChecker->SetExpectedEvent(1,EMoscoStateChangeEvent, KErrNone, CMdaAudioClipUtility::EOpen); + iEventChecker->SetExpectedState(EStateRecorderPlayComplete); + } + else + { + iEventChecker->EnableMultipleEventMonitor(); + } + return EPass; + } + +TVerdict CTestMmfAclntARN9008::HandleStateRecorderPlayComplete() + { + INFO_PRINTF1(_L("AudioRecorder->Complete")); + iEventChecker->StopTest(); + return EPass; + } + +TVerdict CTestMmfAclntARN9008::PerformTestL() + { + INFO_PRINTF1(_L("Receipt of Notification (on cancellation of notification of a client that has just received notification) of a Resource Available Event.")); + INFO_PRINTF1(_L("[Cancel after receipt of Notification]")); + iTestStepResult = EFail; + + // Initialise the handler functions + InitTest(); + + // Initiate the process + StartTestL(); + + // Start the scheduler - Done only once ! + CActiveScheduler::Start(); + + return iTestStepResult; + } + +CMultiEventChecker* CMultiEventChecker::NewL() + { + CMultiEventChecker* s = new(ELeave) CMultiEventChecker(); + CleanupStack::PushL(s); + s->ConstructL(); + CleanupStack::Pop(); + return s; + } + +CMultiEventChecker::CMultiEventChecker() + { + } + +void CMultiEventChecker::ConstructL() + { + iExpectedRecorderState = CMdaAudioClipUtility::ENotReady; + iMonitorMultipleEvents = EFalse; + } + +void CMultiEventChecker::SetExpectedState(TInt aState) + { + iNextState = aState; + } + +void CMultiEventChecker::StopTest() + { + CActiveScheduler::Stop(); + } + +void CMultiEventChecker::SetExpectedEvent(TInt aClientNumber, TInt aExpectedEvent, TInt aExpectedError,CMdaAudioClipUtility::TState aRecorderState) + { + iClientEventsToMonitor[aClientNumber]= aExpectedEvent; + iClientError[aClientNumber] = aExpectedError; + iExpectedRecorderState = aRecorderState; + } + +void CMultiEventChecker::RegisterClientEventToMonitor(TInt aClientNumber, TInt aEventCode, TInt aError, TInt aFsmState,CMdaAudioClipUtility::TState aRecorderState) + { + iClientsRegistered++; + iClientEventsToMonitor[aClientNumber] = aEventCode; + iClientError[aClientNumber] = aError; + iFsmStateforClient[aClientNumber] = aFsmState; + iExpectedRecorderState = aRecorderState; + } + +TBool CMultiEventChecker::IsMonitoringFinished() + { + if(iClientsRegistered == 0) + { + return ETrue; + } + else + { + return EFalse; + } + } + +TBool CMultiEventChecker::CheckFsm(TInt aClientNumber,TClientUtilityType aClientType, TInt aEventCode, TInt aError,CMdaAudioClipUtility::TState aRecorderState) + { + TBool retFsmCheck = ETrue; + if (iMonitorMultipleEvents) + { + if(iClientEventsToMonitor[aClientNumber] == aEventCode && iClientError[aClientNumber] == aError ) + { + SetExpectedState(iFsmStateforClient[aClientNumber]); + } + else + { + retFsmCheck = EFalse; + } + + if(retFsmCheck) + { + //Client event has finished + iClientsRegistered--; + } + iMonitorMultipleEvents = EFalse; + } + else + { + if(iClientEventsToMonitor[aClientNumber] != aEventCode) + { + retFsmCheck = EFalse; + } + else if(iClientError[aClientNumber] != aError) + { + retFsmCheck = EFalse; + } + else if (aClientType == EAudioRecorder) + { + if (iExpectedRecorderState != aRecorderState) + { + retFsmCheck = EFalse; + } + } + } + return retFsmCheck; + }