mmlibs/mmfw/tsrc/mmfintegrationtest/ACLNT/OpenFileByHandle7908.cpp
changeset 0 40261b775718
child 31 ae0addfe117e
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mmlibs/mmfw/tsrc/mmfintegrationtest/ACLNT/OpenFileByHandle7908.cpp	Tue Feb 02 01:56:55 2010 +0200
@@ -0,0 +1,355 @@
+// Copyright (c) 2004-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:
+//
+
+#include "TestPlayerUtils.h"
+#include "OpenFileByHandle7908.h"
+
+#include <caf/caf.h>
+
+/**
+ * Constructor
+ */
+CTestMmfAclntOpenFile7908::CTestMmfAclntOpenFile7908(const TDesC& aTestName, const TDesC& aSectName,const TDesC& aKeyName, const TTestFormat aFormat, const TBool aCreateFile)
+	: CTestMmfAclntOpenFile7902(aTestName, aSectName, aKeyName, aFormat, aCreateFile), iRecUtil(NULL),iPlayUtil(NULL)
+	{
+	}
+
+CTestMmfAclntOpenFile7908* CTestMmfAclntOpenFile7908::NewL(const TDesC& aTestName, const TDesC& aSectName,const TDesC& aKeyName, const TTestFormat aFormat, const TBool aCreateFile)
+	{
+	CTestMmfAclntOpenFile7908* self = new (ELeave) CTestMmfAclntOpenFile7908(aTestName,aSectName,aKeyName,aFormat,aCreateFile);
+	return self;
+	}
+
+CTestMmfAclntOpenFile7908* CTestMmfAclntOpenFile7908::NewLC(const TDesC& aTestName, const TDesC& aSectName,const TDesC& aKeyName, const TTestFormat aFormat, const TBool aCreateFile)
+	{
+	CTestMmfAclntOpenFile7908* self = CTestMmfAclntOpenFile7908::NewL(aTestName,aSectName,aKeyName,aFormat,aCreateFile);
+	CleanupStack::PushL(self);
+	return self;
+	}
+
+/**
+ * Open a file based clip and record, and then playback 
+ * Performs alloc tests separately for each step in this test case
+ * The 4 steps in this case are : 
+ * 1> Create CMdaAudioRecorderUtility 
+ * 2> Open CMdaAudioRecorderUtility and record a clip
+ * 3> Create CMdaAudioPlayerUtility
+ * 4> Open CMdaAudioRecorderUtility and playback the clip
+ */
+TVerdict CTestMmfAclntOpenFile7908::DoTestStepL()
+	{
+	INFO_PRINTF1( _L("TestRecorder : Record File"));
+	TInt err = KErrNone;
+
+	//>>>>>>>>>>>>>>>>>>>>>>>>Test Method Call<<<<<<<<<<<<<<<<<<<<<<<<<<
+	if( PerformTestStepL() != EPass )
+		{
+		err = iError;
+		}
+
+	if (err != KErrNone)
+		{
+		INFO_PRINTF2(_L("Test error, returned error code =  %d"), err);
+		User::Leave(err);
+		}
+		
+	TInt failCount = 0;//total fail count for all the steps = sum of fail counts in each step
+	TInt stepFailCount; //fail count in each step
+	TVerdict iAllocTestStepResult = EPass; // TODO check?? assume pass
+	
+	err = PerformTestStep(1, stepFailCount);
+	failCount += stepFailCount;
+	if (err != KErrNone)
+		{
+		iAllocTestStepResult = EFail;
+		TBuf<80> format;
+		format.Format(_L("  Error(%d) with %d memory allocations tested\n"), err, failCount);
+		Log(format);
+		return iAllocTestStepResult;
+		}		
+	
+	TRAP(err, ExecuteStep1L());//Till step1 alloc tests are done, now keep the conditions ready 
+							   //for performing alloc tests on step 2 i,e keep the iRecUtil 
+							   //created and open for recording in this step
+	if (err != KErrNone)
+		{
+		iAllocTestStepResult = EFail;
+		TBuf<80> format;
+		format.Format(_L("  Error(%d) with %d memory allocations tested\n"), err, failCount);
+		Log(format);
+		return iAllocTestStepResult;
+		}								  
+	err = PerformTestStep(2, stepFailCount);	
+	failCount += stepFailCount;
+	delete iRecUtil;// Was created in ExecuteStep1L to be used for performing alloc tests in step 2 	
+	if (err != KErrNone)
+		{
+		iAllocTestStepResult = EFail;
+		TBuf<80> format;
+		format.Format(_L("  Error(%d) with %d memory allocations tested\n"), err, failCount);
+		Log(format);
+		return iAllocTestStepResult;
+		}
+		
+	err = PerformTestStep(3, stepFailCount);
+	failCount += stepFailCount;
+	if (err != KErrNone)
+		{
+		iAllocTestStepResult = EFail;
+		TBuf<80> format;
+		format.Format(_L("  Error(%d) with %d memory allocations tested\n"), err, failCount);
+		Log(format);
+		return iAllocTestStepResult;
+		}
+	
+	TRAP(err, ExecuteStep3L());//Till step3 alloc tests are done, now keep the conditions ready 
+							   //for performing alloc tests on step 4 i,e keep the iPlayUtil 
+							   //created and open for playback in this step
+	if(err != KErrNone)
+		{
+		iAllocTestStepResult = EFail;
+		TBuf<80> format;
+		format.Format(_L("  Error(%d) with %d memory allocations tested\n"), err, failCount);
+		Log(format);
+		return iAllocTestStepResult;	
+		}			
+	err = PerformTestStep(4, stepFailCount);
+	failCount += stepFailCount;
+	delete iPlayUtil; // Was created in ExecuteStep3L to be used for performing alloc tests in step 4
+		
+	stepFailCount -= 1; // Failcount of 1 equates to 0 successful allocs, etc
+	
+	if (err != KErrNone)
+		{
+		iAllocTestStepResult = EFail;
+		TBuf<80> format;
+		format.Format(_L("  Error(%d) with %d memory allocations tested\n"), err, failCount);
+		Log(format);
+		}
+	else 
+		{
+		TBuf<80> format;
+		format.Format(_L("  Completed OK with %d memory allocations tested\n"), failCount);
+		Log(format);
+		}
+
+	return iAllocTestStepResult;
+	}
+/*
+ * TVerdict CTestMmfAclntOpenFile7908::PerformTestStep(TInt aStepNo, TInt& aStepFailCount)
+ * Performs alloc tests on the step aStepNo in this test case
+ */	
+TInt CTestMmfAclntOpenFile7908::PerformTestStep(TInt aStepNo, TInt& aStepFailCount)	
+	{
+	TBool completed;
+	TInt err;
+	for(aStepFailCount = 1;;)	
+		{
+		__UHEAP_SETFAIL(RHeap::EFailNext, aStepFailCount);
+		__MM_HEAP_MARK;
+
+//		INFO_PRINTF2(_L("CAudioRecorderUtility: Alloc Test Loop: %d"), failCount);
+		//>>>>>>>>>>>>>>>>>>>>>>>>Test Method Call<<<<<<<<<<<<<<<<<<<<<<<<<<
+		TVerdict verdict = EFail;
+
+		switch( aStepNo )
+			{
+			case 1:
+				TRAP(err, verdict = ExecuteStep1L());	
+				if(err == KErrNone)
+					{
+					delete iRecUtil; //Created in ExecuteStep1L. We dont need it open anymore 						
+					}
+				break; 
+			case 2:
+				TRAP(err, verdict = ExecuteStep2L());	
+				break; 
+			case 3:
+				TRAP(err, verdict = ExecuteStep3L());
+				if(err == KErrNone)
+					{
+					delete iPlayUtil; //Created in ExecuteStep3L. We dont need it open anymore 						
+					}
+				break; 
+			case 4:
+				TRAP(err, verdict = ExecuteStep4L());	
+				break; 				
+			}
+				
+		if (err == KErrNone && verdict != EPass)
+			{
+			err = iError;
+			}
+
+		completed = EFalse;
+		if (err == KErrNone)
+			{
+			TAny *testAlloc = User::Alloc(1); // when this fails, we passed through all allocs within test
+			if (testAlloc == NULL)
+				{
+				completed = ETrue;
+				aStepFailCount -= 1;
+				}
+			else
+				{
+				User::Free(testAlloc);	
+				}			
+			
+			}
+		else if (err != KErrNoMemory) // bad error code
+			{
+			completed = ETrue;
+			}			
+		
+		__MM_HEAP_MARKEND;
+		__UHEAP_SETFAIL(RHeap::ENone, 0);
+
+		if (completed)
+			{
+			break; // exit loop
+			}
+
+		aStepFailCount++;
+		}//for
+		return err;	
+	}
+/*
+ * TVerdict CTestMmfAclntOpenFile7908::ExecuteStep1L()
+ * Executes the statements for step 1 of this test case
+ */
+TVerdict CTestMmfAclntOpenFile7908::ExecuteStep1L()
+	{
+	iError = KErrTimedOut;
+		
+	iRecUtil = CMdaAudioRecorderUtility::NewL(*this);
+	iError = KErrNone;
+	return EPass;	
+	}
+
+/*
+ * TVerdict CTestMmfAclntOpenFile7908::ExecuteStep2L()
+ * Executes the statements for step 2 of this test case
+ */
+TVerdict CTestMmfAclntOpenFile7908::ExecuteStep2L()
+	{
+	TVerdict ret = EFail;
+	iError = KErrTimedOut;
+	
+	User::LeaveIfError(iFs.Connect());
+	CleanupClosePushL(iFs);
+	User::LeaveIfError(iFs.ShareProtected());
+
+	if(!GetStringFromConfig(iSectName, iKeyName, iFilename))
+		{
+		ret = EInconclusive;
+		}
+
+	User::LeaveIfError(iFile.Replace(iFs,iFilename,EFileWrite));
+	CleanupClosePushL(iFile);
+	iRecUtil->OpenFileL(iFile);
+	CleanupClosePushL(*iRecUtil);
+	CActiveScheduler::Start();
+
+	if(iError == KErrNone)
+		{
+		iError = KErrTimedOut;
+		iRecUtil->RecordL();
+		CActiveScheduler::Start(); // open -> record
+		
+		User::After(500000);	// 0.5 sec
+		iRecUtil->Stop();
+		}
+	CleanupStack::PopAndDestroy(3, &iFs);	//iFs, iFile, iRecUtil
+	if(iError == KErrNone)
+		{
+		ret = EPass;
+		}		
+	return ret;	
+	}
+	
+/*
+ * TVerdict CTestMmfAclntOpenFile7908::ExecuteStep3L()
+ * Executes the statements for step 3 of this test case
+ */
+ TVerdict CTestMmfAclntOpenFile7908::ExecuteStep3L()
+	{
+	TVerdict ret = EFail;
+	iError = KErrTimedOut;
+	
+	iPlayUtil = CMdaAudioPlayerUtility::NewL(*this);
+	iError = KErrNone;
+	ret = EPass;
+	return ret;
+	}
+	
+/*
+ * TVerdict CTestMmfAclntOpenFile7908::ExecuteStep4L()
+ * Executes the statements for step 4 of this test case
+ */
+TVerdict CTestMmfAclntOpenFile7908::ExecuteStep4L()
+	{
+	TVerdict ret = EFail;
+	iError = KErrTimedOut;	
+	
+	TRAPD(err, iPlayUtil->OpenFileL(iFilename));
+	if (err != KErrNone)
+		{
+		INFO_PRINTF2(_L("Error opening file for playback err = %d"), err);
+		ret = EFail;
+		}
+	CActiveScheduler::Start();
+	if (iError != KErrNone)
+		{
+		INFO_PRINTF2(_L("Error opening file for playback iError = %d"), iError);
+		ret = EFail;
+		}
+	if( iError == KErrNone )
+		{
+		iPlayUtil->Play();
+		CActiveScheduler::Start();
+		}
+	iPlayUtil->Close();		
+	if (iError != KErrNone)
+		{
+		INFO_PRINTF2(_L("Error during playback of recorded file iError=%d"), iError);
+		ret = EFail;
+		}	
+	if( iError == KErrNone ) 
+		{
+		RFile file;
+		TInt size = 0;
+		
+		User::LeaveIfError(iFs.Connect());
+		CleanupClosePushL(iFs);
+		User::LeaveIfError(iFs.ShareProtected());
+		User::LeaveIfError(file.Open(iFs,iFilename,EFileRead));
+		CleanupClosePushL(file);
+		User::LeaveIfError(file.Size(size));
+
+		if(size > 0)
+			{
+			ret = EPass;
+			}
+		CleanupStack::PopAndDestroy(2, &iFs); //iFile, iFs
+		}
+
+	ERR_PRINTF2( _L("CMdaAudioRecorderUtility completed with error %d"),iError );
+	if(iError == KErrNone)
+		{
+		User::After(500000);	
+		}
+
+	return	ret;
+	}