--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/mmlibs/mmfw/tsrc/mmfintegrationtest/ACLNT/TestOutputStreamARN.cpp Tue Feb 02 01:56:55 2010 +0200
@@ -0,0 +1,2142 @@
+// 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 Audio Output Stream.
+//
+//
+
+/**
+ @file TestOutputStreamARN.cpp
+*/
+
+#include "TestAudioClientUtilitiesARN.h"
+
+const TInt KSampleRate = 8000;
+const TInt KBytesPerSample = 2;
+//------------------------------------------------------------------------------
+//********************PREQ 797 - Audio Resource Notification********************
+//------------------------------------------------------------------------------
+
+//
+//CTestMdaAudioOutputStreamCallbackSupport
+//
+
+/**
+ * NewL
+ */
+CTestMdaAudioOutputStreamCallbackSupport* CTestMdaAudioOutputStreamCallbackSupport::NewL(MTestAudioOutputStreamCallback& aCallback)
+ {
+ return new(ELeave) CTestMdaAudioOutputStreamCallbackSupport(aCallback);
+ }
+
+/**
+ * MaoscOpenComplete
+ */
+void CTestMdaAudioOutputStreamCallbackSupport::MaoscOpenComplete(TInt aError)
+ {
+ iCallback.MaoscOpenCompleteTest(aError, *this);
+ }
+
+/**
+ * MaoscBufferCopied
+ */
+void CTestMdaAudioOutputStreamCallbackSupport::MaoscBufferCopied(TInt aError, const TDesC8& aBuffer)
+ {
+ iCallback.MaoscBufferCopiedTest(aError, aBuffer, *this);
+ }
+
+/**
+ * MaoscPlayComplete
+ */
+void CTestMdaAudioOutputStreamCallbackSupport::MaoscPlayComplete(TInt aError)
+ {
+ iCallback.MaoscPlayCompleteTest(aError, *this);
+ }
+
+/**
+ * MarncResourceAvailable
+ */
+void CTestMdaAudioOutputStreamCallbackSupport::MarncResourceAvailable(TUid aNotificationEventId, const TDesC8& aNotificationData)
+ {
+ iCallback.MarncResourceAvailableTest(aNotificationEventId, aNotificationData, *this);
+ }
+
+/**
+ * Constructor
+ */
+CTestMdaAudioOutputStreamCallbackSupport::CTestMdaAudioOutputStreamCallbackSupport(MTestAudioOutputStreamCallback& aCallback):iCallback(aCallback)
+ {
+
+ }
+
+//
+//CTestStepAudioOutputStreamARN
+//
+
+/**
+ * Constructor
+ */
+CTestStepAudioOutputStreamARN::CTestStepAudioOutputStreamARN(const TDesC& aTestName)
+ {
+ iTestStepName = aTestName;
+ iFileSize1 = 0;
+ iFileSize2 = 0;
+ iHeapSize = 3600000;
+ }
+
+/**
+ * MMdaAudioOutputStreamCallback->MaoscOpenComplete
+ */
+void CTestStepAudioOutputStreamARN::MaoscOpenCompleteTest(TInt aError, CTestMdaAudioOutputStreamCallbackSupport& aMdaAudioOutputStreamCallbackSupport)
+ {
+ if (&aMdaAudioOutputStreamCallbackSupport == iMdaAudioOutputStreamCallbackSupport1)
+ {
+ INFO_PRINTF2(_L("iTestAudioOutputStream1::MMdaAudioOutputStreamCallback->MaoscOpenComplete (%d)"),aError);
+ TRAP(iError, FsmL(EMaoscOpenComplete1, aError));
+ }
+ else if (&aMdaAudioOutputStreamCallbackSupport == iMdaAudioOutputStreamCallbackSupport2)
+ {
+ INFO_PRINTF2(_L("iTestAudioOutputStream2::MMdaAudioOutputStreamCallback->MaoscOpenComplete (%d)"),aError);
+ TRAP(iError, FsmL(EMaoscOpenComplete2, aError));
+ }
+ else if (&aMdaAudioOutputStreamCallbackSupport == iMdaAudioOutputStreamCallbackSupport3)
+ {
+ INFO_PRINTF2(_L("iTestAudioOutputStream3::MMdaAudioOutputStreamCallback->MaoscOpenComplete (%d)"),aError);
+ TRAP(iError, FsmL(EMaoscOpenComplete3, aError));
+ }
+ }
+
+/**
+ * MMdaAudioOutputStreamCallback->MaoscBufferCopied
+ */
+void CTestStepAudioOutputStreamARN::MaoscBufferCopiedTest(TInt aError, const TDesC8& /*aBuffer*/, CTestMdaAudioOutputStreamCallbackSupport& aMdaAudioOutputStreamCallbackSupport)
+ {
+ if (&aMdaAudioOutputStreamCallbackSupport == iMdaAudioOutputStreamCallbackSupport1)
+ {
+ INFO_PRINTF2(_L("iTestAudioOutputStream1::MMdaAudioOutputStreamCallback->MaoscBufferCopied (%d)"),aError);
+ TRAP(iError, FsmL(EMaoscBufferCopied1, aError));
+ }
+ else if (&aMdaAudioOutputStreamCallbackSupport == iMdaAudioOutputStreamCallbackSupport2)
+ {
+ INFO_PRINTF2(_L("iTestAudioOutputStream2::MMdaAudioOutputStreamCallback->MaoscBufferCopied (%d)"),aError);
+ TRAP(iError, FsmL(EMaoscBufferCopied2, aError));
+ }
+ else if (&aMdaAudioOutputStreamCallbackSupport == iMdaAudioOutputStreamCallbackSupport3)
+ {
+ INFO_PRINTF2(_L("iTestAudioOutputStream3::MMdaAudioOutputStreamCallback->MaoscBufferCopied (%d)"),aError);
+ TRAP(iError, FsmL(EMaoscBufferCopied3, aError));
+ }
+ }
+
+/**
+ * MMdaAudioOutputStreamCallback->MaoscPlayComplete
+ */
+void CTestStepAudioOutputStreamARN::MaoscPlayCompleteTest(TInt aError, CTestMdaAudioOutputStreamCallbackSupport& aMdaAudioOutputStreamCallbackSupport)
+ {
+ if (&aMdaAudioOutputStreamCallbackSupport == iMdaAudioOutputStreamCallbackSupport1)
+ {
+ INFO_PRINTF2(_L("iTestAudioOutputStream1::MMdaAudioOutputStreamCallback->MaoscPlayComplete (%d)"),aError);
+ TRAP(iError, FsmL(EMaoscPlayComplete1, aError));
+ }
+ else if (&aMdaAudioOutputStreamCallbackSupport == iMdaAudioOutputStreamCallbackSupport2)
+ {
+ INFO_PRINTF2(_L("iTestAudioOutputStream2::MMdaAudioOutputStreamCallback->MaoscPlayComplete (%d)"),aError);
+ TRAP(iError, FsmL(EMaoscPlayComplete2, aError));
+ }
+ else if (&aMdaAudioOutputStreamCallbackSupport == iMdaAudioOutputStreamCallbackSupport3)
+ {
+ INFO_PRINTF2(_L("iTestAudioOutputStream3::MMdaAudioOutputStreamCallback->MaoscPlayComplete (%d)"),aError);
+ TRAP(iError, FsmL(EMaoscPlayComplete3, aError));
+ }
+ }
+
+/**
+ * MMMFAudioResourceNotificationCallback->MarncResourceAvailable
+ */
+void CTestStepAudioOutputStreamARN::MarncResourceAvailableTest(TUid aNotificationEventId, const TDesC8& aNotificationData, CTestMdaAudioOutputStreamCallbackSupport& aMdaAudioOutputStreamCallbackSupport)
+ {
+ if (aNotificationEventId == KMMFEventCategoryAudioResourceAvailable)
+ {
+ INFO_PRINTF1(_L("iAudioOutputStream::MMMFAudioResourceNotificationCallback -> KMMFEventCategoryAudioResourceAvailable"));
+
+ //Convert TDesc8 to TInt64
+ TMMFTimeIntervalMicroSecondsPckg timeIntvbuf;
+ timeIntvbuf.Copy(aNotificationData);
+ TTimeIntervalMicroSeconds intPos = timeIntvbuf();
+ iPosition = intPos;
+
+ if (&aMdaAudioOutputStreamCallbackSupport == iMdaAudioOutputStreamCallbackSupport1)
+ {
+ INFO_PRINTF1(_L("iTestAudioOutputStream1 -> MMMFAudioResourceNotificationCallback NotificationReceived"));
+ TRAP(iError, FsmL(EMarncResourceAvailableOS1, KErrNone));
+ }
+ else if (&aMdaAudioOutputStreamCallbackSupport == iMdaAudioOutputStreamCallbackSupport2)
+ {
+ INFO_PRINTF1(_L("iTestAudioOutputStream2 -> MMMFAudioResourceNotificationCallback NotificationReceived"));
+ TRAP(iError, FsmL(EMarncResourceAvailableOS2, KErrNone));
+ }
+ else if (&aMdaAudioOutputStreamCallbackSupport == iMdaAudioOutputStreamCallbackSupport3)
+ {
+ INFO_PRINTF1(_L("iTestAudioOutputStream3 -> MMMFAudioResourceNotificationCallback NotificationReceived"));
+ TRAP(iError, FsmL(EMarncResourceAvailableOS3, KErrNone));
+ }
+ }
+ else
+ {
+ INFO_PRINTF1(_L("MMMFAudioResourceNotificationCallback, but NOT KMMFEventCategoryAudioResourceAvailable"));
+ }
+ }
+
+/**
+ * DoTestStepPreambleL
+ */
+TVerdict CTestStepAudioOutputStreamARN::DoTestStepPreambleL()
+ {
+ // Local Variable to hold verdict
+ TVerdict verdict;
+
+ // Install the scheduler
+ verdict = CTestMmfAclntStep::DoTestStepPreambleL();
+
+ if (verdict == EFail)
+ {
+ return verdict;
+ }
+
+ // Connect RFs session
+ TInt err = iFs.Connect();
+ if (err != KErrNone)
+ {
+ INFO_PRINTF2(_L("Error connecting to File session (RFs) = %d"), err);
+ return EFail;
+ }
+
+ // Initialise iTestAudioOutputStream1
+ INFO_PRINTF1(_L("Initialise CMdaAudioOutputStream1 : EMdaPriorityNormal"));
+ iMdaAudioOutputStreamCallbackSupport1 = CTestMdaAudioOutputStreamCallbackSupport::NewL(*this);
+ TRAP(err, iTestAudioOutputStream1 = CMdaAudioOutputStream::NewL(*iMdaAudioOutputStreamCallbackSupport1, EMdaPriorityNormal, EMdaPriorityPreferenceTimeAndQuality));
+ if (err != KErrNone || iTestAudioOutputStream1 == NULL )
+ {
+ INFO_PRINTF2(_L("Error Creating iTestAudioOutputStream1 = %d"), err);
+ return EInconclusive;
+ }
+
+ // Open RFile#1
+ err = iFile1.Open(iFs, KStreamRawFile1, EFileRead);
+ if (err != KErrNone)
+ {
+ INFO_PRINTF2(_L("Error opening iFile1 = %d"), err);
+ return EFail;
+ }
+
+ // Get size of iFile1
+ err = iFile1.Size(iFileSize1);
+ if (err != KErrNone)
+ {
+ INFO_PRINTF2(_L("Error getting size of iFile1 = %d"), err);
+ return EFail;
+ }
+
+ // Initialise iBuf1
+ iBuf1.CreateMaxL(iFileSize1);
+
+ // Initialise iTestAudioOutputStream2
+ INFO_PRINTF1(_L("Initialise CMdaAudioOutputStream2 : EMdaPriorityMax"));
+ iMdaAudioOutputStreamCallbackSupport2 = CTestMdaAudioOutputStreamCallbackSupport::NewL(*this);
+ TRAP(err, iTestAudioOutputStream2 = CMdaAudioOutputStream::NewL(*iMdaAudioOutputStreamCallbackSupport2, EMdaPriorityMax, EMdaPriorityPreferenceTimeAndQuality));
+ if (err != KErrNone || iTestAudioOutputStream2 == NULL )
+ {
+ INFO_PRINTF2(_L("Error Creating iTestAudioOutputStream2 = %d"), err);
+ return EInconclusive;
+ }
+
+ // Open RFile#2
+ err = iFile2.Open(iFs, KStreamRawFile2, EFileRead);
+ if (err != KErrNone)
+ {
+ INFO_PRINTF2(_L("Error opening iFile2 = %d"), err);
+ return EFail;
+ }
+
+ // Get size of iFile2
+ err = iFile2.Size(iFileSize2);
+ if (err != KErrNone)
+ {
+ INFO_PRINTF2(_L("Error getting size of iFile2 = %d"), err);
+ return EFail;
+ }
+
+ // Initialise iBuf2
+ iBuf2.CreateMaxL(iFileSize2);
+
+ // Initialise iTestAudioOutputStream3
+ INFO_PRINTF1(_L("Initialise CMdaAudioOutputStream3 : EMdaPriorityMin"));
+ iMdaAudioOutputStreamCallbackSupport3 = CTestMdaAudioOutputStreamCallbackSupport::NewL(*this);
+ TRAP(err, iTestAudioOutputStream3 = CMdaAudioOutputStream::NewL(*iMdaAudioOutputStreamCallbackSupport3, EMdaPriorityMin, EMdaPriorityPreferenceTimeAndQuality));
+ if (err != KErrNone || iTestAudioOutputStream3 == NULL )
+ {
+ INFO_PRINTF2(_L("Error Creating iTestAudioOutputStream3 = %d"), err);
+ return EInconclusive;
+ }
+
+ // Open RFile#3
+ err = iFile3.Open(iFs, KStreamRawFile3, EFileRead);
+ if (err != KErrNone)
+ {
+ INFO_PRINTF2(_L("Error opening iFile3 = %d"), err);
+ return EFail;
+ }
+
+ // Get size of iFile3
+ err = iFile3.Size(iFileSize3);
+ if (err != KErrNone)
+ {
+ INFO_PRINTF2(_L("Error getting size of iFile3 = %d"), err);
+ return EFail;
+ }
+
+ // Initialise iBuf3
+ iBuf3.CreateMaxL(iFileSize3);
+
+ // Initialise the CCallBackTimer.
+ iCallBackTimer = CCallBackTimer::NewL(TCallBack(stopActiveScheduler));
+
+ return verdict;
+ }
+
+/**
+ * DoTestStepPostambleL
+ */
+TVerdict CTestStepAudioOutputStreamARN::DoTestStepPostambleL()
+ {
+ // Delete all the iTestAudioOutputStream utilities.
+ delete iTestAudioOutputStream1;
+ iTestAudioOutputStream1=NULL;
+ delete iTestAudioOutputStream2;
+ iTestAudioOutputStream2=NULL;
+ delete iTestAudioOutputStream3;
+ iTestAudioOutputStream3=NULL;
+ // Destroy File Handles
+ iFile1.Close();
+ iFile2.Close();
+ iFile3.Close();
+ iFs.Close();
+ // Delete RBuf8
+ iBuf1.Close();
+ iBuf2.Close();
+ iBuf3.Close();
+ // Delete CTestMdaAudioOutputStreamCallbackSupport
+ delete iMdaAudioOutputStreamCallbackSupport1;
+ delete iMdaAudioOutputStreamCallbackSupport2;
+ delete iMdaAudioOutputStreamCallbackSupport3;
+ // Delete the CCallBackTimer.
+ delete iCallBackTimer;
+ iCallBackTimer=NULL;
+ // Destroy the scheduler
+ return CTestMmfAclntStep::DoTestStepPostambleL();
+ }
+
+/**
+ * DoTestStepL
+ */
+TVerdict CTestStepAudioOutputStreamARN::DoTestStepL()
+ {
+ return( DoTestL() );
+ }
+
+/**
+ * StateInit
+ */
+void CTestStepAudioOutputStreamARN::StateInit()
+ {
+ iExpectedEvent=EIdleOutputStream;
+ iExpectedError=KErrNone;
+ iState=0;
+ }
+
+/**
+ * StateChange
+ */
+void CTestStepAudioOutputStreamARN::StateChange(TMmfAudioOutputStreamEvents aExpectedEvent, TInt aExpectedError)
+ {
+ iExpectedEvent=aExpectedEvent;
+ iExpectedError=aExpectedError;
+ iState++;
+ }
+
+/**
+ * FsmCheck
+ */
+TBool CTestStepAudioOutputStreamARN::FsmCheck(TMmfAudioOutputStreamEvents aEventCode, TInt aError)
+ {
+ TBool retFsmCheck = EFalse;
+ 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
+ {
+ retFsmCheck = ETrue;
+ }
+ return retFsmCheck;
+ }
+
+CTestStepAudioOutputStreamARN2::CTestStepAudioOutputStreamARN2(const TDesC& aTestName)
+ {
+ iTestStepName = aTestName;
+ iHeapSize = 3600000;
+ }
+
+/**
+ * DoTestStepPreambleL
+ */
+TVerdict CTestStepAudioOutputStreamARN2::DoTestStepPreambleL()
+ {
+ TVerdict verdict;
+ verdict = CTestMmfAclntStep::DoTestStepPreambleL();
+ if (verdict == EFail)
+ {
+ return verdict;
+ }
+
+ iClientList[1] = CFsmAudioOutputStreamClient::NewL(1, EMdaPriorityNormal, EMdaPriorityPreferenceTimeAndQuality, this);
+ iClientList[2] = CFsmAudioOutputStreamClient::NewL(2, EMdaPriorityMax, EMdaPriorityPreferenceTimeAndQuality, this);
+ iClientList[3] = CFsmAudioOutputStreamClient::NewL(3, EMdaPriorityMin, EMdaPriorityPreferenceTimeAndQuality, this);
+
+ // Connect RFs session
+ TInt err = iFs.Connect();
+ if (err != KErrNone)
+ {
+ INFO_PRINTF2(_L("Error connecting to File session (RFs) = %d"), err);
+ return EFail;
+ }
+
+ err = iFileHandle[1].Open(iFs, KStreamRawFile1, EFileRead);
+ if (err != KErrNone)
+ {
+ INFO_PRINTF2(_L("Error opening iFile1 = %d"), err);
+ return EFail;
+ }
+
+ err = iFileHandle[2].Open(iFs, KStreamRawFile2, EFileRead);
+ if (err != KErrNone)
+ {
+ INFO_PRINTF2(_L("Error opening iFile2 = %d"), err);
+ return EFail;
+ }
+
+ err = iFileHandle[3].Open(iFs, KStreamRawFile3, EFileRead);
+ if (err != KErrNone)
+ {
+ INFO_PRINTF2(_L("Error opening iFile2 = %d"), err);
+ return EFail;
+ }
+
+ for(TInt fileNumber=1; fileNumber<=3; fileNumber++)
+ {
+ err = iFileHandle[fileNumber].Size(iFileSize[fileNumber]);
+ if(err != KErrNone)
+ {
+ INFO_PRINTF2(_L("Error getting size of iFile = %d"), err);
+ return EFail;
+ }
+ iBuf[fileNumber].CreateMaxL(iFileSize[fileNumber]);
+ }
+
+ // Initialise the CCallBackTimer.
+ iCallBackTimer = CCallBackTimer::NewL(TCallBack(stopActiveScheduler));
+
+ return verdict;
+ }
+
+/**
+ * DoTestStepPostambleL
+ */
+TVerdict CTestStepAudioOutputStreamARN2::DoTestStepPostambleL()
+ {
+ iClientList.DeleteAll();
+ for(TInt fileNumber=1; fileNumber <=3; fileNumber++)
+ {
+ iFileHandle[fileNumber].Close();
+ }
+
+ for(TInt bufNumber=1 ; bufNumber <=3; bufNumber++)
+ {
+ iBuf[bufNumber].Close();
+ }
+
+ delete iCallBackTimer;
+ return CTestMmfAclntStep::DoTestStepPostambleL();
+ }
+
+
+/**
+ * DoTestStepL
+ */
+TVerdict CTestStepAudioOutputStreamARN2::DoTestStepL()
+ {
+ return( DoTestL() );
+ }
+
+/**
+ * StateChange
+ */
+void CTestStepAudioOutputStreamARN2::StateChange(TFsmAosState aState)
+ {
+ iState = aState;
+ }
+
+void CTestStepAudioOutputStreamARN2::StopTest()
+ {
+ //We can add other cleanup things here
+ CActiveScheduler::Stop();
+ }
+
+void CTestStepAudioOutputStreamARN2::SetExpectedEvent(TInt aClientNumber, TInt aExpectedEvent, TInt aExpectedError)
+ {
+ iClientEventsToMonitor[aClientNumber]= aExpectedEvent;
+ iClientError[aClientNumber] = aExpectedError;
+ }
+
+/**
+ * FsmCheck
+ */
+TBool CTestStepAudioOutputStreamARN2::FsmCheck(TInt aClientNumber, TInt aEventCode, TInt aError)
+ {
+ TBool retFsmCheck = ETrue;
+
+ if (iState == EStateMonitoringEvents) /*special state to make decisions depending on clients events */
+ {
+ if(iClientEventsToMonitor[aClientNumber] == aEventCode && iClientError[aClientNumber] == aError )
+ {
+ StateChange(iFsmStateforClient[aClientNumber]);
+ }
+ else
+ {
+ retFsmCheck = EFalse;
+ }
+
+ if(retFsmCheck)
+ {
+ //Client event has finished
+ iClientsRegistered--;
+ }
+ }
+ else
+ {
+ if(iClientEventsToMonitor[aClientNumber] != aEventCode)
+ {
+ ERR_PRINTF3(_L("ExpectedEvent : %d, ActualEvent : %d"), iExpectedEvent, aEventCode);
+ retFsmCheck = EFalse;
+ iTestStepResult = EFail;
+ }
+ else if(iClientError[aClientNumber] != aError)
+ {
+ ERR_PRINTF3(_L("ExpectedError : %d, ActualError : %d"), iExpectedError, aError);
+ retFsmCheck = EFalse;
+ iTestStepResult = EFail;
+ }
+ }
+ return retFsmCheck;
+ }
+
+void CTestStepAudioOutputStreamARN2::RegisterClientEventToMonitor(TInt aClientNumber, TInt aEventCode, TInt aError, TFsmAosState aFsmState)
+ {
+ iClientsRegistered++;
+ iClientEventsToMonitor[aClientNumber] = aEventCode;
+ iClientError[aClientNumber] = aError;
+ iFsmStateforClient[aClientNumber] = aFsmState;
+ }
+
+TBool CTestStepAudioOutputStreamARN2::IsMonitoringFinished()
+ {
+ if(iClientsRegistered == 0)
+ {
+ return ETrue;
+ }
+ else
+ {
+ return EFalse;
+ }
+ }
+
+CFsmAudioOutputStreamClient::CFsmAudioOutputStreamClient(TInt aClientNumber, TInt aPriority, TMdaPriorityPreference aPref, CTestStepAudioOutputStreamARN2* aParent):iClientNumber(aClientNumber),iParent(aParent)
+ {
+ iPriority = aPriority;
+ iPref = aPref;
+ }
+
+/**
+ *
+ * NewL
+ * CFsmAudioOutputStreamClient*
+ *
+ */
+CFsmAudioOutputStreamClient* CFsmAudioOutputStreamClient::NewL(TInt aClientNumber, TInt aPriority,TMdaPriorityPreference aPref, CTestStepAudioOutputStreamARN2* aParent)
+ {
+ CFsmAudioOutputStreamClient* s = new(ELeave) CFsmAudioOutputStreamClient(aClientNumber, aPriority, aPref, aParent);
+ CleanupStack::PushL(s);
+ s->ConstructL();
+ CleanupStack::Pop();
+ return s;
+ }
+
+/**
+ *
+ * ConstructL
+ * @result void
+ *
+ */
+void CFsmAudioOutputStreamClient::ConstructL()
+ {
+ iMmfAudioOutputStream = CMdaAudioOutputStream::NewL(*this, iPriority, iPref);
+ }
+
+CFsmAudioOutputStreamClient::~CFsmAudioOutputStreamClient()
+ {
+ delete iMmfAudioOutputStream;
+ }
+
+void CFsmAudioOutputStreamClient::MaoscOpenComplete(TInt aError)
+ {
+ iEvent = EAudioOuputStreamOpenComplete;
+ iError = aError;
+ iParent->Fsm(iClientNumber, iEvent, iError);
+ }
+
+void CFsmAudioOutputStreamClient::MaoscPlayComplete(TInt aError)
+ {
+ iEvent = EAudioOutputStreamPlayComplete;
+ iError = aError;
+ iParent->Fsm(iClientNumber, iEvent, iError);
+ }
+
+void CFsmAudioOutputStreamClient::MaoscBufferCopied(TInt aError, const TDesC8& /*aBuffer*/)
+ {
+ iEvent = EAudioOutputStreamBufferCopied;
+ iError = aError;
+ iParent->Fsm(iClientNumber, iEvent, iError);
+ }
+
+void CFsmAudioOutputStreamClient::MarncResourceAvailable(TUid aNotificationEventId, const TDesC8& aNotificationData)
+ {
+ if (aNotificationEventId == KMMFEventCategoryAudioResourceAvailable)
+ {
+ iEvent = EAudioOutputStreamResourceAvailable;
+ iError = KErrNone;
+ //Convert TDesc8 to TInt64
+ TMMFTimeIntervalMicroSecondsPckg timeIntvbuf;
+ timeIntvbuf.Copy(aNotificationData);
+ iResumedPosition = timeIntvbuf();
+
+ iParent->Fsm(iClientNumber, iEvent, iError);
+ }
+ }
+
+void CFsmAudioOutputStreamClient::TestOpen()
+ {
+ iMmfAudioOutputStream->Open(NULL);
+ }
+
+TInt CFsmAudioOutputStreamClient::TestRegisterAsClient()
+ {
+ return iMmfAudioOutputStream->RegisterAudioResourceNotification(*this, KMMFEventCategoryAudioResourceAvailable);
+ }
+
+TInt CFsmAudioOutputStreamClient::TestWrite(const TDesC8 &aData)
+ {
+ TRAPD(err,iMmfAudioOutputStream->WriteL(aData));
+ return err;
+ }
+
+const TTimeIntervalMicroSeconds& CFsmAudioOutputStreamClient::GetCurrentPosition()
+ {
+ return iMmfAudioOutputStream->Position();
+ }
+
+TTimeIntervalMicroSeconds& CFsmAudioOutputStreamClient::GetResumedPosition()
+ {
+ return iResumedPosition;
+ }
+
+TInt CFsmAudioOutputStreamClient::BytesPlayed()
+ {
+ return iMmfAudioOutputStream->GetBytes();
+ }
+//
+//POSITIVE TESTS//
+//
+
+//
+//CTestMmfAclntARN8021
+//
+
+/**
+ * Constructor
+ */
+CTestMmfAclntARN8021::CTestMmfAclntARN8021(const TDesC& aTestName)
+ : CTestStepAudioOutputStreamARN(aTestName)
+ {}
+
+/**
+ * NewL
+ */
+CTestMmfAclntARN8021* CTestMmfAclntARN8021::NewL(const TDesC& aTestName)
+ {
+ CTestMmfAclntARN8021* self = new (ELeave) CTestMmfAclntARN8021(aTestName);
+ return self;
+ }
+
+/**
+ * DoTestL
+ */
+TVerdict CTestMmfAclntARN8021::DoTestL()
+ {
+ return( PerformTestL() );
+ }
+
+/**
+ * FsmL
+ */
+void CTestMmfAclntARN8021::FsmL(TMmfAudioOutputStreamEvents aEventCode, TInt aError)
+ {
+ if (FsmCheck(aEventCode, aError))
+ {
+ TInt err = KErrNone;
+ switch (iState)
+ {
+ case 0:
+ // Open iTestAudioOutputStream1
+ iTestAudioOutputStream1->Open(NULL);
+ INFO_PRINTF1(_L("iTestAudioOutputStream1->Open()"));
+ // Set ExpectedEvent & ExpectedError and change the State
+ StateChange(EMaoscOpenComplete1);
+ break;
+ case 1:
+ // Register iTestAudioOutputStream1 for Notification
+ err = iTestAudioOutputStream1->RegisterAudioResourceNotification(*iMdaAudioOutputStreamCallbackSupport1, KMMFEventCategoryAudioResourceAvailable);
+ INFO_PRINTF1(_L("iTestAudioOutputStream1->RegisterAudioResourceNotification()"));
+ if( err != KErrNone )
+ {
+ ERR_PRINTF2(_L("iTestAudioOutputStream1->RegisterAudioResourceNotification - Failed with Error : %d"), err);
+ iTestStepResult = EFail;
+ CActiveScheduler::Stop();
+ User::Leave(err);
+ break;
+ }
+ // Open iTestAudioOutputStream2
+ iTestAudioOutputStream2->Open(NULL);
+ INFO_PRINTF1(_L("iTestAudioOutputStream2->Open()"));
+ // Set ExpectedEvent & ExpectedError and change the State
+ StateChange(EMaoscOpenComplete2);
+ break;
+ case 2:
+ // iFile2->Read()
+ err = iFile2.Read(iBuf2);
+ if (err != KErrNone)
+ {
+ INFO_PRINTF2(_L("Error reading file %d"), err);
+ User::Leave(err);
+ }
+ // iTestAudioOutputStream2->WriteL()
+ iTestAudioOutputStream2->WriteL(iBuf2);
+ INFO_PRINTF1(_L("iTestAudioOutputStream2->WriteL()"));
+ // Set ExpectedEvent & ExpectedError and change the State
+ StateChange(EMaoscBufferCopied2);
+ break;
+ case 3:
+ // Wait for PlayComplete event for iTestAudioOutputStream2
+ // Set ExpectedEvent & ExpectedError and change the State
+ StateChange(EMaoscPlayComplete2, KErrUnderflow);
+ break;
+ case 4:
+ // Timer to check if Notification Event Occurs.
+ iCallBackTimer->After(2000000);
+ iTestStepResult = EPass;
+ // Set ExpectedEvent & ExpectedError and change the State
+ StateChange(EMarncResourceAvailableOS1);
+ break;
+ case 5:
+ iCallBackTimer->Cancel(); // in case something else stopped the AS
+ INFO_PRINTF1(_L("iTestAudioOutputStream1->NotificationReceived"));
+ iTestStepResult = EFail;
+ CActiveScheduler::Stop();
+ break;
+ }
+ }
+ }
+
+/**
+ * PerformTestL
+ */
+TVerdict CTestMmfAclntARN8021::PerformTestL()
+ {
+ INFO_PRINTF1(_L("Register for notification, but make no request to play audio"));
+ iTestStepResult = EFail;
+
+ // Initialise the state variables
+ StateInit();
+
+ // Begin the process
+ FsmL(EIdleOutputStream);
+
+ // Start the scheduler - Done only once !
+ CActiveScheduler::Start();
+
+ return iTestStepResult;
+ }
+
+//
+//CTestMmfAclntARN8022
+//
+
+/**
+ * Constructor
+ */
+CTestMmfAclntARN8022::CTestMmfAclntARN8022(const TDesC& aTestName)
+ : CTestStepAudioOutputStreamARN2(aTestName)
+ {}
+
+/**
+ * NewL
+ */
+CTestMmfAclntARN8022* CTestMmfAclntARN8022::NewL(const TDesC& aTestName)
+ {
+ CTestMmfAclntARN8022* self = new (ELeave) CTestMmfAclntARN8022(aTestName);
+ return self;
+ }
+
+/**
+ * DoTestL
+ */
+TVerdict CTestMmfAclntARN8022::DoTestL()
+ {
+ return( PerformTestL() );
+ }
+
+/**
+ * FsmL
+ */
+void CTestMmfAclntARN8022::Fsm(TInt aClientNumber, TInt aEventCode, TInt aError)
+ {
+ if (FsmCheck(aClientNumber, aEventCode, aError))
+ {
+ iTestStepResult = (this->*(iStateHandlers[iState]))();
+ if(iTestStepResult != EPass)
+ {
+ StopTest();
+ }
+ }
+ }
+
+
+void CTestMmfAclntARN8022::StartTestL()
+ {
+ iClientList[1]->TestOpen();
+ INFO_PRINTF1(_L("iTestAudioOutputStream1->Open()"));
+ //Wait for EAudioOuputStreamOpenComplete event
+ SetExpectedEvent(1,CFsmAudioOutputStreamClient::EAudioOuputStreamOpenComplete,KErrNone);
+ StateChange(EStateOpenComplete1);
+ }
+
+void CTestMmfAclntARN8022::InitTest()
+ {
+ iStateHandlers[EStateOpenComplete1] = &CTestMmfAclntARN8022::HandleStateOpenComplete1;
+ iStateHandlers[EStateOpenComplete2] = &CTestMmfAclntARN8022::HandleStateOpenComplete2;
+ iStateHandlers[EStateStreaming2] = &CTestMmfAclntARN8022::HandleStateStreaming2;
+ iStateHandlers[EStateStreamingComplete1ErrInUse] = &CTestMmfAclntARN8022::HandleStateStreamingComplete1ErrInUse;
+ iStateHandlers[EStateResourceAvailableOS1] = &CTestMmfAclntARN8022::HandleStateResourceAvailableOS1;
+ iStateHandlers[EStateStreamingComplete2ErrUnderflow] = &CTestMmfAclntARN8022::HandleStateStreamingComplete2ErrUnderflow;
+ }
+
+TVerdict CTestMmfAclntARN8022::HandleStateOpenComplete1()
+ {
+ // Register Client1 for Notification
+ TInt err = KErrNone;
+ err = iClientList[1]->TestRegisterAsClient();
+ INFO_PRINTF1(_L("iTestAudioOutputStream1->RegisterAudioResourceNotification()"));
+ if(err != KErrNone)
+ {
+ ERR_PRINTF2(_L("iTestAudioOutputStream1->RegisterAudioResourceNotification - Failed with Error : %d"), err);
+ User::Leave(err);
+ }
+ iClientList[2]->TestOpen();
+ //Wait for EAudioOuputStreamOpenComplete event
+ SetExpectedEvent(2,CFsmAudioOutputStreamClient::EAudioOuputStreamOpenComplete,KErrNone);
+ StateChange(EStateOpenComplete2);
+ return EPass;
+ }
+
+TVerdict CTestMmfAclntARN8022::HandleStateOpenComplete2()
+ {
+ INFO_PRINTF1(_L("iTestAudioOutputStream2->Open()"));
+ TInt err = iFileHandle[2].Read(iBuf[2]);
+ if (err != KErrNone)
+ {
+ INFO_PRINTF2(_L("Error reading file %d"), err);
+ User::Leave(err);
+ }
+ INFO_PRINTF1(_L("Pre iTestAudioOutputStream2->WriteL()"));
+ err = iClientList[2]->TestWrite(iBuf[2]);
+ if( err != KErrNone)
+ {
+ INFO_PRINTF2(_L("iTestAudioOutputStream2->WriteL failed %d"),err);
+ User::Leave(err);
+ }
+ INFO_PRINTF1(_L("iTestAudioOutputStream1->WriteL()"));
+ SetExpectedEvent(2,CFsmAudioOutputStreamClient::EAudioOutputStreamBufferCopied,KErrNone);
+ StateChange(EStateStreaming2);
+ return EPass;
+ }
+
+TVerdict CTestMmfAclntARN8022::HandleStateStreaming2()
+ {
+ TInt err = KErrNone;
+ err = iFileHandle[1].Read(iBuf[1]); //-synchronous
+ if (err != KErrNone)
+ {
+ INFO_PRINTF2(_L("Error reading iFile1 %d"), err);
+ return EInconclusive;
+ }
+ INFO_PRINTF1(_L("iTestAudioOutputStream1->WriteL()"));
+ err = iClientList[1]->TestWrite(iBuf[1]); //-Should get Play Error.
+ if( err != KErrNone)
+ {
+ INFO_PRINTF2(_L("iTestAudioOutputStream1->WriteL failed %d"),err);
+ return EInconclusive;
+ }
+ // Set ExpectedEvent & ExpectedError and change the State
+ SetExpectedEvent(1,CFsmAudioOutputStreamClient::EAudioOutputStreamPlayComplete, KErrInUse);
+ StateChange(EStateStreamingComplete1ErrInUse);
+ return EPass;
+ }
+
+TVerdict CTestMmfAclntARN8022::HandleStateStreamingComplete1ErrInUse()
+ {
+ RegisterClientEventToMonitor(1, CFsmAudioOutputStreamClient::EAudioOutputStreamResourceAvailable, KErrNone, EStateResourceAvailableOS1);
+ RegisterClientEventToMonitor(2, CFsmAudioOutputStreamClient::EAudioOutputStreamPlayComplete, KErrUnderflow, EStateStreamingComplete2ErrUnderflow);
+ StateChange(EStateMonitoringEvents);
+ return EPass;
+ }
+
+TVerdict CTestMmfAclntARN8022::HandleStateResourceAvailableOS1()
+ {
+ INFO_PRINTF1(_L("iTestAudioOutputStream1->NotificationReceived"));
+ if(IsMonitoringFinished())
+ {
+ iTestStepResult = EPass;
+ StopTest();
+ }
+ else
+ {
+ StateChange(EStateMonitoringEvents);
+ }
+ return EPass;
+ }
+
+TVerdict CTestMmfAclntARN8022::HandleStateStreamingComplete2ErrUnderflow()
+ {
+ INFO_PRINTF1(_L("iTestAudioOutputStream2->PlayComplete"));
+ if(IsMonitoringFinished())
+ {
+ iTestStepResult = EPass;
+ StopTest();
+ }
+ else
+ {
+ StateChange(EStateMonitoringEvents);
+ }
+ return EPass;
+ }
+
+/**
+ * PerformTestL
+ */
+TVerdict CTestMmfAclntARN8022::PerformTestL()
+ {
+ INFO_PRINTF1(_L("Register (b4 play, after Open) and Receive Notification of a Resource Available Event."));
+ INFO_PRINTF1(_L("(when audio resource is currently unavailable and then available)"));
+ iTestStepResult = EFail;
+
+ InitTest();
+ StartTestL();
+
+ // Start the scheduler - Done only once !
+ CActiveScheduler::Start();
+
+ return iTestStepResult;
+ }
+
+//
+//CTestMmfAclntARN8023
+//
+
+/**
+ * Constructor
+ */
+CTestMmfAclntARN8023::CTestMmfAclntARN8023(const TDesC& aTestName)
+ : CTestStepAudioOutputStreamARN2(aTestName)
+ {}
+
+/**
+ * NewL
+ */
+CTestMmfAclntARN8023* CTestMmfAclntARN8023::NewL(const TDesC& aTestName)
+ {
+ CTestMmfAclntARN8023* self = new (ELeave) CTestMmfAclntARN8023(aTestName);
+ return self;
+ }
+
+/**
+ * DoTestL
+ */
+TVerdict CTestMmfAclntARN8023::DoTestL()
+ {
+ return( PerformTestL() );
+ }
+
+
+/**
+ * FsmL
+ */
+void CTestMmfAclntARN8023::Fsm(TInt aClientNumber, TInt aEventCode, TInt aError)
+ {
+ if(FsmCheck(aClientNumber, aEventCode, aError))
+ {
+ iTestStepResult = (this->*(iStateHandlers[iState]))();
+ if(iTestStepResult != EPass)
+ {
+ StopTest();
+ }
+ }
+ }
+
+void CTestMmfAclntARN8023::InitTest()
+ {
+ iStateHandlers[EStateOpenComplete1] = &CTestMmfAclntARN8023::HandleStateOpenComplete1;
+ iStateHandlers[EStateOpenComplete2] = &CTestMmfAclntARN8023::HandleStateOpenComplete2;
+ iStateHandlers[EStateStreaming1] = &CTestMmfAclntARN8023::HandleStateStreaming1;
+ iStateHandlers[EStateStreaming2] = &CTestMmfAclntARN8023::HandleStateStreaming2;
+ iStateHandlers[EStateStreamingComplete1ErrInUse] = &CTestMmfAclntARN8023::HandleStateStreamingComplete1ErrInUse;
+ iStateHandlers[EStateResourceAvailableOS1] = &CTestMmfAclntARN8023::HandleStateResourceAvailableOS1;
+ iStateHandlers[EStateStreamingComplete2ErrUnderflow] = &CTestMmfAclntARN8023::HandleStateStreamingComplete2ErrUnderflow;
+ }
+
+void CTestMmfAclntARN8023::StartTestL()
+ {
+ //Open Client1
+ iClientList[1]->TestOpen();
+ INFO_PRINTF1(_L("iTestAudioOutputStream1->Open()"));
+ //Wait for EAudioOuputStreamOpenComplete event
+ SetExpectedEvent(1,CFsmAudioOutputStreamClient::EAudioOuputStreamOpenComplete,KErrNone);
+ StateChange(EStateOpenComplete1);
+ }
+
+TVerdict CTestMmfAclntARN8023::HandleStateOpenComplete1()
+ {
+ TInt err = KErrNone;
+ err = iFileHandle[1].Read(iBuf[1]);
+ if(err != KErrNone)
+ {
+ INFO_PRINTF2(_L("Error reading iFile1 %d"), err);
+ User::Leave(err);
+ }
+ err = iClientList[1]->TestWrite(iBuf[1]);
+ if( err != KErrNone)
+ {
+ INFO_PRINTF2(_L("iTestAudioOutputStream1->WriteL failed %d"),err);
+ User::Leave(err);
+ }
+ INFO_PRINTF1(_L("iTestAudioOutputStream1->WriteL()"));
+ SetExpectedEvent(1,CFsmAudioOutputStreamClient::EAudioOutputStreamBufferCopied,KErrNone);
+ StateChange(EStateStreaming1);
+ return EPass;
+ }
+
+TVerdict CTestMmfAclntARN8023::HandleStateStreaming1()
+ {
+ TInt err = KErrNone;
+ err = iClientList[1]->TestRegisterAsClient();
+ if(err != KErrNone)
+ {
+ ERR_PRINTF2(_L("iTestAudioOutputStream1->RegisterAudioResourceNotification - Failed with Error : %d"), err);
+ return EInconclusive;
+ }
+
+ iClientList[2]->TestOpen();
+ //Wait for EAudioOuputStreamOpenComplete event
+ SetExpectedEvent(2,CFsmAudioOutputStreamClient::EAudioOuputStreamOpenComplete,KErrNone);
+ StateChange(EStateOpenComplete2);
+ return EPass;
+ }
+
+TVerdict CTestMmfAclntARN8023::HandleStateOpenComplete2()
+ {
+ TInt err = iFileHandle[2].Read(iBuf[2]);
+ if(err != KErrNone)
+ {
+ INFO_PRINTF2(_L("Error reading iFile2 %d"), err);
+ return EInconclusive;
+ }
+ err = iClientList[2]->TestWrite(iBuf[2]);
+ if( err != KErrNone)
+ {
+ INFO_PRINTF2(_L("iTestAudioOutputStream2->WriteL failed %d"),err);
+ return EInconclusive;
+ }
+ INFO_PRINTF1(_L("iTestAudioOutputStream2->WriteL()"));
+ SetExpectedEvent(1,CFsmAudioOutputStreamClient::EAudioOutputStreamPlayComplete, KErrInUse);
+ StateChange(EStateStreamingComplete1ErrInUse);
+ return EPass;
+ }
+
+TVerdict CTestMmfAclntARN8023::HandleStateStreamingComplete1ErrInUse()
+ {
+ SetExpectedEvent(2,CFsmAudioOutputStreamClient::EAudioOutputStreamBufferCopied,KErrNone);
+ StateChange(EStateStreaming2);
+ return EPass;
+ }
+
+TVerdict CTestMmfAclntARN8023::HandleStateStreaming2()
+ {
+ RegisterClientEventToMonitor(1,CFsmAudioOutputStreamClient::EAudioOutputStreamResourceAvailable,KErrNone,EStateResourceAvailableOS1);
+ RegisterClientEventToMonitor(2,CFsmAudioOutputStreamClient::EAudioOutputStreamPlayComplete,KErrUnderflow,EStateStreamingComplete2ErrUnderflow);
+ StateChange(EStateMonitoringEvents);
+ return EPass;
+ }
+
+TVerdict CTestMmfAclntARN8023::HandleStateResourceAvailableOS1()
+ {
+ INFO_PRINTF1(_L("iTestAudioOutputStream1->NotificationReceived"));
+ if(IsMonitoringFinished())
+ {
+ iTestStepResult = EPass;
+ StopTest();
+ }
+ else
+ {
+ StateChange(EStateMonitoringEvents);
+ }
+ return EPass;
+ }
+
+TVerdict CTestMmfAclntARN8023::HandleStateStreamingComplete2ErrUnderflow()
+ {
+ INFO_PRINTF1(_L("iTestAudioOutputStream2->PlayComplete"));
+ if(IsMonitoringFinished())
+ {
+ iTestStepResult = EPass;
+ StopTest();
+ }
+ else
+ {
+ StateChange(EStateMonitoringEvents); //Didn't finish monitoring
+ }
+ return EPass;
+ }
+
+/**
+ * PerformTestL
+ */
+TVerdict CTestMmfAclntARN8023::PerformTestL()
+ {
+ INFO_PRINTF1(_L("Register (at the time of Play) and Receive Notification of a Resource Available Event."));
+ INFO_PRINTF1(_L("(when audio resource is currently available and subsequently unavailable, and then available)"));
+ iTestStepResult = EFail;
+
+ InitTest();
+
+ StartTestL();
+
+ // Start the scheduler - Done only once !
+ CActiveScheduler::Start();
+
+ return iTestStepResult;
+ }
+
+//
+//CTestMmfAclntARN8024
+//
+
+/**
+ * Constructor
+ */
+CTestMmfAclntARN8024::CTestMmfAclntARN8024(const TDesC& aTestName)
+ : CTestStepAudioOutputStreamARN(aTestName)
+ {}
+
+/**
+ * NewL
+ */
+CTestMmfAclntARN8024* CTestMmfAclntARN8024::NewL(const TDesC& aTestName)
+ {
+ CTestMmfAclntARN8024* self = new (ELeave) CTestMmfAclntARN8024(aTestName);
+ return self;
+ }
+
+/**
+ * DoTestL
+ */
+TVerdict CTestMmfAclntARN8024::DoTestL()
+ {
+ return( PerformTestL() );
+ }
+
+/**
+ * FsmL
+ */
+void CTestMmfAclntARN8024::FsmL(TMmfAudioOutputStreamEvents aEventCode, TInt aError)
+ {
+ if (FsmCheck(aEventCode, aError))
+ {
+ TInt err = KErrNone;
+ switch (iState)
+ {
+ case 0:
+ // Open iTestAudioOutputStream1
+ iTestAudioOutputStream1->Open(NULL);
+ INFO_PRINTF1(_L("iTestAudioOutputStream1->Open()"));
+ // Set ExpectedEvent & ExpectedError and change the State
+ StateChange(EMaoscOpenComplete1);
+ break;
+ case 1:
+ // iFile1->Read()
+ err = iFile1.Read(iBuf1); //-synchronous
+ if (err != KErrNone)
+ {
+ INFO_PRINTF2(_L("Error reading iFile1 %d"), err);
+ User::Leave(err);
+ }
+ // iTestAudioOutputStream1->WriteL()
+ INFO_PRINTF1(_L("iTestAudioOutputStream1->WriteL()"));
+ iTestAudioOutputStream1->WriteL(iBuf1); //-Should get Play Error.
+ // Set ExpectedEvent & ExpectedError and change the State
+ StateChange(EMaoscBufferCopied1);
+ break;
+ case 2:
+ // Open iTestAudioOutputStream2
+ iTestAudioOutputStream2->Open(NULL);
+ INFO_PRINTF1(_L("iTestAudioOutputStream2->Open()"));
+ // Set ExpectedEvent & ExpectedError and change the State
+ StateChange(EMaoscOpenComplete2);
+ break;
+ case 3:
+ // iFile2->Read()
+ err = iFile2.Read(iBuf2);
+ if (err != KErrNone)
+ {
+ INFO_PRINTF2(_L("Error reading file %d"), err);
+ User::Leave(err);
+ }
+ // iTestAudioOutputStream2->WriteL()
+ iTestAudioOutputStream2->WriteL(iBuf2);
+ INFO_PRINTF1(_L("iTestAudioOutputStream2->WriteL()"));
+ // Set ExpectedEvent & ExpectedError and change the State
+ StateChange(EMaoscPlayComplete1, KErrInUse);
+ break;
+ case 4:
+ // Wait for BufferCopied event for iTestAudioOutputStream2
+ // Set ExpectedEvent & ExpectedError and change the State
+ StateChange(EMaoscBufferCopied2);
+ break;
+ case 5:
+ // Cancellation of notification request for iTestAudioOutputStream1
+ err = iTestAudioOutputStream1->CancelRegisterAudioResourceNotification(KMMFEventCategoryAudioResourceAvailable);
+ INFO_PRINTF2(_L("iTestAudioOutputStream1->CancelRegisterAudioResourceNotification : Return Code = %d "), err);
+ if( err != KErrNone )
+ {
+ ERR_PRINTF2(_L("iTestAudioOutputStream1->CancelRegisterAudioResourceNotification - Failed with Error : %d"), err);
+ iTestStepResult = EFail;
+ CActiveScheduler::Stop();
+ User::Leave(err);
+ break;
+ }
+ // Wait for PlayComplete event for iTestAudioOutputStream2
+ // Set ExpectedEvent & ExpectedError and change the State
+ StateChange(EMaoscPlayComplete2, KErrUnderflow);
+ break;
+ case 6:
+ // Timer to check if Notification Event Occurs.
+ iCallBackTimer->After(2000000);
+ iTestStepResult = EPass;
+ // Set ExpectedEvent & ExpectedError and change the State
+ StateChange(EMarncResourceAvailableOS1);
+ break;
+ case 7:
+ iCallBackTimer->Cancel(); // in case something else stopped the AS
+ INFO_PRINTF1(_L("iTestAudioOutputStream1->NotificationReceived"));
+ iTestStepResult = EFail;
+ CActiveScheduler::Stop();
+ break;
+ }
+ }
+ }
+
+/**
+ * PerformTestL
+ */
+TVerdict CTestMmfAclntARN8024::PerformTestL()
+ {
+ INFO_PRINTF1(_L("Registration (b4 File Open) and Cancellation of the notification request"));
+ iTestStepResult = EFail;
+
+ // Initialise the state variables
+ StateInit();
+
+ // Register iTestAudioOutputStream1 for Notification
+ TInt err = iTestAudioOutputStream1->RegisterAudioResourceNotification(*iMdaAudioOutputStreamCallbackSupport1, KMMFEventCategoryAudioResourceAvailable);
+ INFO_PRINTF1(_L("iTestAudioOutputStream1->RegisterAudioResourceNotification()"));
+ if( err != KErrNone )
+ {
+ ERR_PRINTF2(_L("iTestAudioOutputStream1->RegisterAudioResourceNotification - Failed with Error : %d"), err);
+ return EFail;
+ }
+
+ // Begin the process
+ FsmL(EIdleOutputStream);
+
+ // Start the scheduler - Done only once !
+ CActiveScheduler::Start();
+
+ return iTestStepResult;
+ }
+
+//
+//CTestMmfAclntARN8025
+//
+
+/**
+ * Constructor
+ */
+CTestMmfAclntARN8025::CTestMmfAclntARN8025(const TDesC& aTestName)
+ : CTestStepAudioOutputStreamARN2(aTestName)
+ {}
+
+/**
+ * NewL
+ */
+CTestMmfAclntARN8025* CTestMmfAclntARN8025::NewL(const TDesC& aTestName)
+ {
+ CTestMmfAclntARN8025* self = new (ELeave) CTestMmfAclntARN8025(aTestName);
+ return self;
+ }
+
+/**
+ * DoTestL
+ */
+TVerdict CTestMmfAclntARN8025::DoTestL()
+ {
+ return( PerformTestL() );
+ }
+
+
+void CTestMmfAclntARN8025::InitTest()
+ {
+ iStateHandlers[EStateOpenComplete1] = &CTestMmfAclntARN8025::HandleStateOpenComplete1;
+ iStateHandlers[EStateOpenComplete2] = &CTestMmfAclntARN8025::HandleStateOpenComplete2;
+ iStateHandlers[EStateStreaming1] = &CTestMmfAclntARN8025::HandleStateStreaming1;
+ iStateHandlers[EStateStreaming2] = &CTestMmfAclntARN8025::HandleStateStreaming2;
+ iStateHandlers[EStateStreamingComplete1ErrInUse] = &CTestMmfAclntARN8025::HandleStateStreamingComplete1ErrInUse;
+ iStateHandlers[EStateResourceAvailableOS1] = &CTestMmfAclntARN8025::HandleStateResourceAvailableOS1;
+ iStateHandlers[EStateStreamingComplete2ErrUnderflow] = &CTestMmfAclntARN8025::HandleStateStreamingComplete2ErrUnderflow;
+ }
+
+/**
+ * FsmL
+ */
+void CTestMmfAclntARN8025::Fsm(TInt aClientNumber, TInt aEventCode, TInt aError)
+ {
+ if(FsmCheck(aClientNumber, aEventCode, aError))
+ {
+ iTestStepResult = (this->*(iStateHandlers[iState]))();
+ if(iTestStepResult != EPass)
+ {
+ StopTest();
+ }
+ }
+ }
+
+void CTestMmfAclntARN8025::StartTestL()
+ {
+ //Open Client1
+ iClientList[1]->TestOpen();
+ INFO_PRINTF1(_L("iTestAudioOutputStream1->Open()"));
+ //Wait for EAudioOuputStreamOpenComplete event
+ SetExpectedEvent(1,CFsmAudioOutputStreamClient::EAudioOuputStreamOpenComplete,KErrNone);
+ StateChange(EStateOpenComplete1);
+ }
+
+TVerdict CTestMmfAclntARN8025::HandleStateOpenComplete1()
+ {
+ TInt err = KErrNone;
+ err = iFileHandle[1].Read(iBuf[1]);
+ if(err != KErrNone)
+ {
+ INFO_PRINTF2(_L("Error reading iFile1 %d"), err);
+ User::Leave(err);
+ }
+ err = iClientList[1]->TestWrite(iBuf[1]);
+ if( err != KErrNone)
+ {
+ INFO_PRINTF2(_L("iTestAudioOutputStream1->WriteL failed %d"),err);
+ User::Leave(err);
+ }
+ INFO_PRINTF1(_L("iTestAudioOutputStream1->WriteL()"));
+ SetExpectedEvent(1,CFsmAudioOutputStreamClient::EAudioOutputStreamBufferCopied,KErrNone);
+ StateChange(EStateStreaming1);
+ return EPass;
+ }
+
+TVerdict CTestMmfAclntARN8025::HandleStateStreaming1()
+ {
+ TInt err = KErrNone;
+ err = iClientList[1]->TestRegisterAsClient();
+ if(err != KErrNone)
+ {
+ ERR_PRINTF2(_L("iTestAudioOutputStream1->RegisterAudioResourceNotification - Failed with Error : %d"), err);
+ return EInconclusive;
+ }
+
+ iClientList[2]->TestOpen();
+ INFO_PRINTF1(_L("iTestAudioOutputStream2->Open()"));
+ //Wait for EAudioOuputStreamOpenComplete event
+ SetExpectedEvent(2,CFsmAudioOutputStreamClient::EAudioOuputStreamOpenComplete,KErrNone);
+ StateChange(EStateOpenComplete2);
+ return EPass;
+ }
+
+TVerdict CTestMmfAclntARN8025::HandleStateOpenComplete2()
+ {
+ TInt err = iFileHandle[2].Read(iBuf[2]);
+ if(err != KErrNone)
+ {
+ INFO_PRINTF2(_L("Error reading iFile2 %d"), err);
+ return EInconclusive;
+ }
+ err = iClientList[2]->TestWrite(iBuf[2]);
+ if( err != KErrNone)
+ {
+ INFO_PRINTF2(_L("iTestAudioOutputStream1->WriteL failed %d"),err);
+ return EInconclusive;
+ }
+ INFO_PRINTF1(_L("iTestAudioOutputStream2->WriteL()"));
+ SetExpectedEvent(1,CFsmAudioOutputStreamClient::EAudioOutputStreamPlayComplete, KErrInUse);
+ StateChange(EStateStreamingComplete1ErrInUse);
+ return EPass;
+ }
+
+TVerdict CTestMmfAclntARN8025::HandleStateStreamingComplete1ErrInUse()
+ {
+ iPositionStop = (static_cast<TInt64>(iClientList[1]->BytesPlayed())* KMicroSecsInOneSec)/(KSampleRate*KBytesPerSample);
+ SetExpectedEvent(2,CFsmAudioOutputStreamClient::EAudioOutputStreamBufferCopied,KErrNone);
+ StateChange(EStateStreaming2);
+ return EPass;
+ }
+
+TVerdict CTestMmfAclntARN8025::HandleStateStreaming2()
+ {
+ RegisterClientEventToMonitor(1,CFsmAudioOutputStreamClient::EAudioOutputStreamResourceAvailable,KErrNone,EStateResourceAvailableOS1);
+ RegisterClientEventToMonitor(2,CFsmAudioOutputStreamClient::EAudioOutputStreamPlayComplete,KErrUnderflow,EStateStreamingComplete2ErrUnderflow);
+ StateChange(EStateMonitoringEvents);
+ return EPass;
+ }
+
+TVerdict CTestMmfAclntARN8025::HandleStateResourceAvailableOS1()
+ {
+ INFO_PRINTF1(_L("iTestAudioOutputStream1->NotificationReceived"));
+
+ if(IsMonitoringFinished())
+ {
+ iTestStepResult = EPass;
+ StopTest();
+ }
+ else
+ {
+ StateChange(EStateMonitoringEvents);
+ }
+ TTimeIntervalMicroSeconds positionResume = iClientList[1]->GetResumedPosition();
+ iPositionResume = ((positionResume.Int64()) * KMicroSecsInOneSec / KSampleRate8000Hz);
+ if(iPositionResume == iPositionStop)
+ {
+ INFO_PRINTF3(_L("iTestAudioOutputStream1->Audio Resource Position Matches, Expected=%d, Actual=%d"), I64LOW(iPositionStop.Int64()), I64LOW(iPositionResume.Int64()));
+ iTestStepResult = EPass;
+ }
+ else
+ {
+ ERR_PRINTF3(_L("iTestAudioOutputStream1->Audio Resource Position does NOT Match, Expected=%d, Actual=%d"), I64LOW(iPositionStop.Int64()), I64LOW(iPositionResume.Int64()));
+ iTestStepResult=EFail;
+ }
+ return iTestStepResult;
+ }
+
+TVerdict CTestMmfAclntARN8025::HandleStateStreamingComplete2ErrUnderflow()
+ {
+ INFO_PRINTF1(_L("iTestAudioOutputStream2->PlayComplete"));
+ if(IsMonitoringFinished())
+ {
+ iTestStepResult = EPass;
+ StopTest();
+ }
+ else
+ {
+ StateChange(EStateMonitoringEvents); //Didn't finish monitoring
+ }
+ return EPass;
+ }
+
+/**
+ * PerformTestL
+ */
+TVerdict CTestMmfAclntARN8025::PerformTestL()
+ {
+ INFO_PRINTF1( _L("Get the actual position from where the paused audio can be resumed."));
+ iTestStepResult = EFail;
+
+ InitTest();
+
+ StartTestL();
+
+ // Start the scheduler - Done only once !
+ CActiveScheduler::Start();
+
+ return iTestStepResult;
+ }
+
+//
+//CTestMmfAclntARN8026
+//
+
+/**
+ * Constructor
+ */
+CTestMmfAclntARN8026::CTestMmfAclntARN8026(const TDesC& aTestName)
+ : CTestStepAudioOutputStreamARN(aTestName)
+ {}
+
+/**
+ * NewL
+ */
+CTestMmfAclntARN8026* CTestMmfAclntARN8026::NewL(const TDesC& aTestName)
+ {
+ CTestMmfAclntARN8026* self = new (ELeave) CTestMmfAclntARN8026(aTestName);
+ return self;
+ }
+
+/**
+ * DoTestL
+ */
+TVerdict CTestMmfAclntARN8026::DoTestL()
+ {
+ return( PerformTestL() );
+ }
+
+/**
+ * FsmCheck
+ */
+TBool CTestMmfAclntARN8026::FsmCheck(TMmfAudioOutputStreamEvents aEventCode, TInt aError)
+ {
+ TBool retFsmCheck = EFalse;
+ if (iExpectedEvent != aEventCode)
+ {
+ if ((aEventCode == EMaoscPlayComplete2))
+ {
+ retFsmCheck = ETrue;
+ if (iEventOccured == EMarncResourceAvailableOS1)
+ {
+ return retFsmCheck;
+ }
+ else
+ {
+ iEventOccured = EMaoscPlayComplete2;
+ }
+ }
+ else if (aEventCode == EMarncResourceAvailableOS1)
+ {
+ retFsmCheck = ETrue;
+ if (iEventOccured == EMaoscPlayComplete2)
+ {
+ return retFsmCheck;
+ }
+ else
+ {
+ iEventOccured = EMarncResourceAvailableOS1;
+ }
+ }
+ 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
+ {
+ retFsmCheck = ETrue;
+ }
+ return retFsmCheck;
+ }
+
+/**
+ * FsmL
+ */
+void CTestMmfAclntARN8026::FsmL(TMmfAudioOutputStreamEvents aEventCode, TInt aError)
+ {
+ if (FsmCheck(aEventCode, aError))
+ {
+ TInt err = KErrNone;
+ switch (iState)
+ {
+ case 0:
+ // Open iTestAudioOutputStream1
+ iTestAudioOutputStream1->Open(NULL);
+ INFO_PRINTF1(_L("iTestAudioOutputStream1->Open()"));
+ // Set ExpectedEvent & ExpectedError and change the State
+ StateChange(EMaoscOpenComplete1);
+ break;
+ case 1:
+ // iFile1->Read()
+ err = iFile1.Read(iBuf1); //-synchronous
+ if (err != KErrNone)
+ {
+ INFO_PRINTF2(_L("Error reading iFile1 %d"), err);
+ User::Leave(err);
+ }
+ // iTestAudioOutputStream1->WriteL()
+ INFO_PRINTF1(_L("iTestAudioOutputStream1->WriteL()"));
+ iTestAudioOutputStream1->WriteL(iBuf1); //-Should get Play Error.
+ // Set ExpectedEvent & ExpectedError and change the State
+ StateChange(EMaoscBufferCopied1);
+ break;
+ case 2:
+ // Register iTestAudioOutputStream1 for Notification
+ err = iTestAudioOutputStream1->RegisterAudioResourceNotification(*iMdaAudioOutputStreamCallbackSupport1, KMMFEventCategoryAudioResourceAvailable);
+ INFO_PRINTF1(_L("iTestAudioOutputStream1->RegisterAudioResourceNotification()"));
+ if( err != KErrNone )
+ {
+ ERR_PRINTF2(_L("iTestAudioOutputStream1->RegisterAudioResourceNotification - Failed with Error : %d"), err);
+ iTestStepResult = EFail;
+ CActiveScheduler::Stop();
+ User::Leave(err);
+ break;
+ }
+ // Register iTestAudioOutputStream3 for Notification
+ err = iTestAudioOutputStream3->RegisterAudioResourceNotification(*iMdaAudioOutputStreamCallbackSupport3, KMMFEventCategoryAudioResourceAvailable);
+ INFO_PRINTF1(_L("iTestAudioOutputStream3->RegisterAudioResourceNotification()"));
+ if( err != KErrNone )
+ {
+ ERR_PRINTF2(_L("iTestAudioOutputStream3->RegisterAudioResourceNotification - Failed with Error : %d"), err);
+ iTestStepResult = EFail;
+ CActiveScheduler::Stop();
+ User::Leave(err);
+ break;
+ }
+ // Open iTestAudioOutputStream3
+ iTestAudioOutputStream3->Open(NULL);
+ INFO_PRINTF1(_L("iTestAudioOutputStream3->Open()"));
+ // Set ExpectedEvent & ExpectedError and change the State
+ StateChange(EMaoscOpenComplete3);
+ break;
+ case 3:
+ // Open iTestAudioOutputStream2
+ iTestAudioOutputStream2->Open(NULL);
+ INFO_PRINTF1(_L("iTestAudioOutputStream2->Open()"));
+ // Set ExpectedEvent & ExpectedError and change the State
+ StateChange(EMaoscOpenComplete2);
+ break;
+ case 4:
+ // iFile2->Read()
+ err = iFile2.Read(iBuf2);
+ if (err != KErrNone)
+ {
+ INFO_PRINTF2(_L("Error reading file %d"), err);
+ User::Leave(err);
+ }
+ // iTestAudioOutputStream2->WriteL()
+ iTestAudioOutputStream2->WriteL(iBuf2);
+ INFO_PRINTF1(_L("iTestAudioOutputStream2->WriteL()"));
+ // Set ExpectedEvent & ExpectedError and change the State
+ StateChange(EMaoscPlayComplete1, KErrInUse);
+ break;
+ case 5:
+ // Wait for BufferCopied event for iTestAudioOutputStream2
+ // Set ExpectedEvent & ExpectedError and change the State
+ StateChange(EMaoscBufferCopied2);
+ break;
+ case 6:
+ // iFile3->Read()
+ err = iFile3.Read(iBuf3); //-synchronous
+ if (err != KErrNone)
+ {
+ INFO_PRINTF2(_L("Error reading iFile2 %d"), err);
+ User::Leave(err);
+ }
+ // iTestAudioOutputStream3->WriteL()
+ INFO_PRINTF1(_L("iTestAudioOutputStream3->WriteL()"));
+ iTestAudioOutputStream3->WriteL(iBuf3);
+ // Set ExpectedEvent & ExpectedError and change the State
+ StateChange(EMaoscBufferCopied3, KErrInUse);
+ break;
+ case 7:
+ // Set ExpectedEvent & ExpectedError and change the State
+ StateChange(EMaoscPlayComplete3, KErrInUse);
+ break;
+ case 8:
+ // Set ExpectedEvent & ExpectedError and change the State
+ StateChange(EMaoscPlayComplete2, KErrUnderflow);
+ break;
+ case 9:
+ // Timer to check if Notification Event Occurs.
+ iCallBackTimer->After(2000000);
+ // Set ExpectedEvent & ExpectedError and change the State
+ StateChange(EMarncResourceAvailableOS1);
+ break;
+ case 10:
+ iCallBackTimer->Cancel(); // in case something else stopped the AS
+ INFO_PRINTF1(_L("iTestAudioOutputStream1->NotificationReceived"));
+ err = iTestAudioOutputStream1->WillResumePlay();
+ INFO_PRINTF1(_L("iTestAudioOutputStream1->WillResumePlay()"));
+ if( err != KErrNone )
+ {
+ ERR_PRINTF2(_L("iTestAudioOutputStream1->WillResumePlay() - Failed with Error : %d"), err);
+ iTestStepResult = EFail;
+ CActiveScheduler::Stop();
+ break;
+ }
+ // Set the resume position.. or may be not, since its an offset.
+ // iTestAudioOutputStream1->SetPosition(iPosition);
+ // iTestAudioOutputStream1->WriteL()
+ iTestAudioOutputStream1->WriteL(iBuf1);
+ INFO_PRINTF1(_L("iTestAudioOutputStream1->WriteL()"));
+ StateChange(EMaoscBufferCopied1);
+ break;
+ case 11:
+ // Wait for PlayComplete event for iTestAudioOutputStream1
+ // Set ExpectedEvent & ExpectedError and change the State
+ StateChange(EMaoscPlayComplete1, KErrUnderflow);
+ break;
+ case 12:
+ // Timer to check if Notification Event Occurs.
+ iCallBackTimer->After(2000000);
+ // Set ExpectedEvent & ExpectedError and change the State
+ StateChange(EMarncResourceAvailableOS3);
+ break;
+ case 13:
+ iCallBackTimer->Cancel(); // in case something else stopped the AS
+ INFO_PRINTF1(_L("iTestAudioOutputStream3->NotificationReceived"));
+ iTestStepResult = EPass;
+ CActiveScheduler::Stop();
+ break;
+ }
+ }
+ }
+
+/**
+ * PerformTestL
+ */
+TVerdict CTestMmfAclntARN8026::PerformTestL()
+ {
+ INFO_PRINTF1( _L("Call WillResumePlay()"));
+ iTestStepResult = EFail;
+
+ // Initialise the state variables
+ StateInit();
+
+ // Begin the process
+ FsmL(EIdleOutputStream);
+
+ // Start the scheduler - Done only once !
+ CActiveScheduler::Start();
+
+ return iTestStepResult;
+ }
+
+
+//
+//NEGATIVE TESTS//
+//
+
+//
+//CTestMmfAclntARN1321
+//
+
+/**
+ * Constructor
+ */
+CTestMmfAclntARN1321::CTestMmfAclntARN1321(const TDesC& aTestName)
+ : CTestStepAudioOutputStreamARN(aTestName)
+ {}
+
+/**
+ * NewL
+ */
+CTestMmfAclntARN1321* CTestMmfAclntARN1321::NewL(const TDesC& aTestName)
+ {
+ CTestMmfAclntARN1321* self = new (ELeave) CTestMmfAclntARN1321(aTestName);
+ return self;
+ }
+
+/**
+ * DoTestL
+ */
+TVerdict CTestMmfAclntARN1321::DoTestL()
+ {
+ return( PerformTestL() );
+ }
+
+/**
+ * FsmL
+ */
+void CTestMmfAclntARN1321::FsmL(TMmfAudioOutputStreamEvents aEventCode, TInt aError)
+ {
+ if (FsmCheck(aEventCode, aError))
+ {
+ TInt err = KErrNone;
+ switch (iState)
+ {
+ case 0:
+ // Open iTestAudioOutputStream1
+ iTestAudioOutputStream1->Open(NULL);
+ INFO_PRINTF1(_L("iTestAudioOutputStream1->Open()"));
+ // Set ExpectedEvent & ExpectedError and change the State
+ StateChange(EMaoscOpenComplete1);
+ break;
+ case 1:
+ // Register iTestAudioOutputStream1 for Notification
+ err = iTestAudioOutputStream1->RegisterAudioResourceNotification(*iMdaAudioOutputStreamCallbackSupport1, KMMFEventCategoryPlaybackComplete);
+ INFO_PRINTF1(_L("iTestAudioOutputStream1->RegisterAudioResourceNotification(*iMdaAudioOutputStreamCallbackSupport1, KMMFEventCategoryPlaybackComplete)"));
+ if( err == KErrNotSupported )
+ {
+ INFO_PRINTF1(_L("iTestAudioOutputStream1->RegisterAudioResourceNotification - Returned KErrNotSupported ") );
+ iTestStepResult = EPass;
+ }
+ else
+ {
+ ERR_PRINTF2(_L("iTestAudioOutputStream1->RegisterAudioResourceNotification - Failed with Error : %d"), err);
+ iTestStepResult = EFail;
+ }
+ CActiveScheduler::Stop();
+ break;
+ }
+ }
+ }
+
+/**
+ * PerformTestL
+ */
+TVerdict CTestMmfAclntARN1321::PerformTestL()
+ {
+ INFO_PRINTF1( _L("Register for notification with an unsupported event type."));
+ iTestStepResult = EFail;
+
+ // Initialise the state variables
+ StateInit();
+
+ // Begin the process
+ FsmL(EIdleOutputStream);
+
+ // Start the scheduler - Done only once !
+ CActiveScheduler::Start();
+
+ return iTestStepResult;
+ }
+
+//
+//CTestMmfAclntARN1322
+//
+
+/**
+ * Constructor
+ */
+CTestMmfAclntARN1322::CTestMmfAclntARN1322(const TDesC& aTestName)
+ : CTestStepAudioOutputStreamARN(aTestName)
+ {}
+
+/**
+ * NewL
+ */
+CTestMmfAclntARN1322* CTestMmfAclntARN1322::NewL(const TDesC& aTestName)
+ {
+ CTestMmfAclntARN1322* self = new (ELeave) CTestMmfAclntARN1322(aTestName);
+ return self;
+ }
+
+/**
+ * DoTestL
+ */
+TVerdict CTestMmfAclntARN1322::DoTestL()
+ {
+ return( PerformTestL() );
+ }
+
+/**
+ * FsmL
+ */
+void CTestMmfAclntARN1322::FsmL(TMmfAudioOutputStreamEvents aEventCode, TInt aError)
+ {
+ if (FsmCheck(aEventCode, aError))
+ {
+ TInt err = KErrNone;
+ switch (iState)
+ {
+ case 0:
+ // Open iTestAudioOutputStream1
+ iTestAudioOutputStream1->Open(NULL);
+ INFO_PRINTF1(_L("iTestAudioOutputStream1->Open()"));
+ // Set ExpectedEvent & ExpectedError and change the State
+ StateChange(EMaoscOpenComplete1);
+ break;
+ case 1:
+ // Register iTestAudioOutputStream1 for Notification
+ err = iTestAudioOutputStream1->RegisterAudioResourceNotification(*iMdaAudioOutputStreamCallbackSupport1, KMMFEventCategoryAudioResourceAvailable);
+ INFO_PRINTF1(_L("iTestAudioOutputStream1->RegisterAudioResourceNotification()"));
+ if( err != KErrNone )
+ {
+ ERR_PRINTF2(_L("iTestAudioOutputStream1->RegisterAudioResourceNotification - Failed with Error : %d"), err);
+ iTestStepResult = EFail;
+ CActiveScheduler::Stop();
+ User::Leave(err);
+ break;
+ }
+ // Cancellation of notification request for iTestAudioOutputStream1
+ err = iTestAudioOutputStream1->CancelRegisterAudioResourceNotification(KMMFEventCategoryPlaybackComplete);
+ INFO_PRINTF1(_L("iTestAudioOutputStream1->CancelRegisterAudioResourceNotification(KMMFEventCategoryPlaybackComplete)"));
+ if( err == KErrNotSupported )
+ {
+ INFO_PRINTF1(_L("iTestAudioOutputStream1->CancelRegisterAudioResourceNotification - Returned KErrNotSupported ") );
+ iTestStepResult = EPass;
+ }
+ else
+ {
+ ERR_PRINTF2(_L("iTestAudioOutputStream1->CancelRegisterAudioResourceNotification - Failed with Error : %d"), err);
+ iTestStepResult = EFail;
+ }
+ CActiveScheduler::Stop();
+ break;
+ }
+ }
+ }
+
+/**
+ * PerformTestL
+ */
+TVerdict CTestMmfAclntARN1322::PerformTestL()
+ {
+ INFO_PRINTF1( _L("Cancel the request for notification with an unsupported event type."));
+ iTestStepResult = EFail;
+
+ // Initialise the state variables
+ StateInit();
+
+ // Begin the process
+ FsmL(EIdleOutputStream);
+
+ // Start the scheduler - Done only once !
+ CActiveScheduler::Start();
+
+ return iTestStepResult;
+ }
+
+//
+//CTestMmfAclntARN1323
+//
+
+/**
+ * Constructor
+ */
+CTestMmfAclntARN1323::CTestMmfAclntARN1323(const TDesC& aTestName)
+ : CTestStepAudioOutputStreamARN(aTestName)
+ {}
+
+/**
+ * NewL
+ */
+CTestMmfAclntARN1323* CTestMmfAclntARN1323::NewL(const TDesC& aTestName)
+ {
+ CTestMmfAclntARN1323* self = new (ELeave) CTestMmfAclntARN1323(aTestName);
+ return self;
+ }
+
+/**
+ * DoTestL
+ */
+TVerdict CTestMmfAclntARN1323::DoTestL()
+ {
+ return( PerformTestL() );
+ }
+
+/**
+ * FsmL
+ */
+void CTestMmfAclntARN1323::FsmL(TMmfAudioOutputStreamEvents aEventCode, TInt aError)
+ {
+ if (FsmCheck(aEventCode, aError))
+ {
+ TInt err = KErrNone;
+ switch (iState)
+ {
+ case 0:
+ // Open iTestAudioOutputStream1
+ iTestAudioOutputStream1->Open(NULL);
+ INFO_PRINTF1(_L("iTestAudioOutputStream1->Open()"));
+ // Set ExpectedEvent & ExpectedError and change the State
+ StateChange(EMaoscOpenComplete1);
+ break;
+ case 1:
+ // Cancellation of notification request for iTestAudioOutputStream1
+ err = iTestAudioOutputStream1->CancelRegisterAudioResourceNotification(KMMFEventCategoryAudioResourceAvailable);
+ INFO_PRINTF1(_L("iTestAudioOutputStream1->CancelRegisterAudioResourceNotification()"));
+ if( err == KErrCancel )
+ {
+ INFO_PRINTF1(_L("iTestAudioOutputStream1->CancelRegisterAudioResourceNotification - Returned KErrCancel ") );
+ iTestStepResult = EPass;
+ }
+ else
+ {
+ ERR_PRINTF2(_L("iTestAudioOutputStream1->CancelRegisterAudioResourceNotification - Failed with Error : %d"), err);
+ iTestStepResult = EFail;
+ }
+ CActiveScheduler::Stop();
+ break;
+ }
+ }
+ }
+
+/**
+ * PerformTestL
+ */
+TVerdict CTestMmfAclntARN1323::PerformTestL()
+ {
+ INFO_PRINTF1(_L("Cancel when no resource Notification is requested."));
+ iTestStepResult = EFail;
+
+ // Initialise the state variables
+ StateInit();
+
+ // Begin the process
+ FsmL(EIdleOutputStream);
+
+ // Start the scheduler - Done only once !
+ CActiveScheduler::Start();
+
+ return iTestStepResult;
+ }
+
+//
+//CTestMmfAclntARN1324
+//
+
+/**
+ * Constructor
+ */
+CTestMmfAclntARN1324::CTestMmfAclntARN1324(const TDesC& aTestName)
+ : CTestStepAudioOutputStreamARN(aTestName)
+ {}
+
+/**
+ * NewL
+ */
+CTestMmfAclntARN1324* CTestMmfAclntARN1324::NewL(const TDesC& aTestName)
+ {
+ CTestMmfAclntARN1324* self = new (ELeave) CTestMmfAclntARN1324(aTestName);
+ return self;
+ }
+
+/**
+ * DoTestL
+ */
+TVerdict CTestMmfAclntARN1324::DoTestL()
+ {
+ return( PerformTestL() );
+ }
+
+/**
+ * FsmL
+ */
+void CTestMmfAclntARN1324::FsmL(TMmfAudioOutputStreamEvents aEventCode, TInt aError)
+ {
+ if (FsmCheck(aEventCode, aError))
+ {
+ TInt err = KErrNone;
+ switch (iState)
+ {
+ case 0:
+ // Open iTestAudioOutputStream1
+ iTestAudioOutputStream1->Open(NULL);
+ INFO_PRINTF1(_L("iTestAudioOutputStream1->Open()"));
+ // Set ExpectedEvent & ExpectedError and change the State
+ StateChange(EMaoscOpenComplete1);
+ break;
+ case 1:
+ // Register iTestAudioOutputStream1 for Notification
+ err = iTestAudioOutputStream1->RegisterAudioResourceNotification(*iMdaAudioOutputStreamCallbackSupport1, KMMFEventCategoryAudioResourceAvailable);
+ INFO_PRINTF1(_L("iTestAudioOutputStream1->RegisterAudioResourceNotification()#1"));
+ if( err != KErrNone )
+ {
+ ERR_PRINTF2(_L("iTestAudioOutputStream1->RegisterAudioResourceNotification#1 - Failed with Error : %d"), err);
+ iTestStepResult = EFail;
+ CActiveScheduler::Stop();
+ User::Leave(err);
+ break;
+ }
+ // Register iTestAudioOutputStream1 for Notification (again)
+ err = iTestAudioOutputStream1->RegisterAudioResourceNotification(*iMdaAudioOutputStreamCallbackSupport1, KMMFEventCategoryAudioResourceAvailable);
+ INFO_PRINTF1(_L("iTestAudioOutputStream1->RegisterAudioResourceNotification()#2"));
+ if( err == KErrAlreadyExists )
+ {
+ INFO_PRINTF1(_L("iTestAudioOutputStream1->RegisterAudioResourceNotification#2 - Returned KErrAlreadyExists ") );
+ iTestStepResult = EPass;
+ }
+ else
+ {
+ ERR_PRINTF2(_L("iTestAudioOutputStream1->RegisterAudioResourceNotification#2 - Failed with Error : %d"), err);
+ iTestStepResult = EFail;
+ }
+ CActiveScheduler::Stop();
+ break;
+ }
+ }
+ }
+
+/**
+ * PerformTestL
+ */
+TVerdict CTestMmfAclntARN1324::PerformTestL()
+ {
+ INFO_PRINTF1(_L("Multiple Registration for notification for the same event type."));
+ iTestStepResult = EFail;
+
+ // Initialise the state variables
+ StateInit();
+
+ // Begin the process
+ FsmL(EIdleOutputStream);
+
+ // Start the scheduler - Done only once !
+ CActiveScheduler::Start();
+
+ return iTestStepResult;
+ }