telephonyutils/etel3rdpartyapi/Test/te_etelIsv/TE_EtelIsvCallFunc.cpp
branchopencode
changeset 24 6638e7f4bd8f
parent 0 3553901f7fa8
--- a/telephonyutils/etel3rdpartyapi/Test/te_etelIsv/TE_EtelIsvCallFunc.cpp	Mon May 03 13:37:20 2010 +0300
+++ b/telephonyutils/etel3rdpartyapi/Test/te_etelIsv/TE_EtelIsvCallFunc.cpp	Thu May 06 15:10:38 2010 +0100
@@ -1,2996 +1,2996 @@
-// Copyright (c) 2003-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:
-// Tests for ETEL 3rd Party Call APIs.
-// 
-//
-
-/**
- @file
-*/
-
-#include "TE_EtelIsvbase.h"
-#include "TE_EtelIsvCallFunc.h"
-
-
-CTestDialNewCall::CTestDialNewCall()
-/** Each test step initialises it's own name
-*/
-{
-	// store the name of this test case
-	// this is the name that is used by the script file
-	SetTestStepName(_L("TestDialNewCall"));
-}
-
-/**
-*
-@SYMTestCaseID Etel3rdParty 9.1
-@SYMTestCaseDesc Test DialNewCall 3rd party API
-@SYMFssID SGL.GT0166.054 v1.3 A2_Telephony_Functional_Specification.doc, REQ 2116.3.1
-*/ 
-
-enum TVerdict CTestDialNewCall::doTestStepL()
-{
-	INFO_PRINTF1(_L("CTestDialNewCall::doTestStepL Start"));
-	
-	_LIT(KGoodNumber,"1789");
-	
-	SetTestNumber(15); 
-	
-	//Set the call parameters for call 1
-	CTelephony::TCallParamsV1 callParams1;
-	callParams1.iIdRestrict = CTelephony::ESendMyId;
-	CTelephony::TCallParamsV1Pckg callParamsPckg1(callParams1);	
-	
-	TTestCallParams testCallParams1;
-	testCallParams1.iLine = CTelephony::EVoiceLine;
-	testCallParams1.iCallParamsV1Pckg = &callParamsPckg1;
-	testCallParams1.iTelAddress.iTelNumber = KGoodNumber;
-	testCallParams1.iExpStat = KErrNone;
-	
-	//Set the call parameters for call 2
-	CTelephony::TCallParamsV1 callParams2;
-	callParams2.iIdRestrict = CTelephony::ESendMyId;
-	CTelephony::TCallParamsV1Pckg callParamsPckg2(callParams2);	
-	
-	TTestCallParams testCallParams2;
-	testCallParams2.iLine = CTelephony::EVoiceLine;
-	testCallParams2.iCallParamsV1Pckg = &callParamsPckg2;
-	testCallParams2.iTelAddress.iTelNumber = KGoodNumber;
-	testCallParams2.iExpStat = KErrNone;
-	
-	//Set the call parameters for call 3 - should not successfully make a call
-	CTelephony::TCallParamsV1 callParams3;
-	callParams3.iIdRestrict = CTelephony::ESendMyId;
-	CTelephony::TCallParamsV1Pckg callParamsPckg3(callParams3);	
-	
-	TTestCallParams testCallParams3;
-	testCallParams3.iLine = CTelephony::EVoiceLine;
-	testCallParams3.iCallParamsV1Pckg = &callParamsPckg3;
-	testCallParams3.iTelAddress.iTelNumber = KGoodNumber;
-	testCallParams3.iExpStat = KErrAccessDenied;
-	
-	CTelephony::TCallStatusV1 status;
-	CTelephony::TCallStatusV1Pckg statusPckg(status);
-	
-	// Create active DialNewCallAct objects
-	CTestDialNewCallAct* testDialNewCallAct1 = CTestDialNewCallAct::NewLC(this, iTelephony);
-	
-//
-//TEST 1: Test making call on fax & data line.  Should fail
-//
-	
-	INFO_PRINTF1(_L("Test making call on fax & data line.  Should fail"));
-	testCallParams1.iLine = CTelephony::EDataLine;
-	testCallParams1.iExpStat = KErrAccessDenied;
-	testDialNewCallAct1->TestDialNewCall(testCallParams1);
-	CActiveScheduler::Start();
-	
-	testCallParams1.iLine = CTelephony::EFaxLine;
-	testDialNewCallAct1->TestDialNewCall(testCallParams1);
-	CActiveScheduler::Start();	
-	
-//
-//TEST 2: Test OOM on Dial
-//
-#if defined(_DEBUG)
-	INFO_PRINTF1(_L("Test OOM on for Dial"));
-	testCallParams1.iLine = CTelephony::EVoiceLine;
-	testCallParams1.iExpStat = KErrNoMemory;
-	testCallParams1.iCallId = CTelephony::EISVMaxNumOfCalls;	
-	__UHEAP_FAILNEXT(1);	
-	// Create a call - should fail	
-	testDialNewCallAct1->TestDialNewCall(testCallParams1);
-	CActiveScheduler::Start();
-	__UHEAP_RESET;
-	
-	__UHEAP_FAILNEXT(2);	 
-	// Create a call - should fail
-	testDialNewCallAct1->TestDialNewCall(testCallParams1);
-	CActiveScheduler::Start();
-	__UHEAP_RESET;
-#endif
-//
-//TEST 3: Create & Hangup a single call
-//
-
-	INFO_PRINTF1(_L("Create & Hangup a single call"));
-	testCallParams1.iLine = CTelephony::EVoiceLine;
-	testCallParams1.iExpStat = KErrNone;		 
-	// Create a call - should succeed
-	testCallParams1.iCallId = CTelephony::EISVMaxNumOfCalls;
-	testDialNewCallAct1->TestDialNewCall(testCallParams1, ETrue);
-	CActiveScheduler::Start();
-			
-	TInt err = iTelephony->GetCallStatus(testCallParams1.iCallId,  statusPckg);
-	TEST1(err == KErrNone, ETrue);	
-	TEST1(status.iStatus == CTelephony::EStatusConnected, ETrue);
-	TEST1(testCallParams1.iCallId == CTelephony::EISVCall1, ETrue);
-	TEST1(callParams1.iIdRestrict == CTelephony::ESendMyId, ETrue);
-	
-	// Create an activeHangupAct object
-	CTestHangupAct* testHangupAct1 = CTestHangupAct::NewLC(this, iTelephony);
-
-	testCallParams1.iExpStat = KErrNone;
-	testHangupAct1->TestHangup(testCallParams1);
-	CActiveScheduler::Start();
-	
-	err = iTelephony->GetLineStatus(testCallParams1.iLine,  statusPckg);
-	TEST1(err == KErrNone, ETrue);
-	TEST1(status.iStatus == CTelephony::EStatusIdle, ETrue);
-	
-//
-//TEST 4: Create 2 calls. try and create a third which should fail
-//
-	
-	INFO_PRINTF1(_L(" Create 2 calls. try and create a third which should fail."));
-	CTestHoldAct* TestHoldAct = CTestHoldAct::NewLC(this, iTelephony);	
-	
-	INFO_PRINTF1(_L(" Create first call."));
-	testCallParams1.iExpStat = KErrNone;
-	testDialNewCallAct1->TestDialNewCall(testCallParams1);
-	CActiveScheduler::Start();
-	
-	err = iTelephony->GetCallStatus(testCallParams1.iCallId,  statusPckg);
-	TEST1(err == KErrNone, ETrue);	
-	TEST1(status.iStatus == CTelephony::EStatusConnected, ETrue);
-	TEST1(testCallParams1.iCallId == CTelephony::EISVCall1, ETrue);
-	
-	// Create 2nd call - should fail as other call is active
-	INFO_PRINTF1(_L(" Create first 2nd call - should fail as 1st call active"));
-	testCallParams2.iExpStat = KErrGeneral;
-	testDialNewCallAct1->TestDialNewCall(testCallParams2);
-	CActiveScheduler::Start();
-	
-	//put 1st call on hold
-	INFO_PRINTF1(_L(" Put 1st call on hold."));
-	testCallParams1.iExpStat=KErrNone;
-	TestHoldAct->TestHold(testCallParams1);
-	CActiveScheduler::Start();	
-	
-	err = iTelephony->GetCallStatus(testCallParams1.iCallId,  statusPckg);
-	TEST1(err == KErrNone, ETrue);	
-	TEST1(status.iStatus == CTelephony::EStatusHold, ETrue);
-	
-	// Create 2nd call - should suceed
-	INFO_PRINTF1(_L(" Create 2nd call."));
-	testCallParams2.iExpStat=KErrNone;
-	testDialNewCallAct1->TestDialNewCall(testCallParams2);
-	CActiveScheduler::Start();
-	
-	// Create a 3rd call - should fail
-	INFO_PRINTF1(_L(" Create 3rd call - should fail"));
-	testCallParams3.iExpStat = KErrAccessDenied;
-	testDialNewCallAct1->TestDialNewCall(testCallParams3);
-	CActiveScheduler::Start();			
-	
-	//Hangup calls
-	INFO_PRINTF1(_L("Hangup 1st call"));
-	testCallParams1.iExpStat = KErrNone;
-	testHangupAct1->TestHangup(testCallParams1);
-	CActiveScheduler::Start();
-	
-	err = iTelephony->GetLineStatus(testCallParams1.iLine,  statusPckg);
-	TEST1(err == KErrNone, ETrue);
-	TEST1(status.iStatus == CTelephony::EStatusConnected, ETrue);
-	
-	INFO_PRINTF1(_L("Hangup 2nd call"));
-	testCallParams1.iExpStat = KErrNone;
-	testHangupAct1->TestHangup(testCallParams2);
-	CActiveScheduler::Start();
-	
-	err = iTelephony->GetLineStatus(testCallParams2.iLine,  statusPckg);
-	TEST1(err == KErrNone, ETrue);
-	TEST1(status.iStatus == CTelephony::EStatusIdle, ETrue);	
-
-//
-//TEST 5: test cancel
-//
-	INFO_PRINTF1(_L(" Test dial cancel."));
-	TInt cancelerr = iTelephony->CancelAsync(CTelephony::EDialNewCallCancel);
-	TEST1(cancelerr == KErrNotFound, ETrue);
-	testDialNewCallAct1->TestDialNewCall(testCallParams1);
-	CTestCanceller* canceller = testDialNewCallAct1->RetrieveCanceller();
-	canceller->Call();
-	CActiveScheduler::Start();	
-	TEST1(testDialNewCallAct1->iStatus.Int() == KErrCancel, ETrue);
-	
-//
-//TEST 6: Test re-dialling after a cancel
-//
- 	INFO_PRINTF1(_L(" Test dial after a cancel."));
- 	err = iTelephony->GetLineStatus(testCallParams1.iLine,  statusPckg);
-	TEST1(status.iStatus == CTelephony::EStatusIdle, ETrue);
-	
-	testDialNewCallAct1->TestDialNewCall(testCallParams1);
-	CActiveScheduler::Start();	
-	
-	err = iTelephony->GetCallStatus(testCallParams1.iCallId,  statusPckg);
-	TEST1(status.iStatus == CTelephony::EStatusConnected, ETrue);
-	
-	
-	//Hangup calls
-	INFO_PRINTF1(_L("Hangup call"));
-	testCallParams1.iExpStat = KErrNone;
-	testHangupAct1->TestHangup(testCallParams1);
-	CActiveScheduler::Start();	
-	
-	CleanupStack::PopAndDestroy(TestHoldAct);
-	CleanupStack::PopAndDestroy(testHangupAct1);
-	CleanupStack::PopAndDestroy(testDialNewCallAct1);
-	
-	return TestStepResult();	
-}
-
-/**
-Dial New Call Active Object
-**/
-CTestDialNewCallAct* CTestDialNewCallAct::NewLC(CEtelIsvTestStep* aTestStep, CTelephony* aTelephony, TBool aUseMacros)
-//Factory constructor
-	{
-	CTestDialNewCallAct* obj = new(ELeave) CTestDialNewCallAct(aTestStep, aTelephony, NULL, aUseMacros);
-	CleanupStack::PushL(obj);
-	obj->ConstructL();
-	return obj;
-	}
-	
-CTestDialNewCallAct* CTestDialNewCallAct::NewL(CEtelIsvTestStep* aTestStep, CTelephony* aTelephony, MActionParent* aParent)
-//Factory constructor
-	{
-	CTestDialNewCallAct* obj = new(ELeave) CTestDialNewCallAct(aTestStep, aTelephony, aParent, ETrue);
-	CleanupStack::PushL(obj);
-	obj->ConstructL();
-	CleanupStack::Pop(obj);
-	return obj;
-	}
-	
-CTestDialNewCallAct::CTestDialNewCallAct(CEtelIsvTestStep* aTestStep, CTelephony* aTelephony, MActionParent* aParent, TBool aUseMacros)
-    : CEtelIsvActBase(aTestStep, aTelephony)
-    , iParent(aParent)
-    , iUseMacros(aUseMacros) 
-	{  
-	}
-
-void CTestDialNewCallAct::ConstructL()
-	{    
-	iCanceller = new(ELeave) CTestCanceller(this);
-	CActiveScheduler::Add(this);
-	}
-
-CTestDialNewCallAct::~CTestDialNewCallAct()
-	{  
-	Cancel();	// if any Req outstanding, calls DoCancel() to cleanup.
-	delete iCanceller;
-	}
-
-void CTestDialNewCallAct::DoCancel()
-	{
-	iTelephony->CancelAsync(CTelephony::EDialNewCallCancel);
-	}
-
-void CTestDialNewCallAct::TestDialNewCall(TTestCallParams& aTestCallParams, TBool aCheckConcurrency)
-	{
- 	iTestCallParams = &aTestCallParams;
-
-	// Update the expected return value.
-	iExpStat=aTestCallParams.iExpStat;
-	
-	TDes8* data;
-    
-	if (iTestStep->iBufferMode)
- 		{
- 		// initialize the buffer first
-		iCallParamsBuff = *(reinterpret_cast<CTelephony::TCallParamsV1*> ( const_cast<TUint8*> (aTestCallParams.iCallParamsV1Pckg->Ptr() ) ));
-		data = &iCallParamsBuff;   
-		}
-	else
-		{
-		data = aTestCallParams.iCallParamsV1Pckg;
-		}
-
-        
-	// Make a new call
-	iTelephony->DialNewCall(iStatus, *data ,iTestCallParams->iTelAddress.iTelNumber, iTestCallParams->iCallId, iTestCallParams->iLine);
-	if(aCheckConcurrency)
-		{
-		TRequestStatus tmpStatus;
-		iTelephony->DialNewCall(tmpStatus, *data ,iTestCallParams->iTelAddress.iTelNumber, iTestCallParams->iCallId, iTestCallParams->iLine);
-		User::WaitForRequest(tmpStatus);
-		iTestStep->TEST1(tmpStatus.Int() == KErrInUse, ETrue);
-		}
-	SetActive(); 
-	}
-	
-void CTestDialNewCallAct::RunL()
-	{
-	// ActiveScheduler will have set status to KRequestComplete, just before
-	// calling this RunL().
-	if(iUseMacros)
-		{
-		iTestStep-> INFO_PRINTF1(_L(" CTestDialNewCallAct::RunL "));
-		iTestStep->INFO_PRINTF2(_L("Request Status returned is: %d"), iStatus.Int()   );
-
-		iTestStep->TEST1(iStatus.Int() == iExpStat.Int(), ETrue);
-		}
-
-	if(iStatus.Int() == KErrNone)
-		{
-		if(iUseMacros)
-			{
-			iTestStep->INFO_PRINTF1(_L(" KErrNone returned") );
-			iTestStep->INFO_PRINTF2(_L(" Call ID is %d"), iTestCallParams->iCallId );	
-
-			CTelephony::TCallStatusV1 status;
-			CTelephony::TCallStatusV1Pckg statusPckg(status);
-
-			iTelephony->GetCallStatus(iTestCallParams->iCallId,  statusPckg);
-			iTestStep->INFO_PRINTF2(_L(" Call status is %d"), status.iStatus );
-			}
-		}
-	else
-		{
-		if(iUseMacros)
-			{
-			iTestStep->INFO_PRINTF2(_L("Request Status expected is: %d"), iExpStat.Int()   ); 
-			iTestStep->INFO_PRINTF2(_L("Error for dialnewcall: %d"), iStatus.Int() );
-			}
-		}
-	if(!iParent)
-		CActiveScheduler::Stop();
-	else
-		iParent->ActionParent(iStatus.Int(), MActionParent::EDialNewCall);
-	}
-	
- 
-CTestHangup::CTestHangup()
-/** Each test step initialises it's own name
-*/
-	{
-	// store the name of this test case
-	// this is the name that is used by the script file
-	SetTestStepName(_L("TestHangup"));
-	}
-
-/**
-*
-@SYMTestCaseID Etel3rdParty 10.1
-@SYMTestCaseDesc Test Hangup 3rd party API
-@SYMFssID SGL.GT0166.054 v1.3 A2_Telephony_Functional_Specification.doc, REQ 2116.3.3
-*/
-
-enum TVerdict CTestHangup::doTestStepL()
-	{
-	INFO_PRINTF1(_L("CTestHangup::doTestStepL Start"));
-	
-	_LIT(KGoodNumber,"1789");
-	
-	SetTestNumber(15); 
-	
-	//Hangup is been used extensively in other tests.  This test therefore just tests cancelling and trying to 
-	//hang-up when a call is not active
-	
-	//Set the call parameters
-	CTelephony::TCallParamsV1 callParams1;
-	callParams1.iIdRestrict = CTelephony::ESendMyId;
-	CTelephony::TCallParamsV1Pckg callParamsPckg1(callParams1);	
-	
-	TTestCallParams testCallParams1;
-	testCallParams1.iLine = CTelephony::EVoiceLine;
-	testCallParams1.iCallParamsV1Pckg = &callParamsPckg1;
-	testCallParams1.iTelAddress.iTelNumber = KGoodNumber;
-	testCallParams1.iExpStat = KErrNone;
- 
- 	// Create an active HangupAct object
-	CTestHangupAct* TestHangupAct = CTestHangupAct::NewLC(this, iTelephony);		
-	// Create active DialNewCallAct objects
-	CTestDialNewCallAct* testDialNewCallAct1 = CTestDialNewCallAct::NewLC(this, iTelephony);
-	
-//
-//TEST 1: Test Hangup with no active call
-//
-
-	//try hanging up when no call active
-	testCallParams1.iCallId = CTelephony::EISVCall1;
-	testCallParams1.iExpStat = KErrAccessDenied;
-	TestHangupAct->TestHangup(testCallParams1);
-	CActiveScheduler::Start();
-	
-	INFO_PRINTF1(_L(" Create a call."));
-	testCallParams1.iExpStat = KErrNone;
-	testDialNewCallAct1->TestDialNewCall(testCallParams1);
-	CActiveScheduler::Start();
-	
-//
-//TEST 2: Test OOM on Hangup
-//
-#if defined(_DEBUG)
-	INFO_PRINTF1(_L("Test OOM on for Hangup"));
-	testCallParams1.iExpStat = KErrNoMemory;
-	__UHEAP_FAILNEXT(1);	
-	TestHangupAct->TestHangup(testCallParams1);
-	CActiveScheduler::Start();
-	__UHEAP_RESET;
-#endif
-//
-//TEST 3: Test make a call and hangup
-//
-	
-	INFO_PRINTF1(_L("Hangup the call"));
-	testCallParams1.iExpStat = KErrNone;
-	TestHangupAct->TestHangup(testCallParams1, ETrue);
-	CActiveScheduler::Start();
-	
-//
-//TEST 4: Test Cancel
-//
-
-	//make a call first
-	INFO_PRINTF1(_L(" Create a call."));
-	testCallParams1.iExpStat = KErrNone;
-	testDialNewCallAct1->TestDialNewCall(testCallParams1);
-	CActiveScheduler::Start();	
-	
-	TInt cancelerr = iTelephony->CancelAsync(CTelephony::EHangupCancel);
-	TEST1(cancelerr == KErrNotFound, ETrue);
-	TestHangupAct->TestHangup(testCallParams1);
-	CTestCanceller* canceller = TestHangupAct->RetrieveCanceller();
-	canceller->Call();
-	CActiveScheduler::Start();
-	TInt result = TestHangupAct->iStatus.Int();
-	
-	if(result == KErrCancel)
-		{
-		//call should still be active
-		CTelephony::TCallStatusV1 status;
-		CTelephony::TCallStatusV1Pckg statusPckg(status);
-		TInt err = iTelephony->GetCallStatus(testCallParams1.iCallId,  statusPckg);
-		TEST1(err == KErrNone, ETrue);	
-		TEST1(status.iStatus == CTelephony::EStatusConnected, ETrue);
-	
-		//now hangup properly
-		TestHangupAct->TestHangup(testCallParams1);
-		CActiveScheduler::Start();
-		}
-	else if (result == KErrNone)
-		{
-		INFO_PRINTF1(_L("Test Cancel HangUp call: HangUp completed with KErrNone,"));
-		INFO_PRINTF1(_L("KErrCancel expected. Test Inconclusive."));
-		SetTestStepResult(EInconclusive);
-		}
-	else
-		{
-		SetTestStepResult(EFail);	
-		}
- 
-	CleanupStack::PopAndDestroy(testDialNewCallAct1);
-	CleanupStack::PopAndDestroy(TestHangupAct);
-	return TestStepResult();
-	}
-
-
-/**
-Hangup Active Object
-**/
-CTestHangupAct* CTestHangupAct::NewLC(CEtelIsvTestStep* aTestStep, CTelephony* aTelephony, TBool aUseMacros)
-//Factory constructor
-	{
-	CTestHangupAct* obj = new(ELeave) CTestHangupAct(aTestStep, aTelephony, NULL, aUseMacros);
-	CleanupStack::PushL(obj);
-	obj->ConstructL();
-	return obj;
-	}
-	
-CTestHangupAct* CTestHangupAct::NewL(CEtelIsvTestStep* aTestStep, CTelephony* aTelephony, MActionParent* aParent)
-//Factory constructor
-	{
-	CTestHangupAct* obj = new(ELeave) CTestHangupAct(aTestStep, aTelephony, aParent, ETrue);
-	CleanupStack::PushL(obj);
-	obj->ConstructL();
-	CleanupStack::Pop();//obj
-	return obj;
-	}
-	
-CTestHangupAct::CTestHangupAct(CEtelIsvTestStep* aTestStep, CTelephony* aTelephony, MActionParent* aParent, TBool aUseMacros)
-	: CEtelIsvActBase(aTestStep, aTelephony)	 
-	, iParent(aParent)
-    , iUseMacros(aUseMacros)
-	{  
-	}
-
-void CTestHangupAct::ConstructL()
-	{    
-	iCanceller = new(ELeave) CTestCanceller(this);
-	CActiveScheduler::Add(this);
-	}
-
-CTestHangupAct::~CTestHangupAct()
-	{  
-	Cancel();	// if any Req outstanding, calls DoCancel() to cleanup.
-	delete iCanceller;
-	}
-
-void CTestHangupAct::DoCancel()
-	{
-	iTelephony->CancelAsync(CTelephony::EHangupCancel);
-	}
-
-void CTestHangupAct::TestHangup(TTestCallParams& aTestCallParams, TBool aCheckConcurrency) 
-               
-	{
- 	iTestCallParams = &aTestCallParams;
-
-	// Update the expected return value.
-	iExpStat=iTestCallParams->iExpStat;
-
-	// Hangup existing call
-	iTelephony->Hangup(iStatus, iTestCallParams->iCallId);
-	if(aCheckConcurrency)
-		{
-		TRequestStatus tmpStatus;
-		iTelephony->Hangup(tmpStatus, iTestCallParams->iCallId);
-		User::WaitForRequest(tmpStatus);
-		iTestStep->TEST1(tmpStatus.Int() == KErrInUse, ETrue);
-		}
-	SetActive(); 
-	}
-	
-void CTestHangupAct::RunL()
-	{ 
-	// ActiveScheduler will have set status to KRequestComplete, just before
-	// calling this RunL().
-	if(iUseMacros)
-		{
-		iTestStep-> INFO_PRINTF1(_L(" CTestHangupAct::RunL "));
-		iTestStep->INFO_PRINTF2(_L("Request Status returned is: %d"), iStatus.Int()   );
-		iTestStep->TEST1(iStatus.Int() == iExpStat.Int(), ETrue);
-		}
-	
-	if(iStatus.Int() == KErrNone)
-		{
-		if(iUseMacros)
-			{
-			iTestStep->INFO_PRINTF2(_L(" Call ID is %d"), iTestCallParams->iCallId );	 
-			}
-		}
-		else
-		{
-		if(iUseMacros)
-			{
-			iTestStep->INFO_PRINTF2(_L("Error for hangup: %d"), iStatus.Int() );
-			}
-		}
-	if(!iParent)
-		CActiveScheduler::Stop();
-	else
-		iParent->ActionParent(iStatus.Int(), MActionParent::EHangup);
-	}
-
-CTestAnswerIncomingCall::CTestAnswerIncomingCall(TInt& aCallCount)
-/** Each test step initialises it's own name
-*/
-: iCallCount(aCallCount)
-	{
-	// store the name of this test case
-	// this is the name that is used by the script file
-	SetTestStepName(_L("TestAnswerIncomingCall"));
-	}
-
-/**
-*
-@SYMTestCaseID Etel3rdParty 11.1
-@SYMTestCaseDesc Test AnswerIncomingCall 3rd party API
-@SYMFssID SGL.GT0166.054 v1.3 A2_Telephony_Functional_Specification.doc, REQ 2116.3.5, INC074753 
-*/
-enum TVerdict CTestAnswerIncomingCall::doTestStepL()
-	{
-	INFO_PRINTF1(_L("CTestAnswerIncomingCall::doTestStepL Start"));
-	
-	SetTestNumber(15); 
-	
-	_LIT(KGoodNumber,"1789");
-	
-	//Set the call parameters to receive call 1
-	TTestCallParams testCallParams1;
-	testCallParams1.iLine = CTelephony::EVoiceLine;
-	testCallParams1.iCallParamsV1Pckg = NULL;
-	testCallParams1.iExpStat = KErrNone;
-	
-	//Set the call parameters for MO call 1
-	CTelephony::TCallParamsV1 callParams1;
-	callParams1.iIdRestrict = CTelephony::ESendMyId;
-	CTelephony::TCallParamsV1Pckg callParamsPckg1(callParams1);	
-	
-	TTestCallParams testMOCallParams1;
-	testMOCallParams1.iLine = CTelephony::EVoiceLine;
-	testMOCallParams1.iCallParamsV1Pckg = &callParamsPckg1;
-	testMOCallParams1.iTelAddress.iTelNumber = KGoodNumber;
-	testMOCallParams1.iExpStat = KErrNone; 
-	
-	
-	//Set the call parameters for MO call 2
-	CTelephony::TCallParamsV1 callParams2;
-	callParams2.iIdRestrict = CTelephony::ESendMyId;
-	CTelephony::TCallParamsV1Pckg callParamsPckg2(callParams2);	
-	
-	TTestCallParams testMOCallParams2;
-	testMOCallParams2.iLine = CTelephony::EVoiceLine;
-	testMOCallParams2.iCallParamsV1Pckg = &callParamsPckg2;
-	testMOCallParams2.iTelAddress.iTelNumber = KGoodNumber;
-	testMOCallParams2.iExpStat = KErrNone; 
-	
-	// Create an active AnswerIncomingCallAct object
-	CTestAnswerIncomingCallAct* testAnswerIncomingCallAct1 = CTestAnswerIncomingCallAct::NewLC(this, iTelephony);
-	
-//
-//TEST 1: Test answering call on fax & data line.  Should fail
-//
-	
-	INFO_PRINTF1(_L("Test answering call on fax & data line.  Should fail"));
-	testCallParams1.iLine = CTelephony::EDataLine;
-	testCallParams1.iExpStat = KErrAccessDenied;
-	testAnswerIncomingCallAct1->TestAnswerIncomingCall(testCallParams1);
-	CActiveScheduler::Start();
-	
-	testCallParams1.iLine = CTelephony::EFaxLine;
-	testAnswerIncomingCallAct1->TestAnswerIncomingCall(testCallParams1);
-	CActiveScheduler::Start();	
-
-//
-//TEST 2: Test AnswerIncomingCall with no ringing call
-//
-	INFO_PRINTF1(_L("Test answering call with no ringing"));
-	testCallParams1.iLine = CTelephony::EVoiceLine;
-	testCallParams1.iExpStat = KErrAccessDenied;
-	testAnswerIncomingCallAct1->TestAnswerIncomingCall(testCallParams1);
-	CActiveScheduler::Start();
-	
-	//initiate callback
-	testAnswerIncomingCallAct1->CallMe(iCallCount);
-	 
-//
-//TEST 2: Test OOM on AnswerIncomingCall
-//
-#if defined(_DEBUG)
-	INFO_PRINTF1(_L("Test answering call with OOM"));
-	testCallParams1.iExpStat = KErrNoMemory;
-	__UHEAP_FAILNEXT(1);
-	testAnswerIncomingCallAct1->TestAnswerIncomingCall(testCallParams1);
-	CActiveScheduler::Start();
-	__UHEAP_RESET;
-#endif
- 	
-//
-//TEST 3: Test answering call & hanging up on voice line 
-//	
-	INFO_PRINTF1(_L("Test answering call with hangup"));
-
-	CTelephony::TCallInfoV1 callInfoV1;
-	CTelephony::TCallInfoV1Pckg callInfoV1Pckg(callInfoV1);
-	CTelephony::TRemotePartyInfoV1 remoteInfoV1;
-	CTelephony::TRemotePartyInfoV1Pckg remoteInfoV1Pckg(remoteInfoV1);
-	
-	CTelephony::TCallSelectionV1 callSelection;
-	CTelephony::TCallSelectionV1Pckg callSelectionV1Pckg(callSelection);
-	callSelection.iSelect = CTelephony::EInProgressCall;
-	callSelection.iLine = CTelephony::EVoiceLine;
-	
-	TInt err = iTelephony->GetCallInfo(callSelectionV1Pckg, callInfoV1Pckg, remoteInfoV1Pckg);
-
-	testCallParams1.iExpStat = KErrNone;
-	testAnswerIncomingCallAct1->TestAnswerIncomingCall(testCallParams1, ETrue);
-	CActiveScheduler::Start();
-	TEST1(testCallParams1.iCallId == CTelephony::EISVCall1, ETrue);
-		
-	CTelephony::TCallStatusV1 status;
-	CTelephony::TCallStatusV1Pckg statusPckg(status);		
-	iTelephony->GetLineStatus(testCallParams1.iLine, statusPckg);
-	TEST1(status.iStatus == CTelephony::EStatusConnected, ETrue);
-	
-	iTelephony->GetCallStatus(testCallParams1.iCallId, statusPckg);
-	TEST1(status.iStatus == CTelephony::EStatusConnected, ETrue);
-	
-	//and hangup
-	CTestHangupAct* testHangupAct1 = CTestHangupAct::NewLC(this, iTelephony);		
-	
-	testHangupAct1->TestHangup(testCallParams1);
-	CActiveScheduler::Start();
-	
-//
-//TEST 4: Test dialling a call & answering a 2nd call
-//	
-	INFO_PRINTF1(_L("Test dial a call & answering call."));
-	CTestDialNewCallAct* testDialNewCallAct1 = CTestDialNewCallAct::NewLC(this, iTelephony);
-	INFO_PRINTF1(_L("Create a single call"));
-	// Create a call - should succeed
-	testMOCallParams1.iCallId = CTelephony::EISVMaxNumOfCalls;
-	testDialNewCallAct1->TestDialNewCall(testMOCallParams1);
-	CActiveScheduler::Start();
-	
-	iTelephony->GetCallStatus(testMOCallParams1.iCallId, statusPckg);
-	TEST1(status.iStatus == CTelephony::EStatusConnected, ETrue);
-	
-	//initiate callback
-	testAnswerIncomingCallAct1->CallMe(iCallCount);
-	
-	iTelephony->GetLineStatus(testMOCallParams1.iLine,  statusPckg);
-	TEST1(status.iStatus == CTelephony::EStatusRinging, ETrue);
-	
-	//put 1st call on hold
-	CTestHoldAct* TestHoldAct = CTestHoldAct::NewLC(this, iTelephony);	
-	INFO_PRINTF1(_L(" Put 1st call on hold."));
-	testCallParams1.iExpStat=KErrNone;
-	TestHoldAct->TestHold(testCallParams1);
-	CActiveScheduler::Start();
-	CleanupStack::PopAndDestroy(TestHoldAct);
-	
-	iTelephony->GetCallStatus(testMOCallParams1.iCallId, statusPckg);
-	TEST1(status.iStatus == CTelephony::EStatusHold, ETrue);
-	
-	//answer a call
-	testCallParams1.iExpStat = KErrNone;
-	testAnswerIncomingCallAct1->TestAnswerIncomingCall(testCallParams1);
-	CActiveScheduler::Start();
-	
-	iTelephony->GetCallStatus(testCallParams1.iCallId, statusPckg);
-	TEST1(status.iStatus == CTelephony::EStatusConnected, ETrue);
-	
-	//try and make a 3rd call - should fail
-	testMOCallParams2.iExpStat = KErrAccessDenied;
-	testDialNewCallAct1->TestDialNewCall(testMOCallParams2);
-	CActiveScheduler::Start();
-		
-	//Hangup calls
-	testCallParams1.iExpStat = KErrNone;
-	testHangupAct1->TestHangup(testCallParams1);
-	CActiveScheduler::Start();
-	
-	testHangupAct1->TestHangup(testMOCallParams1);
-	CActiveScheduler::Start();	
-	
-//
-//TEST 5: Test Cancel
-//
-	INFO_PRINTF1(_L("Test answering call cancel"));
-	
-	//initiate callback
-	testAnswerIncomingCallAct1->CallMe(iCallCount);	
-	
-	TInt cancelerr = iTelephony->CancelAsync(CTelephony::EAnswerIncomingCallCancel);
-	TEST1(cancelerr == KErrNotFound, ETrue);
-	testAnswerIncomingCallAct1->TestAnswerIncomingCall(testCallParams1);
-	CTestCanceller* canceller = testAnswerIncomingCallAct1->RetrieveCanceller();
-	canceller->Call();
-	CActiveScheduler::Start();	
-	TEST1(testAnswerIncomingCallAct1->iStatus.Int() == KErrNone, ETrue);
-	
-	iTelephony->GetCallStatus(testCallParams1.iCallId, statusPckg);
-	TEST1(status.iStatus == CTelephony::EStatusConnected, ETrue);
-	
-	//NOTE: Attempting to Cancel an AnswerIncomingCall fails.  The specs say you can disconnect from
-	//an answering state but this is not implemented in the SIM TSY which means the cancel request fails.
-	
-	//Hangup calls
-	testCallParams1.iExpStat = KErrNone;
-	testHangupAct1->TestHangup(testCallParams1);
-	CActiveScheduler::Start();
-	
-	
-//
-//TEST 6: Test Answer call after a cancel
-//
-	INFO_PRINTF1(_L("Test answering call after a cancel"));
-	
-	//initiate callback
-	testAnswerIncomingCallAct1->CallMe(iCallCount);	
-	
-	testAnswerIncomingCallAct1->TestAnswerIncomingCall(testCallParams1);
-	CActiveScheduler::Start();	
-	
-	iTelephony->GetCallStatus(testCallParams1.iCallId, statusPckg);
-	TEST1(status.iStatus == CTelephony::EStatusConnected, ETrue);
-	
-	//Hangup calls
-	testCallParams1.iExpStat = KErrNone;
-	testHangupAct1->TestHangup(testCallParams1);
-	CActiveScheduler::Start();
-
-	
-//
-//TEST 7: Test Answer call when no notification of incoming call received
-//
-	INFO_PRINTF1(_L("Test answering call when no notification of incoming call received."));
- 
- 	SetTestNumber(38);
- 
-	//Set the call parameters for call
-	CTelephony::TCallParamsV1 callParams3;
-	//callParams1.iIdRestrict = CTelephony::ESendMyId;
-	CTelephony::TCallParamsV1Pckg callParamsPckg3(callParams3);	
-	
-	TTestCallParams testCallParams3;
-	testCallParams3.iLine = CTelephony::EVoiceLine;
-	testCallParams3.iCallParamsV1Pckg = &callParamsPckg3;
-	testCallParams3.iTelAddress.iTelNumber = KGoodNumber;
-	testCallParams3.iExpStat = KErrTimedOut; 
-
-	CTelephony::TCallStatusV1 status2;
-	CTelephony::TCallStatusV1Pckg statusPckg2(status2);		
-	iTelephony->GetLineStatus(testCallParams3.iLine, statusPckg2);
-	TEST1(status2.iStatus == CTelephony::EStatusIdle, ETrue);
- 	
- 	// Initiate callback
-	testAnswerIncomingCallAct1->CallMe(iCallCount);
-	
-	iTelephony->GetLineStatus(testCallParams3.iLine,  statusPckg2);
-	TEST1(status2.iStatus == CTelephony::EStatusRinging, ETrue);
- 	
- 	testAnswerIncomingCallAct1->TestAnswerIncomingCall(testCallParams3);
- 	CActiveScheduler::Start();
-
-//
-//TEST 8: Test Answer call when notify incoming call completes 
-//        when answer incoming call is waiting for it. 
-//
- 	
- 	// NOTE - This test tries to force the incoming call notification to complete
- 	// when AnswerIncomingCall is doing its one second wait. The 
- 	// NotifyIncomingCallPauseDuration in the config file may have to be adjusted to make 
- 	// sure this happens on your computer.  	
- 	INFO_PRINTF1(_L("Test answering call when answer incoming call needs to wait for the call name"));
-	INFO_PRINTF1(_L("NOTE: This test forces simtsy to delay sending the incoming call notification"));
-	INFO_PRINTF1(_L("(which provides the call name) when an incoming call arrives."));
-	INFO_PRINTF1(_L("CAnswerIncomingCallAct will wait up to one second it. This test will fail if"));
-	INFO_PRINTF1(_L("the computer running this test is running slowly causing the notification to arrive"));
-	INFO_PRINTF1(_L("too late."));
- 	
- 	SetTestNumber(39);
- 	
- 	testCallParams3.iExpStat = KErrNone;
- 	
- 	 // Initiate callback
-	testAnswerIncomingCallAct1->CallMe(iCallCount);
-	
-	iTelephony->GetLineStatus(testCallParams3.iLine,  statusPckg2);
-	TEST1(status2.iStatus == CTelephony::EStatusRinging, ETrue);
- 	
- 	testAnswerIncomingCallAct1->TestAnswerIncomingCall(testCallParams3);
- 	CActiveScheduler::Start();	
- 	 
-	CleanupStack::PopAndDestroy(testDialNewCallAct1);
-	CleanupStack::PopAndDestroy(testHangupAct1); 
-	CleanupStack::PopAndDestroy(testAnswerIncomingCallAct1); //testAnswerIncomingCallAct1
-	return TestStepResult();	
-	}
-
- 
-CTestAnswerIncomingCallAct* CTestAnswerIncomingCallAct::NewLC(CEtelIsvTestStep* aTestStep, CTelephony* aTelephony)
-//Factory constructor
-	{
-	CTestAnswerIncomingCallAct* obj = new(ELeave) CTestAnswerIncomingCallAct(aTestStep, aTelephony, NULL);
-	CleanupStack::PushL(obj);
-	obj->ConstructL();
-	return obj;
-	}
-	
-CTestAnswerIncomingCallAct* CTestAnswerIncomingCallAct::NewL(CEtelIsvTestStep* aTestStep, CTelephony* aTelephony, MActionParent* aParent)
-//Factory constructor
-	{
-	CTestAnswerIncomingCallAct* obj = new(ELeave) CTestAnswerIncomingCallAct(aTestStep, aTelephony, aParent);
-	CleanupStack::PushL(obj);
-	obj->ConstructL();
-	CleanupStack::Pop(obj);
-	return obj;
-	}
-		
-CTestAnswerIncomingCallAct::CTestAnswerIncomingCallAct(CEtelIsvTestStep* aTestStep, CTelephony* aTelephony, MActionParent* aParent)
-	: CEtelIsvActBase(aTestStep, aTelephony)
-	, iParent(aParent)	 
-	{  
-	}
-
-void CTestAnswerIncomingCallAct::ConstructL()
-	{    
-	iCanceller = new(ELeave) CTestCanceller(this);
-	CActiveScheduler::Add(this);
-	}
-
-CTestAnswerIncomingCallAct::~CTestAnswerIncomingCallAct()
-	{  
-	Cancel();	// if any Req outstanding, calls DoCancel() to cleanup.
-	delete iCanceller;
-	}
-
-void CTestAnswerIncomingCallAct::DoCancel()
-	{
-	iTelephony->CancelAsync(CTelephony::EAnswerIncomingCallCancel);
-	}
-
-void CTestAnswerIncomingCallAct::TestAnswerIncomingCall(TTestCallParams& aTestCallParams, TBool aCheckConcurrency) 
-	{
-	// Update the expected return value.
-	iTestCallParams = &aTestCallParams;
-
-	// Update the expected return value.
-	iExpStat=aTestCallParams.iExpStat;
-
-	// Answer incoming call
-	iTelephony->AnswerIncomingCall(iStatus, iTestCallParams->iCallId, iTestCallParams->iLine);
-	if(aCheckConcurrency)
-		{
-		TRequestStatus tmpStatus;
-		iTelephony->AnswerIncomingCall(tmpStatus, iTestCallParams->iCallId, iTestCallParams->iLine);
-		User::WaitForRequest(tmpStatus);
-		iTestStep->TEST1(tmpStatus.Int() == KErrInUse, ETrue);
-		}
-	SetActive(); 
-	}
-	
-void CTestAnswerIncomingCallAct::RunL()
-	{ 
-	// ActiveScheduler will have set status to KRequestComplete, just before
-	// calling this RunL().
-	iTestStep->INFO_PRINTF1(_L(" CTestAnswerIncomingCallAct::RunL "));
-	iTestStep->INFO_PRINTF2(_L("Request Status returned is: %d"), iStatus.Int()   );
-	iTestStep->INFO_PRINTF2(_L("Expected Status: %d"), iExpStat.Int());
-		
-	iTestStep->TEST1(iStatus.Int() == iExpStat.Int(), ETrue);	
-	
-	if(iStatus.Int() == KErrNone)
-		{
-		iTestStep->INFO_PRINTF1(_L(" KErrNone returned") );
-		iTestStep->INFO_PRINTF2(_L(" Call ID = %d"), iTestCallParams->iCallId);	 
-		}
-	else
-		{
-		iTestStep->INFO_PRINTF2(_L("Error for AnswerIncomingCall: %d"), iStatus.Int() );
-		}
-
-	if(!iParent)
-		CActiveScheduler::Stop();
-	else
-		iParent->ActionParent(iStatus.Int(), MActionParent::EAnswerIncomingCall);
-	}
-
-CTestHold::CTestHold()
-/** Each test step initialises it's own name
-*/
-{
-	// store the name of this test case
-	// this is the name that is used by the script file
-	SetTestStepName(_L("TestHold"));
-}
-
-/**
-*
-@SYMTestCaseID Etel3rdParty 12.1
-@SYMTestCaseDesc Test Hold 3rd party API
-@SYMFssID SGL.GT0166.054 v1.3 A2_Telephony_Functional_Specification.doc, REQ 2116.3.7
-*/
-  
-enum TVerdict CTestHold::doTestStepL()
-{
-	INFO_PRINTF1(_L("CTestHold::doTestStepL Start"));
-	
-	_LIT(KCallNumber1,"1789");
-	
-	// Set mapping to config.txt 
-	SetTestNumber(15); 
-	
-	//Set the call parameters for a basic call. 
-	CTelephony::TCallParamsV1 callParams1;
-	callParams1.iIdRestrict = CTelephony::ESendMyId;
-	CTelephony::TCallParamsV1Pckg callParamsPckg1(callParams1);	
-	
-	TTestCallParams testCallParams1;
-	testCallParams1.iLine = CTelephony::EVoiceLine;
-	testCallParams1.iCallParamsV1Pckg = &callParamsPckg1;
-	testCallParams1.iTelAddress.iTelNumber = KCallNumber1;
-	testCallParams1.iExpStat = KErrNone; 
-	
-	//
-	//
-	// TEST 1: OOM error case
-	// Make a call. Put the call on hold. 
-	//
-	//
-	
-	INFO_PRINTF1(_L("HOLD TEST 1 Make call.Set OOM condition. Attempt to put call on hold."));
-	
-	// Create an active DialNewCallAct object
-	CTestDialNewCallAct* testDialNewCallAct1 = CTestDialNewCallAct::NewLC(this, iTelephony);
-	
-	// Create an active TestHoldAct object
-	CTestHoldAct* TestHoldAct = CTestHoldAct::NewLC(this, iTelephony);	
-	  
-	// Create a call
-	testCallParams1.iExpStat=KErrNone;	
-	testDialNewCallAct1->TestDialNewCall(testCallParams1);
-	CActiveScheduler::Start();
-	
-	//while call is active test OOM before first hold call
-	#if defined(_DEBUG)
-	INFO_PRINTF1(_L("Test OOM on for Hold"));
-	testCallParams1.iExpStat = KErrNoMemory;
-	__UHEAP_FAILNEXT(1);	
-	TestHoldAct->TestHold(testCallParams1);
-	CActiveScheduler::Start(); 
-	__UHEAP_RESET;
-	#endif
-	
-	INFO_PRINTF1(_L("END TEST 1"));
-
-	//
-	//
-	// TEST 2: Normal case
-	// Make a call. Put the call on hold. 
-	//
-	//
-
-	INFO_PRINTF1(_L("HOLD TEST 2 Call active. Hold call. "));
-	
-	// Put the call on hold.
-	// by calling the ETEL 3rd party API
-	  
-	testCallParams1.iExpStat=KErrNone;
-	TestHoldAct->TestHold(testCallParams1, ETrue);
-	CActiveScheduler::Start();
-		 
- 
-	// Check that the call is now at held status.
-	CTelephony::TCallStatusV1 CallStatusV1;
-	CTelephony::TCallStatusV1Pckg CallStatusPckg(CallStatusV1);
-	TInt err = iTelephony->GetCallStatus(testCallParams1.iCallId, CallStatusPckg );
-	TEST1(err == KErrNone,1);
-	TEST1(CallStatusV1.iStatus == CTelephony::EStatusHold,1);	
-	 
-	INFO_PRINTF1(_L("END TEST 2"));
-	
-	//
-	//
-	// TEST 3: Error case
-	// Call is already on hold. Try to perform a hold on the call.
-	//
-	//
-	
-	INFO_PRINTF1(_L("HOLD TEST 3. Call already held. Call hold API.")); 
-	
-	// Call 3rd Party hold API
-	testCallParams1.iExpStat=KErrAccessDenied;
-	TestHoldAct->TestHold(testCallParams1);
-	CActiveScheduler::Start();
-			 
-	// Make sure call is still in held status
-	err = iTelephony->GetCallStatus(testCallParams1.iCallId, CallStatusPckg );
-	TEST1(err == KErrNone,1);
-	TEST1(CallStatusV1.iStatus == CTelephony::EStatusHold,1);	
-	
-	INFO_PRINTF1(_L("END TEST 3"));
-	
-	//
-	//
-	// TEST 4: Error case
-	// Hang up a call. Try to put the call on hold.
-	//
-	//
-	
-	INFO_PRINTF1(_L("HOLD TEST 4 Hangup call. Try to put on hold."));
-	
-	// Call hangup 3rd party API
-	testCallParams1.iExpStat=KErrNone;	
-	CTestHangupAct* testHangupAct1 = CTestHangupAct::NewLC(this, iTelephony);	
-	testHangupAct1->TestHangup(testCallParams1);
-	CActiveScheduler::Start();	
- 
-	// Make sure the line is idle
-	err = iTelephony->GetLineStatus(testCallParams1.iLine, CallStatusPckg);
-	TEST1(err == KErrNone,1);
-	TEST1(CallStatusV1.iStatus == CTelephony::EStatusIdle,1);	
- 
- 	// Attempt to hold call. Should fail. 
-	testCallParams1.iExpStat=KErrAccessDenied;	 
-	TestHoldAct->TestHold(testCallParams1);
-	CActiveScheduler::Start();
-	
-	// Make sure call is still in idle status
-	err = iTelephony->GetLineStatus(testCallParams1.iLine, CallStatusPckg);
-	TEST1(err == KErrNone,1);
-	TEST1(CallStatusV1.iStatus == CTelephony::EStatusIdle,1);	
-	
-	INFO_PRINTF1(_L("END TEST 4"));	
-	
-	//
-	//
-	// TEST 5: Test cancel
-	// Dial call. Make a request to hold call. Attempt to cancel 
-	// the request.
-	//
-	//
-	
-	INFO_PRINTF1(_L("TEST5 Hold call. Cancel hold request"));
-	
-	// Make a new call
-	testCallParams1.iExpStat=KErrNone;		
-	testDialNewCallAct1->TestDialNewCall(testCallParams1);
-	CActiveScheduler::Start();
-
-	// Request the call to be held then
- 	// attempt to cancel the hold request
- 	TInt cancelerr = iTelephony->CancelAsync(CTelephony::EHoldCancel);
-	TEST1(cancelerr == KErrNotFound, ETrue);
- 	testCallParams1.iExpStat=KErrNone;	
-	CTestCanceller* canceller = TestHoldAct->RetrieveCanceller();
-	TestHoldAct->TestHold(testCallParams1);
-	canceller->Call();
-	CActiveScheduler::Start();	
-	
-	// Status will be KErrCancel if the hold request has been cancelled.
-	// It may be KErrNone if the hold request has managed to complete before 
-	// execution of the cancel.
-	TEST1(((TestHoldAct->iStatus.Int() == KErrCancel) || 
-	        (TestHoldAct->iStatus.Int() == KErrNone)), 1);
-
-	INFO_PRINTF1(_L("END TEST 5"));	
-	
-	
-	// Hang up the call for completion.
-	testCallParams1.iExpStat=KErrNone;	
-	testHangupAct1->TestHangup(testCallParams1);
-	CActiveScheduler::Start();		
- 
-	CleanupStack::PopAndDestroy(testHangupAct1);
-	CleanupStack::PopAndDestroy(TestHoldAct);
-	CleanupStack::PopAndDestroy(testDialNewCallAct1);	
-	
-	return TestStepResult();
-	
-}
-
- 
-CTestHoldAct* CTestHoldAct::NewLC(CEtelIsvTestStep* aTestStep, CTelephony* aTelephony)
-//Factory constructor
-	{
-	CTestHoldAct* obj = new(ELeave) CTestHoldAct(aTestStep, aTelephony);
-	CleanupStack::PushL(obj);
-	obj->ConstructL();
-	return obj;
-	}
-	
-CTestHoldAct::CTestHoldAct(CEtelIsvTestStep* aTestStep, CTelephony* aTelephony)
-	: CEtelIsvActBase(aTestStep, aTelephony)	 
-	{  
-	}
-
-void CTestHoldAct::ConstructL()
-	{    
-	iCanceller = new(ELeave) CTestCanceller(this);
-	CActiveScheduler::Add(this);
-	}
-
-CTestHoldAct::~CTestHoldAct()
-	{  
-	Cancel();	// if any Req outstanding, calls DoCancel() to cleanup.
-	delete iCanceller;
-	}
-
-void CTestHoldAct::DoCancel()
-	{
-	iTelephony->CancelAsync(CTelephony::EHoldCancel);
-	}
-
-void CTestHoldAct::TestHold(TTestCallParams& aTestCallParams, TBool aCheckConcurrency) 
-	{
-	// Update the expected return value.
-	iExpStat=aTestCallParams.iExpStat;
-	 
-	iTelephony->Hold(iStatus, aTestCallParams.iCallId);
-	if(aCheckConcurrency)
-		{
-		TRequestStatus tmpStatus;
-		iTelephony->Hold(tmpStatus, aTestCallParams.iCallId);
-		User::WaitForRequest(tmpStatus);
-		iTestStep->TEST1(tmpStatus.Int() == KErrInUse, ETrue);
-		}
-	SetActive(); 
- 
-	}
-	
-void CTestHoldAct::RunL()
-	{ 
-	// ActiveScheduler will have set status to KRequestComplete, just before
-	// calling this RunL().
-	
-	iTestStep-> INFO_PRINTF1(_L(" CTestHoldAct::RunL "));
-	iTestStep->INFO_PRINTF2(_L("Request Status expected is: %d"), iExpStat.Int()   );
-	iTestStep->INFO_PRINTF2(_L("Request Status returned is: %d"), iStatus.Int()   );
-	
- 	iTestStep->TEST1(iStatus.Int() == iExpStat.Int(), 1);	
-	CActiveScheduler::Stop();
-	}
-
-
-
-CTestResume::CTestResume()
-/** Each test step initialises it's own name
-*/
-{
-	// store the name of this test case
-	// this is the name that is used by the script file
-	SetTestStepName(_L("TestResume"));
-}
-
-/**
-@SYMTestCaseID Etel3rdParty 13.1, TestResume
-@SYMTestCaseDesc Test Resume 3rd party API
-@SYMFssID SGL.GT0166.054 v1.3 A2_Telephony_Functional_Specification.doc, REQ 2116.3.8
-*/
-
-enum TVerdict CTestResume::doTestStepL()
-{ 
-	
-	 INFO_PRINTF1(_L("CTestResume::doTestStepL Start"));
-	
-	_LIT(KCallNumber1,"1789");
-	
-	SetTestNumber(15); 
-	
-	//Set the call parameters  
-	CTelephony::TCallParamsV1 callParams1;
-	callParams1.iIdRestrict = CTelephony::ESendMyId;
-	CTelephony::TCallParamsV1Pckg callParamsPckg1(callParams1);	
-	
-	TTestCallParams testCallParams1;
-	testCallParams1.iLine = CTelephony::EVoiceLine;
-	testCallParams1.iCallParamsV1Pckg = &callParamsPckg1;
-	testCallParams1.iTelAddress.iTelNumber = KCallNumber1;
-	testCallParams1.iExpStat = KErrNone;
-	
-	//
-	//
-	// TEST 1: OOM error scenario
-	// Make a call. Put the call on hold. Attempt to resume the call.
-	//
-	//
-	
-	INFO_PRINTF1(_L("RESUME TEST 1 Make call. Put call on hold. Test OOM condition."));
-	
-	// Create the active objects for a basic call
-	CTestDialNewCallAct* testDialNewCallAct1 = CTestDialNewCallAct::NewLC(this, iTelephony);
-	CTestHoldAct* testHoldAct1 = CTestHoldAct::NewLC(this, iTelephony);
-	CTestResumeAct* testResumeAct1 = CTestResumeAct::NewLC(this, iTelephony);	
-	  
-	// Make a call
-	testCallParams1.iExpStat = KErrNone; 
-	testDialNewCallAct1->TestDialNewCall(testCallParams1);
-	CActiveScheduler::Start();
-	
-	// Put the call on hold.
-	// using the ETEL 3rd party API
-	testCallParams1.iExpStat = KErrNone;		
-	testHoldAct1->TestHold(testCallParams1);
-	CActiveScheduler::Start();
-
-	//while call is on hold test OOM before first resume call
-	#if defined(_DEBUG)
-		INFO_PRINTF1(_L("Test OOM on for Resume"));
-		testCallParams1.iExpStat = KErrNoMemory;
-		__UHEAP_FAILNEXT(1);	
-		testResumeAct1->TestResume(testCallParams1);
-		CActiveScheduler::Start(); 
-		__UHEAP_RESET;
-	#endif
-
-	INFO_PRINTF1(_L("END TEST 1"));	 
-	
-	//
-	//
-	// TEST 2: Normal scenario
-	// Call is at hold status. Resume the call.
-	//
-	//
-	
-	INFO_PRINTF1(_L("RESUME TEST 2 Call held. Resume call."));
-	
-	// Check that the call is now at held status.
-	CTelephony::TCallStatusV1 CallStatusV1;
-	CTelephony::TCallStatusV1Pckg CallStatusPckg(CallStatusV1);
-	TInt err = iTelephony->GetCallStatus(testCallParams1.iCallId, CallStatusPckg );
-	TEST1(err == KErrNone,1);
-	TEST1(CallStatusV1.iStatus == CTelephony::EStatusHold, 1);
-	
-	// Resume the call using the ETEL 3rdparty API
-	testCallParams1.iExpStat = KErrNone;		
-	testResumeAct1->TestResume(testCallParams1, ETrue);
-	CActiveScheduler::Start();
- 
- 	// Check that the call is now at active status.
-	err = iTelephony->GetCallStatus(testCallParams1.iCallId, CallStatusPckg );
-	TEST1(err == KErrNone,1);
-	TEST1(CallStatusV1.iStatus == CTelephony::EStatusConnected,1);
-		
-	INFO_PRINTF1(_L("END TEST 2"));	 
-	
-	//
-	//
-	// TEST 3: Error scenario
-	// Call is already active. Try to perform a resume on the call.
-	//
-	//
-	
-	INFO_PRINTF1(_L("RESUME TEST 3 Attempt to resume an active call"));
-	 
-	// Call is currently active from previous test
-	// Call resume 3rd party API
-	testCallParams1.iExpStat=KErrAccessDenied;
-	testResumeAct1->TestResume(testCallParams1);
-	CActiveScheduler::Start();		
-	 
-	// Make sure call is still in connected status
-	err = iTelephony->GetCallStatus(testCallParams1.iCallId, CallStatusPckg );
-	TEST1(err == KErrNone,1);
-	TEST1(CallStatusV1.iStatus == CTelephony::EStatusConnected,1);
-	
-	INFO_PRINTF1(_L("END TEST 3"));	 
-	
-	//
-	//
-	// TEST 4: Error scenario
-	// Hang up a call. Try to resume the call.
-	//
-	//
-	
-	INFO_PRINTF1(_L("RESUME TEST 4 Attempt to resume an idle call"));
-	 
-	// Hangup the active call
-	testCallParams1.iExpStat=KErrNone;
-	CTestHangupAct* testHangupAct1 = CTestHangupAct::NewLC(this, iTelephony);	
-	testHangupAct1->TestHangup(testCallParams1);
-	CActiveScheduler::Start();	
-	
-	// Make sure the line is idle
-	err = iTelephony->GetLineStatus(testCallParams1.iLine, CallStatusPckg);
-	TEST1(err == KErrNone,1);
-	TEST1(CallStatusV1.iStatus == CTelephony::EStatusIdle,1);	
- 
- 	// Attempt to resume call. Should fail. 
-	testCallParams1.iExpStat=KErrAccessDenied;	 
-	testResumeAct1->TestResume(testCallParams1);
-	CActiveScheduler::Start();
-	
-	// Make sure call is still in idle status
-	err = iTelephony->GetLineStatus(testCallParams1.iLine, CallStatusPckg);
-	TEST1(err == KErrNone,1);
-	TEST1(CallStatusV1.iStatus == CTelephony::EStatusIdle,1);	
-	
-	INFO_PRINTF1(_L("END TEST 4"));	 
-	
-	//
-	//
-	// TEST 5: Cancel
-	// Resume call. Attempt to cancel the request.
-	//
-	//
-	
-	INFO_PRINTF1(_L("RESUME TEST 5 Attempt to cancel a resume request"));
-	
-	// Create a new call
-	testCallParams1.iExpStat=KErrNone; 	 
-	testDialNewCallAct1->TestDialNewCall(testCallParams1);
-	CActiveScheduler::Start();
-	
-	// Hold the call
-	testCallParams1.iExpStat=KErrNone; 	
-	testHoldAct1->TestHold(testCallParams1);
-	CActiveScheduler::Start();
-
-	
-	// Request the call to be resumed then
- 	// attempt to cancel the resume request
- 	TInt cancelerr = iTelephony->CancelAsync(CTelephony::EResumeCancel);
-	TEST1(cancelerr == KErrNotFound, ETrue);
- 	testCallParams1.iExpStat=KErrNone;	
-	CTestCanceller* canceller = testResumeAct1->RetrieveCanceller();
-	testResumeAct1->TestResume(testCallParams1);
-	canceller->Call();
-	CActiveScheduler::Start();	
-	
-	// Status will be KErrCancel if the hold request has been cancelled.
-	// It may be KErrNone if the resume request has managed to complete before 
-	// execution of the cancel.
-	TEST1(((testResumeAct1->iStatus.Int() == KErrCancel) || 
-	        (testResumeAct1->iStatus.Int() == KErrNone)), 1);
-	        
-
-	INFO_PRINTF1(_L("END TEST 5"));	 
-	
-	// Hang up the call for completion.
-	testHangupAct1->TestHangup(testCallParams1);
-	CActiveScheduler::Start();	
-	
-	CleanupStack::PopAndDestroy(testHangupAct1);
-	CleanupStack::PopAndDestroy(testResumeAct1);
-	CleanupStack::PopAndDestroy(testHoldAct1);
-	CleanupStack::PopAndDestroy(testDialNewCallAct1);
-	return TestStepResult();
-	
-}
-
- 
-CTestResumeAct* CTestResumeAct::NewLC(CEtelIsvTestStep* aTestStep, CTelephony* aTelephony)
-//Factory constructor
-	{
-	CTestResumeAct* obj = new(ELeave) CTestResumeAct(aTestStep, aTelephony);
-	CleanupStack::PushL(obj);
-	obj->ConstructL();
-	return obj;
-	}
-	
-CTestResumeAct::CTestResumeAct(CEtelIsvTestStep* aTestStep, CTelephony* aTelephony)
-	: CEtelIsvActBase(aTestStep, aTelephony) 
-	{  
-	}
-
-void CTestResumeAct::ConstructL()
-	{    
-	iCanceller = new(ELeave) CTestCanceller(this);
-	CActiveScheduler::Add(this);
-	}
-
-CTestResumeAct::~CTestResumeAct()
-	{  
-	Cancel();	// if any Req outstanding, calls DoCancel() to cleanup.
-	delete iCanceller;
-	}
-
-void CTestResumeAct::DoCancel()
-	{
-	iTelephony->CancelAsync(CTelephony::EResumeCancel);
-	}
- 
-void  CTestResumeAct::TestResume(TTestCallParams& aTestCallParams, TBool aCheckConcurrency)
-	{
-
-	// Update the expected return value.
-	iExpStat=aTestCallParams.iExpStat;
-	 
-	// Call the 3rd party API
-	iTelephony->Resume(iStatus, aTestCallParams.iCallId);
-	if(aCheckConcurrency)
-		{
-		TRequestStatus tmpStatus;
-		iTelephony->Resume(tmpStatus, aTestCallParams.iCallId);
-		User::WaitForRequest(tmpStatus);
-		iTestStep->TEST1(tmpStatus.Int() == KErrInUse, ETrue);
-		}
-	SetActive(); 	
-	 	
-	}
-	
-void CTestResumeAct::RunL()
-	{ 
-	// ActiveScheduler will have set status to KRequestComplete, just before
-	// calling this RunL().
-	iTestStep-> INFO_PRINTF1(_L(" CTestResumeAct::RunL "));
-	 
-	iTestStep->INFO_PRINTF2(_L(" Call ID is = %d"), iCallId );
-	iTestStep->INFO_PRINTF2(_L("Request Status expected is: %d"), iExpStat.Int()   );
-	iTestStep->INFO_PRINTF2(_L("Request Status returned is: %d"), iStatus.Int()   );
-	
- 	iTestStep->TEST1(iStatus.Int() == iExpStat.Int(), 1);	
-	CActiveScheduler::Stop();
-	}
-
-
-
-CTestSwap::CTestSwap()
-/** Each test step initialises it's own name
-*/
-{
-	// store the name of this test case
-	// this is the name that is used by the script file
-	SetTestStepName(_L("TestSwap"));
-}
-
-
-/**
-@SYMTestCaseID Etel3rdParty 14.1, TestSwap
-@SYMTestCaseDesc Test Swap 3rd party API
-@SYMFssID SGL.GT0166.054 v1.3 A2_Telephony_Functional_Specification.doc, REQ 2116.3.20
-*/
-
-enum TVerdict CTestSwap::doTestStepL()
-{
-	INFO_PRINTF1(_L("CTestSwap::doTestStepL Start"));
-	
-	_LIT(KCallNumber1,"1789");
-	_LIT(KCallNumber2,"1234");
-	
-	 // Set the call parameters for call 1
-	CTelephony::TCallParamsV1 callParams1;
-	callParams1.iIdRestrict = CTelephony::ESendMyId;
-	CTelephony::TCallParamsV1Pckg callParamsPckg1(callParams1);	
- 	
-	TTestCallParams testCallParams1;
-	testCallParams1.iLine = CTelephony::EVoiceLine;
-	testCallParams1.iCallParamsV1Pckg = &callParamsPckg1;
-	testCallParams1.iTelAddress.iTelNumber = KCallNumber1;
-	testCallParams1.iExpStat = KErrNone;
-	
-	// Set the call parameters for call 2
-	CTelephony::TCallParamsV1 callParams2;
-	callParams2.iIdRestrict = CTelephony::ESendMyId;
-	CTelephony::TCallParamsV1Pckg callParamsPckg2(callParams2);	
-	
-	TTestCallParams testCallParams2;
-	testCallParams2.iLine = CTelephony::EVoiceLine;
-	testCallParams2.iCallParamsV1Pckg = &callParamsPckg2;
-	testCallParams2.iTelAddress.iTelNumber = KCallNumber2;
-	testCallParams2.iExpStat = KErrNone;
- 	
-	// Create 2 active DialNewCallAct objects
-	CTestDialNewCallAct* testDialNewCallAct1 = CTestDialNewCallAct::NewLC(this, iTelephony);	
-	CTestDialNewCallAct* testDialNewCallAct2 = CTestDialNewCallAct::NewLC(this, iTelephony);
-	
-	// Create hold, resume and swap active objects.
-	CTestHoldAct* testHoldAct1 = CTestHoldAct::NewLC(this, iTelephony);	
-	CTestResumeAct* testResumeAct1 = CTestResumeAct::NewLC(this, iTelephony);
-	CTestSwapAct* testSwapAct1 = CTestSwapAct::NewLC(this, iTelephony);	
- 		
-	//
-	//
-	// Test Scenario 1: Normal scenario
-	// Make call 1. Put call 1 on hold. Make a 2nd call. 
-	// Swap the calls.
-	//
-	//
-	
-	INFO_PRINTF1(_L("SWAP TEST 1 Swap 2 calls"));
-	
-	// Create the first call
-	testDialNewCallAct1->TestDialNewCall(testCallParams1);
-	CActiveScheduler::Start();
-	
-	// Hold the first call
-	testHoldAct1->TestHold(testCallParams1);
-	CActiveScheduler::Start();
-	
-	// Create a 2nd call
-	testDialNewCallAct2->TestDialNewCall(testCallParams2);
-	CActiveScheduler::Start();	
-		 
-	// Check the calls are now in the expected states
-	CTelephony::TCallStatusV1 CallStatusV1;
-	CTelephony::TCallStatusV1Pckg CallStatusPckg(CallStatusV1);
-	
-	// Make sure call 1 is in the held state  
-	TInt err = iTelephony->GetCallStatus(testCallParams1.iCallId, CallStatusPckg );
-	TEST1(err == KErrNone,1);
-	TEST1(CallStatusV1.iStatus == CTelephony::EStatusHold,1);
-	
-	// Make sure call 2 is in the connected state  
-	err = iTelephony->GetCallStatus(testCallParams2.iCallId, CallStatusPckg );
-	TEST1(err == KErrNone,1);
-	TEST1(CallStatusV1.iStatus == CTelephony::EStatusConnected,1);
-	
-	//while calls are active test OOM before first swap call
-	#if defined(_DEBUG)
-		INFO_PRINTF1(_L("Test OOM on for Swap"));
-		testCallParams1.iExpStat = KErrNoMemory;
-		__UHEAP_FAILNEXT(1);	
-		testSwapAct1->TestSwap(testCallParams1, testCallParams2 );
-		CActiveScheduler::Start(); 
-		__UHEAP_RESET;
-	#endif
-	
- 	// Swap the calls 
-    testCallParams1.iExpStat=KErrNone; 	 
-	testSwapAct1->TestSwap(testCallParams1, testCallParams2, ETrue);
-	CActiveScheduler::Start(); 
-	
-	// Check that the call states are now reversed.
-	
-	// Make sure call 1 is in the connected state 
-	err = iTelephony->GetCallStatus(testCallParams1.iCallId, CallStatusPckg );
-	TEST1(err == KErrNone,1);
-	TEST1(CallStatusV1.iStatus == CTelephony::EStatusConnected,1);
-	
-	// Make sure call 2 is in the held state  
-	err = iTelephony->GetCallStatus(testCallParams2.iCallId, CallStatusPckg );
-	TEST1(err == KErrNone,1);
-	TEST1(CallStatusV1.iStatus == CTelephony::EStatusHold,1); 
-	
-	INFO_PRINTF1(_L("END TEST 1"));	 
-	
-	//
-	//
-	// TEST 2: Normal scenario
-	// Swap the calls back.
-	//
-	//
-	
-	INFO_PRINTF1(_L("SWAP TEST 2: Swap calls back"));
-	
-	testSwapAct1->TestSwap(testCallParams1, testCallParams2);
-	CActiveScheduler::Start(); 
-	
-	// Check that the call states are now reversed.
-	
-	// Make sure call 1 is in the held state 
-	err = iTelephony->GetCallStatus(testCallParams1.iCallId, CallStatusPckg );
-	TEST1(err == KErrNone,1);
-	TEST1(CallStatusV1.iStatus == CTelephony::EStatusHold,1);
-	
-	// Make sure call 2 is in the connected state  
-	err = iTelephony->GetCallStatus(testCallParams2.iCallId, CallStatusPckg );
-	TEST1(err == KErrNone,1);
-	TEST1(CallStatusV1.iStatus == CTelephony::EStatusConnected,1); 
-	
-	INFO_PRINTF1(_L("END TEST 2"));	 
-	
-	//
-	// 
-	// TEST 3 Error scenario
-	// Call 1 is on hold. Call 2 is idle. Try to swap the calls.
-	//
-	//
-	
-	INFO_PRINTF1(_L("SWAP TEST 3  Call 1 on hold, call 2 idle. Attempt swap"));
-	
-	// Preparation step for the test.
-	// Hang up Call 2
-	 
-	CTestHangupAct* testHangupAct1 = CTestHangupAct::NewLC(this, iTelephony);	
-	testHangupAct1->TestHangup(testCallParams2);
-	CActiveScheduler::Start();	
-	
-	 
-	// Make sure call 1 is in the held state 
-	err = iTelephony->GetCallStatus(testCallParams1.iCallId, CallStatusPckg );
-	TEST1(err == KErrNone,1);
-	TEST1(CallStatusV1.iStatus == CTelephony::EStatusHold,1);
-	
-	 
-	// Attempt to swap the calls
-	testCallParams1.iExpStat=KErrAccessDenied; 	
-	testSwapAct1->TestSwap(testCallParams1, testCallParams2);
-	CActiveScheduler::Start(); 
-	
-	// Check call statuses are unchanged as expected
-	
-	// Make sure call 1 is in the held state 
-	err = iTelephony->GetCallStatus(testCallParams1.iCallId, CallStatusPckg );
-	TEST1(err == KErrNone,1);
-	TEST1(CallStatusV1.iStatus == CTelephony::EStatusHold,1);
-	
-	
-	INFO_PRINTF1(_L("END TEST 3"));	 
-	
-	
-	//
-	//
-	// TEST 4 : Error scenario
-	// Call 1 active. Call 2 idle. Swap the calls.
-	//
-	//
-	
-	INFO_PRINTF1(_L("SWAP TEST 4: Call 1 active, call 2 idle, swap calls"));
-	
-	// Preparation for test 
-	// Make call 1 active.
-	testCallParams1.iExpStat=KErrNone; 	
-	testResumeAct1->TestResume(testCallParams1);
-	CActiveScheduler::Start();	
-	
-	// Make sure call 1 is in the active state
-	iTelephony->GetCallStatus(testCallParams1.iCallId, CallStatusPckg );
-	TEST1(CallStatusV1.iStatus == CTelephony::EStatusConnected, ETrue);	
-	 
-	 
-	// Call 1 is active. Call 2 is idle. Try to swap the calls.
-	testCallParams1.iExpStat=KErrAccessDenied; 	
-	testSwapAct1->TestSwap(testCallParams1, testCallParams2);
-	CActiveScheduler::Start();
-	
-	
-	// Check that call states are unchanged as expected
-	
-	// Make sure call 1 is in the connected state 
-	err = iTelephony->GetCallStatus(testCallParams1.iCallId, CallStatusPckg );
-	TEST1(err == KErrNone,1);
-	TEST1(CallStatusV1.iStatus == CTelephony::EStatusConnected,1);
-	
-	INFO_PRINTF1(_L("END TEST 4"));	 
-	
-	
-	//
-	//
-	// TEST 5: Cancel
-	// Attempt to cancel a swap request
-	//
-	//
-	
-	INFO_PRINTF1(_L("SWAP TEST 5 : Cancel a swap request"));
-	
-	// Put call 1 on hold. 
-	testCallParams1.iExpStat=KErrNone; 	
-	testHoldAct1->TestHold(testCallParams1);
-	CActiveScheduler::Start();
-	
-	// Make call 2
-	testCallParams2.iExpStat=KErrNone; 	
-	testDialNewCallAct2->TestDialNewCall(testCallParams2);
-	CActiveScheduler::Start();	
-	
-	// Issue a swap request
-	testCallParams1.iExpStat=KErrNone; 	
-	testSwapAct1->TestSwap(testCallParams1, testCallParams2);
-	CActiveScheduler::Start();
-	
-	
-	// Request the call to be swapped then
- 	// attempt to cancel the swap request
- 	TInt cancelerr = iTelephony->CancelAsync(CTelephony::ESwapCancel);
-	TEST1(cancelerr == KErrNotFound, ETrue);
- 	testCallParams1.iExpStat=KErrNone;	
-	CTestCanceller* canceller = testSwapAct1->RetrieveCanceller();
-	testSwapAct1->TestSwap(testCallParams1, testCallParams2 );
-	canceller->Call();
-	CActiveScheduler::Start();	
-	// Status will be KErrCancel if the swap request has been cancelled.
-	// It may be KErrNone if the swap request has managed to complete before 
-	// execution of the cancel.
-	TEST1(((testSwapAct1->iStatus.Int() == KErrCancel) || 
-	        (testSwapAct1->iStatus.Int() == KErrNone)), 1);
-	        
-	
-	INFO_PRINTF1(_L("END TEST 5"));	 
-		
-		
-	// Hang up the calls for completion
-	testHangupAct1->TestHangup(testCallParams1);
-	CActiveScheduler::Start();	
-	 
-	testHangupAct1->TestHangup(testCallParams2);
-	CActiveScheduler::Start();			 
-	 
-	CleanupStack::PopAndDestroy(testHangupAct1);
-	CleanupStack::PopAndDestroy(testSwapAct1);
-	CleanupStack::PopAndDestroy(testResumeAct1);
-	CleanupStack::PopAndDestroy(testHoldAct1);
-	CleanupStack::PopAndDestroy(testDialNewCallAct2);
-	CleanupStack::PopAndDestroy(testDialNewCallAct1);
-	
-	return TestStepResult();
-	
-}
-
- 
-CTestSwapAct* CTestSwapAct::NewLC(CEtelIsvTestStep* aTestStep, CTelephony* aTelephony)
-//Factory constructor
-	{
-	CTestSwapAct* obj = new(ELeave) CTestSwapAct(aTestStep, aTelephony);
-	CleanupStack::PushL(obj);
-	obj->ConstructL();
-	return obj;
-	}
-	
-CTestSwapAct::CTestSwapAct(CEtelIsvTestStep* aTestStep, CTelephony* aTelephony)
-	: CEtelIsvActBase(aTestStep, aTelephony)	 
-	{  
-	}
-
-void CTestSwapAct::ConstructL()
-	{    
-	iCanceller = new(ELeave) CTestCanceller(this);
-	CActiveScheduler::Add(this);
-	}
-
-CTestSwapAct::~CTestSwapAct()
-	{  
-	Cancel();	// if any Req outstanding, calls DoCancel() to cleanup.
-	delete iCanceller;
-	}
-
-void CTestSwapAct::DoCancel()
-	{
-	iTelephony->CancelAsync(CTelephony::ESwapCancel);
-	}
-
-void CTestSwapAct::TestSwap(TTestCallParams& aTestCallParams1, TTestCallParams& aTestCallParams2, TBool aCheckConcurrency)	  
-               
-	{
-	// Update the expected return value.
-	iExpStat=aTestCallParams1.iExpStat;
-	 
-	iTelephony->Swap(iStatus, aTestCallParams1.iCallId, aTestCallParams2.iCallId );
-	if(aCheckConcurrency)
-		{
-		TRequestStatus tmpStatus;
-		iTelephony->Swap(tmpStatus, aTestCallParams1.iCallId, aTestCallParams2.iCallId );
-		User::WaitForRequest(tmpStatus);
-		iTestStep->TEST1(tmpStatus.Int() == KErrInUse, ETrue);
-		}
-	SetActive(); 	
-	 
-	}
-	
-void CTestSwapAct::RunL()
-	{ 
-	// ActiveScheduler will have set status to KRequestComplete, just before
-	// calling this RunL().
-	
-	iTestStep-> INFO_PRINTF1(_L(" CTestSwapAct::RunL "));
-	iTestStep->INFO_PRINTF2(_L("Request Status expected is: %d"), iExpStat.Int()   );
-	iTestStep->INFO_PRINTF2(_L("Request Status returned is: %d"), iStatus.Int()   );
-	
- 	iTestStep->TEST1(iStatus.Int() == iExpStat.Int(), 1);	
-	CActiveScheduler::Stop();
-	}
-
- 
- 
-CTestHoldResume2Calls::CTestHoldResume2Calls()
-/** Each test step initialises it's own name
-*/
-{
-	// store the name of this test case
-	// this is the name that is used by the script file
-	SetTestStepName(_L("TestHoldResume2Calls"));
-}
-
-/**
-@SYMTestCaseID Etel3rdParty 15.1, TestHoldResume2Calls
-@SYMTestCaseDesc Test Hold, Resume 3rd party APIs
-@SYMFssID SGL.GT0166.054 v1.3 A2_Telephony_Functional_Specification.doc, REQ 2116.3.7, 2116.3.8
-*/
-
-enum TVerdict CTestHoldResume2Calls::doTestStepL()
-{
-	INFO_PRINTF1(_L("CTestHoldResume2Calls::doTestStepL Start"));
-	
-	_LIT(KGoodNumber1,"1789");
-	_LIT(KGoodNumber2,"1234");
-	
-	SetTestNumber(15); 
-	
-	//Set the call parameters for call 1
-	CTelephony::TCallParamsV1 callParams1;
-	callParams1.iIdRestrict = CTelephony::ESendMyId;
-	CTelephony::TCallParamsV1Pckg callParamsPckg1(callParams1);	
-	
-	TTestCallParams testCallParams1;
-	testCallParams1.iLine = CTelephony::EVoiceLine;
-	testCallParams1.iCallParamsV1Pckg = &callParamsPckg1;
-	testCallParams1.iTelAddress.iTelNumber = KGoodNumber1;
-	testCallParams1.iExpStat = KErrNone;
-	
-	//Set the call parameters for call 2
-	CTelephony::TCallParamsV1 callParams2;
-	callParams2.iIdRestrict = CTelephony::ESendMyId;
-	CTelephony::TCallParamsV1Pckg callParamsPckg2(callParams2);	
-	
-	TTestCallParams testCallParams2;
-	testCallParams2.iLine = CTelephony::EVoiceLine;
-	testCallParams2.iCallParamsV1Pckg = &callParamsPckg2;
-	testCallParams2.iTelAddress.iTelNumber = KGoodNumber2;
-	testCallParams2.iExpStat = KErrNone;
-	
-	 
-	
-	// Create 2 active DialNewCallAct objects
-	CTestDialNewCallAct* testDialNewCallAct1 = CTestDialNewCallAct::NewLC(this, iTelephony);	
-	CTestDialNewCallAct* testDialNewCallAct2 = CTestDialNewCallAct::NewLC(this, iTelephony);
-	
-	// Creat hold, resume and swap active objects.
-	CTestHoldAct* testHoldAct1 = CTestHoldAct::NewLC(this, iTelephony);
-	CTestResumeAct* testResumeAct1 = CTestResumeAct::NewLC(this, iTelephony);
-	CTestSwapAct* testSwapAct1 = CTestSwapAct::NewLC(this, iTelephony);
-	
-	 
-	//
-	// TEST SUMMARY //
-	// 
-	// This set of tests covers any hold and resume scenarios involving 
-	// 2 calls. These are the tests not covered by TestHold and TestResume 
-	// which cover the single call scenarios.
-	//  
-	//		// Attempt to make a 2nd call
-	// 1. 	Call 1 is active. Make a 2nd call. 
-	// 		Expected Result: Call 2 will not be allowed.
-	// 2. 	Call 1 is on hold. Make a 2nd call. 
-	// 		Expected Result: Call 1 remains on hold. Call 2 active.
-	//
-	//		// Make 2 calls. Attempt to resume the active call.
-	// 3. 	Call 1 is on hold. Call 2 is active. Resume call 2.
-	//		Expected Result: Call 1 remains on hold. Call 2 remains active.
-	// 4.	Call 1 is active. Call 2 is on hold. Resume call 1.
-	//		Expected Result: Call 1 remains active. Call 2 remains on hold.
-	//
-	//		// Make 2 calls. Attempt to hold the held call.
-	// 5.	Call 1 is active. Call 2 is on hold. Hold call 2.
-	//		Expected Result: Call 1 remains active. Call 2 remains on hold.
-	// 6. 	Call 1 is on hold. Call 2 is active. Hold Call 1.
-	//		Expected Result: Call 1 remains on hold. Call 2 remains active.
-	//
-	// 		// Make 2 calls. Attempt to resume the held call
-	// 7. 	Call 1 is on hold. Call 2 is active. Resume call 1.
-	//		Expected Result: Call 1 remains on hold. Call 2 remains active.
-	// 8.	Call 1 is active. Call 2 is on hold. Resume call 2.
-	//		Expected Result: Call 1 remains active. Call 2 remains on hold.
-	//
-	//		// Make 2 calls. Attempt to hold the active call.
-	// 9.	Call 1 is active. Call 2 is on hold. Hold call 1.
-	//		Expected Result: Call 1 remains active. Call 2 remains on hold.
-	// 10. 	Call 1 is on hold. Call 2 is active. Hold Call 2.
-	//		Expected Result: Call 1 remains on hold. Call 2 remains active.
-	
-	
-	
-	// Test Scenario 1.
-	// 1. 	Call 1 is active. Make a 2nd call. 
-	// 		Expected Result: Call 2 will not be allowed. 
-	
-	INFO_PRINTF1(_L("Hold-Resume-2Calls TEST 1 "));
-	 
-	// Create the first call
-	testCallParams1.iExpStat = KErrNone;
-	testDialNewCallAct1->TestDialNewCall(testCallParams1);
-	CActiveScheduler::Start();
-	
-	// Create a 2nd call
-	testCallParams2.iExpStat = KErrGeneral;
-	testDialNewCallAct2->TestDialNewCall(testCallParams2);
-	CActiveScheduler::Start();	
-		 
-	// Check that the calls are now in the expected states
-	CTelephony::TCallStatusV1 CallStatusV1;
-	CTelephony::TCallStatusV1Pckg CallStatusPckg(CallStatusV1);
-	
-	TInt err = iTelephony->GetCallStatus(testCallParams1.iCallId, CallStatusPckg );
-	TEST1(err == KErrNone,1);
-	TEST1(CallStatusV1.iStatus == CTelephony::EStatusConnected,1);
-  
-   
-	INFO_PRINTF1(_L("END TEST 1"));	 
-	
-	// Test Scenario 2
-	// 2. 	Call 1 is on hold. Make a 2nd call. 
-	// 		Expected Result: Call 1 remains on hold. Call 2 active.
-	
-	INFO_PRINTF1(_L("Hold-Resume-2Calls TEST 2 "));
-	
-	// Put call 1 on hold. 
-	testCallParams1.iExpStat=KErrNone; 	
-	testHoldAct1->TestHold(testCallParams1);
-	CActiveScheduler::Start();
-	
-	// Create a 2nd call
-	testCallParams2.iExpStat = KErrNone;
-	testDialNewCallAct2->TestDialNewCall(testCallParams2);
-	CActiveScheduler::Start();	
-	
-	// Check that the calls are now in the expected states 
-	err = iTelephony->GetCallStatus(testCallParams1.iCallId, CallStatusPckg );
-	TEST1(err == KErrNone,1);
-	TEST1(CallStatusV1.iStatus == CTelephony::EStatusHold,1);
-	
-	// Check that the calls are now in the expected states
-	err = iTelephony->GetCallStatus(testCallParams2.iCallId, CallStatusPckg );
-	TEST1(err == KErrNone,1);
-	TEST1(CallStatusV1.iStatus == CTelephony::EStatusConnected,1);
-	
-	INFO_PRINTF1(_L("END TEST 2"));	 
-	
-	//
-	//		Test scenario 3
-	// 3. 	Call 1 is on hold. Call 2 is active. Resume call 2.
-	//		Expected Result: Call 1 remains on hold. Call 2 remains active.
-	
-	INFO_PRINTF1(_L("Hold-Resume-2Calls TEST 3 ")); 
-	
-	// Resume Call 2
-	testCallParams2.iExpStat=KErrAccessDenied;	 
-	testResumeAct1->TestResume(testCallParams2);
-	CActiveScheduler::Start();
-	
-	// Check that the calls are now in the expected states 
-	err = iTelephony->GetCallStatus(testCallParams1.iCallId, CallStatusPckg );
-	TEST1(err == KErrNone,1);
-	TEST1(CallStatusV1.iStatus == CTelephony::EStatusHold,1);
-	
-	// Check that the calls are now in the expected states
-	err = iTelephony->GetCallStatus(testCallParams2.iCallId, CallStatusPckg );
-	TEST1(err == KErrNone,1);
-	TEST1(CallStatusV1.iStatus == CTelephony::EStatusConnected,1);
-	
-	INFO_PRINTF1(_L("END TEST 3"));	 
-	
-	
-	//
-	//		Test scenario 4
-	// 4.	Call 1 is active. Call 2 is on hold. Resume call 1.
-	//		Expected Result: Call 1 remains active. Call 2 remains on hold.
-	
-	INFO_PRINTF1(_L("Hold-Resume-2Calls TEST 4 ")); 
-	
-	// Issue a swap request
-	testCallParams1.iExpStat=KErrNone; 	
-	testSwapAct1->TestSwap(testCallParams1, testCallParams2);
-	CActiveScheduler::Start();
-	
-	// Check that the calls are now in the expected states 
-	err = iTelephony->GetCallStatus(testCallParams1.iCallId, CallStatusPckg );
-	TEST1(err == KErrNone,1);
-	TEST1(CallStatusV1.iStatus == CTelephony::EStatusConnected,1);
-	
-	// Check that the calls are now in the expected states
-	err = iTelephony->GetCallStatus(testCallParams2.iCallId, CallStatusPckg );
-	TEST1(err == KErrNone,1);
-	TEST1(CallStatusV1.iStatus == CTelephony::EStatusHold,1);
-	
-	// Resume Call 1
-	testCallParams1.iExpStat=KErrAccessDenied;	 
-	testResumeAct1->TestResume(testCallParams1);
-	CActiveScheduler::Start();
-	
-	// Check that the calls are now in the expected states 
-	err = iTelephony->GetCallStatus(testCallParams1.iCallId, CallStatusPckg );
-	TEST1(err == KErrNone,1);
-	TEST1(CallStatusV1.iStatus == CTelephony::EStatusConnected,1);
-	
-	// Check that the calls are now in the expected states
-	err = iTelephony->GetCallStatus(testCallParams2.iCallId, CallStatusPckg );
-	TEST1(err == KErrNone,1);
-	TEST1(CallStatusV1.iStatus == CTelephony::EStatusHold,1);
-	
-	INFO_PRINTF1(_L("END TEST 4"));	 
-	
-	//
-	//
-	// 5.	Call 1 is active. Call 2 is on hold. Hold call 2.
-	//		Expected Result: Call 1 remains active. Call 2 remains on hold.
-	
-	INFO_PRINTF1(_L("Hold-Resume-2Calls TEST 5 ")); 
-	
-	// Hold Call 2
-	testCallParams2.iExpStat=KErrAccessDenied;	 
-	testHoldAct1->TestHold(testCallParams2);
-	CActiveScheduler::Start();
-	
-	// Check that the calls are now in the expected states 
-	err = iTelephony->GetCallStatus(testCallParams1.iCallId, CallStatusPckg );
-	TEST1(err == KErrNone,1);
-	TEST1(CallStatusV1.iStatus == CTelephony::EStatusConnected,1);
-	
-	// Check that the calls are now in the expected states
-	err = iTelephony->GetCallStatus(testCallParams2.iCallId, CallStatusPckg );
-	TEST1(err == KErrNone,1);
-	TEST1(CallStatusV1.iStatus == CTelephony::EStatusHold,1);
-	
-	INFO_PRINTF1(_L("END TEST 5"));	 
-	
-	
-	//
-	//
-	// 6. 	Call 1 is on hold. Call 2 is active. Hold Call 1.
-	//		Expected Result: Call 1 remains on hold. Call 2 remains active.
-	//
-
-	
-	INFO_PRINTF1(_L("Hold-Resume-2Calls TEST 6 ")); 
-	
-	// Issue a swap request
-	testCallParams1.iExpStat=KErrNone; 	
-	testSwapAct1->TestSwap(testCallParams1, testCallParams2);
-	CActiveScheduler::Start();
-	
-	// Check that the calls are now in the expected states 
-	err = iTelephony->GetCallStatus(testCallParams1.iCallId, CallStatusPckg );
-	TEST1(err == KErrNone,1);
-	TEST1(CallStatusV1.iStatus == CTelephony::EStatusHold,1);
-	
-	// Check that the calls are now in the expected states
-	err = iTelephony->GetCallStatus(testCallParams2.iCallId, CallStatusPckg );
-	TEST1(err == KErrNone,1);
-	TEST1(CallStatusV1.iStatus == CTelephony::EStatusConnected,1);
-	
-	// Hold Call 1
-	testCallParams1.iExpStat=KErrAccessDenied;	 
-	testHoldAct1->TestHold(testCallParams1);
-	CActiveScheduler::Start();
-	
-	// Check that the calls are now in the expected states 
-	err = iTelephony->GetCallStatus(testCallParams1.iCallId, CallStatusPckg );
-	TEST1(err == KErrNone,1);
-	TEST1(CallStatusV1.iStatus == CTelephony::EStatusHold,1);
-	
-	// Check that the calls are now in the expected states
-	err = iTelephony->GetCallStatus(testCallParams2.iCallId, CallStatusPckg );
-	TEST1(err == KErrNone,1);
-	TEST1(CallStatusV1.iStatus == CTelephony::EStatusConnected,1);
-	
-	INFO_PRINTF1(_L("END TEST 6"));	 
-	
-	
-	//
-	//
-	// 7. 	Call 1 is on hold. Call 2 is active. Resume call 1.
-	//		Expected Result: Call 1 remains on hold. Call 2 remains active.
-	
-	INFO_PRINTF1(_L("Hold-Resume-2Calls TEST 7 "));
-	
-	// Resume call 1. 
-	testCallParams1.iExpStat=KErrGeneral; 	
-	testResumeAct1->TestResume(testCallParams1);
-	CActiveScheduler::Start();
-	
-	// Check that the calls are now in the expected states 
-	err = iTelephony->GetCallStatus(testCallParams1.iCallId, CallStatusPckg );
-	TEST1(err == KErrNone,1);
-	TEST1(CallStatusV1.iStatus == CTelephony::EStatusHold,1);
-
-	
-	// Check that the calls are now in the expected states
-	err = iTelephony->GetCallStatus(testCallParams2.iCallId, CallStatusPckg );
-	TEST1(err == KErrNone,1);
-	TEST1(CallStatusV1.iStatus == CTelephony::EStatusConnected,1);
-	
-	INFO_PRINTF1(_L("END TEST 7"));	 
-	
-	//
-	//
-	// 8.	Call 1 is active. Call 2 is on hold. Resume call 2.
-	//		Expected Result: Call 1 remains active. Call 2 remains on hold.
-	//
-	
-	INFO_PRINTF1(_L("Hold-Resume-2Calls TEST 8 "));
-	
-	
-	// Issue a swap request
-	testCallParams1.iExpStat=KErrNone; 	
-	testSwapAct1->TestSwap(testCallParams1, testCallParams2);
-	CActiveScheduler::Start();
-	
-	// Check that the calls are now in the expected states 
-	err = iTelephony->GetCallStatus(testCallParams1.iCallId, CallStatusPckg );
-	TEST1(err == KErrNone,1);
-	TEST1(CallStatusV1.iStatus == CTelephony::EStatusConnected,1);
-	
-	// Check that the calls are now in the expected states
-	err = iTelephony->GetCallStatus(testCallParams2.iCallId, CallStatusPckg );
-	TEST1(err == KErrNone,1);
-	TEST1(CallStatusV1.iStatus == CTelephony::EStatusHold,1);
-	
-	// Resume call 2. 
-	testCallParams2.iExpStat=KErrGeneral; 	
-	testResumeAct1->TestResume(testCallParams2);
-	CActiveScheduler::Start();
-	
-	// Check that the calls are now in the expected states 
-	err = iTelephony->GetCallStatus(testCallParams1.iCallId, CallStatusPckg );
-	TEST1(err == KErrNone,1);
-	TEST1(CallStatusV1.iStatus == CTelephony::EStatusConnected,1);
-	
-	// Check that the calls are now in the expected states
-	err = iTelephony->GetCallStatus(testCallParams2.iCallId, CallStatusPckg );
-	TEST1(err == KErrNone,1);
-	TEST1(CallStatusV1.iStatus == CTelephony::EStatusHold,1);
-	
-	INFO_PRINTF1(_L("END TEST 8"));	 
-	
-	
-	//
-	//		 
-	// 9.	Call 1 is active. Call 2 is on hold. Hold call 1.
-	//		Expected Result: Call 1 remains active. Call 2 remains on hold.
-	
-	INFO_PRINTF1(_L("Hold-Resume-2Calls TEST 9 "));
-	
-	// Hold Call 1
-	testCallParams1.iExpStat=KErrAlreadyExists;	 
-	testHoldAct1->TestHold(testCallParams1);
-	CActiveScheduler::Start();
-	
-	// Check that the calls are now in the expected states 
-	err = iTelephony->GetCallStatus(testCallParams1.iCallId, CallStatusPckg );
-	TEST1(err == KErrNone,1);
-	TEST1(CallStatusV1.iStatus == CTelephony::EStatusConnected,1);
-	
-	// Check that the calls are now in the expected states
-	err = iTelephony->GetCallStatus(testCallParams2.iCallId, CallStatusPckg );
-	TEST1(err == KErrNone,1);
-	TEST1(CallStatusV1.iStatus == CTelephony::EStatusHold,1);
-	
-	INFO_PRINTF1(_L("END TEST 9"));	 
-	
-
-	//
-	//
-	// 10. 	Call 1 is on hold. Call 2 is active. Hold Call 2.
-	//		Expected Result: Call 1 remains on hold. Call 2 remains active.
-	
-	INFO_PRINTF1(_L("Hold-Resume-2Calls TEST 10 "));
-	
-	// Issue a swap request
-	testCallParams1.iExpStat=KErrNone; 	
-	testSwapAct1->TestSwap(testCallParams1, testCallParams2);
-	CActiveScheduler::Start();
-	
-	// Check that the calls are now in the expected states 
-	err = iTelephony->GetCallStatus(testCallParams1.iCallId, CallStatusPckg );
-	TEST1(err == KErrNone,1);
-	TEST1(CallStatusV1.iStatus == CTelephony::EStatusHold,1);
-	
-	// Check that the calls are now in the expected states
-	err = iTelephony->GetCallStatus(testCallParams2.iCallId, CallStatusPckg );
-	TEST1(err == KErrNone,1);
-	TEST1(CallStatusV1.iStatus == CTelephony::EStatusConnected,1);
-	
-	
-	// Hold Call 2
-	testCallParams2.iExpStat=KErrAlreadyExists;	 
-	testHoldAct1->TestHold(testCallParams2);
-	CActiveScheduler::Start();
-	
-	// Check that the calls are now in the expected states 
-	err = iTelephony->GetCallStatus(testCallParams1.iCallId, CallStatusPckg );
-	TEST1(err == KErrNone,1);
-	TEST1(CallStatusV1.iStatus == CTelephony::EStatusHold,1);
-	
-	// Check that the calls are now in the expected states
-	err = iTelephony->GetCallStatus(testCallParams2.iCallId, CallStatusPckg );
-	TEST1(err == KErrNone,1);
-	TEST1(CallStatusV1.iStatus == CTelephony::EStatusConnected,1);
-
-	INFO_PRINTF1(_L("END TEST 10"));	 
-	
-	// Hang up the calls for completion
-	CTestHangupAct* testHangupAct1 = CTestHangupAct::NewLC(this, iTelephony);
-	testCallParams1.iExpStat=KErrNone;	 	
-	testHangupAct1->TestHangup(testCallParams1);
-	CActiveScheduler::Start();	
-	
-	testCallParams2.iExpStat=KErrNone;	 	 
-	testHangupAct1->TestHangup(testCallParams2);
-	CActiveScheduler::Start();			 
-	 
-	  
-	CleanupStack::PopAndDestroy(testHangupAct1);
-	CleanupStack::PopAndDestroy(testSwapAct1);
-	CleanupStack::PopAndDestroy(testResumeAct1);
-	CleanupStack::PopAndDestroy(testHoldAct1);
-	CleanupStack::PopAndDestroy(testDialNewCallAct2);
-	CleanupStack::PopAndDestroy(testDialNewCallAct1);  
-	
-	return TestStepResult();	
-}
-
-
-CTestGetCallDynamicCaps::CTestGetCallDynamicCaps()
-/** Each test step initialises it's own name
-*/
-	{
-	// store the name of this test case
-	// this is the name that is used by the script file
-	SetTestStepName(_L("TestGetCallDynamicCaps"));
-	}
-
-/**
-*
-@SYMTestCaseID Etel3rdParty 24.1, TestGetCallDynamicCaps
-@SYMTestCaseDesc Test GetCallDynamicCaps 3rd party API
-@SYMFssID SGL.GT0166.054 v1.3 A2_Telephony_Functional_Specification.doc, REQ 2116.3.19
-*/ 
-
-enum TVerdict CTestGetCallDynamicCaps::doTestStepL()
-	{
- 
-	INFO_PRINTF1(_L("Test retrieving of the line's dynamic call capabilities"));
-	
-	_LIT(KCallNumber1,"1789");
-	_LIT(KCallNumber2,"1234");
-	
-	SetTestNumber(15); 
-	
-	//Set the call parameters for MO call
-	CTelephony::TCallParamsV1 callParams;
-	callParams.iIdRestrict = CTelephony::ESendMyId;
-	CTelephony::TCallParamsV1Pckg callParamsPckg(callParams);	
-			
-	TTestCallParams testCallParams1;
-	testCallParams1.iLine = CTelephony::EVoiceLine;
-	testCallParams1.iCallParamsV1Pckg = &callParamsPckg;
-	testCallParams1.iTelAddress.iTelNumber = KCallNumber1;
-	testCallParams1.iExpStat = KErrNone;
-	
-	TTestCallParams testCallParams2;
-	testCallParams2.iLine = CTelephony::EVoiceLine;
-	testCallParams2.iCallParamsV1Pckg = &callParamsPckg;
-	testCallParams2.iTelAddress.iTelNumber = KCallNumber2;
-	testCallParams2.iExpStat = KErrNone;
-
-	// Create an active DialNewCallAct object
-	CTestDialNewCallAct* testDialNewCallAct1 = CTestDialNewCallAct::NewLC(this, iTelephony);
-	
-	// Create an second active DialNewCallAct object
-	CTestDialNewCallAct* testDialNewCallAct2 = CTestDialNewCallAct::NewLC(this, iTelephony);
-	
-	// Create an active TestHoldAct object
-	CTestHoldAct* testHoldAct1 = CTestHoldAct::NewLC(this, iTelephony);	
-	
-	// Create an active TestResumeAct object
-	CTestResumeAct* testResumeAct1 = CTestResumeAct::NewLC(this, iTelephony);	
-	
-	// Create status object for GetCallStatus calls
-	CTelephony::TCallStatusV1 CallStatusV1;
-	CTelephony::TCallStatusV1Pckg CallStatusPckg(CallStatusV1);
-	TPckgBuf<CTelephony::TCallStatusV1> CallStatusBuff(CallStatusV1);
-	TDes8* CallStatusData;
-	if (iBufferMode)
-		{
-		CallStatusData = &CallStatusBuff;
-		}
-	else
-		{
-		CallStatusData = &CallStatusPckg;
-		}
-	
-	CTelephony::TCallStatusV1& CallStatusResult = 
-		reinterpret_cast<CTelephony::TCallStatusV1&> ( const_cast<TUint8&> (*CallStatusData->Ptr() ) );
-	
-	//
-	//
-	// TEST 1: Normal case
-	// Make a call. Retrieve the call capabilities. 
-	//
-	//
-	
-	INFO_PRINTF1(_L(" TEST 1 Dynamic Call Caps. Get caps in connected state "));
-	
-	// Create a call
-	testCallParams1.iExpStat=KErrNone;	
-	testDialNewCallAct1->TestDialNewCall(testCallParams1);
-	CActiveScheduler::Start();
-	
-	// Check the call is now at connected status 
-
-	TInt err = iTelephony->GetCallStatus(testCallParams1.iCallId, *CallStatusData );
-	TEST1(err == KErrNone,1);
-	TEST1(CallStatusResult.iStatus == CTelephony::EStatusConnected,1);	
-	
-	// Get the call capabilities 
-	CTelephony::TCallCapsV1 callCaps;
-	CTelephony::TCallCapsV1Pckg callCapsPckg(callCaps);
-	TPckgBuf<CTelephony::TCallCapsV1> callCapsBuff(callCaps);
-	TDes8* callCapsData;
-	if (iBufferMode)
-		{
-		callCapsData = &callCapsBuff;
-		}
-	else
-		{
-		callCapsData = &callCapsPckg;
-		}
-		
-	CTelephony::TCallCapsV1& callCapsResults = 
-		reinterpret_cast<CTelephony::TCallCapsV1&> ( const_cast<TUint8&> ( *callCapsData->Ptr() ) );
-	
-	err = iTelephony->GetCallDynamicCaps(testCallParams1.iCallId, *callCapsData);
-	TEST1(err==KErrNone, ETrue);
-	INFO_PRINTF2(_L("iControlCaps is %x"), callCapsResults.iControlCaps);
-		
-	// Check that the call capabilties are that the call can be held or swapped
-	// but not resumed.
-	TEST1(callCapsResults.iControlCaps & CTelephony::KCapsHold, 1);
-	TEST1(callCapsResults.iControlCaps & CTelephony::KCapsSwap, 1);
-	TEST1(!(callCapsResults.iControlCaps & CTelephony::KCapsResume), 1);
-	
-	
-	INFO_PRINTF1(_L("END TEST 1"));
-	
-	//
-	//
-	// TEST 2: Normal case
-	// Put the call on hold. Retrieve the call capabilities. 
-	//
-	//
-	
-	INFO_PRINTF1(_L(" TEST 2 Dynamic Call Caps. Get caps in held state "));
-	
-	 
-	// Put the call on hold.
-	// by calling the ETEL 3rd party API	  
-	testCallParams1.iExpStat=KErrNone;
-	testHoldAct1->TestHold(testCallParams1);
-	CActiveScheduler::Start();
-	
-	// Check that the call is now at held status.
-	err = iTelephony->GetCallStatus(testCallParams1.iCallId, *CallStatusData );
-	TEST1(err == KErrNone,1);
-	TEST1(CallStatusResult.iStatus == CTelephony::EStatusHold,1);
-	
-	// Get the call capabilities 
-	err = iTelephony->GetCallDynamicCaps(testCallParams1.iCallId, *callCapsData);
-	TEST1(err==KErrNone, ETrue);
-	INFO_PRINTF2(_L("iControlCaps is %x"), callCapsResults.iControlCaps);
-		
-	// Check that the call capabilties are that the call can be resumed or swapped
-	// but not held.
-	TEST1(!(callCapsResults.iControlCaps & CTelephony::KCapsHold), 1);
-	TEST1(callCapsResults.iControlCaps & CTelephony::KCapsSwap, 1);
-	TEST1(callCapsResults.iControlCaps & CTelephony::KCapsResume, 1);	
-	
-	INFO_PRINTF1(_L("END TEST 2")); 
-	
-	//
-	//
-	// TEST 3: Normal case
-	// Resume the call. Retrieve the call capabilities. 
-	//
-	//
-	
-	INFO_PRINTF1(_L(" TEST 3 Dynamic Call Caps. Get caps after call resumed "));
-	
-	// Resume the call
-	// by calling the ETEL 3rd party API	  
-	testCallParams1.iExpStat=KErrNone;
-	testResumeAct1->TestResume(testCallParams1);
-	CActiveScheduler::Start();
-	
-	// Check that the call is now at connected status.
-	err = iTelephony->GetCallStatus(testCallParams1.iCallId, *CallStatusData );
-	TEST1(err == KErrNone,1);
-	TEST1(CallStatusResult.iStatus == CTelephony::EStatusConnected,1);
-	
-	// Get the call capabilities 
-	err = iTelephony->GetCallDynamicCaps(testCallParams1.iCallId, *callCapsData);
-	TEST1(err==KErrNone, ETrue);
-	INFO_PRINTF2(_L("iControlCaps is %x"), callCapsResults.iControlCaps);
-		
-	// Check that the call capabilities are that the call can be held or swapped
-	// but not resumed.
-	TEST1(callCapsResults.iControlCaps & CTelephony::KCapsHold, 1);
-	TEST1(callCapsResults.iControlCaps & CTelephony::KCapsSwap, 1);
-	TEST1(!(callCapsResults.iControlCaps & CTelephony::KCapsResume), 1);	
-	
-	INFO_PRINTF1(_L("END TEST 3"));
-	
-	
-	//
-	//
-	// TEST 4: Normal case
-	// Call 1 on hold. Call 2 active.
-	// Retrieve call capabilities. 
-	//
-	//
-	
-	INFO_PRINTF1(_L(" TEST 4 Dynamic Call Caps. Check capability in 2 call case "));
-	
-	
-	// Hold Call 1
-	testCallParams1.iExpStat=KErrNone;	 
-	testHoldAct1->TestHold(testCallParams1);
-	CActiveScheduler::Start();
-	
-	// Create a second call.
-	testCallParams2.iExpStat=KErrNone;	
-	testDialNewCallAct2->TestDialNewCall(testCallParams2);
-	CActiveScheduler::Start();
-	
-	// Check the first call is now at held status
-    err = iTelephony->GetCallStatus(testCallParams1.iCallId, *CallStatusData );
-	TEST1(err == KErrNone,1);
-	TEST1(CallStatusResult.iStatus == CTelephony::EStatusHold,1);	
-	
-	// Check the second call is now at connected status
-	err = iTelephony->GetCallStatus(testCallParams2.iCallId, *CallStatusData );
-	TEST1(err == KErrNone,1);
-	TEST1(CallStatusResult.iStatus == CTelephony::EStatusConnected,1);	
-	
-	// Get the call capabilities of the first call
-	err = iTelephony->GetCallDynamicCaps(testCallParams1.iCallId, *callCapsData);
-	TEST1(err==KErrNone, 1);
-	INFO_PRINTF2(_L("iControlCaps is %x"), callCapsResults.iControlCaps);
-	
-	// Check that the call capabilties are that the call can be swapped 
-	// but not held or resumed.
-	TEST1(!(callCapsResults.iControlCaps & CTelephony::KCapsHold), 1);
-	TEST1(callCapsResults.iControlCaps & CTelephony::KCapsSwap, 1);
-	TEST1(!(callCapsResults.iControlCaps & CTelephony::KCapsResume), 1);
- 
-	// Get the call capabilities of the second call
-	err = iTelephony->GetCallDynamicCaps(testCallParams2.iCallId, *callCapsData);
-	TEST1(err==KErrNone, 1);
-	INFO_PRINTF2(_L("iControlCaps is %x"), callCapsResults.iControlCaps);
-		
-	// Check that the call capabilties are that the call can be held or swapped
-	// but not resumed.
-	TEST1(!(callCapsResults.iControlCaps & CTelephony::KCapsHold), 1);
-	TEST1(callCapsResults.iControlCaps & CTelephony::KCapsSwap, 1);
-	TEST1(!(callCapsResults.iControlCaps & CTelephony::KCapsResume), 1);
-	
-	
-	INFO_PRINTF1(_L("END TEST 4"));
-	
-	//
-	//
-	// TEST 5: Normal case
-	// Ensure caps are set correctly after a swap operation.
-	// Call 1 active. Call 2 on hold.
-	// Retrieve call capabilities. 
-	//
-	//
-	
-	INFO_PRINTF1(_L(" TEST 5 Dynamic Call Caps. Check capability in 2 call case "));
-	
-	// Swap the calls 
-	CTestSwapAct* testSwapAct1 = CTestSwapAct::NewLC(this, iTelephony);	
-    testCallParams1.iExpStat=KErrNone; 	 
-	testSwapAct1->TestSwap(testCallParams1, testCallParams2 );
-	CActiveScheduler::Start(); 
-	
-	// Check the first call is now at connected status
-    err = iTelephony->GetCallStatus(testCallParams1.iCallId, *CallStatusData );
-	TEST1(err == KErrNone,1);
-	TEST1(CallStatusResult.iStatus == CTelephony::EStatusConnected,1);	
-	
-	// Check the second call is now at held status
-	err = iTelephony->GetCallStatus(testCallParams2.iCallId, *CallStatusData );
-	TEST1(err == KErrNone,1);
-	TEST1(CallStatusResult.iStatus == CTelephony::EStatusHold,1);	
-	
-	// Get the call capabilities of the first call
-	err = iTelephony->GetCallDynamicCaps(testCallParams1.iCallId, *callCapsData);
-	TEST1(err==KErrNone, 1);
-	INFO_PRINTF2(_L("iControlCaps is %x"), callCapsResults.iControlCaps);
-	
-	// Check that the call capabilties are that the call can be swapped 
-	// but not held or resumed.
-	TEST1(!(callCapsResults.iControlCaps & CTelephony::KCapsHold), 1);
-	TEST1(callCapsResults.iControlCaps & CTelephony::KCapsSwap, 1);
-	TEST1(!(callCapsResults.iControlCaps & CTelephony::KCapsResume), 1);
- 
-	// Get the call capabilities of the second call
-	err = iTelephony->GetCallDynamicCaps(testCallParams2.iCallId, *callCapsData);
-	TEST1(err==KErrNone, 1);
-	INFO_PRINTF2(_L("iControlCaps is %x"), callCapsResults.iControlCaps);
-	
-	// Check that the call capabilties are that the call can be held or swapped
-	// but not resumed.
-	TEST1(!(callCapsResults.iControlCaps & CTelephony::KCapsHold), 1);
-	TEST1(callCapsResults.iControlCaps & CTelephony::KCapsSwap, 1);
-	TEST1(!(callCapsResults.iControlCaps & CTelephony::KCapsResume), 1);
-	
-	
-	INFO_PRINTF1(_L("END TEST 5"));
-	
-	//
-	//
-	// TEST 6: Normal case
-	// Ensure caps are set correctly after a swap back operation.
-	// Call 1 on hold. Call 2 active.
-	// Retrieve call capabilities. 
-	//
-	//
-	
-	INFO_PRINTF1(_L(" TEST 6 Dynamic Call Caps. Check capability in 2 call case "));
-	
-	// Swap the calls 
-    testCallParams1.iExpStat=KErrNone; 	 
-	testSwapAct1->TestSwap(testCallParams1, testCallParams2 );
-	CActiveScheduler::Start(); 
-	
-	// Check the first call is now at held status
-    err = iTelephony->GetCallStatus(testCallParams1.iCallId, *CallStatusData );
-	TEST1(err == KErrNone,1);
-	TEST1(CallStatusResult.iStatus == CTelephony::EStatusHold,1);	
-	
-	// Check the second call is now at connected status
-	err = iTelephony->GetCallStatus(testCallParams2.iCallId, *CallStatusData );
-	TEST1(err == KErrNone,1);
-	TEST1(CallStatusResult.iStatus == CTelephony::EStatusConnected,1);	
-	
-	// Get the call capabilities of the first call
-	err = iTelephony->GetCallDynamicCaps(testCallParams1.iCallId, *callCapsData);
-	TEST1(err==KErrNone,1);
-	INFO_PRINTF2(_L("iControlCaps is %x"), callCapsResults.iControlCaps);
-	
-	// Check that the call capabilties are that the call can be swapped 
-	// but not held or resumed.
-	TEST1(!(callCapsResults.iControlCaps & CTelephony::KCapsHold), 1);
-	TEST1(callCapsResults.iControlCaps & CTelephony::KCapsSwap, 1);
-	TEST1(!(callCapsResults.iControlCaps & CTelephony::KCapsResume), 1);
- 
-	// Get the call capabilities of the second call
-	err = iTelephony->GetCallDynamicCaps(testCallParams2.iCallId, *callCapsData);
-	TEST1(err==KErrNone,1);
-	INFO_PRINTF2(_L("iControlCaps is %x"), callCapsResults.iControlCaps);
-	
-	// Check that the call capabilties are that the call can be swapped
-	// but not held or resumed.
-	TEST1(!(callCapsResults.iControlCaps & CTelephony::KCapsHold), 1);
-	TEST1(callCapsResults.iControlCaps & CTelephony::KCapsSwap, 1);
-	TEST1(!(callCapsResults.iControlCaps & CTelephony::KCapsResume), 1);
-	
-	
-	INFO_PRINTF1(_L("END TEST 6"));
-	
-	
-	
-	//
-	//
-	// TEST 7: Error case
-	// Hang up the call. Retrieve the call capabilities. 
-	//
-	//
-	
-	INFO_PRINTF1(_L(" TEST 7 Dynamic Call Caps. Get caps in hungup state "));
-	
-	
-	// Hang up call 1  
-	CTestHangupAct* testHangupAct1 = CTestHangupAct::NewLC(this, iTelephony);	
-	testHangupAct1->TestHangup(testCallParams1);
-	CActiveScheduler::Start();	
-	
-	// Get the call capabilities of Call 1
-	err = iTelephony->GetCallDynamicCaps(testCallParams1.iCallId, *callCapsData);
-	TEST1(err==KErrAccessDenied, 1);	 
-	
-	// Get the call capabilities of Call 2
-	err = iTelephony->GetCallDynamicCaps(testCallParams2.iCallId, *callCapsData);
-	TEST1(err==KErrNone, 1);
-	INFO_PRINTF2(_L("iControlCaps is %x"), callCapsResults.iControlCaps);
-	
-	// Check that the call capabilties are that the call   
-	// can be held or swapped.
-	TEST1(callCapsResults.iControlCaps & CTelephony::KCapsHold, 1);
-	TEST1(callCapsResults.iControlCaps & CTelephony::KCapsSwap, 1);
-	TEST1(!(callCapsResults.iControlCaps & CTelephony::KCapsResume), 1);	
-	
-	INFO_PRINTF1(_L("END TEST 7")); 
-	
-	// Hang up Call 2 for completion.
-	testHangupAct1->TestHangup(testCallParams2);
-	CActiveScheduler::Start();	
-		 
-	CleanupStack::PopAndDestroy(testHangupAct1);
-	CleanupStack::PopAndDestroy(testSwapAct1);
-	CleanupStack::PopAndDestroy(testResumeAct1);
-	CleanupStack::PopAndDestroy(testHoldAct1);
-	CleanupStack::PopAndDestroy(testDialNewCallAct2);
-	CleanupStack::PopAndDestroy(testDialNewCallAct1);
-	
-	
-	return TestStepResult();
-	}
-
-
-CTestCallFuncFlightModeOnWithPublishSubscribe::CTestCallFuncFlightModeOnWithPublishSubscribe(TInt& aCallCount)
-/** Each test step initialises it's own name
-*/
-: iCallCount(aCallCount)
-{
-	// store the name of this test case
-	// this is the name that is used by the script file
-	SetTestStepName(_L("TestCallFuncFlightModeOnWithPublishSubscribe"));
-}
-
-/**
-@SYMTestCaseID Etel3rdParty 16.1, TestCallFuncFlightModeOn
-@SYMTestCaseDesc Test DialNewCall, HangupCall, AnswerIncomingCall,
-*  Hold, Resume, Swap 3rd party APIs
-@SYMFssID SGL.GT0166.054 v1.3 A2_Telephony_Functional_Specification.doc, 
-* REQ 2116.3.1/3/5/7/8/19/20
-*/
-
-enum TVerdict CTestCallFuncFlightModeOnWithPublishSubscribe::doTestStepL()
-{
-	INFO_PRINTF1(_L("START TEST 16.1"));	
-	 
-	SetTestNumber(15); 
-	
-	// Set up phonePowerProperty variable so that flight mode can be manipulated.
-	RProperty phonePowerProperty;
-	User::LeaveIfError(phonePowerProperty.Attach(KUidSystemCategory, KUidPhonePwr.iUid));
-	CleanupClosePushL(phonePowerProperty);
-
-	//
-	//
-	// DialNewCall - Flight Mode on
-	//
-	//
-	
-	INFO_PRINTF1(_L(" TEST: DialNewCall disallowed when flight mode on "));
-	 
-	//Set the call parameters for call 1
-	_LIT(KGoodNumber,"1789");
-	CTelephony::TCallParamsV1 callParams1;
-	callParams1.iIdRestrict = CTelephony::ESendMyId;
-	CTelephony::TCallParamsV1Pckg callParamsPckg1(callParams1);	
-	
-	TTestCallParams testCallParams1;
-	testCallParams1.iLine = CTelephony::EVoiceLine;
-	testCallParams1.iCallParamsV1Pckg = &callParamsPckg1;
-	testCallParams1.iTelAddress.iTelNumber = KGoodNumber;
-	testCallParams1.iExpStat = KErrNone;
-	testCallParams1.iLine = CTelephony::EVoiceLine; 
- 
-	
-	// Create active DialNewCallAct objects
-	CTestDialNewCallAct* testDialNewCallAct1 = CTestDialNewCallAct::NewLC(this, iTelephony);
-	 
-	// Switch flight mode on (ie radio mode off)
-	TRequestStatus requeststatus;
-	phonePowerProperty.Subscribe(requeststatus);
-	User::LeaveIfError(phonePowerProperty.Set(KUidSystemCategory,KUidPhonePwr.iUid,ESAPhoneOff));
-	User::WaitForRequest(requeststatus);
-	TEST(requeststatus.Int() == KErrNone);	
-	 
-	// Set expected status to KErrAccessDenied as this should be returned in
-	// the case where flight mode is on.
-	testCallParams1.iExpStat = KErrAccessDenied;	
-	
-	// Attempt call.	 
-	testCallParams1.iCallId = CTelephony::EISVMaxNumOfCalls;
-	testDialNewCallAct1->TestDialNewCall(testCallParams1);
-	CActiveScheduler::Start();
-	
-	
-	//
-	//
-	// HangUpCall - Flight Mode on
-	//
-	//
-	
-	INFO_PRINTF1(_L(" TEST: Hang up disallowed when flight mode on "));
-	
-	// Switch flight mode off so that a call can be made.
-	phonePowerProperty.Subscribe(requeststatus);
-	User::LeaveIfError(phonePowerProperty.Set(KUidSystemCategory,KUidPhonePwr.iUid,ESAPhoneOn));
-	User::WaitForRequest(requeststatus);
-	TEST(requeststatus.Int() == KErrNone);	
-	 
-	// Make call.	 
-	testCallParams1.iExpStat = KErrNone;	
-	testCallParams1.iCallId = CTelephony::EISVMaxNumOfCalls;
-	testDialNewCallAct1->TestDialNewCall(testCallParams1);
-	CActiveScheduler::Start();
-	
-	// Switch flight mode on. Hangup attempt should fail.
-	phonePowerProperty.Subscribe(requeststatus);
-	User::LeaveIfError(phonePowerProperty.Set(KUidSystemCategory,KUidPhonePwr.iUid,ESAPhoneOff));
-	User::WaitForRequest(requeststatus);
-	TEST(requeststatus.Int() == KErrNone);	
-	
-	INFO_PRINTF1(_L("Attempt to hangup the call"));
-	// Create an active HangupAct object
-	CTestHangupAct* testHangupAct = CTestHangupAct::NewLC(this, iTelephony);	
-	testCallParams1.iExpStat = KErrAccessDenied;
-	testHangupAct->TestHangup(testCallParams1);
-	CActiveScheduler::Start();
-	
-	// Switch flight mode off and hang up call in preparation
-	// for next test.
-	phonePowerProperty.Subscribe(requeststatus);
-	User::LeaveIfError(phonePowerProperty.Set(KUidSystemCategory,KUidPhonePwr.iUid,ESAPhoneOn));
-	User::WaitForRequest(requeststatus);
-	TEST(requeststatus.Int() == KErrNone);	
-
-	testCallParams1.iExpStat = KErrNone;
-	testHangupAct->TestHangup(testCallParams1);
-	CActiveScheduler::Start();
-	
-	
-	//
-	//
-	// Answer Incoming Call - Flight Mode on
-	//
-	//
-	
-	INFO_PRINTF1(_L(" TEST: Answer incoming call disallowed when flight mode on "));
-	
-	// Create an active AnswerIncomingCallAct object
-	CTestAnswerIncomingCallAct* testAnswerIncomingCallAct1 = CTestAnswerIncomingCallAct::NewLC(this, iTelephony);
-	
-	//Set the call parameters to receive call 1
-	testCallParams1.iLine = CTelephony::EVoiceLine;
-	testCallParams1.iCallParamsV1Pckg = NULL;
-	testCallParams1.iExpStat = KErrNone;
-	
- 	//initiate callback
-	testAnswerIncomingCallAct1->CallMe(iCallCount);
-	
-	CTelephony::TCallStatusV1 status;
-	CTelephony::TCallStatusV1Pckg statusPckg(status);	
-	iTelephony->GetLineStatus(testCallParams1.iLine,  statusPckg);
-	TEST1(status.iStatus == CTelephony::EStatusRinging, ETrue);
-	
-	// Switch flight mode on and  attempt to answer the incoming call.
-	phonePowerProperty.Subscribe(requeststatus);
-	User::LeaveIfError(phonePowerProperty.Set(KUidSystemCategory,KUidPhonePwr.iUid,ESAPhoneOff));
-	User::WaitForRequest(requeststatus);
-	TEST(requeststatus.Int() == KErrNone);	
-	
-	testCallParams1.iExpStat = KErrAccessDenied;
-	testAnswerIncomingCallAct1->TestAnswerIncomingCall(testCallParams1);
-	CActiveScheduler::Start();
-	 
-	//
-	//
-	// Hold Call - Flight Mode on
-	//
-	//
-	
-	INFO_PRINTF1(_L(" TEST: Hold call disallowed when flight mode on "));
-	
-	// Set up call parms
-	testCallParams1.iLine = CTelephony::EVoiceLine;
-	testCallParams1.iCallParamsV1Pckg = &callParamsPckg1;
-	testCallParams1.iTelAddress.iTelNumber = KGoodNumber;
-	testCallParams1.iExpStat = KErrNone;
-	testCallParams1.iLine = CTelephony::EVoiceLine; 
-	
-	// Create an active TestHoldAct object
-	CTestHoldAct* testHoldAct = CTestHoldAct::NewLC(this, iTelephony);	
-	
-	testCallParams1.iExpStat=KErrAccessDenied;
-	testHoldAct->TestHold(testCallParams1);
-	CActiveScheduler::Start();
-	
-	//
-	//
-	// Resume Call - Flight Mode on
-	//
-	//
-	
-	INFO_PRINTF1(_L(" TEST: Resume call disallowed when flight mode on "));
-	
-	CTestResumeAct* testResumeAct1 = CTestResumeAct::NewLC(this, iTelephony);	
-	
-	// Attempt to resume the call using the ETEL 3rdparty API
-	testCallParams1.iExpStat = KErrAccessDenied;		
-	testResumeAct1->TestResume(testCallParams1);
-	CActiveScheduler::Start();
-	
-	//
-	//
-	// Swap Call - Flight Mode on
-	//
-	//
-	
-	INFO_PRINTF1(_L(" TEST: Swap call disallowed when flight mode on "));
-	
-	CTestSwapAct* testSwapAct1 = CTestSwapAct::NewLC(this, iTelephony);	
-	
-	
-	// Set up parameters for a second call
-	CTelephony::TCallParamsV1 callParams2;
-	callParams2.iIdRestrict = CTelephony::ESendMyId;
-	CTelephony::TCallParamsV1Pckg callParamsPckg2(callParams2);	
-	TTestCallParams testCallParams2;
-	testCallParams2.iLine = CTelephony::EVoiceLine;
-	testCallParams2.iCallParamsV1Pckg = &callParamsPckg2;
-	testCallParams2.iTelAddress.iTelNumber = KGoodNumber;
-	testCallParams2.iExpStat = KErrNone;
-	
-	// Attempt a call to the Swap ETEL 3rdparty API
-	testCallParams1.iExpStat = KErrAccessDenied;		
-	testSwapAct1->TestSwap(testCallParams1, testCallParams2);
-	CActiveScheduler::Start();
-	
-	//
-	//
-	// Test GetCallDynamicCaps with flight mode on.
-	//
-	//
-	
-	INFO_PRINTF1(_L("Test retrieval of dynamic caps - flight mode on"));
-	
-	// Get the call capabilities 
-	CTelephony::TCallCapsV1 callCaps;
-	CTelephony::TCallCapsV1Pckg callCapsPckg(callCaps);
-	TInt err = iTelephony->GetCallDynamicCaps(testCallParams1.iCallId, callCapsPckg);
-	TEST1(err==KErrAccessDenied, ETrue);
-		
-	INFO_PRINTF1(_L("END TEST 16.1"));
-	
-	CleanupStack::PopAndDestroy(testSwapAct1);
-	CleanupStack::PopAndDestroy(testResumeAct1);
-	CleanupStack::PopAndDestroy(testHoldAct);
-	CleanupStack::PopAndDestroy(testAnswerIncomingCallAct1);
-	CleanupStack::PopAndDestroy(testHangupAct);
-	CleanupStack::PopAndDestroy(testDialNewCallAct1);
-	CleanupStack::PopAndDestroy(&phonePowerProperty);	 
-	 
-	return TestStepResult() ;	  
-	 
-}
-
-
-CTestDeprecatedDataCallAPIs::CTestDeprecatedDataCallAPIs()
-/** Each test step initialises it's own name
-*/
-{
-    SetTestStepName(_L("TestDeprecatedDataCallAPIs"));
-}
-
-
-/**
-    @SYMTestCaseID           TEL/EtelIsv/GT0246/1035
-    @SYMREQ                  CNON-67WJ2G
-    @SYMTestCaseDesc         Test deprecated data call APIs
-    @SYMTestPriority         Critical
-    @SYMTestActions          Calls each deprecated API and ensures it returns KErrNotSupported
-    @SYMTestExpectedResults  Pass
-    @SYMTestType             CT
-*/
-enum TVerdict CTestDeprecatedDataCallAPIs::doTestStepL()
-{
-    TInt  result;
-    TInt  callStatus;
-    TRequestStatus  requestStatus;
-    TInt  dataChannel;
-    TBuf<CTelephony::KMaxTelNumberSize>  dialNumber;
-
-    result = iTelephony->FindDeviceStatus(callStatus);
-    TEST1(result == KErrNotSupported, ETrue);
-
-    result = iTelephony->EstablishDataCall(dataChannel, dialNumber);
-    TEST1(result == KErrNotSupported, ETrue);
-
-    iTelephony->EstablishDataCall(requestStatus, dataChannel, dialNumber);
-    User::WaitForRequest(requestStatus);
-    TEST1(requestStatus.Int() == KErrNotSupported, ETrue);
-
-    iTelephony->EstablishDataCall(requestStatus, dataChannel, dialNumber);
-    iTelephony->CancelEstablishDataCall();
-    User::WaitForRequest(requestStatus);
-    TEST1(requestStatus.Int() == KErrNotSupported, ETrue);
-
-    result = iTelephony->TerminateDataCall();
-    TEST1(result == KErrNotSupported, ETrue);
-
-    result = iTelephony->ReceiveDataCall(dataChannel);
-    TEST1(result == KErrNotSupported, ETrue);
-
-    iTelephony->ReceiveDataCall(requestStatus, dataChannel);
-    User::WaitForRequest(requestStatus);
-    TEST1(requestStatus.Int() == KErrNotSupported, ETrue);
-	 
-    iTelephony->ReceiveDataCall(requestStatus, dataChannel);
-    iTelephony->CancelReceiveDataCall();
-    User::WaitForRequest(requestStatus);
-    TEST1(requestStatus.Int() == KErrNotSupported, ETrue);
-	 
-    return TestStepResult();
-} // CTestDeprecatedDataCallAPIs::doTestStepL
-
+// Copyright (c) 2003-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:
+// Tests for ETEL 3rd Party Call APIs.
+// 
+//
+
+/**
+ @file
+*/
+
+#include "TE_EtelIsvbase.h"
+#include "TE_EtelIsvCallFunc.h"
+
+
+CTestDialNewCall::CTestDialNewCall()
+/** Each test step initialises it's own name
+*/
+{
+	// store the name of this test case
+	// this is the name that is used by the script file
+	SetTestStepName(_L("TestDialNewCall"));
+}
+
+/**
+*
+@SYMTestCaseID Etel3rdParty 9.1
+@SYMTestCaseDesc Test DialNewCall 3rd party API
+@SYMFssID SGL.GT0166.054 v1.3 A2_Telephony_Functional_Specification.doc, REQ 2116.3.1
+*/ 
+
+enum TVerdict CTestDialNewCall::doTestStepL()
+{
+	INFO_PRINTF1(_L("CTestDialNewCall::doTestStepL Start"));
+	
+	_LIT(KGoodNumber,"1789");
+	
+	SetTestNumber(15); 
+	
+	//Set the call parameters for call 1
+	CTelephony::TCallParamsV1 callParams1;
+	callParams1.iIdRestrict = CTelephony::ESendMyId;
+	CTelephony::TCallParamsV1Pckg callParamsPckg1(callParams1);	
+	
+	TTestCallParams testCallParams1;
+	testCallParams1.iLine = CTelephony::EVoiceLine;
+	testCallParams1.iCallParamsV1Pckg = &callParamsPckg1;
+	testCallParams1.iTelAddress.iTelNumber = KGoodNumber;
+	testCallParams1.iExpStat = KErrNone;
+	
+	//Set the call parameters for call 2
+	CTelephony::TCallParamsV1 callParams2;
+	callParams2.iIdRestrict = CTelephony::ESendMyId;
+	CTelephony::TCallParamsV1Pckg callParamsPckg2(callParams2);	
+	
+	TTestCallParams testCallParams2;
+	testCallParams2.iLine = CTelephony::EVoiceLine;
+	testCallParams2.iCallParamsV1Pckg = &callParamsPckg2;
+	testCallParams2.iTelAddress.iTelNumber = KGoodNumber;
+	testCallParams2.iExpStat = KErrNone;
+	
+	//Set the call parameters for call 3 - should not successfully make a call
+	CTelephony::TCallParamsV1 callParams3;
+	callParams3.iIdRestrict = CTelephony::ESendMyId;
+	CTelephony::TCallParamsV1Pckg callParamsPckg3(callParams3);	
+	
+	TTestCallParams testCallParams3;
+	testCallParams3.iLine = CTelephony::EVoiceLine;
+	testCallParams3.iCallParamsV1Pckg = &callParamsPckg3;
+	testCallParams3.iTelAddress.iTelNumber = KGoodNumber;
+	testCallParams3.iExpStat = KErrAccessDenied;
+	
+	CTelephony::TCallStatusV1 status;
+	CTelephony::TCallStatusV1Pckg statusPckg(status);
+	
+	// Create active DialNewCallAct objects
+	CTestDialNewCallAct* testDialNewCallAct1 = CTestDialNewCallAct::NewLC(this, iTelephony);
+	
+//
+//TEST 1: Test making call on fax & data line.  Should fail
+//
+	
+	INFO_PRINTF1(_L("Test making call on fax & data line.  Should fail"));
+	testCallParams1.iLine = CTelephony::EDataLine;
+	testCallParams1.iExpStat = KErrAccessDenied;
+	testDialNewCallAct1->TestDialNewCall(testCallParams1);
+	CActiveScheduler::Start();
+	
+	testCallParams1.iLine = CTelephony::EFaxLine;
+	testDialNewCallAct1->TestDialNewCall(testCallParams1);
+	CActiveScheduler::Start();	
+	
+//
+//TEST 2: Test OOM on Dial
+//
+#if defined(_DEBUG)
+	INFO_PRINTF1(_L("Test OOM on for Dial"));
+	testCallParams1.iLine = CTelephony::EVoiceLine;
+	testCallParams1.iExpStat = KErrNoMemory;
+	testCallParams1.iCallId = CTelephony::EISVMaxNumOfCalls;	
+	__UHEAP_FAILNEXT(1);	
+	// Create a call - should fail	
+	testDialNewCallAct1->TestDialNewCall(testCallParams1);
+	CActiveScheduler::Start();
+	__UHEAP_RESET;
+	
+	__UHEAP_FAILNEXT(2);	 
+	// Create a call - should fail
+	testDialNewCallAct1->TestDialNewCall(testCallParams1);
+	CActiveScheduler::Start();
+	__UHEAP_RESET;
+#endif
+//
+//TEST 3: Create & Hangup a single call
+//
+
+	INFO_PRINTF1(_L("Create & Hangup a single call"));
+	testCallParams1.iLine = CTelephony::EVoiceLine;
+	testCallParams1.iExpStat = KErrNone;		 
+	// Create a call - should succeed
+	testCallParams1.iCallId = CTelephony::EISVMaxNumOfCalls;
+	testDialNewCallAct1->TestDialNewCall(testCallParams1, ETrue);
+	CActiveScheduler::Start();
+			
+	TInt err = iTelephony->GetCallStatus(testCallParams1.iCallId,  statusPckg);
+	TEST1(err == KErrNone, ETrue);	
+	TEST1(status.iStatus == CTelephony::EStatusConnected, ETrue);
+	TEST1(testCallParams1.iCallId == CTelephony::EISVCall1, ETrue);
+	TEST1(callParams1.iIdRestrict == CTelephony::ESendMyId, ETrue);
+	
+	// Create an activeHangupAct object
+	CTestHangupAct* testHangupAct1 = CTestHangupAct::NewLC(this, iTelephony);
+
+	testCallParams1.iExpStat = KErrNone;
+	testHangupAct1->TestHangup(testCallParams1);
+	CActiveScheduler::Start();
+	
+	err = iTelephony->GetLineStatus(testCallParams1.iLine,  statusPckg);
+	TEST1(err == KErrNone, ETrue);
+	TEST1(status.iStatus == CTelephony::EStatusIdle, ETrue);
+	
+//
+//TEST 4: Create 2 calls. try and create a third which should fail
+//
+	
+	INFO_PRINTF1(_L(" Create 2 calls. try and create a third which should fail."));
+	CTestHoldAct* TestHoldAct = CTestHoldAct::NewLC(this, iTelephony);	
+	
+	INFO_PRINTF1(_L(" Create first call."));
+	testCallParams1.iExpStat = KErrNone;
+	testDialNewCallAct1->TestDialNewCall(testCallParams1);
+	CActiveScheduler::Start();
+	
+	err = iTelephony->GetCallStatus(testCallParams1.iCallId,  statusPckg);
+	TEST1(err == KErrNone, ETrue);	
+	TEST1(status.iStatus == CTelephony::EStatusConnected, ETrue);
+	TEST1(testCallParams1.iCallId == CTelephony::EISVCall1, ETrue);
+	
+	// Create 2nd call - should fail as other call is active
+	INFO_PRINTF1(_L(" Create first 2nd call - should fail as 1st call active"));
+	testCallParams2.iExpStat = KErrGeneral;
+	testDialNewCallAct1->TestDialNewCall(testCallParams2);
+	CActiveScheduler::Start();
+	
+	//put 1st call on hold
+	INFO_PRINTF1(_L(" Put 1st call on hold."));
+	testCallParams1.iExpStat=KErrNone;
+	TestHoldAct->TestHold(testCallParams1);
+	CActiveScheduler::Start();	
+	
+	err = iTelephony->GetCallStatus(testCallParams1.iCallId,  statusPckg);
+	TEST1(err == KErrNone, ETrue);	
+	TEST1(status.iStatus == CTelephony::EStatusHold, ETrue);
+	
+	// Create 2nd call - should suceed
+	INFO_PRINTF1(_L(" Create 2nd call."));
+	testCallParams2.iExpStat=KErrNone;
+	testDialNewCallAct1->TestDialNewCall(testCallParams2);
+	CActiveScheduler::Start();
+	
+	// Create a 3rd call - should fail
+	INFO_PRINTF1(_L(" Create 3rd call - should fail"));
+	testCallParams3.iExpStat = KErrAccessDenied;
+	testDialNewCallAct1->TestDialNewCall(testCallParams3);
+	CActiveScheduler::Start();			
+	
+	//Hangup calls
+	INFO_PRINTF1(_L("Hangup 1st call"));
+	testCallParams1.iExpStat = KErrNone;
+	testHangupAct1->TestHangup(testCallParams1);
+	CActiveScheduler::Start();
+	
+	err = iTelephony->GetLineStatus(testCallParams1.iLine,  statusPckg);
+	TEST1(err == KErrNone, ETrue);
+	TEST1(status.iStatus == CTelephony::EStatusConnected, ETrue);
+	
+	INFO_PRINTF1(_L("Hangup 2nd call"));
+	testCallParams1.iExpStat = KErrNone;
+	testHangupAct1->TestHangup(testCallParams2);
+	CActiveScheduler::Start();
+	
+	err = iTelephony->GetLineStatus(testCallParams2.iLine,  statusPckg);
+	TEST1(err == KErrNone, ETrue);
+	TEST1(status.iStatus == CTelephony::EStatusIdle, ETrue);	
+
+//
+//TEST 5: test cancel
+//
+	INFO_PRINTF1(_L(" Test dial cancel."));
+	TInt cancelerr = iTelephony->CancelAsync(CTelephony::EDialNewCallCancel);
+	TEST1(cancelerr == KErrNotFound, ETrue);
+	testDialNewCallAct1->TestDialNewCall(testCallParams1);
+	CTestCanceller* canceller = testDialNewCallAct1->RetrieveCanceller();
+	canceller->Call();
+	CActiveScheduler::Start();	
+	TEST1(testDialNewCallAct1->iStatus.Int() == KErrCancel, ETrue);
+	
+//
+//TEST 6: Test re-dialling after a cancel
+//
+ 	INFO_PRINTF1(_L(" Test dial after a cancel."));
+ 	err = iTelephony->GetLineStatus(testCallParams1.iLine,  statusPckg);
+	TEST1(status.iStatus == CTelephony::EStatusIdle, ETrue);
+	
+	testDialNewCallAct1->TestDialNewCall(testCallParams1);
+	CActiveScheduler::Start();	
+	
+	err = iTelephony->GetCallStatus(testCallParams1.iCallId,  statusPckg);
+	TEST1(status.iStatus == CTelephony::EStatusConnected, ETrue);
+	
+	
+	//Hangup calls
+	INFO_PRINTF1(_L("Hangup call"));
+	testCallParams1.iExpStat = KErrNone;
+	testHangupAct1->TestHangup(testCallParams1);
+	CActiveScheduler::Start();	
+	
+	CleanupStack::PopAndDestroy(TestHoldAct);
+	CleanupStack::PopAndDestroy(testHangupAct1);
+	CleanupStack::PopAndDestroy(testDialNewCallAct1);
+	
+	return TestStepResult();	
+}
+
+/**
+Dial New Call Active Object
+**/
+CTestDialNewCallAct* CTestDialNewCallAct::NewLC(CEtelIsvTestStep* aTestStep, CTelephony* aTelephony, TBool aUseMacros)
+//Factory constructor
+	{
+	CTestDialNewCallAct* obj = new(ELeave) CTestDialNewCallAct(aTestStep, aTelephony, NULL, aUseMacros);
+	CleanupStack::PushL(obj);
+	obj->ConstructL();
+	return obj;
+	}
+	
+CTestDialNewCallAct* CTestDialNewCallAct::NewL(CEtelIsvTestStep* aTestStep, CTelephony* aTelephony, MActionParent* aParent)
+//Factory constructor
+	{
+	CTestDialNewCallAct* obj = new(ELeave) CTestDialNewCallAct(aTestStep, aTelephony, aParent, ETrue);
+	CleanupStack::PushL(obj);
+	obj->ConstructL();
+	CleanupStack::Pop(obj);
+	return obj;
+	}
+	
+CTestDialNewCallAct::CTestDialNewCallAct(CEtelIsvTestStep* aTestStep, CTelephony* aTelephony, MActionParent* aParent, TBool aUseMacros)
+    : CEtelIsvActBase(aTestStep, aTelephony)
+    , iParent(aParent)
+    , iUseMacros(aUseMacros) 
+	{  
+	}
+
+void CTestDialNewCallAct::ConstructL()
+	{    
+	iCanceller = new(ELeave) CTestCanceller(this);
+	CActiveScheduler::Add(this);
+	}
+
+CTestDialNewCallAct::~CTestDialNewCallAct()
+	{  
+	Cancel();	// if any Req outstanding, calls DoCancel() to cleanup.
+	delete iCanceller;
+	}
+
+void CTestDialNewCallAct::DoCancel()
+	{
+	iTelephony->CancelAsync(CTelephony::EDialNewCallCancel);
+	}
+
+void CTestDialNewCallAct::TestDialNewCall(TTestCallParams& aTestCallParams, TBool aCheckConcurrency)
+	{
+ 	iTestCallParams = &aTestCallParams;
+
+	// Update the expected return value.
+	iExpStat=aTestCallParams.iExpStat;
+	
+	TDes8* data;
+    
+	if (iTestStep->iBufferMode)
+ 		{
+ 		// initialize the buffer first
+		iCallParamsBuff = *(reinterpret_cast<CTelephony::TCallParamsV1*> ( const_cast<TUint8*> (aTestCallParams.iCallParamsV1Pckg->Ptr() ) ));
+		data = &iCallParamsBuff;   
+		}
+	else
+		{
+		data = aTestCallParams.iCallParamsV1Pckg;
+		}
+
+        
+	// Make a new call
+	iTelephony->DialNewCall(iStatus, *data ,iTestCallParams->iTelAddress.iTelNumber, iTestCallParams->iCallId, iTestCallParams->iLine);
+	if(aCheckConcurrency)
+		{
+		TRequestStatus tmpStatus;
+		iTelephony->DialNewCall(tmpStatus, *data ,iTestCallParams->iTelAddress.iTelNumber, iTestCallParams->iCallId, iTestCallParams->iLine);
+		User::WaitForRequest(tmpStatus);
+		iTestStep->TEST1(tmpStatus.Int() == KErrInUse, ETrue);
+		}
+	SetActive(); 
+	}
+	
+void CTestDialNewCallAct::RunL()
+	{
+	// ActiveScheduler will have set status to KRequestComplete, just before
+	// calling this RunL().
+	if(iUseMacros)
+		{
+		iTestStep-> INFO_PRINTF1(_L(" CTestDialNewCallAct::RunL "));
+		iTestStep->INFO_PRINTF2(_L("Request Status returned is: %d"), iStatus.Int()   );
+
+		iTestStep->TEST1(iStatus.Int() == iExpStat.Int(), ETrue);
+		}
+
+	if(iStatus.Int() == KErrNone)
+		{
+		if(iUseMacros)
+			{
+			iTestStep->INFO_PRINTF1(_L(" KErrNone returned") );
+			iTestStep->INFO_PRINTF2(_L(" Call ID is %d"), iTestCallParams->iCallId );	
+
+			CTelephony::TCallStatusV1 status;
+			CTelephony::TCallStatusV1Pckg statusPckg(status);
+
+			iTelephony->GetCallStatus(iTestCallParams->iCallId,  statusPckg);
+			iTestStep->INFO_PRINTF2(_L(" Call status is %d"), status.iStatus );
+			}
+		}
+	else
+		{
+		if(iUseMacros)
+			{
+			iTestStep->INFO_PRINTF2(_L("Request Status expected is: %d"), iExpStat.Int()   ); 
+			iTestStep->INFO_PRINTF2(_L("Error for dialnewcall: %d"), iStatus.Int() );
+			}
+		}
+	if(!iParent)
+		CActiveScheduler::Stop();
+	else
+		iParent->ActionParent(iStatus.Int(), MActionParent::EDialNewCall);
+	}
+	
+ 
+CTestHangup::CTestHangup()
+/** Each test step initialises it's own name
+*/
+	{
+	// store the name of this test case
+	// this is the name that is used by the script file
+	SetTestStepName(_L("TestHangup"));
+	}
+
+/**
+*
+@SYMTestCaseID Etel3rdParty 10.1
+@SYMTestCaseDesc Test Hangup 3rd party API
+@SYMFssID SGL.GT0166.054 v1.3 A2_Telephony_Functional_Specification.doc, REQ 2116.3.3
+*/
+
+enum TVerdict CTestHangup::doTestStepL()
+	{
+	INFO_PRINTF1(_L("CTestHangup::doTestStepL Start"));
+	
+	_LIT(KGoodNumber,"1789");
+	
+	SetTestNumber(15); 
+	
+	//Hangup is been used extensively in other tests.  This test therefore just tests cancelling and trying to 
+	//hang-up when a call is not active
+	
+	//Set the call parameters
+	CTelephony::TCallParamsV1 callParams1;
+	callParams1.iIdRestrict = CTelephony::ESendMyId;
+	CTelephony::TCallParamsV1Pckg callParamsPckg1(callParams1);	
+	
+	TTestCallParams testCallParams1;
+	testCallParams1.iLine = CTelephony::EVoiceLine;
+	testCallParams1.iCallParamsV1Pckg = &callParamsPckg1;
+	testCallParams1.iTelAddress.iTelNumber = KGoodNumber;
+	testCallParams1.iExpStat = KErrNone;
+ 
+ 	// Create an active HangupAct object
+	CTestHangupAct* TestHangupAct = CTestHangupAct::NewLC(this, iTelephony);		
+	// Create active DialNewCallAct objects
+	CTestDialNewCallAct* testDialNewCallAct1 = CTestDialNewCallAct::NewLC(this, iTelephony);
+	
+//
+//TEST 1: Test Hangup with no active call
+//
+
+	//try hanging up when no call active
+	testCallParams1.iCallId = CTelephony::EISVCall1;
+	testCallParams1.iExpStat = KErrAccessDenied;
+	TestHangupAct->TestHangup(testCallParams1);
+	CActiveScheduler::Start();
+	
+	INFO_PRINTF1(_L(" Create a call."));
+	testCallParams1.iExpStat = KErrNone;
+	testDialNewCallAct1->TestDialNewCall(testCallParams1);
+	CActiveScheduler::Start();
+	
+//
+//TEST 2: Test OOM on Hangup
+//
+#if defined(_DEBUG)
+	INFO_PRINTF1(_L("Test OOM on for Hangup"));
+	testCallParams1.iExpStat = KErrNoMemory;
+	__UHEAP_FAILNEXT(1);	
+	TestHangupAct->TestHangup(testCallParams1);
+	CActiveScheduler::Start();
+	__UHEAP_RESET;
+#endif
+//
+//TEST 3: Test make a call and hangup
+//
+	
+	INFO_PRINTF1(_L("Hangup the call"));
+	testCallParams1.iExpStat = KErrNone;
+	TestHangupAct->TestHangup(testCallParams1, ETrue);
+	CActiveScheduler::Start();
+	
+//
+//TEST 4: Test Cancel
+//
+
+	//make a call first
+	INFO_PRINTF1(_L(" Create a call."));
+	testCallParams1.iExpStat = KErrNone;
+	testDialNewCallAct1->TestDialNewCall(testCallParams1);
+	CActiveScheduler::Start();	
+	
+	TInt cancelerr = iTelephony->CancelAsync(CTelephony::EHangupCancel);
+	TEST1(cancelerr == KErrNotFound, ETrue);
+	TestHangupAct->TestHangup(testCallParams1);
+	CTestCanceller* canceller = TestHangupAct->RetrieveCanceller();
+	canceller->Call();
+	CActiveScheduler::Start();
+	TInt result = TestHangupAct->iStatus.Int();
+	
+	if(result == KErrCancel)
+		{
+		//call should still be active
+		CTelephony::TCallStatusV1 status;
+		CTelephony::TCallStatusV1Pckg statusPckg(status);
+		TInt err = iTelephony->GetCallStatus(testCallParams1.iCallId,  statusPckg);
+		TEST1(err == KErrNone, ETrue);	
+		TEST1(status.iStatus == CTelephony::EStatusConnected, ETrue);
+	
+		//now hangup properly
+		TestHangupAct->TestHangup(testCallParams1);
+		CActiveScheduler::Start();
+		}
+	else if (result == KErrNone)
+		{
+		INFO_PRINTF1(_L("Test Cancel HangUp call: HangUp completed with KErrNone,"));
+		INFO_PRINTF1(_L("KErrCancel expected. Test Inconclusive."));
+		SetTestStepResult(EInconclusive);
+		}
+	else
+		{
+		SetTestStepResult(EFail);	
+		}
+ 
+	CleanupStack::PopAndDestroy(testDialNewCallAct1);
+	CleanupStack::PopAndDestroy(TestHangupAct);
+	return TestStepResult();
+	}
+
+
+/**
+Hangup Active Object
+**/
+CTestHangupAct* CTestHangupAct::NewLC(CEtelIsvTestStep* aTestStep, CTelephony* aTelephony, TBool aUseMacros)
+//Factory constructor
+	{
+	CTestHangupAct* obj = new(ELeave) CTestHangupAct(aTestStep, aTelephony, NULL, aUseMacros);
+	CleanupStack::PushL(obj);
+	obj->ConstructL();
+	return obj;
+	}
+	
+CTestHangupAct* CTestHangupAct::NewL(CEtelIsvTestStep* aTestStep, CTelephony* aTelephony, MActionParent* aParent)
+//Factory constructor
+	{
+	CTestHangupAct* obj = new(ELeave) CTestHangupAct(aTestStep, aTelephony, aParent, ETrue);
+	CleanupStack::PushL(obj);
+	obj->ConstructL();
+	CleanupStack::Pop();//obj
+	return obj;
+	}
+	
+CTestHangupAct::CTestHangupAct(CEtelIsvTestStep* aTestStep, CTelephony* aTelephony, MActionParent* aParent, TBool aUseMacros)
+	: CEtelIsvActBase(aTestStep, aTelephony)	 
+	, iParent(aParent)
+    , iUseMacros(aUseMacros)
+	{  
+	}
+
+void CTestHangupAct::ConstructL()
+	{    
+	iCanceller = new(ELeave) CTestCanceller(this);
+	CActiveScheduler::Add(this);
+	}
+
+CTestHangupAct::~CTestHangupAct()
+	{  
+	Cancel();	// if any Req outstanding, calls DoCancel() to cleanup.
+	delete iCanceller;
+	}
+
+void CTestHangupAct::DoCancel()
+	{
+	iTelephony->CancelAsync(CTelephony::EHangupCancel);
+	}
+
+void CTestHangupAct::TestHangup(TTestCallParams& aTestCallParams, TBool aCheckConcurrency) 
+               
+	{
+ 	iTestCallParams = &aTestCallParams;
+
+	// Update the expected return value.
+	iExpStat=iTestCallParams->iExpStat;
+
+	// Hangup existing call
+	iTelephony->Hangup(iStatus, iTestCallParams->iCallId);
+	if(aCheckConcurrency)
+		{
+		TRequestStatus tmpStatus;
+		iTelephony->Hangup(tmpStatus, iTestCallParams->iCallId);
+		User::WaitForRequest(tmpStatus);
+		iTestStep->TEST1(tmpStatus.Int() == KErrInUse, ETrue);
+		}
+	SetActive(); 
+	}
+	
+void CTestHangupAct::RunL()
+	{ 
+	// ActiveScheduler will have set status to KRequestComplete, just before
+	// calling this RunL().
+	if(iUseMacros)
+		{
+		iTestStep-> INFO_PRINTF1(_L(" CTestHangupAct::RunL "));
+		iTestStep->INFO_PRINTF2(_L("Request Status returned is: %d"), iStatus.Int()   );
+		iTestStep->TEST1(iStatus.Int() == iExpStat.Int(), ETrue);
+		}
+	
+	if(iStatus.Int() == KErrNone)
+		{
+		if(iUseMacros)
+			{
+			iTestStep->INFO_PRINTF2(_L(" Call ID is %d"), iTestCallParams->iCallId );	 
+			}
+		}
+		else
+		{
+		if(iUseMacros)
+			{
+			iTestStep->INFO_PRINTF2(_L("Error for hangup: %d"), iStatus.Int() );
+			}
+		}
+	if(!iParent)
+		CActiveScheduler::Stop();
+	else
+		iParent->ActionParent(iStatus.Int(), MActionParent::EHangup);
+	}
+
+CTestAnswerIncomingCall::CTestAnswerIncomingCall(TInt& aCallCount)
+/** Each test step initialises it's own name
+*/
+: iCallCount(aCallCount)
+	{
+	// store the name of this test case
+	// this is the name that is used by the script file
+	SetTestStepName(_L("TestAnswerIncomingCall"));
+	}
+
+/**
+*
+@SYMTestCaseID Etel3rdParty 11.1
+@SYMTestCaseDesc Test AnswerIncomingCall 3rd party API
+@SYMFssID SGL.GT0166.054 v1.3 A2_Telephony_Functional_Specification.doc, REQ 2116.3.5, INC074753 
+*/
+enum TVerdict CTestAnswerIncomingCall::doTestStepL()
+	{
+	INFO_PRINTF1(_L("CTestAnswerIncomingCall::doTestStepL Start"));
+	
+	SetTestNumber(15); 
+	
+	_LIT(KGoodNumber,"1789");
+	
+	//Set the call parameters to receive call 1
+	TTestCallParams testCallParams1;
+	testCallParams1.iLine = CTelephony::EVoiceLine;
+	testCallParams1.iCallParamsV1Pckg = NULL;
+	testCallParams1.iExpStat = KErrNone;
+	
+	//Set the call parameters for MO call 1
+	CTelephony::TCallParamsV1 callParams1;
+	callParams1.iIdRestrict = CTelephony::ESendMyId;
+	CTelephony::TCallParamsV1Pckg callParamsPckg1(callParams1);	
+	
+	TTestCallParams testMOCallParams1;
+	testMOCallParams1.iLine = CTelephony::EVoiceLine;
+	testMOCallParams1.iCallParamsV1Pckg = &callParamsPckg1;
+	testMOCallParams1.iTelAddress.iTelNumber = KGoodNumber;
+	testMOCallParams1.iExpStat = KErrNone; 
+	
+	
+	//Set the call parameters for MO call 2
+	CTelephony::TCallParamsV1 callParams2;
+	callParams2.iIdRestrict = CTelephony::ESendMyId;
+	CTelephony::TCallParamsV1Pckg callParamsPckg2(callParams2);	
+	
+	TTestCallParams testMOCallParams2;
+	testMOCallParams2.iLine = CTelephony::EVoiceLine;
+	testMOCallParams2.iCallParamsV1Pckg = &callParamsPckg2;
+	testMOCallParams2.iTelAddress.iTelNumber = KGoodNumber;
+	testMOCallParams2.iExpStat = KErrNone; 
+	
+	// Create an active AnswerIncomingCallAct object
+	CTestAnswerIncomingCallAct* testAnswerIncomingCallAct1 = CTestAnswerIncomingCallAct::NewLC(this, iTelephony);
+	
+//
+//TEST 1: Test answering call on fax & data line.  Should fail
+//
+	
+	INFO_PRINTF1(_L("Test answering call on fax & data line.  Should fail"));
+	testCallParams1.iLine = CTelephony::EDataLine;
+	testCallParams1.iExpStat = KErrAccessDenied;
+	testAnswerIncomingCallAct1->TestAnswerIncomingCall(testCallParams1);
+	CActiveScheduler::Start();
+	
+	testCallParams1.iLine = CTelephony::EFaxLine;
+	testAnswerIncomingCallAct1->TestAnswerIncomingCall(testCallParams1);
+	CActiveScheduler::Start();	
+
+//
+//TEST 2: Test AnswerIncomingCall with no ringing call
+//
+	INFO_PRINTF1(_L("Test answering call with no ringing"));
+	testCallParams1.iLine = CTelephony::EVoiceLine;
+	testCallParams1.iExpStat = KErrAccessDenied;
+	testAnswerIncomingCallAct1->TestAnswerIncomingCall(testCallParams1);
+	CActiveScheduler::Start();
+	
+	//initiate callback
+	testAnswerIncomingCallAct1->CallMe(iCallCount);
+	 
+//
+//TEST 2: Test OOM on AnswerIncomingCall
+//
+#if defined(_DEBUG)
+	INFO_PRINTF1(_L("Test answering call with OOM"));
+	testCallParams1.iExpStat = KErrNoMemory;
+	__UHEAP_FAILNEXT(1);
+	testAnswerIncomingCallAct1->TestAnswerIncomingCall(testCallParams1);
+	CActiveScheduler::Start();
+	__UHEAP_RESET;
+#endif
+ 	
+//
+//TEST 3: Test answering call & hanging up on voice line 
+//	
+	INFO_PRINTF1(_L("Test answering call with hangup"));
+
+	CTelephony::TCallInfoV1 callInfoV1;
+	CTelephony::TCallInfoV1Pckg callInfoV1Pckg(callInfoV1);
+	CTelephony::TRemotePartyInfoV1 remoteInfoV1;
+	CTelephony::TRemotePartyInfoV1Pckg remoteInfoV1Pckg(remoteInfoV1);
+	
+	CTelephony::TCallSelectionV1 callSelection;
+	CTelephony::TCallSelectionV1Pckg callSelectionV1Pckg(callSelection);
+	callSelection.iSelect = CTelephony::EInProgressCall;
+	callSelection.iLine = CTelephony::EVoiceLine;
+	
+	TInt err = iTelephony->GetCallInfo(callSelectionV1Pckg, callInfoV1Pckg, remoteInfoV1Pckg);
+
+	testCallParams1.iExpStat = KErrNone;
+	testAnswerIncomingCallAct1->TestAnswerIncomingCall(testCallParams1, ETrue);
+	CActiveScheduler::Start();
+	TEST1(testCallParams1.iCallId == CTelephony::EISVCall1, ETrue);
+		
+	CTelephony::TCallStatusV1 status;
+	CTelephony::TCallStatusV1Pckg statusPckg(status);		
+	iTelephony->GetLineStatus(testCallParams1.iLine, statusPckg);
+	TEST1(status.iStatus == CTelephony::EStatusConnected, ETrue);
+	
+	iTelephony->GetCallStatus(testCallParams1.iCallId, statusPckg);
+	TEST1(status.iStatus == CTelephony::EStatusConnected, ETrue);
+	
+	//and hangup
+	CTestHangupAct* testHangupAct1 = CTestHangupAct::NewLC(this, iTelephony);		
+	
+	testHangupAct1->TestHangup(testCallParams1);
+	CActiveScheduler::Start();
+	
+//
+//TEST 4: Test dialling a call & answering a 2nd call
+//	
+	INFO_PRINTF1(_L("Test dial a call & answering call."));
+	CTestDialNewCallAct* testDialNewCallAct1 = CTestDialNewCallAct::NewLC(this, iTelephony);
+	INFO_PRINTF1(_L("Create a single call"));
+	// Create a call - should succeed
+	testMOCallParams1.iCallId = CTelephony::EISVMaxNumOfCalls;
+	testDialNewCallAct1->TestDialNewCall(testMOCallParams1);
+	CActiveScheduler::Start();
+	
+	iTelephony->GetCallStatus(testMOCallParams1.iCallId, statusPckg);
+	TEST1(status.iStatus == CTelephony::EStatusConnected, ETrue);
+	
+	//initiate callback
+	testAnswerIncomingCallAct1->CallMe(iCallCount);
+	
+	iTelephony->GetLineStatus(testMOCallParams1.iLine,  statusPckg);
+	TEST1(status.iStatus == CTelephony::EStatusRinging, ETrue);
+	
+	//put 1st call on hold
+	CTestHoldAct* TestHoldAct = CTestHoldAct::NewLC(this, iTelephony);	
+	INFO_PRINTF1(_L(" Put 1st call on hold."));
+	testCallParams1.iExpStat=KErrNone;
+	TestHoldAct->TestHold(testCallParams1);
+	CActiveScheduler::Start();
+	CleanupStack::PopAndDestroy(TestHoldAct);
+	
+	iTelephony->GetCallStatus(testMOCallParams1.iCallId, statusPckg);
+	TEST1(status.iStatus == CTelephony::EStatusHold, ETrue);
+	
+	//answer a call
+	testCallParams1.iExpStat = KErrNone;
+	testAnswerIncomingCallAct1->TestAnswerIncomingCall(testCallParams1);
+	CActiveScheduler::Start();
+	
+	iTelephony->GetCallStatus(testCallParams1.iCallId, statusPckg);
+	TEST1(status.iStatus == CTelephony::EStatusConnected, ETrue);
+	
+	//try and make a 3rd call - should fail
+	testMOCallParams2.iExpStat = KErrAccessDenied;
+	testDialNewCallAct1->TestDialNewCall(testMOCallParams2);
+	CActiveScheduler::Start();
+		
+	//Hangup calls
+	testCallParams1.iExpStat = KErrNone;
+	testHangupAct1->TestHangup(testCallParams1);
+	CActiveScheduler::Start();
+	
+	testHangupAct1->TestHangup(testMOCallParams1);
+	CActiveScheduler::Start();	
+	
+//
+//TEST 5: Test Cancel
+//
+	INFO_PRINTF1(_L("Test answering call cancel"));
+	
+	//initiate callback
+	testAnswerIncomingCallAct1->CallMe(iCallCount);	
+	
+	TInt cancelerr = iTelephony->CancelAsync(CTelephony::EAnswerIncomingCallCancel);
+	TEST1(cancelerr == KErrNotFound, ETrue);
+	testAnswerIncomingCallAct1->TestAnswerIncomingCall(testCallParams1);
+	CTestCanceller* canceller = testAnswerIncomingCallAct1->RetrieveCanceller();
+	canceller->Call();
+	CActiveScheduler::Start();	
+	TEST1(testAnswerIncomingCallAct1->iStatus.Int() == KErrNone, ETrue);
+	
+	iTelephony->GetCallStatus(testCallParams1.iCallId, statusPckg);
+	TEST1(status.iStatus == CTelephony::EStatusConnected, ETrue);
+	
+	//NOTE: Attempting to Cancel an AnswerIncomingCall fails.  The specs say you can disconnect from
+	//an answering state but this is not implemented in the SIM TSY which means the cancel request fails.
+	
+	//Hangup calls
+	testCallParams1.iExpStat = KErrNone;
+	testHangupAct1->TestHangup(testCallParams1);
+	CActiveScheduler::Start();
+	
+	
+//
+//TEST 6: Test Answer call after a cancel
+//
+	INFO_PRINTF1(_L("Test answering call after a cancel"));
+	
+	//initiate callback
+	testAnswerIncomingCallAct1->CallMe(iCallCount);	
+	
+	testAnswerIncomingCallAct1->TestAnswerIncomingCall(testCallParams1);
+	CActiveScheduler::Start();	
+	
+	iTelephony->GetCallStatus(testCallParams1.iCallId, statusPckg);
+	TEST1(status.iStatus == CTelephony::EStatusConnected, ETrue);
+	
+	//Hangup calls
+	testCallParams1.iExpStat = KErrNone;
+	testHangupAct1->TestHangup(testCallParams1);
+	CActiveScheduler::Start();
+
+	
+//
+//TEST 7: Test Answer call when no notification of incoming call received
+//
+	INFO_PRINTF1(_L("Test answering call when no notification of incoming call received."));
+ 
+ 	SetTestNumber(38);
+ 
+	//Set the call parameters for call
+	CTelephony::TCallParamsV1 callParams3;
+	//callParams1.iIdRestrict = CTelephony::ESendMyId;
+	CTelephony::TCallParamsV1Pckg callParamsPckg3(callParams3);	
+	
+	TTestCallParams testCallParams3;
+	testCallParams3.iLine = CTelephony::EVoiceLine;
+	testCallParams3.iCallParamsV1Pckg = &callParamsPckg3;
+	testCallParams3.iTelAddress.iTelNumber = KGoodNumber;
+	testCallParams3.iExpStat = KErrTimedOut; 
+
+	CTelephony::TCallStatusV1 status2;
+	CTelephony::TCallStatusV1Pckg statusPckg2(status2);		
+	iTelephony->GetLineStatus(testCallParams3.iLine, statusPckg2);
+	TEST1(status2.iStatus == CTelephony::EStatusIdle, ETrue);
+ 	
+ 	// Initiate callback
+	testAnswerIncomingCallAct1->CallMe(iCallCount);
+	
+	iTelephony->GetLineStatus(testCallParams3.iLine,  statusPckg2);
+	TEST1(status2.iStatus == CTelephony::EStatusRinging, ETrue);
+ 	
+ 	testAnswerIncomingCallAct1->TestAnswerIncomingCall(testCallParams3);
+ 	CActiveScheduler::Start();
+
+//
+//TEST 8: Test Answer call when notify incoming call completes 
+//        when answer incoming call is waiting for it. 
+//
+ 	
+ 	// NOTE - This test tries to force the incoming call notification to complete
+ 	// when AnswerIncomingCall is doing its one second wait. The 
+ 	// NotifyIncomingCallPauseDuration in the config file may have to be adjusted to make 
+ 	// sure this happens on your computer.  	
+ 	INFO_PRINTF1(_L("Test answering call when answer incoming call needs to wait for the call name"));
+	INFO_PRINTF1(_L("NOTE: This test forces simtsy to delay sending the incoming call notification"));
+	INFO_PRINTF1(_L("(which provides the call name) when an incoming call arrives."));
+	INFO_PRINTF1(_L("CAnswerIncomingCallAct will wait up to one second it. This test will fail if"));
+	INFO_PRINTF1(_L("the computer running this test is running slowly causing the notification to arrive"));
+	INFO_PRINTF1(_L("too late."));
+ 	
+ 	SetTestNumber(39);
+ 	
+ 	testCallParams3.iExpStat = KErrNone;
+ 	
+ 	 // Initiate callback
+	testAnswerIncomingCallAct1->CallMe(iCallCount);
+	
+	iTelephony->GetLineStatus(testCallParams3.iLine,  statusPckg2);
+	TEST1(status2.iStatus == CTelephony::EStatusRinging, ETrue);
+ 	
+ 	testAnswerIncomingCallAct1->TestAnswerIncomingCall(testCallParams3);
+ 	CActiveScheduler::Start();	
+ 	 
+	CleanupStack::PopAndDestroy(testDialNewCallAct1);
+	CleanupStack::PopAndDestroy(testHangupAct1); 
+	CleanupStack::PopAndDestroy(testAnswerIncomingCallAct1); //testAnswerIncomingCallAct1
+	return TestStepResult();	
+	}
+
+ 
+CTestAnswerIncomingCallAct* CTestAnswerIncomingCallAct::NewLC(CEtelIsvTestStep* aTestStep, CTelephony* aTelephony)
+//Factory constructor
+	{
+	CTestAnswerIncomingCallAct* obj = new(ELeave) CTestAnswerIncomingCallAct(aTestStep, aTelephony, NULL);
+	CleanupStack::PushL(obj);
+	obj->ConstructL();
+	return obj;
+	}
+	
+CTestAnswerIncomingCallAct* CTestAnswerIncomingCallAct::NewL(CEtelIsvTestStep* aTestStep, CTelephony* aTelephony, MActionParent* aParent)
+//Factory constructor
+	{
+	CTestAnswerIncomingCallAct* obj = new(ELeave) CTestAnswerIncomingCallAct(aTestStep, aTelephony, aParent);
+	CleanupStack::PushL(obj);
+	obj->ConstructL();
+	CleanupStack::Pop(obj);
+	return obj;
+	}
+		
+CTestAnswerIncomingCallAct::CTestAnswerIncomingCallAct(CEtelIsvTestStep* aTestStep, CTelephony* aTelephony, MActionParent* aParent)
+	: CEtelIsvActBase(aTestStep, aTelephony)
+	, iParent(aParent)	 
+	{  
+	}
+
+void CTestAnswerIncomingCallAct::ConstructL()
+	{    
+	iCanceller = new(ELeave) CTestCanceller(this);
+	CActiveScheduler::Add(this);
+	}
+
+CTestAnswerIncomingCallAct::~CTestAnswerIncomingCallAct()
+	{  
+	Cancel();	// if any Req outstanding, calls DoCancel() to cleanup.
+	delete iCanceller;
+	}
+
+void CTestAnswerIncomingCallAct::DoCancel()
+	{
+	iTelephony->CancelAsync(CTelephony::EAnswerIncomingCallCancel);
+	}
+
+void CTestAnswerIncomingCallAct::TestAnswerIncomingCall(TTestCallParams& aTestCallParams, TBool aCheckConcurrency) 
+	{
+	// Update the expected return value.
+	iTestCallParams = &aTestCallParams;
+
+	// Update the expected return value.
+	iExpStat=aTestCallParams.iExpStat;
+
+	// Answer incoming call
+	iTelephony->AnswerIncomingCall(iStatus, iTestCallParams->iCallId, iTestCallParams->iLine);
+	if(aCheckConcurrency)
+		{
+		TRequestStatus tmpStatus;
+		iTelephony->AnswerIncomingCall(tmpStatus, iTestCallParams->iCallId, iTestCallParams->iLine);
+		User::WaitForRequest(tmpStatus);
+		iTestStep->TEST1(tmpStatus.Int() == KErrInUse, ETrue);
+		}
+	SetActive(); 
+	}
+	
+void CTestAnswerIncomingCallAct::RunL()
+	{ 
+	// ActiveScheduler will have set status to KRequestComplete, just before
+	// calling this RunL().
+	iTestStep->INFO_PRINTF1(_L(" CTestAnswerIncomingCallAct::RunL "));
+	iTestStep->INFO_PRINTF2(_L("Request Status returned is: %d"), iStatus.Int()   );
+	iTestStep->INFO_PRINTF2(_L("Expected Status: %d"), iExpStat.Int());
+		
+	iTestStep->TEST1(iStatus.Int() == iExpStat.Int(), ETrue);	
+	
+	if(iStatus.Int() == KErrNone)
+		{
+		iTestStep->INFO_PRINTF1(_L(" KErrNone returned") );
+		iTestStep->INFO_PRINTF2(_L(" Call ID = %d"), iTestCallParams->iCallId);	 
+		}
+	else
+		{
+		iTestStep->INFO_PRINTF2(_L("Error for AnswerIncomingCall: %d"), iStatus.Int() );
+		}
+
+	if(!iParent)
+		CActiveScheduler::Stop();
+	else
+		iParent->ActionParent(iStatus.Int(), MActionParent::EAnswerIncomingCall);
+	}
+
+CTestHold::CTestHold()
+/** Each test step initialises it's own name
+*/
+{
+	// store the name of this test case
+	// this is the name that is used by the script file
+	SetTestStepName(_L("TestHold"));
+}
+
+/**
+*
+@SYMTestCaseID Etel3rdParty 12.1
+@SYMTestCaseDesc Test Hold 3rd party API
+@SYMFssID SGL.GT0166.054 v1.3 A2_Telephony_Functional_Specification.doc, REQ 2116.3.7
+*/
+  
+enum TVerdict CTestHold::doTestStepL()
+{
+	INFO_PRINTF1(_L("CTestHold::doTestStepL Start"));
+	
+	_LIT(KCallNumber1,"1789");
+	
+	// Set mapping to config.txt 
+	SetTestNumber(15); 
+	
+	//Set the call parameters for a basic call. 
+	CTelephony::TCallParamsV1 callParams1;
+	callParams1.iIdRestrict = CTelephony::ESendMyId;
+	CTelephony::TCallParamsV1Pckg callParamsPckg1(callParams1);	
+	
+	TTestCallParams testCallParams1;
+	testCallParams1.iLine = CTelephony::EVoiceLine;
+	testCallParams1.iCallParamsV1Pckg = &callParamsPckg1;
+	testCallParams1.iTelAddress.iTelNumber = KCallNumber1;
+	testCallParams1.iExpStat = KErrNone; 
+	
+	//
+	//
+	// TEST 1: OOM error case
+	// Make a call. Put the call on hold. 
+	//
+	//
+	
+	INFO_PRINTF1(_L("HOLD TEST 1 Make call.Set OOM condition. Attempt to put call on hold."));
+	
+	// Create an active DialNewCallAct object
+	CTestDialNewCallAct* testDialNewCallAct1 = CTestDialNewCallAct::NewLC(this, iTelephony);
+	
+	// Create an active TestHoldAct object
+	CTestHoldAct* TestHoldAct = CTestHoldAct::NewLC(this, iTelephony);	
+	  
+	// Create a call
+	testCallParams1.iExpStat=KErrNone;	
+	testDialNewCallAct1->TestDialNewCall(testCallParams1);
+	CActiveScheduler::Start();
+	
+	//while call is active test OOM before first hold call
+	#if defined(_DEBUG)
+	INFO_PRINTF1(_L("Test OOM on for Hold"));
+	testCallParams1.iExpStat = KErrNoMemory;
+	__UHEAP_FAILNEXT(1);	
+	TestHoldAct->TestHold(testCallParams1);
+	CActiveScheduler::Start(); 
+	__UHEAP_RESET;
+	#endif
+	
+	INFO_PRINTF1(_L("END TEST 1"));
+
+	//
+	//
+	// TEST 2: Normal case
+	// Make a call. Put the call on hold. 
+	//
+	//
+
+	INFO_PRINTF1(_L("HOLD TEST 2 Call active. Hold call. "));
+	
+	// Put the call on hold.
+	// by calling the ETEL 3rd party API
+	  
+	testCallParams1.iExpStat=KErrNone;
+	TestHoldAct->TestHold(testCallParams1, ETrue);
+	CActiveScheduler::Start();
+		 
+ 
+	// Check that the call is now at held status.
+	CTelephony::TCallStatusV1 CallStatusV1;
+	CTelephony::TCallStatusV1Pckg CallStatusPckg(CallStatusV1);
+	TInt err = iTelephony->GetCallStatus(testCallParams1.iCallId, CallStatusPckg );
+	TEST1(err == KErrNone,1);
+	TEST1(CallStatusV1.iStatus == CTelephony::EStatusHold,1);	
+	 
+	INFO_PRINTF1(_L("END TEST 2"));
+	
+	//
+	//
+	// TEST 3: Error case
+	// Call is already on hold. Try to perform a hold on the call.
+	//
+	//
+	
+	INFO_PRINTF1(_L("HOLD TEST 3. Call already held. Call hold API.")); 
+	
+	// Call 3rd Party hold API
+	testCallParams1.iExpStat=KErrAccessDenied;
+	TestHoldAct->TestHold(testCallParams1);
+	CActiveScheduler::Start();
+			 
+	// Make sure call is still in held status
+	err = iTelephony->GetCallStatus(testCallParams1.iCallId, CallStatusPckg );
+	TEST1(err == KErrNone,1);
+	TEST1(CallStatusV1.iStatus == CTelephony::EStatusHold,1);	
+	
+	INFO_PRINTF1(_L("END TEST 3"));
+	
+	//
+	//
+	// TEST 4: Error case
+	// Hang up a call. Try to put the call on hold.
+	//
+	//
+	
+	INFO_PRINTF1(_L("HOLD TEST 4 Hangup call. Try to put on hold."));
+	
+	// Call hangup 3rd party API
+	testCallParams1.iExpStat=KErrNone;	
+	CTestHangupAct* testHangupAct1 = CTestHangupAct::NewLC(this, iTelephony);	
+	testHangupAct1->TestHangup(testCallParams1);
+	CActiveScheduler::Start();	
+ 
+	// Make sure the line is idle
+	err = iTelephony->GetLineStatus(testCallParams1.iLine, CallStatusPckg);
+	TEST1(err == KErrNone,1);
+	TEST1(CallStatusV1.iStatus == CTelephony::EStatusIdle,1);	
+ 
+ 	// Attempt to hold call. Should fail. 
+	testCallParams1.iExpStat=KErrAccessDenied;	 
+	TestHoldAct->TestHold(testCallParams1);
+	CActiveScheduler::Start();
+	
+	// Make sure call is still in idle status
+	err = iTelephony->GetLineStatus(testCallParams1.iLine, CallStatusPckg);
+	TEST1(err == KErrNone,1);
+	TEST1(CallStatusV1.iStatus == CTelephony::EStatusIdle,1);	
+	
+	INFO_PRINTF1(_L("END TEST 4"));	
+	
+	//
+	//
+	// TEST 5: Test cancel
+	// Dial call. Make a request to hold call. Attempt to cancel 
+	// the request.
+	//
+	//
+	
+	INFO_PRINTF1(_L("TEST5 Hold call. Cancel hold request"));
+	
+	// Make a new call
+	testCallParams1.iExpStat=KErrNone;		
+	testDialNewCallAct1->TestDialNewCall(testCallParams1);
+	CActiveScheduler::Start();
+
+	// Request the call to be held then
+ 	// attempt to cancel the hold request
+ 	TInt cancelerr = iTelephony->CancelAsync(CTelephony::EHoldCancel);
+	TEST1(cancelerr == KErrNotFound, ETrue);
+ 	testCallParams1.iExpStat=KErrNone;	
+	CTestCanceller* canceller = TestHoldAct->RetrieveCanceller();
+	TestHoldAct->TestHold(testCallParams1);
+	canceller->Call();
+	CActiveScheduler::Start();	
+	
+	// Status will be KErrCancel if the hold request has been cancelled.
+	// It may be KErrNone if the hold request has managed to complete before 
+	// execution of the cancel.
+	TEST1(((TestHoldAct->iStatus.Int() == KErrCancel) || 
+	        (TestHoldAct->iStatus.Int() == KErrNone)), 1);
+
+	INFO_PRINTF1(_L("END TEST 5"));	
+	
+	
+	// Hang up the call for completion.
+	testCallParams1.iExpStat=KErrNone;	
+	testHangupAct1->TestHangup(testCallParams1);
+	CActiveScheduler::Start();		
+ 
+	CleanupStack::PopAndDestroy(testHangupAct1);
+	CleanupStack::PopAndDestroy(TestHoldAct);
+	CleanupStack::PopAndDestroy(testDialNewCallAct1);	
+	
+	return TestStepResult();
+	
+}
+
+ 
+CTestHoldAct* CTestHoldAct::NewLC(CEtelIsvTestStep* aTestStep, CTelephony* aTelephony)
+//Factory constructor
+	{
+	CTestHoldAct* obj = new(ELeave) CTestHoldAct(aTestStep, aTelephony);
+	CleanupStack::PushL(obj);
+	obj->ConstructL();
+	return obj;
+	}
+	
+CTestHoldAct::CTestHoldAct(CEtelIsvTestStep* aTestStep, CTelephony* aTelephony)
+	: CEtelIsvActBase(aTestStep, aTelephony)	 
+	{  
+	}
+
+void CTestHoldAct::ConstructL()
+	{    
+	iCanceller = new(ELeave) CTestCanceller(this);
+	CActiveScheduler::Add(this);
+	}
+
+CTestHoldAct::~CTestHoldAct()
+	{  
+	Cancel();	// if any Req outstanding, calls DoCancel() to cleanup.
+	delete iCanceller;
+	}
+
+void CTestHoldAct::DoCancel()
+	{
+	iTelephony->CancelAsync(CTelephony::EHoldCancel);
+	}
+
+void CTestHoldAct::TestHold(TTestCallParams& aTestCallParams, TBool aCheckConcurrency) 
+	{
+	// Update the expected return value.
+	iExpStat=aTestCallParams.iExpStat;
+	 
+	iTelephony->Hold(iStatus, aTestCallParams.iCallId);
+	if(aCheckConcurrency)
+		{
+		TRequestStatus tmpStatus;
+		iTelephony->Hold(tmpStatus, aTestCallParams.iCallId);
+		User::WaitForRequest(tmpStatus);
+		iTestStep->TEST1(tmpStatus.Int() == KErrInUse, ETrue);
+		}
+	SetActive(); 
+ 
+	}
+	
+void CTestHoldAct::RunL()
+	{ 
+	// ActiveScheduler will have set status to KRequestComplete, just before
+	// calling this RunL().
+	
+	iTestStep-> INFO_PRINTF1(_L(" CTestHoldAct::RunL "));
+	iTestStep->INFO_PRINTF2(_L("Request Status expected is: %d"), iExpStat.Int()   );
+	iTestStep->INFO_PRINTF2(_L("Request Status returned is: %d"), iStatus.Int()   );
+	
+ 	iTestStep->TEST1(iStatus.Int() == iExpStat.Int(), 1);	
+	CActiveScheduler::Stop();
+	}
+
+
+
+CTestResume::CTestResume()
+/** Each test step initialises it's own name
+*/
+{
+	// store the name of this test case
+	// this is the name that is used by the script file
+	SetTestStepName(_L("TestResume"));
+}
+
+/**
+@SYMTestCaseID Etel3rdParty 13.1, TestResume
+@SYMTestCaseDesc Test Resume 3rd party API
+@SYMFssID SGL.GT0166.054 v1.3 A2_Telephony_Functional_Specification.doc, REQ 2116.3.8
+*/
+
+enum TVerdict CTestResume::doTestStepL()
+{ 
+	
+	 INFO_PRINTF1(_L("CTestResume::doTestStepL Start"));
+	
+	_LIT(KCallNumber1,"1789");
+	
+	SetTestNumber(15); 
+	
+	//Set the call parameters  
+	CTelephony::TCallParamsV1 callParams1;
+	callParams1.iIdRestrict = CTelephony::ESendMyId;
+	CTelephony::TCallParamsV1Pckg callParamsPckg1(callParams1);	
+	
+	TTestCallParams testCallParams1;
+	testCallParams1.iLine = CTelephony::EVoiceLine;
+	testCallParams1.iCallParamsV1Pckg = &callParamsPckg1;
+	testCallParams1.iTelAddress.iTelNumber = KCallNumber1;
+	testCallParams1.iExpStat = KErrNone;
+	
+	//
+	//
+	// TEST 1: OOM error scenario
+	// Make a call. Put the call on hold. Attempt to resume the call.
+	//
+	//
+	
+	INFO_PRINTF1(_L("RESUME TEST 1 Make call. Put call on hold. Test OOM condition."));
+	
+	// Create the active objects for a basic call
+	CTestDialNewCallAct* testDialNewCallAct1 = CTestDialNewCallAct::NewLC(this, iTelephony);
+	CTestHoldAct* testHoldAct1 = CTestHoldAct::NewLC(this, iTelephony);
+	CTestResumeAct* testResumeAct1 = CTestResumeAct::NewLC(this, iTelephony);	
+	  
+	// Make a call
+	testCallParams1.iExpStat = KErrNone; 
+	testDialNewCallAct1->TestDialNewCall(testCallParams1);
+	CActiveScheduler::Start();
+	
+	// Put the call on hold.
+	// using the ETEL 3rd party API
+	testCallParams1.iExpStat = KErrNone;		
+	testHoldAct1->TestHold(testCallParams1);
+	CActiveScheduler::Start();
+
+	//while call is on hold test OOM before first resume call
+	#if defined(_DEBUG)
+		INFO_PRINTF1(_L("Test OOM on for Resume"));
+		testCallParams1.iExpStat = KErrNoMemory;
+		__UHEAP_FAILNEXT(1);	
+		testResumeAct1->TestResume(testCallParams1);
+		CActiveScheduler::Start(); 
+		__UHEAP_RESET;
+	#endif
+
+	INFO_PRINTF1(_L("END TEST 1"));	 
+	
+	//
+	//
+	// TEST 2: Normal scenario
+	// Call is at hold status. Resume the call.
+	//
+	//
+	
+	INFO_PRINTF1(_L("RESUME TEST 2 Call held. Resume call."));
+	
+	// Check that the call is now at held status.
+	CTelephony::TCallStatusV1 CallStatusV1;
+	CTelephony::TCallStatusV1Pckg CallStatusPckg(CallStatusV1);
+	TInt err = iTelephony->GetCallStatus(testCallParams1.iCallId, CallStatusPckg );
+	TEST1(err == KErrNone,1);
+	TEST1(CallStatusV1.iStatus == CTelephony::EStatusHold, 1);
+	
+	// Resume the call using the ETEL 3rdparty API
+	testCallParams1.iExpStat = KErrNone;		
+	testResumeAct1->TestResume(testCallParams1, ETrue);
+	CActiveScheduler::Start();
+ 
+ 	// Check that the call is now at active status.
+	err = iTelephony->GetCallStatus(testCallParams1.iCallId, CallStatusPckg );
+	TEST1(err == KErrNone,1);
+	TEST1(CallStatusV1.iStatus == CTelephony::EStatusConnected,1);
+		
+	INFO_PRINTF1(_L("END TEST 2"));	 
+	
+	//
+	//
+	// TEST 3: Error scenario
+	// Call is already active. Try to perform a resume on the call.
+	//
+	//
+	
+	INFO_PRINTF1(_L("RESUME TEST 3 Attempt to resume an active call"));
+	 
+	// Call is currently active from previous test
+	// Call resume 3rd party API
+	testCallParams1.iExpStat=KErrAccessDenied;
+	testResumeAct1->TestResume(testCallParams1);
+	CActiveScheduler::Start();		
+	 
+	// Make sure call is still in connected status
+	err = iTelephony->GetCallStatus(testCallParams1.iCallId, CallStatusPckg );
+	TEST1(err == KErrNone,1);
+	TEST1(CallStatusV1.iStatus == CTelephony::EStatusConnected,1);
+	
+	INFO_PRINTF1(_L("END TEST 3"));	 
+	
+	//
+	//
+	// TEST 4: Error scenario
+	// Hang up a call. Try to resume the call.
+	//
+	//
+	
+	INFO_PRINTF1(_L("RESUME TEST 4 Attempt to resume an idle call"));
+	 
+	// Hangup the active call
+	testCallParams1.iExpStat=KErrNone;
+	CTestHangupAct* testHangupAct1 = CTestHangupAct::NewLC(this, iTelephony);	
+	testHangupAct1->TestHangup(testCallParams1);
+	CActiveScheduler::Start();	
+	
+	// Make sure the line is idle
+	err = iTelephony->GetLineStatus(testCallParams1.iLine, CallStatusPckg);
+	TEST1(err == KErrNone,1);
+	TEST1(CallStatusV1.iStatus == CTelephony::EStatusIdle,1);	
+ 
+ 	// Attempt to resume call. Should fail. 
+	testCallParams1.iExpStat=KErrAccessDenied;	 
+	testResumeAct1->TestResume(testCallParams1);
+	CActiveScheduler::Start();
+	
+	// Make sure call is still in idle status
+	err = iTelephony->GetLineStatus(testCallParams1.iLine, CallStatusPckg);
+	TEST1(err == KErrNone,1);
+	TEST1(CallStatusV1.iStatus == CTelephony::EStatusIdle,1);	
+	
+	INFO_PRINTF1(_L("END TEST 4"));	 
+	
+	//
+	//
+	// TEST 5: Cancel
+	// Resume call. Attempt to cancel the request.
+	//
+	//
+	
+	INFO_PRINTF1(_L("RESUME TEST 5 Attempt to cancel a resume request"));
+	
+	// Create a new call
+	testCallParams1.iExpStat=KErrNone; 	 
+	testDialNewCallAct1->TestDialNewCall(testCallParams1);
+	CActiveScheduler::Start();
+	
+	// Hold the call
+	testCallParams1.iExpStat=KErrNone; 	
+	testHoldAct1->TestHold(testCallParams1);
+	CActiveScheduler::Start();
+
+	
+	// Request the call to be resumed then
+ 	// attempt to cancel the resume request
+ 	TInt cancelerr = iTelephony->CancelAsync(CTelephony::EResumeCancel);
+	TEST1(cancelerr == KErrNotFound, ETrue);
+ 	testCallParams1.iExpStat=KErrNone;	
+	CTestCanceller* canceller = testResumeAct1->RetrieveCanceller();
+	testResumeAct1->TestResume(testCallParams1);
+	canceller->Call();
+	CActiveScheduler::Start();	
+	
+	// Status will be KErrCancel if the hold request has been cancelled.
+	// It may be KErrNone if the resume request has managed to complete before 
+	// execution of the cancel.
+	TEST1(((testResumeAct1->iStatus.Int() == KErrCancel) || 
+	        (testResumeAct1->iStatus.Int() == KErrNone)), 1);
+	        
+
+	INFO_PRINTF1(_L("END TEST 5"));	 
+	
+	// Hang up the call for completion.
+	testHangupAct1->TestHangup(testCallParams1);
+	CActiveScheduler::Start();	
+	
+	CleanupStack::PopAndDestroy(testHangupAct1);
+	CleanupStack::PopAndDestroy(testResumeAct1);
+	CleanupStack::PopAndDestroy(testHoldAct1);
+	CleanupStack::PopAndDestroy(testDialNewCallAct1);
+	return TestStepResult();
+	
+}
+
+ 
+CTestResumeAct* CTestResumeAct::NewLC(CEtelIsvTestStep* aTestStep, CTelephony* aTelephony)
+//Factory constructor
+	{
+	CTestResumeAct* obj = new(ELeave) CTestResumeAct(aTestStep, aTelephony);
+	CleanupStack::PushL(obj);
+	obj->ConstructL();
+	return obj;
+	}
+	
+CTestResumeAct::CTestResumeAct(CEtelIsvTestStep* aTestStep, CTelephony* aTelephony)
+	: CEtelIsvActBase(aTestStep, aTelephony) 
+	{  
+	}
+
+void CTestResumeAct::ConstructL()
+	{    
+	iCanceller = new(ELeave) CTestCanceller(this);
+	CActiveScheduler::Add(this);
+	}
+
+CTestResumeAct::~CTestResumeAct()
+	{  
+	Cancel();	// if any Req outstanding, calls DoCancel() to cleanup.
+	delete iCanceller;
+	}
+
+void CTestResumeAct::DoCancel()
+	{
+	iTelephony->CancelAsync(CTelephony::EResumeCancel);
+	}
+ 
+void  CTestResumeAct::TestResume(TTestCallParams& aTestCallParams, TBool aCheckConcurrency)
+	{
+
+	// Update the expected return value.
+	iExpStat=aTestCallParams.iExpStat;
+	 
+	// Call the 3rd party API
+	iTelephony->Resume(iStatus, aTestCallParams.iCallId);
+	if(aCheckConcurrency)
+		{
+		TRequestStatus tmpStatus;
+		iTelephony->Resume(tmpStatus, aTestCallParams.iCallId);
+		User::WaitForRequest(tmpStatus);
+		iTestStep->TEST1(tmpStatus.Int() == KErrInUse, ETrue);
+		}
+	SetActive(); 	
+	 	
+	}
+	
+void CTestResumeAct::RunL()
+	{ 
+	// ActiveScheduler will have set status to KRequestComplete, just before
+	// calling this RunL().
+	iTestStep-> INFO_PRINTF1(_L(" CTestResumeAct::RunL "));
+	 
+	iTestStep->INFO_PRINTF2(_L(" Call ID is = %d"), iCallId );
+	iTestStep->INFO_PRINTF2(_L("Request Status expected is: %d"), iExpStat.Int()   );
+	iTestStep->INFO_PRINTF2(_L("Request Status returned is: %d"), iStatus.Int()   );
+	
+ 	iTestStep->TEST1(iStatus.Int() == iExpStat.Int(), 1);	
+	CActiveScheduler::Stop();
+	}
+
+
+
+CTestSwap::CTestSwap()
+/** Each test step initialises it's own name
+*/
+{
+	// store the name of this test case
+	// this is the name that is used by the script file
+	SetTestStepName(_L("TestSwap"));
+}
+
+
+/**
+@SYMTestCaseID Etel3rdParty 14.1, TestSwap
+@SYMTestCaseDesc Test Swap 3rd party API
+@SYMFssID SGL.GT0166.054 v1.3 A2_Telephony_Functional_Specification.doc, REQ 2116.3.20
+*/
+
+enum TVerdict CTestSwap::doTestStepL()
+{
+	INFO_PRINTF1(_L("CTestSwap::doTestStepL Start"));
+	
+	_LIT(KCallNumber1,"1789");
+	_LIT(KCallNumber2,"1234");
+	
+	 // Set the call parameters for call 1
+	CTelephony::TCallParamsV1 callParams1;
+	callParams1.iIdRestrict = CTelephony::ESendMyId;
+	CTelephony::TCallParamsV1Pckg callParamsPckg1(callParams1);	
+ 	
+	TTestCallParams testCallParams1;
+	testCallParams1.iLine = CTelephony::EVoiceLine;
+	testCallParams1.iCallParamsV1Pckg = &callParamsPckg1;
+	testCallParams1.iTelAddress.iTelNumber = KCallNumber1;
+	testCallParams1.iExpStat = KErrNone;
+	
+	// Set the call parameters for call 2
+	CTelephony::TCallParamsV1 callParams2;
+	callParams2.iIdRestrict = CTelephony::ESendMyId;
+	CTelephony::TCallParamsV1Pckg callParamsPckg2(callParams2);	
+	
+	TTestCallParams testCallParams2;
+	testCallParams2.iLine = CTelephony::EVoiceLine;
+	testCallParams2.iCallParamsV1Pckg = &callParamsPckg2;
+	testCallParams2.iTelAddress.iTelNumber = KCallNumber2;
+	testCallParams2.iExpStat = KErrNone;
+ 	
+	// Create 2 active DialNewCallAct objects
+	CTestDialNewCallAct* testDialNewCallAct1 = CTestDialNewCallAct::NewLC(this, iTelephony);	
+	CTestDialNewCallAct* testDialNewCallAct2 = CTestDialNewCallAct::NewLC(this, iTelephony);
+	
+	// Create hold, resume and swap active objects.
+	CTestHoldAct* testHoldAct1 = CTestHoldAct::NewLC(this, iTelephony);	
+	CTestResumeAct* testResumeAct1 = CTestResumeAct::NewLC(this, iTelephony);
+	CTestSwapAct* testSwapAct1 = CTestSwapAct::NewLC(this, iTelephony);	
+ 		
+	//
+	//
+	// Test Scenario 1: Normal scenario
+	// Make call 1. Put call 1 on hold. Make a 2nd call. 
+	// Swap the calls.
+	//
+	//
+	
+	INFO_PRINTF1(_L("SWAP TEST 1 Swap 2 calls"));
+	
+	// Create the first call
+	testDialNewCallAct1->TestDialNewCall(testCallParams1);
+	CActiveScheduler::Start();
+	
+	// Hold the first call
+	testHoldAct1->TestHold(testCallParams1);
+	CActiveScheduler::Start();
+	
+	// Create a 2nd call
+	testDialNewCallAct2->TestDialNewCall(testCallParams2);
+	CActiveScheduler::Start();	
+		 
+	// Check the calls are now in the expected states
+	CTelephony::TCallStatusV1 CallStatusV1;
+	CTelephony::TCallStatusV1Pckg CallStatusPckg(CallStatusV1);
+	
+	// Make sure call 1 is in the held state  
+	TInt err = iTelephony->GetCallStatus(testCallParams1.iCallId, CallStatusPckg );
+	TEST1(err == KErrNone,1);
+	TEST1(CallStatusV1.iStatus == CTelephony::EStatusHold,1);
+	
+	// Make sure call 2 is in the connected state  
+	err = iTelephony->GetCallStatus(testCallParams2.iCallId, CallStatusPckg );
+	TEST1(err == KErrNone,1);
+	TEST1(CallStatusV1.iStatus == CTelephony::EStatusConnected,1);
+	
+	//while calls are active test OOM before first swap call
+	#if defined(_DEBUG)
+		INFO_PRINTF1(_L("Test OOM on for Swap"));
+		testCallParams1.iExpStat = KErrNoMemory;
+		__UHEAP_FAILNEXT(1);	
+		testSwapAct1->TestSwap(testCallParams1, testCallParams2 );
+		CActiveScheduler::Start(); 
+		__UHEAP_RESET;
+	#endif
+	
+ 	// Swap the calls 
+    testCallParams1.iExpStat=KErrNone; 	 
+	testSwapAct1->TestSwap(testCallParams1, testCallParams2, ETrue);
+	CActiveScheduler::Start(); 
+	
+	// Check that the call states are now reversed.
+	
+	// Make sure call 1 is in the connected state 
+	err = iTelephony->GetCallStatus(testCallParams1.iCallId, CallStatusPckg );
+	TEST1(err == KErrNone,1);
+	TEST1(CallStatusV1.iStatus == CTelephony::EStatusConnected,1);
+	
+	// Make sure call 2 is in the held state  
+	err = iTelephony->GetCallStatus(testCallParams2.iCallId, CallStatusPckg );
+	TEST1(err == KErrNone,1);
+	TEST1(CallStatusV1.iStatus == CTelephony::EStatusHold,1); 
+	
+	INFO_PRINTF1(_L("END TEST 1"));	 
+	
+	//
+	//
+	// TEST 2: Normal scenario
+	// Swap the calls back.
+	//
+	//
+	
+	INFO_PRINTF1(_L("SWAP TEST 2: Swap calls back"));
+	
+	testSwapAct1->TestSwap(testCallParams1, testCallParams2);
+	CActiveScheduler::Start(); 
+	
+	// Check that the call states are now reversed.
+	
+	// Make sure call 1 is in the held state 
+	err = iTelephony->GetCallStatus(testCallParams1.iCallId, CallStatusPckg );
+	TEST1(err == KErrNone,1);
+	TEST1(CallStatusV1.iStatus == CTelephony::EStatusHold,1);
+	
+	// Make sure call 2 is in the connected state  
+	err = iTelephony->GetCallStatus(testCallParams2.iCallId, CallStatusPckg );
+	TEST1(err == KErrNone,1);
+	TEST1(CallStatusV1.iStatus == CTelephony::EStatusConnected,1); 
+	
+	INFO_PRINTF1(_L("END TEST 2"));	 
+	
+	//
+	// 
+	// TEST 3 Error scenario
+	// Call 1 is on hold. Call 2 is idle. Try to swap the calls.
+	//
+	//
+	
+	INFO_PRINTF1(_L("SWAP TEST 3  Call 1 on hold, call 2 idle. Attempt swap"));
+	
+	// Preparation step for the test.
+	// Hang up Call 2
+	 
+	CTestHangupAct* testHangupAct1 = CTestHangupAct::NewLC(this, iTelephony);	
+	testHangupAct1->TestHangup(testCallParams2);
+	CActiveScheduler::Start();	
+	
+	 
+	// Make sure call 1 is in the held state 
+	err = iTelephony->GetCallStatus(testCallParams1.iCallId, CallStatusPckg );
+	TEST1(err == KErrNone,1);
+	TEST1(CallStatusV1.iStatus == CTelephony::EStatusHold,1);
+	
+	 
+	// Attempt to swap the calls
+	testCallParams1.iExpStat=KErrAccessDenied; 	
+	testSwapAct1->TestSwap(testCallParams1, testCallParams2);
+	CActiveScheduler::Start(); 
+	
+	// Check call statuses are unchanged as expected
+	
+	// Make sure call 1 is in the held state 
+	err = iTelephony->GetCallStatus(testCallParams1.iCallId, CallStatusPckg );
+	TEST1(err == KErrNone,1);
+	TEST1(CallStatusV1.iStatus == CTelephony::EStatusHold,1);
+	
+	
+	INFO_PRINTF1(_L("END TEST 3"));	 
+	
+	
+	//
+	//
+	// TEST 4 : Error scenario
+	// Call 1 active. Call 2 idle. Swap the calls.
+	//
+	//
+	
+	INFO_PRINTF1(_L("SWAP TEST 4: Call 1 active, call 2 idle, swap calls"));
+	
+	// Preparation for test 
+	// Make call 1 active.
+	testCallParams1.iExpStat=KErrNone; 	
+	testResumeAct1->TestResume(testCallParams1);
+	CActiveScheduler::Start();	
+	
+	// Make sure call 1 is in the active state
+	iTelephony->GetCallStatus(testCallParams1.iCallId, CallStatusPckg );
+	TEST1(CallStatusV1.iStatus == CTelephony::EStatusConnected, ETrue);	
+	 
+	 
+	// Call 1 is active. Call 2 is idle. Try to swap the calls.
+	testCallParams1.iExpStat=KErrAccessDenied; 	
+	testSwapAct1->TestSwap(testCallParams1, testCallParams2);
+	CActiveScheduler::Start();
+	
+	
+	// Check that call states are unchanged as expected
+	
+	// Make sure call 1 is in the connected state 
+	err = iTelephony->GetCallStatus(testCallParams1.iCallId, CallStatusPckg );
+	TEST1(err == KErrNone,1);
+	TEST1(CallStatusV1.iStatus == CTelephony::EStatusConnected,1);
+	
+	INFO_PRINTF1(_L("END TEST 4"));	 
+	
+	
+	//
+	//
+	// TEST 5: Cancel
+	// Attempt to cancel a swap request
+	//
+	//
+	
+	INFO_PRINTF1(_L("SWAP TEST 5 : Cancel a swap request"));
+	
+	// Put call 1 on hold. 
+	testCallParams1.iExpStat=KErrNone; 	
+	testHoldAct1->TestHold(testCallParams1);
+	CActiveScheduler::Start();
+	
+	// Make call 2
+	testCallParams2.iExpStat=KErrNone; 	
+	testDialNewCallAct2->TestDialNewCall(testCallParams2);
+	CActiveScheduler::Start();	
+	
+	// Issue a swap request
+	testCallParams1.iExpStat=KErrNone; 	
+	testSwapAct1->TestSwap(testCallParams1, testCallParams2);
+	CActiveScheduler::Start();
+	
+	
+	// Request the call to be swapped then
+ 	// attempt to cancel the swap request
+ 	TInt cancelerr = iTelephony->CancelAsync(CTelephony::ESwapCancel);
+	TEST1(cancelerr == KErrNotFound, ETrue);
+ 	testCallParams1.iExpStat=KErrNone;	
+	CTestCanceller* canceller = testSwapAct1->RetrieveCanceller();
+	testSwapAct1->TestSwap(testCallParams1, testCallParams2 );
+	canceller->Call();
+	CActiveScheduler::Start();	
+	// Status will be KErrCancel if the swap request has been cancelled.
+	// It may be KErrNone if the swap request has managed to complete before 
+	// execution of the cancel.
+	TEST1(((testSwapAct1->iStatus.Int() == KErrCancel) || 
+	        (testSwapAct1->iStatus.Int() == KErrNone)), 1);
+	        
+	
+	INFO_PRINTF1(_L("END TEST 5"));	 
+		
+		
+	// Hang up the calls for completion
+	testHangupAct1->TestHangup(testCallParams1);
+	CActiveScheduler::Start();	
+	 
+	testHangupAct1->TestHangup(testCallParams2);
+	CActiveScheduler::Start();			 
+	 
+	CleanupStack::PopAndDestroy(testHangupAct1);
+	CleanupStack::PopAndDestroy(testSwapAct1);
+	CleanupStack::PopAndDestroy(testResumeAct1);
+	CleanupStack::PopAndDestroy(testHoldAct1);
+	CleanupStack::PopAndDestroy(testDialNewCallAct2);
+	CleanupStack::PopAndDestroy(testDialNewCallAct1);
+	
+	return TestStepResult();
+	
+}
+
+ 
+CTestSwapAct* CTestSwapAct::NewLC(CEtelIsvTestStep* aTestStep, CTelephony* aTelephony)
+//Factory constructor
+	{
+	CTestSwapAct* obj = new(ELeave) CTestSwapAct(aTestStep, aTelephony);
+	CleanupStack::PushL(obj);
+	obj->ConstructL();
+	return obj;
+	}
+	
+CTestSwapAct::CTestSwapAct(CEtelIsvTestStep* aTestStep, CTelephony* aTelephony)
+	: CEtelIsvActBase(aTestStep, aTelephony)	 
+	{  
+	}
+
+void CTestSwapAct::ConstructL()
+	{    
+	iCanceller = new(ELeave) CTestCanceller(this);
+	CActiveScheduler::Add(this);
+	}
+
+CTestSwapAct::~CTestSwapAct()
+	{  
+	Cancel();	// if any Req outstanding, calls DoCancel() to cleanup.
+	delete iCanceller;
+	}
+
+void CTestSwapAct::DoCancel()
+	{
+	iTelephony->CancelAsync(CTelephony::ESwapCancel);
+	}
+
+void CTestSwapAct::TestSwap(TTestCallParams& aTestCallParams1, TTestCallParams& aTestCallParams2, TBool aCheckConcurrency)	  
+               
+	{
+	// Update the expected return value.
+	iExpStat=aTestCallParams1.iExpStat;
+	 
+	iTelephony->Swap(iStatus, aTestCallParams1.iCallId, aTestCallParams2.iCallId );
+	if(aCheckConcurrency)
+		{
+		TRequestStatus tmpStatus;
+		iTelephony->Swap(tmpStatus, aTestCallParams1.iCallId, aTestCallParams2.iCallId );
+		User::WaitForRequest(tmpStatus);
+		iTestStep->TEST1(tmpStatus.Int() == KErrInUse, ETrue);
+		}
+	SetActive(); 	
+	 
+	}
+	
+void CTestSwapAct::RunL()
+	{ 
+	// ActiveScheduler will have set status to KRequestComplete, just before
+	// calling this RunL().
+	
+	iTestStep-> INFO_PRINTF1(_L(" CTestSwapAct::RunL "));
+	iTestStep->INFO_PRINTF2(_L("Request Status expected is: %d"), iExpStat.Int()   );
+	iTestStep->INFO_PRINTF2(_L("Request Status returned is: %d"), iStatus.Int()   );
+	
+ 	iTestStep->TEST1(iStatus.Int() == iExpStat.Int(), 1);	
+	CActiveScheduler::Stop();
+	}
+
+ 
+ 
+CTestHoldResume2Calls::CTestHoldResume2Calls()
+/** Each test step initialises it's own name
+*/
+{
+	// store the name of this test case
+	// this is the name that is used by the script file
+	SetTestStepName(_L("TestHoldResume2Calls"));
+}
+
+/**
+@SYMTestCaseID Etel3rdParty 15.1, TestHoldResume2Calls
+@SYMTestCaseDesc Test Hold, Resume 3rd party APIs
+@SYMFssID SGL.GT0166.054 v1.3 A2_Telephony_Functional_Specification.doc, REQ 2116.3.7, 2116.3.8
+*/
+
+enum TVerdict CTestHoldResume2Calls::doTestStepL()
+{
+	INFO_PRINTF1(_L("CTestHoldResume2Calls::doTestStepL Start"));
+	
+	_LIT(KGoodNumber1,"1789");
+	_LIT(KGoodNumber2,"1234");
+	
+	SetTestNumber(15); 
+	
+	//Set the call parameters for call 1
+	CTelephony::TCallParamsV1 callParams1;
+	callParams1.iIdRestrict = CTelephony::ESendMyId;
+	CTelephony::TCallParamsV1Pckg callParamsPckg1(callParams1);	
+	
+	TTestCallParams testCallParams1;
+	testCallParams1.iLine = CTelephony::EVoiceLine;
+	testCallParams1.iCallParamsV1Pckg = &callParamsPckg1;
+	testCallParams1.iTelAddress.iTelNumber = KGoodNumber1;
+	testCallParams1.iExpStat = KErrNone;
+	
+	//Set the call parameters for call 2
+	CTelephony::TCallParamsV1 callParams2;
+	callParams2.iIdRestrict = CTelephony::ESendMyId;
+	CTelephony::TCallParamsV1Pckg callParamsPckg2(callParams2);	
+	
+	TTestCallParams testCallParams2;
+	testCallParams2.iLine = CTelephony::EVoiceLine;
+	testCallParams2.iCallParamsV1Pckg = &callParamsPckg2;
+	testCallParams2.iTelAddress.iTelNumber = KGoodNumber2;
+	testCallParams2.iExpStat = KErrNone;
+	
+	 
+	
+	// Create 2 active DialNewCallAct objects
+	CTestDialNewCallAct* testDialNewCallAct1 = CTestDialNewCallAct::NewLC(this, iTelephony);	
+	CTestDialNewCallAct* testDialNewCallAct2 = CTestDialNewCallAct::NewLC(this, iTelephony);
+	
+	// Creat hold, resume and swap active objects.
+	CTestHoldAct* testHoldAct1 = CTestHoldAct::NewLC(this, iTelephony);
+	CTestResumeAct* testResumeAct1 = CTestResumeAct::NewLC(this, iTelephony);
+	CTestSwapAct* testSwapAct1 = CTestSwapAct::NewLC(this, iTelephony);
+	
+	 
+	//
+	// TEST SUMMARY //
+	// 
+	// This set of tests covers any hold and resume scenarios involving 
+	// 2 calls. These are the tests not covered by TestHold and TestResume 
+	// which cover the single call scenarios.
+	//  
+	//		// Attempt to make a 2nd call
+	// 1. 	Call 1 is active. Make a 2nd call. 
+	// 		Expected Result: Call 2 will not be allowed.
+	// 2. 	Call 1 is on hold. Make a 2nd call. 
+	// 		Expected Result: Call 1 remains on hold. Call 2 active.
+	//
+	//		// Make 2 calls. Attempt to resume the active call.
+	// 3. 	Call 1 is on hold. Call 2 is active. Resume call 2.
+	//		Expected Result: Call 1 remains on hold. Call 2 remains active.
+	// 4.	Call 1 is active. Call 2 is on hold. Resume call 1.
+	//		Expected Result: Call 1 remains active. Call 2 remains on hold.
+	//
+	//		// Make 2 calls. Attempt to hold the held call.
+	// 5.	Call 1 is active. Call 2 is on hold. Hold call 2.
+	//		Expected Result: Call 1 remains active. Call 2 remains on hold.
+	// 6. 	Call 1 is on hold. Call 2 is active. Hold Call 1.
+	//		Expected Result: Call 1 remains on hold. Call 2 remains active.
+	//
+	// 		// Make 2 calls. Attempt to resume the held call
+	// 7. 	Call 1 is on hold. Call 2 is active. Resume call 1.
+	//		Expected Result: Call 1 remains on hold. Call 2 remains active.
+	// 8.	Call 1 is active. Call 2 is on hold. Resume call 2.
+	//		Expected Result: Call 1 remains active. Call 2 remains on hold.
+	//
+	//		// Make 2 calls. Attempt to hold the active call.
+	// 9.	Call 1 is active. Call 2 is on hold. Hold call 1.
+	//		Expected Result: Call 1 remains active. Call 2 remains on hold.
+	// 10. 	Call 1 is on hold. Call 2 is active. Hold Call 2.
+	//		Expected Result: Call 1 remains on hold. Call 2 remains active.
+	
+	
+	
+	// Test Scenario 1.
+	// 1. 	Call 1 is active. Make a 2nd call. 
+	// 		Expected Result: Call 2 will not be allowed. 
+	
+	INFO_PRINTF1(_L("Hold-Resume-2Calls TEST 1 "));
+	 
+	// Create the first call
+	testCallParams1.iExpStat = KErrNone;
+	testDialNewCallAct1->TestDialNewCall(testCallParams1);
+	CActiveScheduler::Start();
+	
+	// Create a 2nd call
+	testCallParams2.iExpStat = KErrGeneral;
+	testDialNewCallAct2->TestDialNewCall(testCallParams2);
+	CActiveScheduler::Start();	
+		 
+	// Check that the calls are now in the expected states
+	CTelephony::TCallStatusV1 CallStatusV1;
+	CTelephony::TCallStatusV1Pckg CallStatusPckg(CallStatusV1);
+	
+	TInt err = iTelephony->GetCallStatus(testCallParams1.iCallId, CallStatusPckg );
+	TEST1(err == KErrNone,1);
+	TEST1(CallStatusV1.iStatus == CTelephony::EStatusConnected,1);
+  
+   
+	INFO_PRINTF1(_L("END TEST 1"));	 
+	
+	// Test Scenario 2
+	// 2. 	Call 1 is on hold. Make a 2nd call. 
+	// 		Expected Result: Call 1 remains on hold. Call 2 active.
+	
+	INFO_PRINTF1(_L("Hold-Resume-2Calls TEST 2 "));
+	
+	// Put call 1 on hold. 
+	testCallParams1.iExpStat=KErrNone; 	
+	testHoldAct1->TestHold(testCallParams1);
+	CActiveScheduler::Start();
+	
+	// Create a 2nd call
+	testCallParams2.iExpStat = KErrNone;
+	testDialNewCallAct2->TestDialNewCall(testCallParams2);
+	CActiveScheduler::Start();	
+	
+	// Check that the calls are now in the expected states 
+	err = iTelephony->GetCallStatus(testCallParams1.iCallId, CallStatusPckg );
+	TEST1(err == KErrNone,1);
+	TEST1(CallStatusV1.iStatus == CTelephony::EStatusHold,1);
+	
+	// Check that the calls are now in the expected states
+	err = iTelephony->GetCallStatus(testCallParams2.iCallId, CallStatusPckg );
+	TEST1(err == KErrNone,1);
+	TEST1(CallStatusV1.iStatus == CTelephony::EStatusConnected,1);
+	
+	INFO_PRINTF1(_L("END TEST 2"));	 
+	
+	//
+	//		Test scenario 3
+	// 3. 	Call 1 is on hold. Call 2 is active. Resume call 2.
+	//		Expected Result: Call 1 remains on hold. Call 2 remains active.
+	
+	INFO_PRINTF1(_L("Hold-Resume-2Calls TEST 3 ")); 
+	
+	// Resume Call 2
+	testCallParams2.iExpStat=KErrAccessDenied;	 
+	testResumeAct1->TestResume(testCallParams2);
+	CActiveScheduler::Start();
+	
+	// Check that the calls are now in the expected states 
+	err = iTelephony->GetCallStatus(testCallParams1.iCallId, CallStatusPckg );
+	TEST1(err == KErrNone,1);
+	TEST1(CallStatusV1.iStatus == CTelephony::EStatusHold,1);
+	
+	// Check that the calls are now in the expected states
+	err = iTelephony->GetCallStatus(testCallParams2.iCallId, CallStatusPckg );
+	TEST1(err == KErrNone,1);
+	TEST1(CallStatusV1.iStatus == CTelephony::EStatusConnected,1);
+	
+	INFO_PRINTF1(_L("END TEST 3"));	 
+	
+	
+	//
+	//		Test scenario 4
+	// 4.	Call 1 is active. Call 2 is on hold. Resume call 1.
+	//		Expected Result: Call 1 remains active. Call 2 remains on hold.
+	
+	INFO_PRINTF1(_L("Hold-Resume-2Calls TEST 4 ")); 
+	
+	// Issue a swap request
+	testCallParams1.iExpStat=KErrNone; 	
+	testSwapAct1->TestSwap(testCallParams1, testCallParams2);
+	CActiveScheduler::Start();
+	
+	// Check that the calls are now in the expected states 
+	err = iTelephony->GetCallStatus(testCallParams1.iCallId, CallStatusPckg );
+	TEST1(err == KErrNone,1);
+	TEST1(CallStatusV1.iStatus == CTelephony::EStatusConnected,1);
+	
+	// Check that the calls are now in the expected states
+	err = iTelephony->GetCallStatus(testCallParams2.iCallId, CallStatusPckg );
+	TEST1(err == KErrNone,1);
+	TEST1(CallStatusV1.iStatus == CTelephony::EStatusHold,1);
+	
+	// Resume Call 1
+	testCallParams1.iExpStat=KErrAccessDenied;	 
+	testResumeAct1->TestResume(testCallParams1);
+	CActiveScheduler::Start();
+	
+	// Check that the calls are now in the expected states 
+	err = iTelephony->GetCallStatus(testCallParams1.iCallId, CallStatusPckg );
+	TEST1(err == KErrNone,1);
+	TEST1(CallStatusV1.iStatus == CTelephony::EStatusConnected,1);
+	
+	// Check that the calls are now in the expected states
+	err = iTelephony->GetCallStatus(testCallParams2.iCallId, CallStatusPckg );
+	TEST1(err == KErrNone,1);
+	TEST1(CallStatusV1.iStatus == CTelephony::EStatusHold,1);
+	
+	INFO_PRINTF1(_L("END TEST 4"));	 
+	
+	//
+	//
+	// 5.	Call 1 is active. Call 2 is on hold. Hold call 2.
+	//		Expected Result: Call 1 remains active. Call 2 remains on hold.
+	
+	INFO_PRINTF1(_L("Hold-Resume-2Calls TEST 5 ")); 
+	
+	// Hold Call 2
+	testCallParams2.iExpStat=KErrAccessDenied;	 
+	testHoldAct1->TestHold(testCallParams2);
+	CActiveScheduler::Start();
+	
+	// Check that the calls are now in the expected states 
+	err = iTelephony->GetCallStatus(testCallParams1.iCallId, CallStatusPckg );
+	TEST1(err == KErrNone,1);
+	TEST1(CallStatusV1.iStatus == CTelephony::EStatusConnected,1);
+	
+	// Check that the calls are now in the expected states
+	err = iTelephony->GetCallStatus(testCallParams2.iCallId, CallStatusPckg );
+	TEST1(err == KErrNone,1);
+	TEST1(CallStatusV1.iStatus == CTelephony::EStatusHold,1);
+	
+	INFO_PRINTF1(_L("END TEST 5"));	 
+	
+	
+	//
+	//
+	// 6. 	Call 1 is on hold. Call 2 is active. Hold Call 1.
+	//		Expected Result: Call 1 remains on hold. Call 2 remains active.
+	//
+
+	
+	INFO_PRINTF1(_L("Hold-Resume-2Calls TEST 6 ")); 
+	
+	// Issue a swap request
+	testCallParams1.iExpStat=KErrNone; 	
+	testSwapAct1->TestSwap(testCallParams1, testCallParams2);
+	CActiveScheduler::Start();
+	
+	// Check that the calls are now in the expected states 
+	err = iTelephony->GetCallStatus(testCallParams1.iCallId, CallStatusPckg );
+	TEST1(err == KErrNone,1);
+	TEST1(CallStatusV1.iStatus == CTelephony::EStatusHold,1);
+	
+	// Check that the calls are now in the expected states
+	err = iTelephony->GetCallStatus(testCallParams2.iCallId, CallStatusPckg );
+	TEST1(err == KErrNone,1);
+	TEST1(CallStatusV1.iStatus == CTelephony::EStatusConnected,1);
+	
+	// Hold Call 1
+	testCallParams1.iExpStat=KErrAccessDenied;	 
+	testHoldAct1->TestHold(testCallParams1);
+	CActiveScheduler::Start();
+	
+	// Check that the calls are now in the expected states 
+	err = iTelephony->GetCallStatus(testCallParams1.iCallId, CallStatusPckg );
+	TEST1(err == KErrNone,1);
+	TEST1(CallStatusV1.iStatus == CTelephony::EStatusHold,1);
+	
+	// Check that the calls are now in the expected states
+	err = iTelephony->GetCallStatus(testCallParams2.iCallId, CallStatusPckg );
+	TEST1(err == KErrNone,1);
+	TEST1(CallStatusV1.iStatus == CTelephony::EStatusConnected,1);
+	
+	INFO_PRINTF1(_L("END TEST 6"));	 
+	
+	
+	//
+	//
+	// 7. 	Call 1 is on hold. Call 2 is active. Resume call 1.
+	//		Expected Result: Call 1 remains on hold. Call 2 remains active.
+	
+	INFO_PRINTF1(_L("Hold-Resume-2Calls TEST 7 "));
+	
+	// Resume call 1. 
+	testCallParams1.iExpStat=KErrGeneral; 	
+	testResumeAct1->TestResume(testCallParams1);
+	CActiveScheduler::Start();
+	
+	// Check that the calls are now in the expected states 
+	err = iTelephony->GetCallStatus(testCallParams1.iCallId, CallStatusPckg );
+	TEST1(err == KErrNone,1);
+	TEST1(CallStatusV1.iStatus == CTelephony::EStatusHold,1);
+
+	
+	// Check that the calls are now in the expected states
+	err = iTelephony->GetCallStatus(testCallParams2.iCallId, CallStatusPckg );
+	TEST1(err == KErrNone,1);
+	TEST1(CallStatusV1.iStatus == CTelephony::EStatusConnected,1);
+	
+	INFO_PRINTF1(_L("END TEST 7"));	 
+	
+	//
+	//
+	// 8.	Call 1 is active. Call 2 is on hold. Resume call 2.
+	//		Expected Result: Call 1 remains active. Call 2 remains on hold.
+	//
+	
+	INFO_PRINTF1(_L("Hold-Resume-2Calls TEST 8 "));
+	
+	
+	// Issue a swap request
+	testCallParams1.iExpStat=KErrNone; 	
+	testSwapAct1->TestSwap(testCallParams1, testCallParams2);
+	CActiveScheduler::Start();
+	
+	// Check that the calls are now in the expected states 
+	err = iTelephony->GetCallStatus(testCallParams1.iCallId, CallStatusPckg );
+	TEST1(err == KErrNone,1);
+	TEST1(CallStatusV1.iStatus == CTelephony::EStatusConnected,1);
+	
+	// Check that the calls are now in the expected states
+	err = iTelephony->GetCallStatus(testCallParams2.iCallId, CallStatusPckg );
+	TEST1(err == KErrNone,1);
+	TEST1(CallStatusV1.iStatus == CTelephony::EStatusHold,1);
+	
+	// Resume call 2. 
+	testCallParams2.iExpStat=KErrGeneral; 	
+	testResumeAct1->TestResume(testCallParams2);
+	CActiveScheduler::Start();
+	
+	// Check that the calls are now in the expected states 
+	err = iTelephony->GetCallStatus(testCallParams1.iCallId, CallStatusPckg );
+	TEST1(err == KErrNone,1);
+	TEST1(CallStatusV1.iStatus == CTelephony::EStatusConnected,1);
+	
+	// Check that the calls are now in the expected states
+	err = iTelephony->GetCallStatus(testCallParams2.iCallId, CallStatusPckg );
+	TEST1(err == KErrNone,1);
+	TEST1(CallStatusV1.iStatus == CTelephony::EStatusHold,1);
+	
+	INFO_PRINTF1(_L("END TEST 8"));	 
+	
+	
+	//
+	//		 
+	// 9.	Call 1 is active. Call 2 is on hold. Hold call 1.
+	//		Expected Result: Call 1 remains active. Call 2 remains on hold.
+	
+	INFO_PRINTF1(_L("Hold-Resume-2Calls TEST 9 "));
+	
+	// Hold Call 1
+	testCallParams1.iExpStat=KErrAlreadyExists;	 
+	testHoldAct1->TestHold(testCallParams1);
+	CActiveScheduler::Start();
+	
+	// Check that the calls are now in the expected states 
+	err = iTelephony->GetCallStatus(testCallParams1.iCallId, CallStatusPckg );
+	TEST1(err == KErrNone,1);
+	TEST1(CallStatusV1.iStatus == CTelephony::EStatusConnected,1);
+	
+	// Check that the calls are now in the expected states
+	err = iTelephony->GetCallStatus(testCallParams2.iCallId, CallStatusPckg );
+	TEST1(err == KErrNone,1);
+	TEST1(CallStatusV1.iStatus == CTelephony::EStatusHold,1);
+	
+	INFO_PRINTF1(_L("END TEST 9"));	 
+	
+
+	//
+	//
+	// 10. 	Call 1 is on hold. Call 2 is active. Hold Call 2.
+	//		Expected Result: Call 1 remains on hold. Call 2 remains active.
+	
+	INFO_PRINTF1(_L("Hold-Resume-2Calls TEST 10 "));
+	
+	// Issue a swap request
+	testCallParams1.iExpStat=KErrNone; 	
+	testSwapAct1->TestSwap(testCallParams1, testCallParams2);
+	CActiveScheduler::Start();
+	
+	// Check that the calls are now in the expected states 
+	err = iTelephony->GetCallStatus(testCallParams1.iCallId, CallStatusPckg );
+	TEST1(err == KErrNone,1);
+	TEST1(CallStatusV1.iStatus == CTelephony::EStatusHold,1);
+	
+	// Check that the calls are now in the expected states
+	err = iTelephony->GetCallStatus(testCallParams2.iCallId, CallStatusPckg );
+	TEST1(err == KErrNone,1);
+	TEST1(CallStatusV1.iStatus == CTelephony::EStatusConnected,1);
+	
+	
+	// Hold Call 2
+	testCallParams2.iExpStat=KErrAlreadyExists;	 
+	testHoldAct1->TestHold(testCallParams2);
+	CActiveScheduler::Start();
+	
+	// Check that the calls are now in the expected states 
+	err = iTelephony->GetCallStatus(testCallParams1.iCallId, CallStatusPckg );
+	TEST1(err == KErrNone,1);
+	TEST1(CallStatusV1.iStatus == CTelephony::EStatusHold,1);
+	
+	// Check that the calls are now in the expected states
+	err = iTelephony->GetCallStatus(testCallParams2.iCallId, CallStatusPckg );
+	TEST1(err == KErrNone,1);
+	TEST1(CallStatusV1.iStatus == CTelephony::EStatusConnected,1);
+
+	INFO_PRINTF1(_L("END TEST 10"));	 
+	
+	// Hang up the calls for completion
+	CTestHangupAct* testHangupAct1 = CTestHangupAct::NewLC(this, iTelephony);
+	testCallParams1.iExpStat=KErrNone;	 	
+	testHangupAct1->TestHangup(testCallParams1);
+	CActiveScheduler::Start();	
+	
+	testCallParams2.iExpStat=KErrNone;	 	 
+	testHangupAct1->TestHangup(testCallParams2);
+	CActiveScheduler::Start();			 
+	 
+	  
+	CleanupStack::PopAndDestroy(testHangupAct1);
+	CleanupStack::PopAndDestroy(testSwapAct1);
+	CleanupStack::PopAndDestroy(testResumeAct1);
+	CleanupStack::PopAndDestroy(testHoldAct1);
+	CleanupStack::PopAndDestroy(testDialNewCallAct2);
+	CleanupStack::PopAndDestroy(testDialNewCallAct1);  
+	
+	return TestStepResult();	
+}
+
+
+CTestGetCallDynamicCaps::CTestGetCallDynamicCaps()
+/** Each test step initialises it's own name
+*/
+	{
+	// store the name of this test case
+	// this is the name that is used by the script file
+	SetTestStepName(_L("TestGetCallDynamicCaps"));
+	}
+
+/**
+*
+@SYMTestCaseID Etel3rdParty 24.1, TestGetCallDynamicCaps
+@SYMTestCaseDesc Test GetCallDynamicCaps 3rd party API
+@SYMFssID SGL.GT0166.054 v1.3 A2_Telephony_Functional_Specification.doc, REQ 2116.3.19
+*/ 
+
+enum TVerdict CTestGetCallDynamicCaps::doTestStepL()
+	{
+ 
+	INFO_PRINTF1(_L("Test retrieving of the line's dynamic call capabilities"));
+	
+	_LIT(KCallNumber1,"1789");
+	_LIT(KCallNumber2,"1234");
+	
+	SetTestNumber(15); 
+	
+	//Set the call parameters for MO call
+	CTelephony::TCallParamsV1 callParams;
+	callParams.iIdRestrict = CTelephony::ESendMyId;
+	CTelephony::TCallParamsV1Pckg callParamsPckg(callParams);	
+			
+	TTestCallParams testCallParams1;
+	testCallParams1.iLine = CTelephony::EVoiceLine;
+	testCallParams1.iCallParamsV1Pckg = &callParamsPckg;
+	testCallParams1.iTelAddress.iTelNumber = KCallNumber1;
+	testCallParams1.iExpStat = KErrNone;
+	
+	TTestCallParams testCallParams2;
+	testCallParams2.iLine = CTelephony::EVoiceLine;
+	testCallParams2.iCallParamsV1Pckg = &callParamsPckg;
+	testCallParams2.iTelAddress.iTelNumber = KCallNumber2;
+	testCallParams2.iExpStat = KErrNone;
+
+	// Create an active DialNewCallAct object
+	CTestDialNewCallAct* testDialNewCallAct1 = CTestDialNewCallAct::NewLC(this, iTelephony);
+	
+	// Create an second active DialNewCallAct object
+	CTestDialNewCallAct* testDialNewCallAct2 = CTestDialNewCallAct::NewLC(this, iTelephony);
+	
+	// Create an active TestHoldAct object
+	CTestHoldAct* testHoldAct1 = CTestHoldAct::NewLC(this, iTelephony);	
+	
+	// Create an active TestResumeAct object
+	CTestResumeAct* testResumeAct1 = CTestResumeAct::NewLC(this, iTelephony);	
+	
+	// Create status object for GetCallStatus calls
+	CTelephony::TCallStatusV1 CallStatusV1;
+	CTelephony::TCallStatusV1Pckg CallStatusPckg(CallStatusV1);
+	TPckgBuf<CTelephony::TCallStatusV1> CallStatusBuff(CallStatusV1);
+	TDes8* CallStatusData;
+	if (iBufferMode)
+		{
+		CallStatusData = &CallStatusBuff;
+		}
+	else
+		{
+		CallStatusData = &CallStatusPckg;
+		}
+	
+	CTelephony::TCallStatusV1& CallStatusResult = 
+		reinterpret_cast<CTelephony::TCallStatusV1&> ( const_cast<TUint8&> (*CallStatusData->Ptr() ) );
+	
+	//
+	//
+	// TEST 1: Normal case
+	// Make a call. Retrieve the call capabilities. 
+	//
+	//
+	
+	INFO_PRINTF1(_L(" TEST 1 Dynamic Call Caps. Get caps in connected state "));
+	
+	// Create a call
+	testCallParams1.iExpStat=KErrNone;	
+	testDialNewCallAct1->TestDialNewCall(testCallParams1);
+	CActiveScheduler::Start();
+	
+	// Check the call is now at connected status 
+
+	TInt err = iTelephony->GetCallStatus(testCallParams1.iCallId, *CallStatusData );
+	TEST1(err == KErrNone,1);
+	TEST1(CallStatusResult.iStatus == CTelephony::EStatusConnected,1);	
+	
+	// Get the call capabilities 
+	CTelephony::TCallCapsV1 callCaps;
+	CTelephony::TCallCapsV1Pckg callCapsPckg(callCaps);
+	TPckgBuf<CTelephony::TCallCapsV1> callCapsBuff(callCaps);
+	TDes8* callCapsData;
+	if (iBufferMode)
+		{
+		callCapsData = &callCapsBuff;
+		}
+	else
+		{
+		callCapsData = &callCapsPckg;
+		}
+		
+	CTelephony::TCallCapsV1& callCapsResults = 
+		reinterpret_cast<CTelephony::TCallCapsV1&> ( const_cast<TUint8&> ( *callCapsData->Ptr() ) );
+	
+	err = iTelephony->GetCallDynamicCaps(testCallParams1.iCallId, *callCapsData);
+	TEST1(err==KErrNone, ETrue);
+	INFO_PRINTF2(_L("iControlCaps is %x"), callCapsResults.iControlCaps);
+		
+	// Check that the call capabilties are that the call can be held or swapped
+	// but not resumed.
+	TEST1(callCapsResults.iControlCaps & CTelephony::KCapsHold, 1);
+	TEST1(callCapsResults.iControlCaps & CTelephony::KCapsSwap, 1);
+	TEST1(!(callCapsResults.iControlCaps & CTelephony::KCapsResume), 1);
+	
+	
+	INFO_PRINTF1(_L("END TEST 1"));
+	
+	//
+	//
+	// TEST 2: Normal case
+	// Put the call on hold. Retrieve the call capabilities. 
+	//
+	//
+	
+	INFO_PRINTF1(_L(" TEST 2 Dynamic Call Caps. Get caps in held state "));
+	
+	 
+	// Put the call on hold.
+	// by calling the ETEL 3rd party API	  
+	testCallParams1.iExpStat=KErrNone;
+	testHoldAct1->TestHold(testCallParams1);
+	CActiveScheduler::Start();
+	
+	// Check that the call is now at held status.
+	err = iTelephony->GetCallStatus(testCallParams1.iCallId, *CallStatusData );
+	TEST1(err == KErrNone,1);
+	TEST1(CallStatusResult.iStatus == CTelephony::EStatusHold,1);
+	
+	// Get the call capabilities 
+	err = iTelephony->GetCallDynamicCaps(testCallParams1.iCallId, *callCapsData);
+	TEST1(err==KErrNone, ETrue);
+	INFO_PRINTF2(_L("iControlCaps is %x"), callCapsResults.iControlCaps);
+		
+	// Check that the call capabilties are that the call can be resumed or swapped
+	// but not held.
+	TEST1(!(callCapsResults.iControlCaps & CTelephony::KCapsHold), 1);
+	TEST1(callCapsResults.iControlCaps & CTelephony::KCapsSwap, 1);
+	TEST1(callCapsResults.iControlCaps & CTelephony::KCapsResume, 1);	
+	
+	INFO_PRINTF1(_L("END TEST 2")); 
+	
+	//
+	//
+	// TEST 3: Normal case
+	// Resume the call. Retrieve the call capabilities. 
+	//
+	//
+	
+	INFO_PRINTF1(_L(" TEST 3 Dynamic Call Caps. Get caps after call resumed "));
+	
+	// Resume the call
+	// by calling the ETEL 3rd party API	  
+	testCallParams1.iExpStat=KErrNone;
+	testResumeAct1->TestResume(testCallParams1);
+	CActiveScheduler::Start();
+	
+	// Check that the call is now at connected status.
+	err = iTelephony->GetCallStatus(testCallParams1.iCallId, *CallStatusData );
+	TEST1(err == KErrNone,1);
+	TEST1(CallStatusResult.iStatus == CTelephony::EStatusConnected,1);
+	
+	// Get the call capabilities 
+	err = iTelephony->GetCallDynamicCaps(testCallParams1.iCallId, *callCapsData);
+	TEST1(err==KErrNone, ETrue);
+	INFO_PRINTF2(_L("iControlCaps is %x"), callCapsResults.iControlCaps);
+		
+	// Check that the call capabilities are that the call can be held or swapped
+	// but not resumed.
+	TEST1(callCapsResults.iControlCaps & CTelephony::KCapsHold, 1);
+	TEST1(callCapsResults.iControlCaps & CTelephony::KCapsSwap, 1);
+	TEST1(!(callCapsResults.iControlCaps & CTelephony::KCapsResume), 1);	
+	
+	INFO_PRINTF1(_L("END TEST 3"));
+	
+	
+	//
+	//
+	// TEST 4: Normal case
+	// Call 1 on hold. Call 2 active.
+	// Retrieve call capabilities. 
+	//
+	//
+	
+	INFO_PRINTF1(_L(" TEST 4 Dynamic Call Caps. Check capability in 2 call case "));
+	
+	
+	// Hold Call 1
+	testCallParams1.iExpStat=KErrNone;	 
+	testHoldAct1->TestHold(testCallParams1);
+	CActiveScheduler::Start();
+	
+	// Create a second call.
+	testCallParams2.iExpStat=KErrNone;	
+	testDialNewCallAct2->TestDialNewCall(testCallParams2);
+	CActiveScheduler::Start();
+	
+	// Check the first call is now at held status
+    err = iTelephony->GetCallStatus(testCallParams1.iCallId, *CallStatusData );
+	TEST1(err == KErrNone,1);
+	TEST1(CallStatusResult.iStatus == CTelephony::EStatusHold,1);	
+	
+	// Check the second call is now at connected status
+	err = iTelephony->GetCallStatus(testCallParams2.iCallId, *CallStatusData );
+	TEST1(err == KErrNone,1);
+	TEST1(CallStatusResult.iStatus == CTelephony::EStatusConnected,1);	
+	
+	// Get the call capabilities of the first call
+	err = iTelephony->GetCallDynamicCaps(testCallParams1.iCallId, *callCapsData);
+	TEST1(err==KErrNone, 1);
+	INFO_PRINTF2(_L("iControlCaps is %x"), callCapsResults.iControlCaps);
+	
+	// Check that the call capabilties are that the call can be swapped 
+	// but not held or resumed.
+	TEST1(!(callCapsResults.iControlCaps & CTelephony::KCapsHold), 1);
+	TEST1(callCapsResults.iControlCaps & CTelephony::KCapsSwap, 1);
+	TEST1(!(callCapsResults.iControlCaps & CTelephony::KCapsResume), 1);
+ 
+	// Get the call capabilities of the second call
+	err = iTelephony->GetCallDynamicCaps(testCallParams2.iCallId, *callCapsData);
+	TEST1(err==KErrNone, 1);
+	INFO_PRINTF2(_L("iControlCaps is %x"), callCapsResults.iControlCaps);
+		
+	// Check that the call capabilties are that the call can be held or swapped
+	// but not resumed.
+	TEST1(!(callCapsResults.iControlCaps & CTelephony::KCapsHold), 1);
+	TEST1(callCapsResults.iControlCaps & CTelephony::KCapsSwap, 1);
+	TEST1(!(callCapsResults.iControlCaps & CTelephony::KCapsResume), 1);
+	
+	
+	INFO_PRINTF1(_L("END TEST 4"));
+	
+	//
+	//
+	// TEST 5: Normal case
+	// Ensure caps are set correctly after a swap operation.
+	// Call 1 active. Call 2 on hold.
+	// Retrieve call capabilities. 
+	//
+	//
+	
+	INFO_PRINTF1(_L(" TEST 5 Dynamic Call Caps. Check capability in 2 call case "));
+	
+	// Swap the calls 
+	CTestSwapAct* testSwapAct1 = CTestSwapAct::NewLC(this, iTelephony);	
+    testCallParams1.iExpStat=KErrNone; 	 
+	testSwapAct1->TestSwap(testCallParams1, testCallParams2 );
+	CActiveScheduler::Start(); 
+	
+	// Check the first call is now at connected status
+    err = iTelephony->GetCallStatus(testCallParams1.iCallId, *CallStatusData );
+	TEST1(err == KErrNone,1);
+	TEST1(CallStatusResult.iStatus == CTelephony::EStatusConnected,1);	
+	
+	// Check the second call is now at held status
+	err = iTelephony->GetCallStatus(testCallParams2.iCallId, *CallStatusData );
+	TEST1(err == KErrNone,1);
+	TEST1(CallStatusResult.iStatus == CTelephony::EStatusHold,1);	
+	
+	// Get the call capabilities of the first call
+	err = iTelephony->GetCallDynamicCaps(testCallParams1.iCallId, *callCapsData);
+	TEST1(err==KErrNone, 1);
+	INFO_PRINTF2(_L("iControlCaps is %x"), callCapsResults.iControlCaps);
+	
+	// Check that the call capabilties are that the call can be swapped 
+	// but not held or resumed.
+	TEST1(!(callCapsResults.iControlCaps & CTelephony::KCapsHold), 1);
+	TEST1(callCapsResults.iControlCaps & CTelephony::KCapsSwap, 1);
+	TEST1(!(callCapsResults.iControlCaps & CTelephony::KCapsResume), 1);
+ 
+	// Get the call capabilities of the second call
+	err = iTelephony->GetCallDynamicCaps(testCallParams2.iCallId, *callCapsData);
+	TEST1(err==KErrNone, 1);
+	INFO_PRINTF2(_L("iControlCaps is %x"), callCapsResults.iControlCaps);
+	
+	// Check that the call capabilties are that the call can be held or swapped
+	// but not resumed.
+	TEST1(!(callCapsResults.iControlCaps & CTelephony::KCapsHold), 1);
+	TEST1(callCapsResults.iControlCaps & CTelephony::KCapsSwap, 1);
+	TEST1(!(callCapsResults.iControlCaps & CTelephony::KCapsResume), 1);
+	
+	
+	INFO_PRINTF1(_L("END TEST 5"));
+	
+	//
+	//
+	// TEST 6: Normal case
+	// Ensure caps are set correctly after a swap back operation.
+	// Call 1 on hold. Call 2 active.
+	// Retrieve call capabilities. 
+	//
+	//
+	
+	INFO_PRINTF1(_L(" TEST 6 Dynamic Call Caps. Check capability in 2 call case "));
+	
+	// Swap the calls 
+    testCallParams1.iExpStat=KErrNone; 	 
+	testSwapAct1->TestSwap(testCallParams1, testCallParams2 );
+	CActiveScheduler::Start(); 
+	
+	// Check the first call is now at held status
+    err = iTelephony->GetCallStatus(testCallParams1.iCallId, *CallStatusData );
+	TEST1(err == KErrNone,1);
+	TEST1(CallStatusResult.iStatus == CTelephony::EStatusHold,1);	
+	
+	// Check the second call is now at connected status
+	err = iTelephony->GetCallStatus(testCallParams2.iCallId, *CallStatusData );
+	TEST1(err == KErrNone,1);
+	TEST1(CallStatusResult.iStatus == CTelephony::EStatusConnected,1);	
+	
+	// Get the call capabilities of the first call
+	err = iTelephony->GetCallDynamicCaps(testCallParams1.iCallId, *callCapsData);
+	TEST1(err==KErrNone,1);
+	INFO_PRINTF2(_L("iControlCaps is %x"), callCapsResults.iControlCaps);
+	
+	// Check that the call capabilties are that the call can be swapped 
+	// but not held or resumed.
+	TEST1(!(callCapsResults.iControlCaps & CTelephony::KCapsHold), 1);
+	TEST1(callCapsResults.iControlCaps & CTelephony::KCapsSwap, 1);
+	TEST1(!(callCapsResults.iControlCaps & CTelephony::KCapsResume), 1);
+ 
+	// Get the call capabilities of the second call
+	err = iTelephony->GetCallDynamicCaps(testCallParams2.iCallId, *callCapsData);
+	TEST1(err==KErrNone,1);
+	INFO_PRINTF2(_L("iControlCaps is %x"), callCapsResults.iControlCaps);
+	
+	// Check that the call capabilties are that the call can be swapped
+	// but not held or resumed.
+	TEST1(!(callCapsResults.iControlCaps & CTelephony::KCapsHold), 1);
+	TEST1(callCapsResults.iControlCaps & CTelephony::KCapsSwap, 1);
+	TEST1(!(callCapsResults.iControlCaps & CTelephony::KCapsResume), 1);
+	
+	
+	INFO_PRINTF1(_L("END TEST 6"));
+	
+	
+	
+	//
+	//
+	// TEST 7: Error case
+	// Hang up the call. Retrieve the call capabilities. 
+	//
+	//
+	
+	INFO_PRINTF1(_L(" TEST 7 Dynamic Call Caps. Get caps in hungup state "));
+	
+	
+	// Hang up call 1  
+	CTestHangupAct* testHangupAct1 = CTestHangupAct::NewLC(this, iTelephony);	
+	testHangupAct1->TestHangup(testCallParams1);
+	CActiveScheduler::Start();	
+	
+	// Get the call capabilities of Call 1
+	err = iTelephony->GetCallDynamicCaps(testCallParams1.iCallId, *callCapsData);
+	TEST1(err==KErrAccessDenied, 1);	 
+	
+	// Get the call capabilities of Call 2
+	err = iTelephony->GetCallDynamicCaps(testCallParams2.iCallId, *callCapsData);
+	TEST1(err==KErrNone, 1);
+	INFO_PRINTF2(_L("iControlCaps is %x"), callCapsResults.iControlCaps);
+	
+	// Check that the call capabilties are that the call   
+	// can be held or swapped.
+	TEST1(callCapsResults.iControlCaps & CTelephony::KCapsHold, 1);
+	TEST1(callCapsResults.iControlCaps & CTelephony::KCapsSwap, 1);
+	TEST1(!(callCapsResults.iControlCaps & CTelephony::KCapsResume), 1);	
+	
+	INFO_PRINTF1(_L("END TEST 7")); 
+	
+	// Hang up Call 2 for completion.
+	testHangupAct1->TestHangup(testCallParams2);
+	CActiveScheduler::Start();	
+		 
+	CleanupStack::PopAndDestroy(testHangupAct1);
+	CleanupStack::PopAndDestroy(testSwapAct1);
+	CleanupStack::PopAndDestroy(testResumeAct1);
+	CleanupStack::PopAndDestroy(testHoldAct1);
+	CleanupStack::PopAndDestroy(testDialNewCallAct2);
+	CleanupStack::PopAndDestroy(testDialNewCallAct1);
+	
+	
+	return TestStepResult();
+	}
+
+
+CTestCallFuncFlightModeOnWithPublishSubscribe::CTestCallFuncFlightModeOnWithPublishSubscribe(TInt& aCallCount)
+/** Each test step initialises it's own name
+*/
+: iCallCount(aCallCount)
+{
+	// store the name of this test case
+	// this is the name that is used by the script file
+	SetTestStepName(_L("TestCallFuncFlightModeOnWithPublishSubscribe"));
+}
+
+/**
+@SYMTestCaseID Etel3rdParty 16.1, TestCallFuncFlightModeOn
+@SYMTestCaseDesc Test DialNewCall, HangupCall, AnswerIncomingCall,
+*  Hold, Resume, Swap 3rd party APIs
+@SYMFssID SGL.GT0166.054 v1.3 A2_Telephony_Functional_Specification.doc, 
+* REQ 2116.3.1/3/5/7/8/19/20
+*/
+
+enum TVerdict CTestCallFuncFlightModeOnWithPublishSubscribe::doTestStepL()
+{
+	INFO_PRINTF1(_L("START TEST 16.1"));	
+	 
+	SetTestNumber(15); 
+	
+	// Set up phonePowerProperty variable so that flight mode can be manipulated.
+	RProperty phonePowerProperty;
+	User::LeaveIfError(phonePowerProperty.Attach(KUidSystemCategory, KUidPhonePwr.iUid));
+	CleanupClosePushL(phonePowerProperty);
+
+	//
+	//
+	// DialNewCall - Flight Mode on
+	//
+	//
+	
+	INFO_PRINTF1(_L(" TEST: DialNewCall disallowed when flight mode on "));
+	 
+	//Set the call parameters for call 1
+	_LIT(KGoodNumber,"1789");
+	CTelephony::TCallParamsV1 callParams1;
+	callParams1.iIdRestrict = CTelephony::ESendMyId;
+	CTelephony::TCallParamsV1Pckg callParamsPckg1(callParams1);	
+	
+	TTestCallParams testCallParams1;
+	testCallParams1.iLine = CTelephony::EVoiceLine;
+	testCallParams1.iCallParamsV1Pckg = &callParamsPckg1;
+	testCallParams1.iTelAddress.iTelNumber = KGoodNumber;
+	testCallParams1.iExpStat = KErrNone;
+	testCallParams1.iLine = CTelephony::EVoiceLine; 
+ 
+	
+	// Create active DialNewCallAct objects
+	CTestDialNewCallAct* testDialNewCallAct1 = CTestDialNewCallAct::NewLC(this, iTelephony);
+	 
+	// Switch flight mode on (ie radio mode off)
+	TRequestStatus requeststatus;
+	phonePowerProperty.Subscribe(requeststatus);
+	User::LeaveIfError(phonePowerProperty.Set(KUidSystemCategory,KUidPhonePwr.iUid,ESAPhoneOff));
+	User::WaitForRequest(requeststatus);
+	TEST(requeststatus.Int() == KErrNone);	
+	 
+	// Set expected status to KErrAccessDenied as this should be returned in
+	// the case where flight mode is on.
+	testCallParams1.iExpStat = KErrAccessDenied;	
+	
+	// Attempt call.	 
+	testCallParams1.iCallId = CTelephony::EISVMaxNumOfCalls;
+	testDialNewCallAct1->TestDialNewCall(testCallParams1);
+	CActiveScheduler::Start();
+	
+	
+	//
+	//
+	// HangUpCall - Flight Mode on
+	//
+	//
+	
+	INFO_PRINTF1(_L(" TEST: Hang up disallowed when flight mode on "));
+	
+	// Switch flight mode off so that a call can be made.
+	phonePowerProperty.Subscribe(requeststatus);
+	User::LeaveIfError(phonePowerProperty.Set(KUidSystemCategory,KUidPhonePwr.iUid,ESAPhoneOn));
+	User::WaitForRequest(requeststatus);
+	TEST(requeststatus.Int() == KErrNone);	
+	 
+	// Make call.	 
+	testCallParams1.iExpStat = KErrNone;	
+	testCallParams1.iCallId = CTelephony::EISVMaxNumOfCalls;
+	testDialNewCallAct1->TestDialNewCall(testCallParams1);
+	CActiveScheduler::Start();
+	
+	// Switch flight mode on. Hangup attempt should fail.
+	phonePowerProperty.Subscribe(requeststatus);
+	User::LeaveIfError(phonePowerProperty.Set(KUidSystemCategory,KUidPhonePwr.iUid,ESAPhoneOff));
+	User::WaitForRequest(requeststatus);
+	TEST(requeststatus.Int() == KErrNone);	
+	
+	INFO_PRINTF1(_L("Attempt to hangup the call"));
+	// Create an active HangupAct object
+	CTestHangupAct* testHangupAct = CTestHangupAct::NewLC(this, iTelephony);	
+	testCallParams1.iExpStat = KErrAccessDenied;
+	testHangupAct->TestHangup(testCallParams1);
+	CActiveScheduler::Start();
+	
+	// Switch flight mode off and hang up call in preparation
+	// for next test.
+	phonePowerProperty.Subscribe(requeststatus);
+	User::LeaveIfError(phonePowerProperty.Set(KUidSystemCategory,KUidPhonePwr.iUid,ESAPhoneOn));
+	User::WaitForRequest(requeststatus);
+	TEST(requeststatus.Int() == KErrNone);	
+
+	testCallParams1.iExpStat = KErrNone;
+	testHangupAct->TestHangup(testCallParams1);
+	CActiveScheduler::Start();
+	
+	
+	//
+	//
+	// Answer Incoming Call - Flight Mode on
+	//
+	//
+	
+	INFO_PRINTF1(_L(" TEST: Answer incoming call disallowed when flight mode on "));
+	
+	// Create an active AnswerIncomingCallAct object
+	CTestAnswerIncomingCallAct* testAnswerIncomingCallAct1 = CTestAnswerIncomingCallAct::NewLC(this, iTelephony);
+	
+	//Set the call parameters to receive call 1
+	testCallParams1.iLine = CTelephony::EVoiceLine;
+	testCallParams1.iCallParamsV1Pckg = NULL;
+	testCallParams1.iExpStat = KErrNone;
+	
+ 	//initiate callback
+	testAnswerIncomingCallAct1->CallMe(iCallCount);
+	
+	CTelephony::TCallStatusV1 status;
+	CTelephony::TCallStatusV1Pckg statusPckg(status);	
+	iTelephony->GetLineStatus(testCallParams1.iLine,  statusPckg);
+	TEST1(status.iStatus == CTelephony::EStatusRinging, ETrue);
+	
+	// Switch flight mode on and  attempt to answer the incoming call.
+	phonePowerProperty.Subscribe(requeststatus);
+	User::LeaveIfError(phonePowerProperty.Set(KUidSystemCategory,KUidPhonePwr.iUid,ESAPhoneOff));
+	User::WaitForRequest(requeststatus);
+	TEST(requeststatus.Int() == KErrNone);	
+	
+	testCallParams1.iExpStat = KErrAccessDenied;
+	testAnswerIncomingCallAct1->TestAnswerIncomingCall(testCallParams1);
+	CActiveScheduler::Start();
+	 
+	//
+	//
+	// Hold Call - Flight Mode on
+	//
+	//
+	
+	INFO_PRINTF1(_L(" TEST: Hold call disallowed when flight mode on "));
+	
+	// Set up call parms
+	testCallParams1.iLine = CTelephony::EVoiceLine;
+	testCallParams1.iCallParamsV1Pckg = &callParamsPckg1;
+	testCallParams1.iTelAddress.iTelNumber = KGoodNumber;
+	testCallParams1.iExpStat = KErrNone;
+	testCallParams1.iLine = CTelephony::EVoiceLine; 
+	
+	// Create an active TestHoldAct object
+	CTestHoldAct* testHoldAct = CTestHoldAct::NewLC(this, iTelephony);	
+	
+	testCallParams1.iExpStat=KErrAccessDenied;
+	testHoldAct->TestHold(testCallParams1);
+	CActiveScheduler::Start();
+	
+	//
+	//
+	// Resume Call - Flight Mode on
+	//
+	//
+	
+	INFO_PRINTF1(_L(" TEST: Resume call disallowed when flight mode on "));
+	
+	CTestResumeAct* testResumeAct1 = CTestResumeAct::NewLC(this, iTelephony);	
+	
+	// Attempt to resume the call using the ETEL 3rdparty API
+	testCallParams1.iExpStat = KErrAccessDenied;		
+	testResumeAct1->TestResume(testCallParams1);
+	CActiveScheduler::Start();
+	
+	//
+	//
+	// Swap Call - Flight Mode on
+	//
+	//
+	
+	INFO_PRINTF1(_L(" TEST: Swap call disallowed when flight mode on "));
+	
+	CTestSwapAct* testSwapAct1 = CTestSwapAct::NewLC(this, iTelephony);	
+	
+	
+	// Set up parameters for a second call
+	CTelephony::TCallParamsV1 callParams2;
+	callParams2.iIdRestrict = CTelephony::ESendMyId;
+	CTelephony::TCallParamsV1Pckg callParamsPckg2(callParams2);	
+	TTestCallParams testCallParams2;
+	testCallParams2.iLine = CTelephony::EVoiceLine;
+	testCallParams2.iCallParamsV1Pckg = &callParamsPckg2;
+	testCallParams2.iTelAddress.iTelNumber = KGoodNumber;
+	testCallParams2.iExpStat = KErrNone;
+	
+	// Attempt a call to the Swap ETEL 3rdparty API
+	testCallParams1.iExpStat = KErrAccessDenied;		
+	testSwapAct1->TestSwap(testCallParams1, testCallParams2);
+	CActiveScheduler::Start();
+	
+	//
+	//
+	// Test GetCallDynamicCaps with flight mode on.
+	//
+	//
+	
+	INFO_PRINTF1(_L("Test retrieval of dynamic caps - flight mode on"));
+	
+	// Get the call capabilities 
+	CTelephony::TCallCapsV1 callCaps;
+	CTelephony::TCallCapsV1Pckg callCapsPckg(callCaps);
+	TInt err = iTelephony->GetCallDynamicCaps(testCallParams1.iCallId, callCapsPckg);
+	TEST1(err==KErrAccessDenied, ETrue);
+		
+	INFO_PRINTF1(_L("END TEST 16.1"));
+	
+	CleanupStack::PopAndDestroy(testSwapAct1);
+	CleanupStack::PopAndDestroy(testResumeAct1);
+	CleanupStack::PopAndDestroy(testHoldAct);
+	CleanupStack::PopAndDestroy(testAnswerIncomingCallAct1);
+	CleanupStack::PopAndDestroy(testHangupAct);
+	CleanupStack::PopAndDestroy(testDialNewCallAct1);
+	CleanupStack::PopAndDestroy(&phonePowerProperty);	 
+	 
+	return TestStepResult() ;	  
+	 
+}
+
+
+CTestDeprecatedDataCallAPIs::CTestDeprecatedDataCallAPIs()
+/** Each test step initialises it's own name
+*/
+{
+    SetTestStepName(_L("TestDeprecatedDataCallAPIs"));
+}
+
+
+/**
+    @SYMTestCaseID           TEL/EtelIsv/GT0246/1035
+    @SYMREQ                  CNON-67WJ2G
+    @SYMTestCaseDesc         Test deprecated data call APIs
+    @SYMTestPriority         Critical
+    @SYMTestActions          Calls each deprecated API and ensures it returns KErrNotSupported
+    @SYMTestExpectedResults  Pass
+    @SYMTestType             CT
+*/
+enum TVerdict CTestDeprecatedDataCallAPIs::doTestStepL()
+{
+    TInt  result;
+    TInt  callStatus;
+    TRequestStatus  requestStatus;
+    TInt  dataChannel;
+    TBuf<CTelephony::KMaxTelNumberSize>  dialNumber;
+
+    result = iTelephony->FindDeviceStatus(callStatus);
+    TEST1(result == KErrNotSupported, ETrue);
+
+    result = iTelephony->EstablishDataCall(dataChannel, dialNumber);
+    TEST1(result == KErrNotSupported, ETrue);
+
+    iTelephony->EstablishDataCall(requestStatus, dataChannel, dialNumber);
+    User::WaitForRequest(requestStatus);
+    TEST1(requestStatus.Int() == KErrNotSupported, ETrue);
+
+    iTelephony->EstablishDataCall(requestStatus, dataChannel, dialNumber);
+    iTelephony->CancelEstablishDataCall();
+    User::WaitForRequest(requestStatus);
+    TEST1(requestStatus.Int() == KErrNotSupported, ETrue);
+
+    result = iTelephony->TerminateDataCall();
+    TEST1(result == KErrNotSupported, ETrue);
+
+    result = iTelephony->ReceiveDataCall(dataChannel);
+    TEST1(result == KErrNotSupported, ETrue);
+
+    iTelephony->ReceiveDataCall(requestStatus, dataChannel);
+    User::WaitForRequest(requestStatus);
+    TEST1(requestStatus.Int() == KErrNotSupported, ETrue);
+	 
+    iTelephony->ReceiveDataCall(requestStatus, dataChannel);
+    iTelephony->CancelReceiveDataCall();
+    User::WaitForRequest(requestStatus);
+    TEST1(requestStatus.Int() == KErrNotSupported, ETrue);
+	 
+    return TestStepResult();
+} // CTestDeprecatedDataCallAPIs::doTestStepL
+