--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/mmlibs/mmfw/tsrc/mmfunittest/Actrl/TestStepController.cpp Tue Feb 02 01:56:55 2010 +0200
@@ -0,0 +1,595 @@
+// Copyright (c) 2002-2009 Nokia Corporation and/or its subsidiary(-ies).
+// All rights reserved.
+// This component and the accompanying materials are made available
+// under the terms of "Eclipse Public License v1.0"
+// which accompanies this distribution, and is available
+// at the URL "http://www.eclipse.org/legal/epl-v10.html".
+//
+// Initial Contributors:
+// Nokia Corporation - initial contribution.
+//
+// Contributors:
+//
+// Description:
+// TestStepContropller.cpp
+//
+
+#include <e32std.h>
+#include <e32base.h>
+#include <mmf/common/mmfcontroller.h>
+#include <mmf/server/mmffile.h>
+#include <mmf/server/mmfdes.h>
+#include <mmf/plugin/mmfcontrollerimplementationuids.hrh>
+#include <mmf/common/mmfstandardcustomcommands.h>
+
+// Test system includes
+#include <testframework.h>
+
+// Specific includes for this test suite
+#include "TS_MMF_ACTRL_TestStep.h"
+#include "TS_MMF_ACTRL_TestSuite.h"
+
+#include "ActrlTestUids.h"
+
+// Specific includes for these test steps
+#include "TestStepController.h"
+
+// constants destined for header file
+//const TInt KPlayDelayNewMail = 100000000 ; // EABI warning removal
+const TInt KMemoryAllocCmd = 0xaaaaa;
+
+/**
+*
+* CTestStepResetController
+*
+*/
+CTestStepResetController::CTestStepResetController()
+ {
+ iTestStepName = _L("MM-MMF-ACTRL-U-0016-HP");
+ }
+
+/**
+*
+* ~CTestStepResetController
+*
+*/
+CTestStepResetController::~CTestStepResetController()
+ {
+ }
+
+/**
+*
+* DoTestStepL
+* This method tests the controllers reset function
+*
+*/
+TVerdict CTestStepResetController::DoTestStepL( void )
+ {
+ __MM_HEAP_MARK;
+
+ TVerdict result = EPass;
+
+ _LIT( KTestPlay, "Reset Test");
+ Log( KTestPlay );
+
+ _LIT( KTestStepReset, "This test checks a controller reset");
+ Log( KTestStepReset );
+
+ // [ audio file to play ]
+ _LIT(KTestWavFile, "newmail.wav");
+ SetReadFileNameL( KTestWavFile );
+
+ TInt errorCode = iController.Open(KUidCustomTestAudioPlugin, iPriority);
+ User::LeaveIfError( errorCode );
+
+ //[ok lets reset the controller from it initial state]
+ errorCode = iController.Reset();
+ User::LeaveIfError( errorCode );
+ //[ search for reset event ]
+ TMMFEvent resetEvent( KResetTestId, KErrNone);
+ result = SearchForEvent( resetEvent );
+ if( result == EFail )
+ {
+ return result;
+ }
+
+ //[ lets try a second reset ]
+ errorCode = iController.Reset();
+ User::LeaveIfError( errorCode );
+ //[ search for reset event ]
+ result = SearchForEvent( resetEvent );
+ if( result == EFail )
+ {
+ return result;
+ }
+
+ //[ add data source and sink and prime the controller ]
+ errorCode = iController.AddDataSource(KUidMmfFileSource, ReadFileConfig());
+ User::LeaveIfError( errorCode );
+
+ errorCode = iController.AddDataSink(KUidMmfAudioOutput, KNullDesC8);
+ User::LeaveIfError( errorCode );
+
+ //[ok lets reset the controller from it initial state]
+ errorCode = iController.Reset();
+ User::LeaveIfError( errorCode );
+
+ //[ search for reset event ]
+ result = SearchForEvent( resetEvent );
+ if( result == EFail )
+ {
+ return result;
+ }
+
+ //[ lets try a second reset ]
+ errorCode = iController.Reset();
+ User::LeaveIfError( errorCode );
+ //[ search for reset event ]
+ result = SearchForEvent( resetEvent );
+ if( result == EFail )
+ {
+ return result;
+ }
+
+ //[ add data source and sink and prime the controller ]
+ errorCode = iController.AddDataSource(KUidMmfFileSource, ReadFileConfig());
+ User::LeaveIfError( errorCode );
+
+ errorCode = iController.AddDataSink(KUidMmfAudioOutput, KNullDesC8);
+ User::LeaveIfError( errorCode );
+
+ errorCode = iController.Prime();
+ User::LeaveIfError( errorCode );
+
+ // [ wait for and process the return event from the audio output ]
+ TMMFEvent primeEvent( KPrimeTestId, KErrNone);
+ result = SearchForEvent( primeEvent );
+ if( result == EFail )
+ {
+ return result;
+ }
+
+ //[ lets reset again in the primed state ]
+ errorCode = iController.Reset();
+ User::LeaveIfError( errorCode );
+
+ //[ search for reset event ]
+ result = SearchForEvent( resetEvent );
+ if( result == EFail )
+ {
+ return result;
+ }
+
+ // [ get back to primed state ]
+ //[ add data source and sink and prime the controller ]
+ errorCode = iController.AddDataSource(KUidMmfFileSource, ReadFileConfig());
+ User::LeaveIfError( errorCode );
+
+ errorCode = iController.AddDataSink(KUidMmfAudioOutput, KNullDesC8);
+ User::LeaveIfError( errorCode );
+
+ errorCode = iController.Prime();
+ User::LeaveIfError( errorCode );
+ result = SearchForEvent( primeEvent );
+ if( result == EFail )
+ {
+ return result;
+ }
+
+ User::LeaveIfError( iController.Play() );
+
+ // note this test does not wait around
+ // to detect that the audio has been played
+ // [ now process the confirmation event that play has reached audio output
+ // this is the raison detre of the test ]
+ TMMFEvent playEvent( KPlayTestId, KErrNone );
+ result = SearchForEvent( playEvent );
+ if( result == EFail )
+ {
+ return result;
+ }
+
+ //[ lets reset again in the primed state ]
+ errorCode = iController.Reset();
+ User::LeaveIfError( errorCode );
+
+ //[ search for reset event ]
+ result = SearchForEvent( resetEvent );
+ if( result == EFail )
+ {
+ return result;
+ }
+
+ errorCode = iController.Reset();
+ User::LeaveIfError( errorCode );
+
+ //[ search for reset event ]
+ result = SearchForEvent( resetEvent );
+ if( result == EFail )
+ {
+ return result;
+ }
+
+ //[ ensure the controller is unloaded so that it does
+ // not interfere with the following test ]
+ // There is a bug in this code and the stop followed by reset
+ // ensure the controller resources are released.
+ iController.Stop();
+ iController.Reset();
+ iController.Close();
+
+ __MM_HEAP_MARKEND;
+
+ // [test steps return a result]
+ return result;
+ }
+
+/**
+*
+* CTestStepRemoveDataSink
+*
+*/
+CTestStepRemoveDataSink::CTestStepRemoveDataSink()
+ {
+ iTestStepName = _L("MM-MMF-ACTRL-U-0017-HP");
+ }
+
+/**
+*
+* ~CTestStepPauseController
+*
+*/
+CTestStepRemoveDataSink::~CTestStepRemoveDataSink()
+ {
+ }
+
+/**
+*
+* DoTestStepL
+*
+*/
+TVerdict CTestStepRemoveDataSink::DoTestStepL( void )
+ {
+ __MM_HEAP_MARK;
+
+ TVerdict result = EPass;
+
+ _LIT( KTestPlay, "Remove Data Sink Test");
+ Log( KTestPlay );
+
+ _LIT( KTestStepPause, "This test checks removing a data sink");
+ Log( KTestStepPause );
+
+ // [ audio file to play ]
+ _LIT(KTestWavFile, "newmail.wav");
+ SetReadFileNameL( KTestWavFile );
+
+ TInt errorCode = iController.Open(KUidCustomTestAudioPlugin, iPriority);
+ User::LeaveIfError( errorCode );
+
+ //[ declare handles for removal of the data source and data sink]
+ TMMFMessageDestination aSourceHandleInfo;
+ TMMFMessageDestination aSinkHandleInfo ;
+
+ //[ add data source and sink and prime the controller ]
+ errorCode = iController.AddDataSource(KUidMmfFileSource, ReadFileConfig(), aSourceHandleInfo );
+ User::LeaveIfError( errorCode );
+
+ errorCode = iController.AddDataSink(KUidMmfAudioOutput, KNullDesC8, aSinkHandleInfo );
+ User::LeaveIfError( errorCode );
+
+ //[ lets try removing the data sink with the soure handle ]
+ errorCode = iController.RemoveDataSink( aSourceHandleInfo );
+ if( errorCode == KErrNone )
+ {
+ result = EFail;
+ return result;
+ }
+
+ //[ lets remove the data sink ]
+ errorCode = iController.RemoveDataSink( aSinkHandleInfo );
+ User::LeaveIfError( errorCode );
+
+ //[ search for remove event ]
+ TMMFEvent removeDataSinkEvent( KRemoveDataSinkTestId, KErrNone );
+ TVerdict removeResult = SearchForEvent( removeDataSinkEvent );
+ if( removeResult == EFail )
+ {
+ return removeResult ;
+ }
+
+ //[ try removing the data sink a second time ]
+ errorCode = iController.RemoveDataSink( aSinkHandleInfo );
+ if( errorCode == KErrNone )
+ {
+ result = EFail;
+ return result ;
+ }
+
+ //[ no need to remove event since the message does not reach the custom controller ]
+
+ errorCode = iController.AddDataSink(KUidMmfAudioOutput, KNullDesC8, aSinkHandleInfo );
+ User::LeaveIfError( errorCode );
+
+ errorCode = iController.Prime();
+ User::LeaveIfError( errorCode );
+
+ // [ wait for and process the return event from the audio output ]
+
+ TMMFEvent primeEvent( KPrimeTestId, KErrNone);
+ TVerdict primeResult = SearchForEvent( primeEvent );
+ if( primeResult == EFail )
+ {
+ return primeResult;
+ }
+
+ //[ try removing the data sink ]
+ errorCode = iController.RemoveDataSink( aSinkHandleInfo );
+ if( errorCode == KErrNone )
+ {
+ result = EFail;
+ return result ;
+ }
+
+ // [ second event is not generated on failure ]
+
+ User::LeaveIfError( iController.Play() );
+
+ // note this test does not wait around
+ // to detect that the audio has been played
+ // [ now process the confirmation event that play has reached audio output
+ // this is the raison detre of the test ]
+ TMMFEvent playEvent( KPlayTestId, KErrNone );
+
+ TVerdict playResult = SearchForEvent( playEvent );
+ if( playResult == EFail )
+ {
+ return playResult ;
+ }
+
+ //[ try removing the data sink ]
+ errorCode = iController.RemoveDataSink( aSinkHandleInfo );
+ if( errorCode == KErrNone )
+ {
+ result = EFail;
+ return result ;
+ }
+
+ //[ try removing the data sink ]
+ errorCode = iController.RemoveDataSink( aSinkHandleInfo );
+ if( errorCode == KErrNone )
+ {
+ result = EFail;
+ return result ;
+ }
+
+ result = EPass ;
+
+ //[ ensure the controller is unloaded so that it does
+ // not interfere with the following test ]
+ // There is a bug in this code and the stop followed by reset
+ // ensure the controller resources are released.
+ iController.Stop();
+ iController.Reset();
+ iController.Close();
+
+ __MM_HEAP_MARKEND;
+
+ // test steps return a result
+ return result;
+ }
+
+/**
+*
+* CTestStepRemoveDataSource
+*
+*/
+CTestStepRemoveDataSource::CTestStepRemoveDataSource()
+ {
+ iTestStepName = _L("MM-MMF-ACTRL-U-0019-HP");
+ }
+
+/**
+*
+* ~CTestStepRemoveDataSource
+*
+*/
+CTestStepRemoveDataSource::~CTestStepRemoveDataSource()
+ {
+ }
+
+/**
+*
+* DoTestStepL
+* This method tests removing a Data Source
+*/
+TVerdict CTestStepRemoveDataSource::DoTestStepL( void )
+ {
+ __MM_HEAP_MARK;
+
+ TVerdict result = EPass;
+
+ _LIT( KTestPlay, "Remove Data Source Test");
+ Log( KTestPlay );
+
+ _LIT( KTestStepSource, "This test checks removing a data source");
+ Log( KTestStepSource );
+
+ // [ audio file to play ]
+ _LIT(KTestWavFile, "newmail.wav");
+ SetReadFileNameL( KTestWavFile );
+
+ TInt errorCode = iController.Open(KUidCustomTestAudioPlugin, iPriority);
+ User::LeaveIfError( errorCode );
+ //iFileConfig().iPath = KTestWavFile;
+
+ //[ declare handles for removal of the data source and data sink]
+ TMMFMessageDestination aSourceHandleInfo;
+ TMMFMessageDestination aSinkHandleInfo ;
+
+ //[ add data source and sink and prime the controller ]
+ errorCode = iController.AddDataSource(KUidMmfFileSource, ReadFileConfig(), aSourceHandleInfo );
+ User::LeaveIfError( errorCode );
+
+ errorCode = iController.AddDataSink(KUidMmfAudioOutput, KNullDesC8, aSinkHandleInfo );
+ User::LeaveIfError( errorCode );
+
+ //[ lets remove the data source using the sink handle !! ]
+ errorCode = iController.RemoveDataSource( aSinkHandleInfo );
+ if( errorCode == KErrNone )
+ {
+ result = EFail;
+ return result ;
+ }
+
+ //[ lets remove the data source ]
+ errorCode = iController.RemoveDataSource( aSourceHandleInfo );
+ User::LeaveIfError( errorCode );
+
+ //[ search for remove event ]
+ TMMFEvent removeDataSourceEvent( KRemoveDataSourceTestId, KErrNone );
+ TVerdict removeResult = SearchForEvent( removeDataSourceEvent );
+ if( removeResult == EFail )
+ {
+ return removeResult ;
+ }
+
+ //[ try removing the data source a second time ]
+ errorCode = iController.RemoveDataSource( aSourceHandleInfo );
+ if( errorCode == KErrNone )
+ {
+ result = EFail;
+ return result ;
+ }
+
+ //[ no need to remove event since the message does not reach the custom controller ]
+
+ //[ add data source and sink and prime the controller ]
+ errorCode = iController.AddDataSource(KUidMmfFileSource, ReadFileConfig(), aSourceHandleInfo );
+ User::LeaveIfError( errorCode );
+
+ errorCode = iController.Prime();
+ User::LeaveIfError( errorCode );
+
+ // [ wait for and process the return event from the audio output ]
+
+ TMMFEvent primeEvent( KPrimeTestId, KErrNone);
+ TVerdict primeResult = SearchForEvent( primeEvent );
+ if( primeResult == EFail )
+ {
+ return primeResult;
+ }
+
+ //[ try removing the data source ]
+ errorCode = iController.RemoveDataSource( aSourceHandleInfo );
+ if( errorCode == KErrNone )
+ {
+ result = EFail;
+ return result ;
+ }
+
+ // [ second event is not generated on failure ]
+
+ User::LeaveIfError( iController.Play() );
+
+ // note this test does not wait around
+ // to detect that the audio has been played
+ // [ now process the confirmation event that play has reached audio output
+ // this is the raison detre of the test ]
+ TMMFEvent playEvent( KPlayTestId, KErrNone );
+
+ TVerdict playResult = SearchForEvent( playEvent );
+ if( playResult == EFail )
+ {
+ return playResult ;
+ }
+
+ //[ try removing the data sink ]
+ errorCode = iController.RemoveDataSource( aSourceHandleInfo );
+ if( errorCode == KErrNone )
+ {
+ result = EFail;
+ return result ;
+ }
+
+ //[ try removing the data sink ]
+ errorCode = iController.RemoveDataSource( aSourceHandleInfo );
+ if( errorCode == KErrNone )
+ {
+ result = EFail;
+ return result ;
+ }
+
+ result = EPass ;
+
+ //[ ensure the controller is unloaded so that it does
+ // not interfere with the following test ]
+ // There is a bug in this code and the stop followed by reset
+ // ensure the controller resources are released.
+ iController.Stop();
+ iController.Reset();
+ iController.Close();
+
+ __MM_HEAP_MARKEND;
+
+ // test steps return a result
+ return result;
+ }
+
+/**
+*
+* CTestStepMemoryAllocation
+*/
+CTestStepMemoryAllocation::CTestStepMemoryAllocation()
+ {
+ iTestStepName = _L("MM-MMF-ACTRL-U-0020-HP");
+ }
+
+/**
+*
+* ~CTestStepMemoryAllocation
+*/
+CTestStepMemoryAllocation::~CTestStepMemoryAllocation()
+ {
+ }
+
+/**
+*
+*DoTestStepL
+*/
+TVerdict CTestStepMemoryAllocation::DoTestStepL( void )
+ {
+ __MM_HEAP_MARK;
+
+ TVerdict result = EPass;
+
+ _LIT( KTestPlay, "Memory Allocation Test");
+ Log( KTestPlay );
+
+ _LIT( KTestStepSource, "This test checks memory allocation of the plugin");
+ Log( KTestStepSource );
+
+ TInt errorCode = iController.Open(KUidCustomTestAudioPlugin, iPriority);
+ User::LeaveIfError( errorCode );
+ //[ send the custom command to the custom audio controller ]
+ TMMFMessageDestinationPckg destinationPckg(KMemoryAllocationTestId);
+
+ //[ send memory alloc test to the custom plugin ]
+ //[ we have only ensured that the controller is loaded into memory
+ // and that all add sources etc will be don
+ errorCode = iController.CustomCommandSync(destinationPckg,
+ KMemoryAllocCmd,
+ KNullDesC8,
+ KNullDesC8);
+ User::LeaveIfError( errorCode );
+
+ //[ ensure the controller is unloaded so that it does
+ // not interfere with the following test ]
+ // There is a bug in this code and the stop followed by reset
+ // ensure the controller resources are released.
+ iController.Stop();
+ iController.Reset();
+ iController.Close();
+
+ return result ;
+ }