telephonyutils/etel3rdpartyapi/Test/te_etelIsv/TE_EtelIsvPhoneSettings.cpp
changeset 0 3553901f7fa8
child 24 6638e7f4bd8f
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/telephonyutils/etel3rdpartyapi/Test/te_etelIsv/TE_EtelIsvPhoneSettings.cpp	Tue Feb 02 01:41:59 2010 +0200
@@ -0,0 +1,1483 @@
+// 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 ETL 3rd Party Phone APIs  
+// 
+//
+
+/**
+ @file
+*/
+
+#include "TE_EtelIsvbase.h"
+#include "TE_EtelIsvPhoneSettings.h"
+#include "TE_EtelIsvCallFunc.h"
+
+ 
+
+CTestGetPhoneId::CTestGetPhoneId()
+/** 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("TestGetPhoneId"));
+}
+
+/**
+*
+@SYMTestCaseID Etel3rdParty 1.1
+@SYMTestCaseDesc Test GetPhoneId 3rd party API
+@SYMFssID SGL.GT0166.054 v1.3 A2_Telephony_Functional_Specification.doc, REQ 2116.1.1
+*/ 
+
+TVerdict CTestGetPhoneId::doTestStepL()
+{
+	SetTestNumber(0);
+
+	//expected data
+	_LIT16(manufacturerid, "PSION");
+	_LIT16(modelid, "666");
+	_LIT16(serialid, "1234567890");
+	CTelephony::TPhoneIdV1 ExpectedPhoneId;
+	ExpectedPhoneId.iManufacturer=manufacturerid;
+	ExpectedPhoneId.iModel=modelid;
+	ExpectedPhoneId.iSerialNumber=serialid;
+	TRequestStatus expStat=KErrNone;
+	CTelephony::TPhoneIdV1Pckg ExpectedPhoneIdPckg(ExpectedPhoneId);
+	
+	CTestGetPhoneIdAct* GetPhoneIdAct = CTestGetPhoneIdAct::NewLC(this, iTelephony);
+
+	#if defined(_DEBUG)
+	//Test OOM
+		INFO_PRINTF1(_L("Test OOM for GetPhoneId"));
+		expStat=KErrNoMemory;
+		__UHEAP_FAILNEXT(1);
+		GetPhoneIdAct->GetPhoneId(ExpectedPhoneIdPckg, expStat);
+		CActiveScheduler::Start();
+		__UHEAP_RESET;
+	#endif
+	
+	//Start GetPhoneID AO	
+	INFO_PRINTF1(_L("Test GetPhoneId"));
+	expStat=KErrNone;
+	GetPhoneIdAct->GetPhoneId(ExpectedPhoneIdPckg, expStat, ETrue);
+	CActiveScheduler::Start();	
+	
+	//Test cancel
+	INFO_PRINTF1(_L("Test Cancel for GetPhoneId"));
+	TInt cancelerr = iTelephony->CancelAsync(CTelephony::EGetPhoneIdCancel);
+	TEST1(cancelerr == KErrNotFound, ETrue);
+	GetPhoneIdAct->GetPhoneId(ExpectedPhoneIdPckg, expStat);	
+	CTestCanceller* canceller = GetPhoneIdAct->RetrieveCanceller();
+	canceller->Call();
+	CActiveScheduler::Start();	
+	TEST1(GetPhoneIdAct->iStatus.Int() == KErrCancel || GetPhoneIdAct->iStatus.Int() == KErrNone, ETrue);
+
+	CleanupStack::PopAndDestroy(); //GetPhoneIdAct
+
+	return TestStepResult();
+}
+
+CTestGetPhoneIdError::CTestGetPhoneIdError()
+/** 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("TestGetPhoneIdError"));
+}
+
+/**
+*
+@SYMTestCaseID Etel3rdParty 1.2
+@SYMTestCaseDesc Test GetPhoneId 3rd party API - Error scenario
+@SYMFssID SGL.GT0166.054 v1.3 A2_Telephony_Functional_Specification.doc,  REQ 2116.1.1
+*/
+
+TVerdict CTestGetPhoneIdError::doTestStepL()
+{
+	INFO_PRINTF1(_L("Test GetPhoneId with error"));
+	SetTestNumber(1);
+	CTelephony::TPhoneIdV1 ExpectedPhoneId;
+	CTelephony::TPhoneIdV1Pckg ExpectedPhoneIdPckg(ExpectedPhoneId);
+	TRequestStatus expStat=KErrNotFound;
+
+	//Start GetPhoneID AO
+	CTestGetPhoneIdAct* GetPhoneIdAct = CTestGetPhoneIdAct::NewLC(this, iTelephony);
+	GetPhoneIdAct->GetPhoneId(ExpectedPhoneIdPckg, expStat);
+
+	CActiveScheduler::Start();
+	
+	CleanupStack::PopAndDestroy(); //GetPhoneIdAct
+	return TestStepResult();
+}
+
+//=====================================================
+//
+//	Class to get phone ID active object
+//
+//=====================================================
+
+CTestGetPhoneIdAct* CTestGetPhoneIdAct::NewLC(CEtelIsvTestStep* aTestStep, CTelephony* aTelephony, TBool aUseMacros)
+//Factory constructor
+	{
+	CTestGetPhoneIdAct* obj = new(ELeave) CTestGetPhoneIdAct(aTestStep, aTelephony, aUseMacros);
+	CleanupStack::PushL(obj);
+	obj->ConstructL();
+	return obj;
+	}
+CTestGetPhoneIdAct::CTestGetPhoneIdAct(CEtelIsvTestStep* aTestStep, CTelephony* aTelephony, TBool aUseMacros = ETrue)
+	: CEtelIsvActBase(aTestStep, aTelephony), 
+	iUseMacros(aUseMacros),
+	iPhoneIdBuff(iPhoneId),
+	iPhoneIdPckg(iPhoneId)
+	{  
+	}
+
+void CTestGetPhoneIdAct::ConstructL()
+	{  
+	iCanceller = new(ELeave) CTestCanceller(this);
+	CActiveScheduler::Add(this);
+	}
+
+CTestGetPhoneIdAct::~CTestGetPhoneIdAct()
+	{  
+	Cancel();	// if any Req outstanding, calls DoCancel() to cleanup.
+	delete iCanceller;
+	}
+
+void CTestGetPhoneIdAct::DoCancel()
+	{
+	iTelephony->CancelAsync(CTelephony::EGetPhoneIdCancel);
+	}
+	
+void CTestGetPhoneIdAct::GetPhoneId(TDes8& aExpectedPhoneIdPckg, TRequestStatus aExpStat, TBool aCheckConcurrency)
+	{
+	iExpectedPhoneIdPckg=&aExpectedPhoneIdPckg;
+	iExpStat=aExpStat;
+	
+	TDes8* data;
+	if (iTestStep->iBufferMode)
+		{
+		data = &iPhoneIdBuff;
+		}
+	else
+		{
+		data = &iPhoneIdPckg;
+		}
+	
+	iTelephony->GetPhoneId(iStatus, *data);
+	
+	if(aCheckConcurrency)
+		{
+		TRequestStatus tmpStatus;
+		iTelephony->GetPhoneId(tmpStatus, *data);
+		User::WaitForRequest(tmpStatus);
+		iTestStep->TEST1(tmpStatus.Int() == KErrInUse, ETrue);
+		}		
+	SetActive();
+	}
+
+void CTestGetPhoneIdAct::RunL()
+	{ 
+	// ActiveScheduler will have set status to KRequestComplete, just before
+	// calling this RunL().
+	CTelephony::TPhoneIdV1Pckg& GetPhoneIdV1Pckg = REINTERPRET_CAST(CTelephony::TPhoneIdV1Pckg&, *iExpectedPhoneIdPckg);
+	
+	//only supports V1 at present
+	CTelephony::TPhoneIdV1& expectedPhoneId = (GetPhoneIdV1Pckg)();	 
+	
+	if(iUseMacros)
+		{	
+		iTestStep->TEST1(iStatus.Int() == iExpStat.Int(), ETrue);
+		}
+
+	if(iStatus.Int() == KErrNone)
+		{
+		if(iUseMacros)
+			{	
+			const CTelephony::TPhoneIdV1* data;
+			if (iTestStep->iBufferMode)
+				{
+				data = reinterpret_cast<const CTelephony::TPhoneIdV1*> ( &iPhoneIdBuff() );
+				}
+			else
+				{
+				data = reinterpret_cast<const CTelephony::TPhoneIdV1*> ( &iPhoneIdPckg() );
+				}
+		    
+			iTestStep->TEST1(data->iManufacturer == expectedPhoneId.iManufacturer, ETrue);
+			iTestStep->TEST1(data->iModel == expectedPhoneId.iModel, ETrue);
+			iTestStep->TEST1(data->iSerialNumber == expectedPhoneId.iSerialNumber, ETrue);		
+			
+			iTestStep->INFO_PRINTF2(_L("Phone manufacturer: %S"), &(data->iManufacturer) );
+			iTestStep->INFO_PRINTF2(_L("Phone model: %S"), &(data->iModel) );
+			iTestStep->INFO_PRINTF2(_L("Phone serial number: %S"), &(data->iSerialNumber) );
+			}
+		}
+	else
+		{
+		if(iUseMacros)
+			{
+			iTestStep->INFO_PRINTF2(_L("Error for GetPhoneId: %d"), iStatus.Int() );
+			}
+		}
+
+	CActiveScheduler::Stop();
+	}
+
+CTestGetSubscriberId::CTestGetSubscriberId()
+/** 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("TestGetSubscriberId"));
+}
+
+ 
+ 
+ 
+/**
+*
+@SYMTestCaseID Etel3rdParty 2.1
+@SYMTestCaseDesc Test GetSubscriberId 3rd party API
+@SYMFssID SGL.GT0166.054 v1.3 A2_Telephony_Functional_Specification.doc, REQ 2116.1.2
+*
+*/ 
+
+TVerdict CTestGetSubscriberId::doTestStepL()
+	{
+	//Set test number
+	SetTestNumber(2);
+	
+	//Set expected IMSI value
+	_LIT16(SubscriberId, "56789012345678");
+	CTelephony::TSubscriberIdV1 ExpSubscriberId ;
+	ExpSubscriberId.iSubscriberId=SubscriberId;
+	CTelephony::TSubscriberIdV1Pckg expSubscriberIdPckg(ExpSubscriberId);
+	TRequestStatus expStat=KErrNone;
+	
+	CTestGetSubscriberIdAct* GetSubscriberIdAct = CTestGetSubscriberIdAct::NewLC(this, iTelephony);
+
+	#if defined(_DEBUG)
+	//Test OOM
+		INFO_PRINTF1(_L("Test OOM for GetSubscriberId"));
+		expStat=KErrNoMemory;
+		__UHEAP_FAILNEXT(1);
+		GetSubscriberIdAct->GetSubscriberId(expSubscriberIdPckg, expStat);	
+		CActiveScheduler::Start();
+		__UHEAP_RESET;
+	#endif
+	
+	//Start GetSubscriberID AO
+	INFO_PRINTF1(_L("Test GetSubscriberId"));
+	expStat=KErrNone;
+	GetSubscriberIdAct->GetSubscriberId(expSubscriberIdPckg, expStat, ETrue);	
+	CActiveScheduler::Start();
+
+	//Test cancel
+	INFO_PRINTF1(_L("Test Cancel for GetSubscriberId"));
+	TInt cancelerr = iTelephony->CancelAsync(CTelephony::EGetSubscriberIdCancel);
+	TEST1(cancelerr == KErrNotFound, ETrue);
+	CTestCanceller* canceller = GetSubscriberIdAct->RetrieveCanceller();
+	GetSubscriberIdAct->GetSubscriberId(expSubscriberIdPckg, expStat);	
+	canceller->Call();
+	CActiveScheduler::Start();	
+	TEST1(GetSubscriberIdAct->iStatus.Int() == KErrCancel || GetSubscriberIdAct->iStatus.Int() == KErrNone, ETrue);
+
+	CleanupStack::PopAndDestroy(); //GetSubscriberIdAct
+	return TestStepResult();
+}
+
+CTestGetSubscriberIdError::CTestGetSubscriberIdError()
+/** 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("TestGetSubscriberIdError"));
+}
+
+/**
+*
+@SYMTestCaseID Etel3rdParty 2.2
+@SYMTestCaseDesc Test GetSubscriberId 3rd party API - Error scenario
+@SYMFssID SGL.GT0166.054 v1.3 A2_Telephony_Functional_Specification.doc, REQ 2116.1.2
+*
+*/ 
+
+TVerdict CTestGetSubscriberIdError::doTestStepL()
+	{
+	INFO_PRINTF1(_L("Test Cancel for GetSubscriberId with error."));
+
+	//Set test number
+	SetTestNumber(3);
+
+	//Set expected IMSI value
+	_LIT16(SubscriberId, "01234567890123");
+	CTelephony::TSubscriberIdV1 ExpSubscriberId ;
+	ExpSubscriberId.iSubscriberId=SubscriberId;
+	CTelephony::TSubscriberIdV1Pckg expSubscriberIdPckg(ExpSubscriberId);
+
+	//Start GetSubscriberID AO
+	TRequestStatus expStat=KErrNotSupported;
+	CTestGetSubscriberIdAct* GetSubscriberIdAct = CTestGetSubscriberIdAct::NewLC(this, iTelephony);
+	GetSubscriberIdAct->GetSubscriberId(expSubscriberIdPckg, expStat);
+	
+	CActiveScheduler::Start();
+
+	CleanupStack::PopAndDestroy(); //GetSubscriberIdAct
+	return TestStepResult() ;
+}
+
+//=====================================================
+//
+//	Class to get subscriber ID active object
+//
+//=====================================================
+
+CTestGetSubscriberIdAct* CTestGetSubscriberIdAct::NewLC(CEtelIsvTestStep* aTestStep, CTelephony* aTelephony)
+//Factory constructor
+	{
+	CTestGetSubscriberIdAct* obj = new(ELeave) CTestGetSubscriberIdAct(aTestStep, aTelephony);
+	CleanupStack::PushL(obj);
+	obj->ConstructL();
+	return obj;
+	}
+
+CTestGetSubscriberIdAct::CTestGetSubscriberIdAct(CEtelIsvTestStep* aTestStep, CTelephony* aTelephony)
+	: CEtelIsvActBase(aTestStep, aTelephony),
+	iSubscriberIdBuff(iSubscriberId),
+	iSubscriberIdPckg(iSubscriberId)
+	{  
+	}
+
+void CTestGetSubscriberIdAct::ConstructL()
+	{  
+	iCanceller = new(ELeave) CTestCanceller(this);
+	CActiveScheduler::Add(this);
+	}
+
+CTestGetSubscriberIdAct::~CTestGetSubscriberIdAct()
+	{ 
+	Cancel();	// if any Req outstanding, calls DoCancel() to cleanup.
+	delete iCanceller;
+	}
+
+void CTestGetSubscriberIdAct::DoCancel()
+	{
+	iTelephony->CancelAsync(CTelephony::EGetSubscriberIdCancel);
+	}
+
+void CTestGetSubscriberIdAct::GetSubscriberId(TDes8& aExpSubscriberIdPckg, TRequestStatus aExpStat, TBool aCheckConcurrency)
+	{
+	iExpStat = aExpStat;
+	iExpSubscriberIdPckg=&aExpSubscriberIdPckg;
+	
+	TDes8* data;
+	if (iTestStep->iBufferMode)
+		{
+		data = &iSubscriberIdBuff;
+		}
+	else
+		{
+		data = &iSubscriberIdPckg;
+		}
+
+	iTelephony->GetSubscriberId(iStatus, *data);
+	
+	if(aCheckConcurrency)
+		{
+		TRequestStatus tmpStatus;
+		iTelephony->GetSubscriberId(tmpStatus, *data);
+		User::WaitForRequest(tmpStatus);
+		iTestStep->TEST1(tmpStatus.Int() == KErrInUse, ETrue);
+		}	
+	
+	SetActive();
+	}
+
+void CTestGetSubscriberIdAct::RunL()
+	{ 
+	// ActiveScheduler will have set status to KRequestComplete, just before
+	// calling this RunL().
+	CTelephony::TSubscriberIdV1Pckg& expSubscriberIdPckg = REINTERPRET_CAST(CTelephony::TSubscriberIdV1Pckg&, *iExpSubscriberIdPckg);
+	
+	//only supports V1 at present
+	CTelephony::TSubscriberIdV1& expSubscriberId = (expSubscriberIdPckg)();	
+	
+	iTestStep->TEST1(iStatus.Int() == iExpStat.Int(), ETrue);
+
+	if(iStatus.Int() == KErrNone)
+		{
+		CTelephony::TSubscriberIdV1* data;
+		if (iTestStep->iBufferMode)
+			{
+			data = reinterpret_cast<CTelephony::TSubscriberIdV1*> ( &iSubscriberIdBuff() );
+			}
+		else
+			{
+			data = reinterpret_cast<CTelephony::TSubscriberIdV1*> ( &iSubscriberIdPckg() );
+			}		
+	        
+		iTestStep->TEST1(data->iSubscriberId == expSubscriberId.iSubscriberId, ETrue);		
+		iTestStep->INFO_PRINTF2(_L("SubscriberId: %S"), &(data->iSubscriberId) );
+		}
+	else
+		{
+		iTestStep->INFO_PRINTF2(_L("Error for GeSubscriberId: %d"), iStatus.Int() );
+		}
+
+	CActiveScheduler::Stop();
+	}
+
+CTestGetIndicator::CTestGetIndicator()
+/** 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("TestGetIndicator"));
+}
+
+/**
+*
+@SYMTestCaseID Etel3rdParty 4.1
+@SYMTestCaseDesc Test GetIndicator 3rd party API
+@SYMFssID SGL.GT0166.054 v1.3 A2_Telephony_Functional_Specification.doc, REQ 2116.1.4
+*
+*/ 
+
+TVerdict CTestGetIndicator::doTestStepL()
+	{
+	//Set test number
+	SetTestNumber(4);
+
+	//Set expected return values
+	TUint32 expIndCaps = CTelephony::KIndChargerConnected | CTelephony::KIndNetworkAvailable | CTelephony::KIndCallInProgress;
+	TUint32 expInd = CTelephony::KIndChargerConnected;
+	TRequestStatus expStat=KErrNone;
+	
+	CTestGetIndicatorAct* GetIndicatorAct = CTestGetIndicatorAct::NewLC(this, iTelephony);
+
+	#if defined(_DEBUG)
+	//test OOM
+		INFO_PRINTF1(_L("Test OOM for GetIndicator"));
+		expStat = KErrNoMemory;
+		__UHEAP_FAILNEXT(1);
+		GetIndicatorAct->GetPhoneIndicator(expIndCaps, expInd, expStat);
+		CActiveScheduler::Start();
+		__UHEAP_RESET;
+	#endif
+
+	//Start GetIndicator AO
+	 expStat=KErrNone;
+	INFO_PRINTF1(_L("Test GetIndicator"));	
+	GetIndicatorAct->GetPhoneIndicator(expIndCaps, expInd, expStat, ETrue);
+	CActiveScheduler::Start();
+
+	//Test cancel
+	TInt cancelerr = iTelephony->CancelAsync(CTelephony::EGetIndicatorCancel);
+	TEST1(cancelerr == KErrNotFound, ETrue);
+	GetIndicatorAct->GetPhoneIndicator(expIndCaps, expInd, expStat);
+	CTestCanceller* canceller = GetIndicatorAct->RetrieveCanceller();
+	canceller->Call();
+	CActiveScheduler::Start();	
+	TEST1(GetIndicatorAct->iStatus.Int() == KErrCancel || GetIndicatorAct->iStatus.Int() == KErrNone, ETrue);
+
+	CleanupStack::PopAndDestroy(); //GetIndicatorAct
+	return TestStepResult() ;
+}
+
+//=====================================================
+//
+//	Class to get phone indicator active object
+//
+//=====================================================
+
+CTestGetIndicatorAct* CTestGetIndicatorAct::NewLC(CEtelIsvTestStep* aTestStep, CTelephony* aTelephony)
+//Factory constructor
+	{
+	CTestGetIndicatorAct* obj = new(ELeave) CTestGetIndicatorAct(aTestStep, aTelephony);
+	CleanupStack::PushL(obj);
+	obj->ConstructL();
+	return obj;
+	}
+
+CTestGetIndicatorAct::CTestGetIndicatorAct(CEtelIsvTestStep* aTestStep, CTelephony* aTelephony)
+	: CEtelIsvActBase(aTestStep, aTelephony),
+	iIndicatorBuff(iIndicator),
+	iIndicatorPckg(iIndicator)
+	{  
+	}
+
+void CTestGetIndicatorAct::ConstructL()
+	{ 
+	iCanceller = new(ELeave) CTestCanceller(this);
+	CActiveScheduler::Add(this);
+	}
+
+CTestGetIndicatorAct::~CTestGetIndicatorAct()
+	{  
+	Cancel();	// if any Req outstanding, calls DoCancel() to cleanup.
+	delete iCanceller;
+	}
+
+void CTestGetIndicatorAct::DoCancel()
+	{
+	iTelephony->CancelAsync(CTelephony::EGetIndicatorCancel);
+	}
+
+void CTestGetIndicatorAct::GetPhoneIndicator(TUint32 aExpIndCaps, TUint32 aExpInd,TRequestStatus aExpStat, TBool aCheckConcurrency)
+	{
+	iExpIndCaps = aExpIndCaps;
+	iExpInd = aExpInd;
+	iExpStat = aExpStat;
+	
+	TDes8* data;
+	if (iTestStep->iBufferMode)
+		{
+		data = &iIndicatorBuff;
+		}
+	else
+		{
+		data = &iIndicatorPckg;
+		}
+	
+	iTelephony->GetIndicator(iStatus, *data);
+	
+	if(aCheckConcurrency)
+		{
+		TRequestStatus tmpStatus;
+		iTelephony->GetIndicator(tmpStatus, *data);
+		User::WaitForRequest(tmpStatus);
+		iTestStep->TEST1(tmpStatus.Int() == KErrInUse, ETrue);
+		}	
+		
+	SetActive();
+	}
+
+void CTestGetIndicatorAct::RunL()
+	{ 
+	// ActiveScheduler will have set status to KRequestComplete, just before
+	// calling this RunL().
+
+	iTestStep->TEST1(iStatus.Int() == iExpStat.Int(), ETrue);
+	
+	if(iStatus.Int() == KErrNone)
+		{
+		CTelephony::TIndicatorV1* data;
+		if (iTestStep->iBufferMode)
+			{
+			data = reinterpret_cast<CTelephony::TIndicatorV1*> ( &iIndicatorBuff() );
+			}
+		else
+			{
+			data = reinterpret_cast<CTelephony::TIndicatorV1*> ( &iIndicatorPckg() );
+			}
+		
+		iTestStep->TEST1(iExpIndCaps == data->iCapabilities, ETrue);
+		iTestStep->TEST1(iExpInd == data->iIndicator, ETrue);
+		iTestStep->PrintIndicatorValues(data->iIndicator, data->iCapabilities);
+		}
+	else
+		{
+		iTestStep->INFO_PRINTF2(_L("Error for GetIndicators: %d"), iStatus.Int() );
+		}
+
+	CActiveScheduler::Stop();
+	}
+
+CTestGetBatteryInfo::CTestGetBatteryInfo()
+/** 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("TestGetBatteryInfo"));
+}
+
+/**
+*
+@SYMTestCaseID Etel3rdParty 5.1
+@SYMTestCaseDesc Test GetBatteryInfo 3rd party API
+@SYMFssID SGL.GT0166.054 v1.3 A2_Telephony_Functional_Specification.doc, REQ 2116.1.3
+*
+*/ 
+
+TVerdict CTestGetBatteryInfo::doTestStepL()
+	{
+	INFO_PRINTF1(_L("Test retrieval of battery information status"));
+
+	//Set test number
+	SetTestNumber(5);
+	
+	//Set expected result data
+	TRequestStatus expStat=KErrNone;
+	CTelephony::TBatteryInfoV1 BatteryExpInfo;
+	BatteryExpInfo.iStatus=CTelephony::EPowerStatusUnknown;
+	BatteryExpInfo.iChargeLevel=0;
+	CTelephony::TBatteryInfoV1Pckg batteryExpInfoPckg(BatteryExpInfo);
+	CTestGetBatteryInfoAct* GetBatteryInfoAct = CTestGetBatteryInfoAct::NewLC(this, iTelephony);
+	
+	#if defined(_DEBUG)
+	//test OOM
+		INFO_PRINTF1(_L("Test OOM for GetBatteryInfo"));
+		expStat=KErrNoMemory;
+		__UHEAP_FAILNEXT(1);
+		GetBatteryInfoAct->GetBatteryInfo(batteryExpInfoPckg, expStat);	
+		CActiveScheduler::Start();
+		__UHEAP_RESET;
+	#endif
+	
+	//test GetBatteryInfo
+	INFO_PRINTF1(_L("Test GetBatteryInfo"));
+	expStat=KErrNone;
+	GetBatteryInfoAct->GetBatteryInfo(batteryExpInfoPckg, expStat, ETrue);
+	CActiveScheduler::Start();
+		
+	//wait for 3 secs then re-test.  State should have changed.	
+	User::After(3000000);
+
+	expStat=KErrNone;
+	BatteryExpInfo.iStatus=CTelephony::EPoweredByBattery;
+	BatteryExpInfo.iChargeLevel=2;
+	GetBatteryInfoAct->GetBatteryInfo(batteryExpInfoPckg, expStat);	
+	CActiveScheduler::Start();
+	
+	//wait for 3 secs then re-test.  State should have changed.
+	User::After(3000000);
+
+	expStat=KErrGeneral;
+	BatteryExpInfo.iStatus=CTelephony::EPoweredByBattery;
+	BatteryExpInfo.iChargeLevel=20;
+	GetBatteryInfoAct->GetBatteryInfo(batteryExpInfoPckg, expStat);	
+	CActiveScheduler::Start();
+	
+	//Test cancel
+	User::After(3000000);
+	TInt cancelerr = iTelephony->CancelAsync(CTelephony::EGetBatteryInfoCancel);
+	TEST1(cancelerr == KErrNotFound, ETrue);
+	INFO_PRINTF1(_L("Test Cancel for GetBatteryInfo"));
+	GetBatteryInfoAct->GetBatteryInfo(batteryExpInfoPckg, expStat);
+	CTestCanceller* canceller = GetBatteryInfoAct->RetrieveCanceller();
+	canceller->Call();
+	CActiveScheduler::Start();	
+	TEST1(GetBatteryInfoAct->iStatus.Int() == KErrCancel || GetBatteryInfoAct->iStatus.Int() == KErrNone, ETrue);
+
+	CleanupStack::PopAndDestroy(); // GetBatteryInfoAct
+	return TestStepResult() ;
+}
+
+//=====================================================
+//
+//	Class to get battery info active object
+//
+//=====================================================
+
+CTestGetBatteryInfoAct* CTestGetBatteryInfoAct::NewLC(CEtelIsvTestStep* aTestStep, CTelephony* aTelephony)
+//Factory constructor
+	{
+	CTestGetBatteryInfoAct* obj = new(ELeave) CTestGetBatteryInfoAct(aTestStep, aTelephony);
+	CleanupStack::PushL(obj);
+	obj->ConstructL();
+	return obj;
+	}
+
+CTestGetBatteryInfoAct::CTestGetBatteryInfoAct(CEtelIsvTestStep* aTestStep, CTelephony* aTelephony)
+	: CEtelIsvActBase(aTestStep, aTelephony),
+	  iBatteryInfoBuff(iBatteryInfo),
+	  iBatteryInfoPckg(iBatteryInfo)
+	{  
+	}
+
+void CTestGetBatteryInfoAct::ConstructL()
+	{
+	iCanceller = new(ELeave) CTestCanceller(this);
+	CActiveScheduler::Add(this);
+	}
+
+CTestGetBatteryInfoAct::~CTestGetBatteryInfoAct()
+	{  
+	Cancel();	// if any Req outstanding, calls DoCancel() to cleanup.
+	delete iCanceller;
+	}
+
+void CTestGetBatteryInfoAct::DoCancel()
+	{
+	iTelephony->CancelAsync(CTelephony::EGetBatteryInfoCancel);
+	}
+
+void CTestGetBatteryInfoAct::GetBatteryInfo(TDes8& aBatteryExpInfoPckg, TRequestStatus aExpStat, TBool aCheckConcurrency)
+	{
+	iBatteryExpInfoPckg=&aBatteryExpInfoPckg;
+	iExpStat = aExpStat;
+	
+	TDes8* data;
+	if (iTestStep->iBufferMode)
+		{
+		data = &iBatteryInfoBuff;
+		}
+	else
+		{
+		data = &iBatteryInfoPckg;
+		}
+	
+	iTelephony->GetBatteryInfo(iStatus, *data);
+	
+	if(aCheckConcurrency)
+		{
+		TRequestStatus tmpStatus;
+		iTelephony->GetBatteryInfo(tmpStatus, *data);
+		User::WaitForRequest(tmpStatus);
+		iTestStep->TEST1(tmpStatus.Int() == KErrInUse, ETrue);
+		}
+		
+	SetActive();
+	}
+
+void CTestGetBatteryInfoAct::RunL()
+	{ 
+	// ActiveScheduler will have set status to KRequestComplete, just before
+	// calling this RunL().
+	CTelephony::TBatteryInfoV1Pckg& batteryExpInfoPckg = REINTERPRET_CAST(CTelephony::TBatteryInfoV1Pckg&, *iBatteryExpInfoPckg);
+	
+	//only supports V1 at present
+	CTelephony::TBatteryInfoV1& batteryExpInfo = (batteryExpInfoPckg)();	
+
+	iTestStep->TEST1(iStatus.Int()==iExpStat.Int(), ETrue);
+	
+	if(iStatus.Int() == KErrNone)
+		{
+		CTelephony::TBatteryInfoV1* data;
+		if (iTestStep->iBufferMode)
+			{
+			data = reinterpret_cast<CTelephony::TBatteryInfoV1*> ( &iBatteryInfoBuff() );
+			}
+		else
+			{
+			data = reinterpret_cast<CTelephony::TBatteryInfoV1*> ( &iBatteryInfoPckg() );
+			}
+		    
+		iTestStep->TEST1(data->iStatus==batteryExpInfo.iStatus, ETrue);
+		iTestStep->TEST1(data->iChargeLevel==batteryExpInfo.iChargeLevel, ETrue);
+		iTestStep->PrintBatteryInfo(*data);
+		}
+	else
+		{
+		iTestStep->INFO_PRINTF2(_L("Error for GetBatteryInfo: %d"), iStatus.Int() );
+		}
+
+	iTestStep->INFO_PRINTF1(_L(""));
+	CActiveScheduler::Stop();
+	}
+
+CTestGetSignalStrength::CTestGetSignalStrength()
+/** 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("TestGetSignalStrength"));
+}
+
+/**
+*
+@SYMTestCaseID Etel3rdParty 6.1
+@SYMTestCaseDesc Test GetSignalStrength 3rd party API
+@SYMFssID SGL.GT0166.054 v1.3 A2_Telephony_Functional_Specification.doc, REQ 2116.??
+*
+*/ 
+
+TVerdict CTestGetSignalStrength::doTestStepL()
+	{
+	INFO_PRINTF1(_L("Test retrieval of Signal Strength information "));
+
+	//Set test number
+	SetTestNumber(6);
+	//Set expected result values
+	TRequestStatus expStat=KErrNone;
+	CTelephony::TSignalStrengthV1 ExpSignalStrength;
+	ExpSignalStrength.iBar=3;
+	ExpSignalStrength.iSignalStrength=-51;
+	CTelephony::TSignalStrengthV1Pckg expSignalStrengthPckg(ExpSignalStrength);
+	CTestGetSignalStrengthAct* GetSignalStrengthAct = CTestGetSignalStrengthAct::NewLC(this, iTelephony);
+
+	#if defined(_DEBUG)
+	//test OOM
+		INFO_PRINTF1(_L("Test OOM for GetSignalStrength"));
+		expStat=KErrNoMemory;
+		__UHEAP_FAILNEXT(1);
+		GetSignalStrengthAct->GetSignalStrength(expSignalStrengthPckg, expStat);	
+		CActiveScheduler::Start();
+		__UHEAP_RESET;
+	#endif
+
+	//Start GetSignalStrength AO
+	INFO_PRINTF1(_L("Test GetSignalStrength"));
+	expStat=KErrNone;
+	GetSignalStrengthAct->GetSignalStrength(expSignalStrengthPckg, expStat, ETrue);	
+	CActiveScheduler::Start();
+
+	User::After(3000000);
+	//wait for 3 secs and re-test
+	expStat=KErrNotSupported;
+	GetSignalStrengthAct->GetSignalStrength(expSignalStrengthPckg, expStat);	
+	CActiveScheduler::Start();
+	
+	//Test cancel
+	User::After(3000000);
+	TInt cancelerr = iTelephony->CancelAsync(CTelephony::EGetSignalStrengthCancel);
+	TEST1(cancelerr == KErrNotFound, ETrue);
+	INFO_PRINTF1(_L("Test Cancel for GetSignalStrength"));
+	GetSignalStrengthAct->GetSignalStrength(expSignalStrengthPckg, expStat);
+	CTestCanceller* canceller = GetSignalStrengthAct->RetrieveCanceller();
+	canceller->Call();
+	CActiveScheduler::Start();	
+	TEST1(GetSignalStrengthAct->iStatus.Int() == KErrCancel || GetSignalStrengthAct->iStatus.Int() == KErrNone, ETrue);
+
+	CleanupStack::PopAndDestroy(); //GetSignalStrengthAct 
+	return TestStepResult() ;
+}
+
+//=====================================================
+//
+//	Class to get signal strength active object
+//
+//=====================================================
+CTestGetSignalStrengthAct* CTestGetSignalStrengthAct::NewLC(CEtelIsvTestStep* aTestStep, CTelephony* aTelephony, TBool aUseMacros)
+//Factory constructor
+	{
+	CTestGetSignalStrengthAct* obj = new(ELeave) CTestGetSignalStrengthAct(aTestStep, aTelephony, aUseMacros);
+	CleanupStack::PushL(obj);
+	obj->ConstructL();
+	return obj;
+	}
+	
+CTestGetSignalStrengthAct::CTestGetSignalStrengthAct(CEtelIsvTestStep* aTestStep, CTelephony* aTelephony, TBool aUseMacros)
+	: CEtelIsvActBase(aTestStep, aTelephony),
+	iUseMacros(aUseMacros),
+	iSignalStrengthBuff(iSignalStrength),
+	iSignalStrengthPckg(iSignalStrength)
+	{  
+	}
+
+void CTestGetSignalStrengthAct::ConstructL()
+	{ 
+	iCanceller = new(ELeave) CTestCanceller(this);
+	CActiveScheduler::Add(this);
+	}
+
+CTestGetSignalStrengthAct::~CTestGetSignalStrengthAct()
+	{  
+	Cancel();	// if any Req outstanding, calls DoCancel() to cleanup.
+	delete iCanceller;
+	}
+
+void CTestGetSignalStrengthAct::DoCancel()
+	{
+	iTelephony->CancelAsync(CTelephony::EGetSignalStrengthCancel);
+	}
+
+void CTestGetSignalStrengthAct::GetSignalStrength(TDes8& aExpSignalStrengthPckg, TRequestStatus aExpStat, TBool aCheckConcurrency)
+	{
+	iExpStat = aExpStat;
+	iExpSignalStrengthPckg=&aExpSignalStrengthPckg;
+	
+	TDes8* data;
+	if (iTestStep->iBufferMode)
+		{
+		data = &iSignalStrengthBuff;
+		}
+	else
+		{
+		data = &iSignalStrengthPckg;
+		}
+	
+	iTelephony->GetSignalStrength(iStatus, *data);
+	
+	if(aCheckConcurrency)
+		{
+		TRequestStatus tmpStatus;
+		iTelephony->GetSignalStrength(tmpStatus, *data);
+		User::WaitForRequest(tmpStatus);
+		iTestStep->TEST1(tmpStatus.Int() == KErrInUse, ETrue);
+		}		
+		
+	SetActive();
+	}
+
+void CTestGetSignalStrengthAct::RunL()
+	{ 
+	// ActiveScheduler will have set status to KRequestComplete, just before
+	// calling this RunL().
+	CTelephony::TSignalStrengthV1Pckg& expSignalStrengthPckg = REINTERPRET_CAST(CTelephony::TSignalStrengthV1Pckg&, *iExpSignalStrengthPckg);
+	
+	//only supports V1 at present
+	CTelephony::TSignalStrengthV1& expSignalStrength = (expSignalStrengthPckg)();	
+
+	if(iUseMacros)
+		{
+		iTestStep->TEST1(iStatus.Int()==iExpStat.Int(), ETrue);
+		}
+	
+	if(iStatus.Int() == KErrNone)
+		{
+		if(iUseMacros)
+			{
+			CTelephony::TSignalStrengthV1* data;
+			if (iTestStep->iBufferMode)
+				{
+				data = reinterpret_cast<CTelephony::TSignalStrengthV1*> ( &iSignalStrengthBuff() );
+				}
+			else
+				{
+				data = reinterpret_cast<CTelephony::TSignalStrengthV1*> ( &iSignalStrengthPckg() );
+				}
+			    
+			iTestStep->TEST1(data->iBar==expSignalStrength.iBar, ETrue);
+			iTestStep->TEST1(data->iSignalStrength==expSignalStrength.iSignalStrength, ETrue);
+			iTestStep->INFO_PRINTF2(_L("Signal strength (in display bars) : %d"), expSignalStrength.iBar);
+			iTestStep->INFO_PRINTF2(_L("Signal strength (in dBm) : %d"), expSignalStrength.iSignalStrength);
+			}
+		}
+	else
+		{
+		if(iUseMacros)
+			{
+			iTestStep->INFO_PRINTF2(_L("Error for GetSignalStrength: %d"), iStatus.Int() );
+			}
+		}
+
+	CActiveScheduler::Stop();
+	if(iUseMacros)
+		{
+		iTestStep->INFO_PRINTF1(_L(""));
+		}
+	}
+
+CTestGetLockInfo::CTestGetLockInfo()
+/** 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("TestGetLockInfo"));
+}
+
+/**
+*
+@SYMTestCaseID Etel3rdParty 7.1
+@SYMTestCaseDesc Test GetLockInfo 3rd party API
+@SYMFssID SGL.GT0166.054 v1.3 A2_Telephony_Functional_Specification.doc, REQ 2116.1.8
+*
+*/ 
+
+TVerdict CTestGetLockInfo::doTestStepL()
+	{
+	INFO_PRINTF1(_L("Test retrieval of current status of PIN1/PIN2 "));
+	//Set test number
+	SetTestNumber(7);
+	
+	//Set expected result values
+	TRequestStatus expStat=KErrNone;
+	CTelephony::TIccLockInfoV1 ExpLockInfo;
+	ExpLockInfo.iSetting = CTelephony::ELockSetDisabled;
+	ExpLockInfo.iStatus = CTelephony::EStatusUnlocked;
+	CTelephony::TIccLockInfoV1Pckg expLockInfoPckg(ExpLockInfo);
+	CTestGetLockInfoAct* GetLockInfoAct = CTestGetLockInfoAct::NewLC(this, iTelephony);
+
+	CTelephony::TIccLock Lock;
+	#if defined(_DEBUG)
+	//test OOM
+		INFO_PRINTF1(_L("Test OOM for GetLockInfo"));
+		expStat=KErrNoMemory;
+		Lock=CTelephony::ELockPin1;
+		__UHEAP_FAILNEXT(1);
+		GetLockInfoAct->GetLockInfo(Lock, expLockInfoPckg, expStat);
+		CActiveScheduler::Start();
+		__UHEAP_RESET;
+	#endif
+	
+	//Start GetLockinfo AO for pin1
+	expStat=KErrNone;
+	INFO_PRINTF1(_L("Test GetLockInfo"));
+	Lock=CTelephony::ELockPin1;
+	INFO_PRINTF1(_L("current status of PIN1 "));
+	GetLockInfoAct->GetLockInfo(Lock, expLockInfoPckg, expStat, ETrue);
+	CActiveScheduler::Start();
+
+	//Start GetLockinfo AO for pin2
+	Lock=CTelephony::ELockPin2;
+	INFO_PRINTF1(_L("current status of PIN2 "));
+	ExpLockInfo.iSetting = CTelephony::ELockSetEnabled;
+	ExpLockInfo.iStatus = CTelephony::EStatusLocked;
+	GetLockInfoAct->GetLockInfo(Lock, expLockInfoPckg, expStat);
+	CActiveScheduler::Start();
+	
+	//Test cancel
+	INFO_PRINTF1(_L("Test Cancel for GetLockInfo"));
+	TInt cancelerr = iTelephony->CancelAsync(CTelephony::EGetLockInfoCancel);
+	TEST1(cancelerr == KErrNotFound, ETrue);
+	GetLockInfoAct->GetLockInfo(Lock, expLockInfoPckg, expStat);
+	CTestCanceller* canceller = GetLockInfoAct->RetrieveCanceller();
+	canceller->Call();
+	CActiveScheduler::Start();
+	TEST1(GetLockInfoAct->iStatus.Int() == KErrCancel || GetLockInfoAct->iStatus.Int() == KErrNone, ETrue);
+
+	CleanupStack::PopAndDestroy(); //GetLockInfoAct 
+	return TestStepResult() ;
+}
+
+//=====================================================
+//
+//	Class to get lock info active object
+//
+//=====================================================
+CTestGetLockInfoAct* CTestGetLockInfoAct::NewLC(CEtelIsvTestStep* aTestStep, CTelephony* aTelephony)
+//Factory constructor
+	{
+	CTestGetLockInfoAct* obj = new(ELeave) CTestGetLockInfoAct(aTestStep, aTelephony);
+	CleanupStack::PushL(obj);
+	obj->ConstructL();
+	return obj;
+	}
+	
+CTestGetLockInfoAct::CTestGetLockInfoAct(CEtelIsvTestStep* aTestStep, CTelephony* aTelephony)
+	: CEtelIsvActBase(aTestStep, aTelephony),
+	iLockInfoBuff(iLockInfo),
+	iLockInfoPckg(iLockInfo)
+	{  
+	}
+
+void CTestGetLockInfoAct::ConstructL()
+	{  
+	iCanceller = new(ELeave) CTestCanceller(this);
+	CActiveScheduler::Add(this);
+	}
+
+CTestGetLockInfoAct::~CTestGetLockInfoAct()
+	{  
+	Cancel();	// if any Req outstanding, calls DoCancel() to cleanup.
+	delete iCanceller;
+	}
+
+void CTestGetLockInfoAct::DoCancel()
+	{
+	iTelephony->CancelAsync(CTelephony::EGetLockInfoCancel);
+	}
+
+void CTestGetLockInfoAct::GetLockInfo(CTelephony::TIccLock aLock, TDes8& aExpLockInfoPckg, TRequestStatus aExpStat, TBool aCheckConcurrency)
+	{
+	iExpStat = aExpStat;
+	iExpLockInfoPckg=&aExpLockInfoPckg;
+	iLock = aLock;
+
+	TDes8* data;
+	if (iTestStep->iBufferMode)
+		{
+		data = &iLockInfoBuff;
+		}
+	else
+		{
+		data = &iLockInfoPckg;
+		}
+
+	iTelephony->GetLockInfo(iStatus ,aLock ,*data);
+	
+	if(aCheckConcurrency)
+		{
+		TRequestStatus tmpStatus;
+		iTelephony->GetLockInfo(tmpStatus ,aLock ,*data);
+		User::WaitForRequest(tmpStatus);
+		iTestStep->TEST1(tmpStatus.Int() == KErrInUse, ETrue);
+		}
+		
+	SetActive();
+	}
+
+void CTestGetLockInfoAct::RunL()
+	{ 
+	// ActiveScheduler will have set status to KRequestComplete, just before
+	// calling this RunL().
+	CTelephony::TIccLockInfoV1Pckg& expLockInfoPckg = REINTERPRET_CAST(CTelephony::TIccLockInfoV1Pckg&, *iExpLockInfoPckg);
+	
+	//only supports V1 at present
+	CTelephony::TIccLockInfoV1& expLockInfo = (expLockInfoPckg)();	
+
+	iTestStep->TEST1(iStatus.Int()==iExpStat.Int(),1);
+	
+	if(iStatus.Int() == KErrNone)
+		{
+		CTelephony::TIccLockInfoV1* data;
+		if (iTestStep->iBufferMode)
+			{
+			data = reinterpret_cast<CTelephony::TIccLockInfoV1*> ( &iLockInfoBuff() );
+			}
+		else
+			{
+			data = reinterpret_cast<CTelephony::TIccLockInfoV1*> ( &iLockInfoPckg() );
+			}
+		    
+		iTestStep->TEST1(data->iSetting==expLockInfo.iSetting,1);
+		iTestStep->TEST1(data->iStatus==expLockInfo.iStatus,1);
+		iTestStep->PrintLockInfo(iLock, data->iSetting, data->iStatus);
+		}
+	else
+		{
+		iTestStep->INFO_PRINTF2(_L("Error for GetLockInfo: %d"), iStatus.Int() );
+		}
+
+	CActiveScheduler::Stop();
+	iTestStep->INFO_PRINTF1(_L(""));
+	}
+
+CTestSendDTMFTones::CTestSendDTMFTones()
+/** 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("TestSendDTMFTones"));
+}
+
+/**
+*
+@SYMTestCaseID Etel3rdParty 8.1
+@SYMTestCaseDesc Test SendDTMFTones 3rd party API
+@SYMFssID SGL.GT0166.054 v1.3 A2_Telephony_Functional_Specification.doc, REQ 2116.1.9
+*
+*/ 
+
+
+TVerdict CTestSendDTMFTones::doTestStepL()
+	{
+	SetTestNumber(8);
+
+	INFO_PRINTF1(_L("Test sending of DTMF tones "));
+	
+	//set test data to transmit
+	_LIT(KDtmfString0,"45p6789A");
+	
+	//make a call to send the DTMF through
+	
+	_LIT(KGoodNumber,"1789");	
+	//Set the call parameters for call 
+	CTelephony::TCallParamsV1 callParams1;
+	callParams1.iIdRestrict = CTelephony::ESendMyId;
+	CTelephony::TCallParamsV1Pckg callParamsPckg1(callParams1);	
+	
+	TTestCallParams testCallParams;
+	testCallParams.iLine = CTelephony::EVoiceLine;
+	testCallParams.iCallParamsV1Pckg = &callParamsPckg1;
+	testCallParams.iTelAddress.iTelNumber = KGoodNumber;
+	testCallParams.iExpStat = KErrNone;
+		
+	//make the call
+	CTestDialNewCallAct* testDialNewCallAct = CTestDialNewCallAct::NewLC(this, iTelephony);	
+	testCallParams.iCallId = CTelephony::EISVMaxNumOfCalls;
+	testDialNewCallAct->TestDialNewCall(testCallParams);
+	CActiveScheduler::Start();
+	CleanupStack::PopAndDestroy(testDialNewCallAct);	
+	
+	//wait for call status to be connected
+	CTelephony::TCallStatusV1 CallStatusV1;
+	CTelephony::TCallStatusV1Pckg CallStatusPckg(CallStatusV1);
+	iTelephony->GetCallStatus(testCallParams.iCallId, CallStatusPckg);
+	TEST1(CallStatusV1.iStatus == CTelephony::EStatusConnected,1);
+ 
+	TRequestStatus expStat=KErrNone;	
+	CTestSendDTMFTonesAct*SendDTMFAct = CTestSendDTMFTonesAct::NewLC(this, iTelephony);
+
+	#if defined(_DEBUG)
+	//test OOM
+		INFO_PRINTF1(_L("Test OOM for SendDTMFTones")); 
+		expStat=KErrNoMemory;
+		__UHEAP_FAILNEXT(1);
+		SendDTMFAct->SendDTMFTone(KDtmfString0, expStat);
+		CActiveScheduler::Start();	
+		__UHEAP_RESET;
+	#endif
+		
+	//set expected result values for DTMF	
+	expStat=KErrNone;
+	SendDTMFAct->SendDTMFTone(KDtmfString0, expStat, ETrue);
+	CActiveScheduler::Start();
+
+	//Test cancel
+	INFO_PRINTF1(_L("Test Cancel for SendDTMFTones"));
+	TInt cancelerr = iTelephony->CancelAsync(CTelephony::ESendDTMFTonesCancel);
+	TEST1(cancelerr == KErrNotFound, ETrue);
+	SendDTMFAct->SendDTMFTone(KDtmfString0, expStat);
+	CTestCanceller* canceller = SendDTMFAct->RetrieveCanceller();
+	canceller->Call();
+	CActiveScheduler::Start();	
+	TEST1(SendDTMFAct->iStatus.Int() == KErrCancel, ETrue);
+
+	CTestHangupAct* testHangupAct = CTestHangupAct::NewLC(this, iTelephony);	
+	//Hangup call
+	testHangupAct->TestHangup(testCallParams);
+	CActiveScheduler::Start();
+	CleanupStack::PopAndDestroy(testHangupAct);
+
+	
+	CleanupStack::PopAndDestroy(SendDTMFAct); //SendDTMFAct 
+	return TestStepResult() ;
+}
+
+CTestSendDTMFTonesAct* CTestSendDTMFTonesAct::NewLC(CEtelIsvTestStep* aTestStep, CTelephony* aTelephony)
+//Factory constructor
+	{
+	CTestSendDTMFTonesAct* obj = new(ELeave) CTestSendDTMFTonesAct(aTestStep, aTelephony);
+	CleanupStack::PushL(obj);
+	obj->ConstructL();
+	return obj;
+	}
+	
+CTestSendDTMFTonesAct::CTestSendDTMFTonesAct(CEtelIsvTestStep* aTestStep, CTelephony* aTelephony)
+	: CEtelIsvActBase(aTestStep, aTelephony)
+	{  
+	}
+
+void CTestSendDTMFTonesAct::ConstructL()
+	{ 
+	iCanceller = new(ELeave) CTestCanceller(this);
+	CActiveScheduler::Add(this);
+	}
+
+CTestSendDTMFTonesAct::~CTestSendDTMFTonesAct()
+	{  
+	Cancel();	// if any Req outstanding, calls DoCancel() to cleanup.
+	delete iCanceller;
+	}
+
+void CTestSendDTMFTonesAct::DoCancel()
+	{
+	iTelephony->CancelAsync(CTelephony::ESendDTMFTonesCancel);
+	}
+
+void CTestSendDTMFTonesAct::SendDTMFTone(const TDesC& aTones, TRequestStatus aExpStat, TBool aCheckConcurrency)
+	{
+	iExpStat = aExpStat;
+	
+	iTelephony->SendDTMFTones(iStatus, aTones);
+	
+	if(aCheckConcurrency)
+		{
+		TRequestStatus tmpStatus;
+		iTelephony->SendDTMFTones(tmpStatus, aTones);
+		User::WaitForRequest(tmpStatus);
+		iTestStep->TEST1(tmpStatus.Int() == KErrInUse, ETrue);
+		}
+		
+	SetActive();
+	}
+
+void CTestSendDTMFTonesAct::RunL()
+	{ 
+	// ActiveScheduler will have set status to KRequestComplete, just before
+	// calling this RunL().
+
+	iTestStep->TEST1(iStatus.Int()==iExpStat.Int(), 1);
+	
+	CActiveScheduler::Stop();
+	iTestStep->INFO_PRINTF1(_L(""));
+	}
+
+CTestFlightModeWithPublishSubscribe::CTestFlightModeWithPublishSubscribe()
+/** 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("TestFlightModeWithPublishSubscribe"));
+}
+
+/**
+*
+@SYMTestCaseID Etel3rdParty 3.1
+@SYMTestCaseDesc Test GetFlightMode 3rd party API
+@SYMFssID SGL.GT0166.054 v1.3 A2_Telephony_Functional_Specification.doc, REQ 2116.4.3
+*
+*/ 
+
+
+TVerdict CTestFlightModeWithPublishSubscribe::doTestStepL()
+	{
+	INFO_PRINTF1(_L("Test retrieval of flight mode with publish and subscribe"));
+
+	RProperty phonePowerProperty;
+	User::LeaveIfError(phonePowerProperty.Attach(KUidSystemCategory, KUidPhonePwr.iUid));
+	CleanupClosePushL(phonePowerProperty);	
+			
+	TRequestStatus status;
+	phonePowerProperty.Subscribe(status);
+	User::LeaveIfError(phonePowerProperty.Set(KUidSystemCategory,KUidPhonePwr.iUid,ESAPhoneOn));
+	User::WaitForRequest(status);
+	TEST(status.Int() == KErrNone);	
+
+	//Set up the data
+	CTelephony::TFlightModeV1 FlightMode;
+	CTelephony::TFlightModeV1Pckg FlightModePckg(FlightMode);
+	TPckgBuf<CTelephony::TFlightModeV1> FlightModeBuff(FlightMode);
+	TDes8* FlightModeData;
+	if (iBufferMode)
+		{
+		FlightModeData = &FlightModeBuff;
+		}
+	else
+		{
+		FlightModeData = &FlightModePckg;
+		}
+	CTelephony::TFlightModeV1& FlightModeResult = 
+		reinterpret_cast<CTelephony::TFlightModeV1&> ( const_cast<TUint8&> ( *FlightModeData->Ptr() ) );
+	
+	//Get current flight mode
+	TRequestStatus reqStat=KErrNone;
+	iTelephony->GetFlightMode(reqStat, *FlightModeData);
+	User::WaitForRequest(reqStat);
+
+	//check results
+	TEST1(reqStat.Int() == KErrNone, ETrue);
+	TEST1(FlightModeResult.iFlightModeStatus == CTelephony::EFlightModeOff, ETrue);
+	if (FlightModeResult.iFlightModeStatus == CTelephony::EFlightModeOff)
+		INFO_PRINTF1(_L("The mobile radio interface and bluetooth is currently on"));
+
+	phonePowerProperty.Subscribe(status);
+	User::LeaveIfError(phonePowerProperty.Set(KUidSystemCategory,KUidPhonePwr.iUid,ESAPhoneOff));
+	User::WaitForRequest(status);
+	TEST(status.Int() == KErrNone);	
+	
+	//Get current flight mode
+	iTelephony->GetFlightMode(reqStat, *FlightModeData);
+	User::WaitForRequest(reqStat);
+
+	//check results
+	TEST1(reqStat.Int() == KErrNone, ETrue);
+	TEST1(FlightModeResult.iFlightModeStatus == CTelephony::EFlightModeOn, ETrue);
+	if (FlightModeResult.iFlightModeStatus == CTelephony::EFlightModeOn)
+		INFO_PRINTF1(_L("The mobile radio interface and bluetooth is currently off"));		
+	CleanupStack::PopAndDestroy(&phonePowerProperty);
+	return TestStepResult() ;
+}
+
+CTestPhoneFuncFlightModeOnWithPublishSubscribe::CTestPhoneFuncFlightModeOnWithPublishSubscribe()
+/** 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("TestPhoneFuncFlightModeOnWithPublishSubscribe"));
+}
+
+/**
+@SYMTestCaseID Etel3rdParty 8.2, TestPhoneFuncFlightModeOn
+@SYMTestCaseDesc Test GetSignalStrength and SendDTMFTone 3rd party APIs
+@SYMFssID SGL.GT0166.054 v1.3 A2_Telephony_Functional_Specification.doc, REQ 2116.1.?/9
+*/
+
+enum TVerdict CTestPhoneFuncFlightModeOnWithPublishSubscribe::doTestStepL()
+{
+	INFO_PRINTF1(_L("START TEST 8.2"));	
+	 
+	INFO_PRINTF1(_L(" TEST: Signal Strength information not retrievable when flight mode on with publish and subscribe "));
+
+	//Set test number
+	SetTestNumber(34);
+	
+	// Set expected status to KErrAccessDenied as this should be returned in
+	// the case where flight mode is on.
+	TRequestStatus expStat=KErrAccessDenied;
+	CTelephony::TSignalStrengthV1 ExpSignalStrength;
+	ExpSignalStrength.iBar=3;
+	ExpSignalStrength.iSignalStrength=-51;
+	CTelephony::TSignalStrengthV1Pckg expSignalStrengthPckg(ExpSignalStrength);
+	CTestGetSignalStrengthAct* GetSignalStrengthAct = CTestGetSignalStrengthAct::NewLC(this, iTelephony);
+
+	// Set up phonePowerProperty variable so that flight mode can be manipulated.
+	RProperty phonePowerProperty;
+	User::LeaveIfError(phonePowerProperty.Attach(KUidSystemCategory, KUidPhonePwr.iUid));
+	CleanupClosePushL(phonePowerProperty);	
+
+	//Switch flight mode on (ie radio mode off)
+	TRequestStatus status;
+	phonePowerProperty.Subscribe(status);
+	User::LeaveIfError(phonePowerProperty.Set(KUidSystemCategory,KUidPhonePwr.iUid,ESAPhoneOff));
+	User::WaitForRequest(status);
+	TEST(status.Int() == KErrNone);	
+
+	// Make a call to the 3rd Party API.
+	GetSignalStrengthAct->GetSignalStrength(expSignalStrengthPckg, expStat);	
+	CActiveScheduler::Start();
+
+	
+	INFO_PRINTF1(_L("Test sending of DTMF tones disallowed when flight mode on "));
+	
+	//set test data to transmit
+	_LIT(KDtmfString0,"45p6789A");
+	
+	// Switch flight mode off so that a call can be set up. 
+	phonePowerProperty.Subscribe(status);
+	User::LeaveIfError(phonePowerProperty.Set(KUidSystemCategory,KUidPhonePwr.iUid,ESAPhoneOn));
+	User::WaitForRequest(status);
+	TEST(status.Int() == KErrNone);	
+ 
+ 	//Get current flight mode
+	TRequestStatus reqStat=KErrNone;
+	CTelephony::TFlightModeV1 FlightMode;
+	CTelephony::TFlightModeV1Pckg FlightModePckg(FlightMode);	
+	iTelephony->GetFlightMode(reqStat, FlightModePckg);
+	User::WaitForRequest(reqStat);
+
+	//check results
+	TEST1(reqStat.Int() == KErrNone, ETrue);
+	TEST1(FlightMode.iFlightModeStatus == CTelephony::EFlightModeOff, ETrue);
+	if (FlightMode.iFlightModeStatus == CTelephony::EFlightModeOff)
+		INFO_PRINTF1(_L("The mobile radio interface and bluetooth is currently on"));
+	
+ 	// Switch flight mode on (ie radio mode off) to test that 
+ 	// DTMF Tone sending fails is disallowed in flight mode. 
+	phonePowerProperty.Subscribe(status);
+	User::LeaveIfError(phonePowerProperty.Set(KUidSystemCategory,KUidPhonePwr.iUid,ESAPhoneOff));
+	User::WaitForRequest(status);
+	TEST(status.Int() == KErrNone);	
+
+ 
+	//set expected result values for DTMF	
+	CTestSendDTMFTonesAct*SendDTMFAct = CTestSendDTMFTonesAct::NewLC(this, iTelephony);
+	expStat=KErrAccessDenied;
+	SendDTMFAct->SendDTMFTone(KDtmfString0, expStat);
+	CActiveScheduler::Start();
+ 
+ 	// Switch flight mode off (ie radio mode on)  
+ 	// so that the call can be hung up.
+	phonePowerProperty.Subscribe(status);
+	User::LeaveIfError(phonePowerProperty.Set(KUidSystemCategory,KUidPhonePwr.iUid,ESAPhoneOn));
+	User::WaitForRequest(status);
+	TEST(status.Int() == KErrNone);	
+
+	
+	INFO_PRINTF1(_L("END TEST 8.2"));
+	
+	 
+	//CleanupStack::PopAndDestroy(testHangupAct);
+	CleanupStack::PopAndDestroy(SendDTMFAct); //SendDTMFAct 
+	//CleanupStack::PopAndDestroy(testDialNewCallAct);
+	CleanupStack::PopAndDestroy(&phonePowerProperty);	 
+	CleanupStack::PopAndDestroy(GetSignalStrengthAct);
+	return TestStepResult() ;	  
+	 
+}
+