--- a/telephonyutils/etel3rdpartyapi/Test/te_etelIsv/TE_EtelIsvLineInfo.cpp Mon May 03 13:37:20 2010 +0300
+++ b/telephonyutils/etel3rdpartyapi/Test/te_etelIsv/TE_EtelIsvLineInfo.cpp Thu May 06 15:10:38 2010 +0100
@@ -1,1110 +1,1110 @@
-// 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:
-//
-
-#include "TE_EtelIsvbase.h"
-#include "TE_EtelIsvCallFunc.h"
-#include "TE_EtelIsvLineInfo.h"
-
-
-/**
-@file
-
-@SYMTestCaseID Etel3rdParty 22.1, TestGetLineStatus
-@SYMTestCaseDesc Test GetLineStatus 3rd party API
-@SYMFssID SGL.GT0166.054 v1.3 A2_Telephony_Functional_Specification.doc, REQ 2116.2.2
-*/
-
-
-CTestGetLineStatus::CTestGetLineStatus(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("TestGetLineStatus"));
- }
-
-enum TVerdict CTestGetLineStatus::doTestStepL()
- {
-/**
-This step tests the CTelephony::GetLineStatus() API
-*/
-
- INFO_PRINTF1(_L("START TEST 22.1"));
-
- INFO_PRINTF1(_L("Test retrieving of the mobile line status"));
- _LIT(KGoodNumber,"1789");
-
- SetTestNumber(15);
-
- //Set the call parameters for MO call
- CTelephony::TCallParamsV1 callParams;
- callParams.iIdRestrict = CTelephony::ESendMyId;
- CTelephony::TCallParamsV1Pckg callParamsPckg(callParams);
-
- TTestCallParams testCallParams;
- testCallParams.iLine = CTelephony::EVoiceLine;
- testCallParams.iCallParamsV1Pckg = &callParamsPckg;
- testCallParams.iTelAddress.iTelNumber = KGoodNumber;
- testCallParams.iExpStat = KErrNone;
- testCallParams.iExpAPIErr = KErrNone;
-
- CTelephony::TCallStatusV1 statusV1;
- CTelephony::TCallStatusV1Pckg statusV1Pckg(statusV1);
-
- // set up local data references
- TDes8* statusV1Data;
- if (iBufferMode)
- {
- statusV1Data = &iStatusV1Buff;
- }
- else
- {
- statusV1Data = &statusV1Pckg;
- }
-
- CTelephony::TCallStatusV1& statusV1Results = reinterpret_cast<CTelephony::TCallStatusV1&>
- ( const_cast<TUint8&> ( *statusV1Data->Ptr() ));
-
-
- //
- //TEST 1: GetLineStatus with on Data & Fax line.
- //
- testCallParams.iLine = CTelephony::EDataLine;
- TInt err = iTelephony->GetLineStatus(testCallParams.iLine, *statusV1Data);
- TEST1(err==KErrNone, ETrue);
- TEST1(statusV1Results.iStatus==CTelephony::EStatusIdle, ETrue);
-
- testCallParams.iLine = CTelephony::EFaxLine;
- err = iTelephony->GetLineStatus(testCallParams.iLine, *statusV1Data);
- //Fax line not in SIM TSY
- TEST1(err==KErrNotSupported, ETrue);
-
- //
- //TEST 2: GetLineStatus with no active call.
- //
- testCallParams.iLine = CTelephony::EVoiceLine;
- //test GetLineStatus with no active call
- err = iTelephony->GetLineStatus(testCallParams.iLine, *statusV1Data);
- TEST1(err==testCallParams.iExpAPIErr, ETrue);
- TEST1(statusV1Results.iStatus==CTelephony::EStatusIdle, ETrue);
-
- //
- //TEST 3:Make a call & Hangup a call. Set a linetstatus notifer going and each time it is invoked call
- // GetLineStatus to compare the states which should match.
- //
-
- //test line status for MO calls
- testCallParams.iExpAPIErr = KErrNone;
- CNotifyLineStatusMOAct* testGetLineStatusMOAct = CNotifyLineStatusMOAct::NewLC(this, iTelephony);
- testGetLineStatusMOAct->StartTestL(testCallParams, CNotifyLineStatusBaseAct::EGetLineStatus);
- CActiveScheduler::Start();
- CleanupStack::PopAndDestroy(); //testGetLineStatusMOAct
-
- //
- //TEST 4:Answer a call & Hangup a call. Set a linestatus notifer going and each time it is invoked call
- // GetLineStatus to compare the states which should match.
- //
-
- //test line status for MT calls
- CNotifyLineStatusMTAct* testGetLineStatusMTAct = CNotifyLineStatusMTAct::NewLC(this, iTelephony, iCallCount);
- testGetLineStatusMTAct->StartTestL(testCallParams, CNotifyLineStatusBaseAct::EGetLineStatus);
- CActiveScheduler::Start();
- CleanupStack::PopAndDestroy(); //testGetLineStatusMTAct
-
-//
-//TEST 5:Make a call - check the line state.
-// Put the call on hold - check the line state.
-// Resume the call - check the line state.
-// Hangup the call.- check the line state.
-//
-
- //test state change for calls on hold
-
- // Create active DialNewCallAct objects
- CTestDialNewCallAct* testDialNewCallAct = CTestDialNewCallAct::NewLC(this, iTelephony);
-
- // Create a call - should succeed
- testCallParams.iCallId = CTelephony::EISVMaxNumOfCalls;
- testDialNewCallAct->TestDialNewCall(testCallParams);
- CActiveScheduler::Start();
-
- //get line status from GetLineStatus API
- err = iTelephony->GetLineStatus(testCallParams.iLine, *statusV1Data);
- TEST1(err == KErrNone, ETrue);
- TEST1(statusV1Results.iStatus==CTelephony::EStatusConnected, ETrue);
-
- //put call on hold
- CTestHoldAct* TestHoldAct = CTestHoldAct::NewLC(this, iTelephony);
- testCallParams.iExpStat=KErrNone;
- TestHoldAct->TestHold(testCallParams);
- CActiveScheduler::Start();
- CleanupStack::PopAndDestroy(TestHoldAct);//TestHoldAct
-
- //get line status from GetLineStatus API
- err = iTelephony->GetLineStatus(testCallParams.iLine, *statusV1Data);
- TEST1(err == KErrNone, ETrue);
- TEST1(statusV1Results.iStatus==CTelephony::EStatusHold, ETrue);
-
- //resume the call
- CTestResumeAct* testResumeAct = CTestResumeAct::NewLC(this, iTelephony);
- testCallParams.iExpStat=KErrNone;
- testResumeAct->TestResume(testCallParams);
- CActiveScheduler::Start();
- CleanupStack::PopAndDestroy(testResumeAct);//testResumeAct
-
- //get line status from GetLineStatus API
- err = iTelephony->GetLineStatus(testCallParams.iLine, *statusV1Data);
- TEST1(err == KErrNone, ETrue);
- TEST1(statusV1Results.iStatus==CTelephony::EStatusConnected, ETrue);
-
- // Create an activeHangupAct object
- CTestHangupAct* testHangupAct = CTestHangupAct::NewLC(this, iTelephony);
-
- //Hangup call1
- testHangupAct->TestHangup(testCallParams);
- CActiveScheduler::Start();
-
- err = iTelephony->GetLineStatus(testCallParams.iLine, *statusV1Data);
- TEST1(err == KErrNone, ETrue);
- TEST1(statusV1Results.iStatus==CTelephony::EStatusIdle, ETrue);
-
- CleanupStack::PopAndDestroy(testHangupAct);//testHangupAct
- CleanupStack::PopAndDestroy(testDialNewCallAct);//testDialNewCallAct
-
- return TestStepResult();
- }
-
-CTestGetCallInfo::CTestGetCallInfo()
-/** 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("TestGetCallInfo"));
- }
-
-/**
-*
-@SYMTestCaseID Etel3rdParty 23.1, TestGetCallInfo
-@SYMTestCaseDesc Test GetCallInfo 3rd party API
-@SYMFssID SGL.GT0166.054 v1.3 A2_Telephony_Functional_Specification.doc, REQ 2116.3.4, REQ 2116.3.9
-*/
-
-enum TVerdict CTestGetCallInfo::doTestStepL()
- {
-/**
-This step tests the CTelephony::GetCallInfo() API
-*/
- INFO_PRINTF1(_L("Test retrieving of the mobile call status"));
- _LIT(KGoodNumber,"1789");
-
- SetTestNumber(15);
-
- //Set the call parameters for MO call
- CTelephony::TCallParamsV1 callParams;
- callParams.iIdRestrict = CTelephony::ESendMyId;
- CTelephony::TCallParamsV1Pckg callParamsPckg(callParams);
-
- TTestCallParams testCallParams;
- testCallParams.iLine = CTelephony::EVoiceLine;
- testCallParams.iCallParamsV1Pckg = &callParamsPckg;
- testCallParams.iTelAddress.iTelNumber = KGoodNumber;
- testCallParams.iExpStat = KErrNone;
-
- //test GetCallInfo with no active call
-
- CTelephony::TCallInfoV1 callInfoV1;
- CTelephony::TCallInfoV1 expCallInfoV1;
- CTelephony::TCallInfoV1Pckg callInfoV1Pckg(callInfoV1);
- CTelephony::TRemotePartyInfoV1 remoteInfoV1;
- CTelephony::TRemotePartyInfoV1 expRemoteInfoV1;
- CTelephony::TRemotePartyInfoV1Pckg remoteInfoV1Pckg(remoteInfoV1);
-
- CTelephony::TCallSelectionV1 callSelection;
- CTelephony::TCallSelectionV1Pckg callSelectionV1Pckg(callSelection);
- callSelection.iSelect = CTelephony::EActiveCall;
- callSelection.iLine = CTelephony::EVoiceLine;
-
- // set up local data references
- TDes8* callInfoV1Data;
- TDes8* remoteInfoV1Data;
- TDes8* callSelectionV1Data;
-
- if (iBufferMode)
- {
- // initialize required buffers
- iCallSelectionV1Buff = callSelection;
-
- //initialize data pointers
- callInfoV1Data = &iCallInfoV1Buff;
- remoteInfoV1Data = &iRemoteInfoV1Buff;
- callSelectionV1Data = &iCallSelectionV1Buff;
- }
- else
- {
- callInfoV1Data = &callInfoV1Pckg;
- remoteInfoV1Data = &remoteInfoV1Pckg;
- callSelectionV1Data = &callSelectionV1Pckg;
- }
-
- CTelephony::TCallInfoV1& callInfoV1Results = reinterpret_cast<CTelephony::TCallInfoV1&>
- ( const_cast<TUint8&> ( *callInfoV1Data->Ptr() ) );
- CTelephony::TRemotePartyInfoV1& remoteInfoV1Results = reinterpret_cast<CTelephony::TRemotePartyInfoV1&>
- ( const_cast<TUint8&> ( *remoteInfoV1Data->Ptr() ) );
-
- TInt err;
- #if defined(_DEBUG)
- //
- //TEST 1: OOM
- //
-
- __UHEAP_FAILNEXT(3);
- err = iTelephony->GetCallInfo(callSelectionV1Pckg, callInfoV1Pckg, remoteInfoV1Pckg);
- TEST1(err==KErrNoMemory, ETrue);
- __UHEAP_RESET;
- #endif
-
- //
- //TEST 2: GetCallInfo with no active call
- //
- err = iTelephony->GetCallInfo(*callSelectionV1Data, *callInfoV1Data, *remoteInfoV1Data);
- TEST1(err==KErrNotFound, ETrue);
-
- //
- //TEST 2: GetCallInfo for a single MO call that is put on held and resumed
- // This tests EActiveCall and EHeldCall
- //
-
- // Create active DialNewCallAct object and Hangup object
- CTestDialNewCallAct* testDialNewCallAct = CTestDialNewCallAct::NewLC(this, iTelephony);
-
- // Create a call - should succeed
- testCallParams.iCallId = CTelephony::EISVMaxNumOfCalls;
- testDialNewCallAct->TestDialNewCall(testCallParams);
- CActiveScheduler::Start();
- CleanupStack::PopAndDestroy(testDialNewCallAct);
-
- CTelephony::TCallStatusV1 status;
- CTelephony::TCallStatusV1Pckg statusPckg(status);
- iTelephony->GetCallStatus(testCallParams.iCallId, statusPckg);
- TEST1(status.iStatus == CTelephony::EStatusConnected, ETrue);
-
- expCallInfoV1.iStatus = CTelephony::EStatusConnected;
- expCallInfoV1.iCallId = CTelephony::EISVCall1;
- expCallInfoV1.iDuration = 0;
- expCallInfoV1.iExitCode = 0;
- expCallInfoV1.iSecurity = CTelephony::ECipheringOff;
- expCallInfoV1.iDialledParty.iTypeOfNumber = CTelephony::EUnknownNumber;
- expCallInfoV1.iDialledParty.iNumberPlan = CTelephony::EUnknownNumberingPlan;
-
- expRemoteInfoV1.iRemoteIdStatus = CTelephony::ERemoteIdentityUnknown;
- expRemoteInfoV1.iDirection = CTelephony::EDirectionUnknown;
- expRemoteInfoV1.iRemoteNumber.iTypeOfNumber = CTelephony::EUnknownNumber;
- expRemoteInfoV1.iRemoteNumber.iNumberPlan = CTelephony::EUnknownNumberingPlan;
-
- //check status of active call
- callSelection.iSelect = CTelephony::EActiveCall;
- if (iBufferMode)
- {
- iCallSelectionV1Buff = callSelection;
- }
-
- err = iTelephony->GetCallInfo(*callSelectionV1Data, *callInfoV1Data, *remoteInfoV1Data);
- TEST1(err==KErrNone, ETrue);
- if(err == KErrNone)
- {
- CNotifyLineStatusBaseAct::PrintGetCallInfo(this, CTelephony::EActiveCall, callInfoV1Results, remoteInfoV1Results);
- TestResults(callInfoV1Results, expCallInfoV1, remoteInfoV1Results, expRemoteInfoV1);
- }
-
- //check status of held call - should fail
- callSelection.iSelect = CTelephony::EHeldCall;
- if (iBufferMode)
- {
- iCallSelectionV1Buff = callSelection;
- }
- err = iTelephony->GetCallInfo(*callSelectionV1Data, *callInfoV1Data, *remoteInfoV1Data);
- TEST1(err==KErrNotFound, ETrue);
-
- //check status of in-progress call - should fail
- callSelection.iSelect = CTelephony::EInProgressCall;
- if (iBufferMode)
- {
- iCallSelectionV1Buff = callSelection;
- }
- err = iTelephony->GetCallInfo(*callSelectionV1Data, *callInfoV1Data, *remoteInfoV1Data);
- TEST1(err==KErrNotFound, ETrue);
-
- //put call on hold
- CTestHoldAct* TestHoldAct = CTestHoldAct::NewLC(this, iTelephony);
- testCallParams.iExpStat=KErrNone;
- TestHoldAct->TestHold(testCallParams);
- CActiveScheduler::Start();
- CleanupStack::PopAndDestroy(TestHoldAct);//TestHoldAct
-
- //check status of held call
- callSelection.iSelect = CTelephony::EHeldCall;
- if (iBufferMode)
- {
- iCallSelectionV1Buff = callSelection;
- }
- expCallInfoV1.iStatus = CTelephony::EStatusHold;
- err = iTelephony->GetCallInfo(*callSelectionV1Data, *callInfoV1Data, *remoteInfoV1Data);
- TEST1(err==KErrNone, ETrue);
- if(err == KErrNone)
- {
- CNotifyLineStatusBaseAct::PrintGetCallInfo(this, CTelephony::EHeldCall, callInfoV1Results, remoteInfoV1Results);
- TestResults(callInfoV1Results, expCallInfoV1, remoteInfoV1Results, expRemoteInfoV1);
- }
-
- //Hangup call1
- CTestHangupAct* testHangupAct = CTestHangupAct::NewLC(this, iTelephony);
- testCallParams.iExpStat = KErrNone;
- testHangupAct->TestHangup(testCallParams);
- CActiveScheduler::Start();
- CleanupStack::PopAndDestroy(testHangupAct);
-
- //
- //TEST 3: Create a single MO call and each time a line state change notification is received call
- // GetCallInfo. This tests EInProgressCall
- //
- //test call info for MO calls
- CNotifyLineStatusMOAct* testGetCallInfoMOAct = CNotifyLineStatusMOAct::NewLC(this, iTelephony);
- testGetCallInfoMOAct->StartTestL(testCallParams, CNotifyLineStatusBaseAct::EGetCallInfo);
- CActiveScheduler::Start();
- CleanupStack::PopAndDestroy(); //testGetCallInfoMOAct
-
- return TestStepResult();
- }
-
-void CTestGetCallInfo::TestResults(CTelephony::TCallInfoV1& aActualCallInfo, CTelephony::TCallInfoV1& aExpCallInfo, CTelephony::TRemotePartyInfoV1& aActualRemotePartyInfo, CTelephony::TRemotePartyInfoV1& aExpRemotePartyInfo)
- {
- TEST1(aActualCallInfo.iStatus == aExpCallInfo.iStatus, ETrue);
- TEST1(aActualCallInfo.iDialledParty.iTypeOfNumber == aExpCallInfo.iDialledParty.iTypeOfNumber, ETrue);
- TEST1(aActualCallInfo.iDialledParty.iNumberPlan == aExpCallInfo.iDialledParty.iNumberPlan, ETrue);
- TEST1(aActualCallInfo.iDialledParty.iTelNumber == aExpCallInfo.iDialledParty.iTelNumber, ETrue);
- TEST1(aActualCallInfo.iDuration == aExpCallInfo.iDuration, ETrue);
- TEST1(aActualCallInfo.iExitCode == aExpCallInfo.iExitCode, ETrue);
- TEST1(aActualCallInfo.iSecurity == aExpCallInfo.iSecurity, ETrue);
- TEST1(aActualCallInfo.iCallId == aExpCallInfo.iCallId, ETrue);
-
- TEST1(aActualRemotePartyInfo.iRemoteIdStatus == aExpRemotePartyInfo.iRemoteIdStatus, ETrue);
- TEST1(aActualRemotePartyInfo.iCallingName == aExpRemotePartyInfo.iCallingName, ETrue);
- TEST1(aActualRemotePartyInfo.iDirection == aExpRemotePartyInfo.iDirection, ETrue);
- TEST1(aActualRemotePartyInfo.iRemoteNumber.iTypeOfNumber == aExpRemotePartyInfo.iRemoteNumber.iTypeOfNumber, ETrue);
- TEST1(aActualRemotePartyInfo.iRemoteNumber.iNumberPlan == aExpRemotePartyInfo.iRemoteNumber.iNumberPlan, ETrue);
- TEST1(aActualRemotePartyInfo.iRemoteNumber.iTelNumber == aExpRemotePartyInfo.iRemoteNumber.iTelNumber, ETrue);
- }
-
-
-
-//
-//AO classes used by test steps above
-//
-
-
-CNotifyLineStatusBaseAct::CNotifyLineStatusBaseAct(CEtelIsvTestStep* aTestStep, CTelephony* aTelephony)
- : CEtelIsvActBase(aTestStep, aTelephony)
- , iCallStatusV1Pckg(iCallStatusV1)
- , iFinish(EFalse)
- {
- }
-
-
-
-void CNotifyLineStatusBaseAct::PrintGetCallInfo(CEtelIsvTestStep* aTestStep, CTelephony::TCallSelect aCallSelect, CTelephony::TCallInfoV1& aCallInfoV1, CTelephony::TRemotePartyInfoV1& aRemoteInfoV1)
-/**
-Print out results for GetCallInfo
-*/
- {
- TBuf<150> strBuf;
-
- if(aCallSelect == CTelephony::EActiveCall)
- strBuf = _L("EActiveCall");
- else if(aCallSelect == CTelephony::EHeldCall)
- strBuf = _L("EHeldCall");
- else // CTelephony::EInProgressCall
- strBuf = _L("EInProgressCall");
- aTestStep->INFO_PRINTF2(_L("For %S GetCallInfo paramters are..."), &strBuf );
-
- //TCallInfoV1
- strBuf=_L("GetCallInfo TCallInfoV1::iStatus=");
- PrintLineStatus(aTestStep, strBuf, aCallInfoV1.iStatus);
- aTestStep->INFO_PRINTF2(_L("GetCallInfo TCallInfoV1::iDuration=%d "), aCallInfoV1.iDuration.Int() );
- aTestStep->INFO_PRINTF2(_L("GetCallInfo TCallInfoV1::iExitCode=%d "), aCallInfoV1.iExitCode );
-
- switch(aCallInfoV1.iSecurity)
- {
- case CTelephony::ECipheringOff:
- strBuf = _L("ECipheringOff");
- break;
- case CTelephony::ECipheringGSM:
- strBuf = _L("ECipheringGSM");
- break;
- case CTelephony::ECipheringWCDMA:
- strBuf = _L("ECipheringWCDMA");
- break;
- default:
- strBuf = _L("UNKNOWN");
- break;
-
- };
- aTestStep->INFO_PRINTF2(_L("GetCallInfo TCallInfoV1::iSecurity=%S "), &strBuf );
- aTestStep->INFO_PRINTF2(_L("GetCallInfo TCallInfoV1::iCallId=%d "), aCallInfoV1.iCallId );
-
- switch(aRemoteInfoV1.iRemoteIdStatus)
- {
- case CTelephony::ERemoteIdentityUnknown:
- strBuf = _L("ERemoteIdentityUnknown");
- break;
- case CTelephony::ERemoteIdentityAvailable:
- strBuf = _L("ERemoteIdentityAvailable");
- break;
- case CTelephony::ERemoteIdentitySuppressed:
- strBuf = _L("ERemoteIdentitySuppressed");
- break;
- default:
- strBuf = _L("UNKNOWN");
- break;
- };
- aTestStep->INFO_PRINTF2(_L("GetCallInfo TRemotePartyInfoV1::iRemoteIdStatus=%S "), &strBuf );
- aTestStep->INFO_PRINTF2(_L("GetCallInfo TRemotePartyInfoV1::iCallingName=%S "), &aRemoteInfoV1.iCallingName );
-
- switch( aRemoteInfoV1.iDirection)
- {
- case CTelephony::EDirectionUnknown:
- strBuf = _L("EDirectionUnknown");
- break;
- case CTelephony::EMobileOriginated:
- strBuf = _L("EMobileOriginated");
- break;
- case CTelephony::EMobileTerminated:
- strBuf = _L("EMobileTerminated");
- break;
- default:
- strBuf = _L("UNKNOWN");
- break;
- };
- aTestStep->INFO_PRINTF2(_L("GetCallInfo TRemotePartyInfoV1::iDirection=%S "), &strBuf );
-
- }
-
-void CNotifyLineStatusBaseAct::PrintLineStatus(CEtelIsvTestStep* aTestStep, TDes& aLine, const CTelephony::TCallStatus aStatus)
-/**
-Print out line status
-*/
- {
- switch(aStatus)
- {
- case CTelephony::EStatusUnknown:
- aLine.Append(_L("EStatusUnknown"));
- break;
- case CTelephony::EStatusIdle:
- aLine.Append(_L("EStatusIdle"));
- break;
- case CTelephony::EStatusDialling:
- aLine.Append(_L("EStatusDialling"));
- break;
- case CTelephony::EStatusRinging:
- aLine.Append(_L("EStaEStatusRinging"));
- break;
- case CTelephony::EStatusAnswering:
- aLine.Append(_L("EStatusAnswering"));
- break;
- case CTelephony::EStatusConnecting:
- aLine.Append(_L("EStatusConnecting"));
- break;
- case CTelephony::EStatusConnected:
- aLine.Append(_L("EStatusConnected"));
- break;
- case CTelephony::EStatusReconnectPending:
- aLine.Append(_L("EStatusReconnectPending"));
- break;
- case CTelephony::EStatusDisconnecting:
- aLine.Append(_L("EStatusDisconnecting"));
- break;
- case CTelephony::EStatusHold:
- aLine.Append(_L("EStatusHold"));
- break;
- case CTelephony::EStatusTransferring:
- aLine.Append(_L("EStatusTransfering"));
- break;
- case CTelephony::EStatusTransferAlerting:
- aLine.Append(_L("EStatusTransferAlerting"));
- break;
- default:
- aLine.Append(_L("Unknown State"));
- }
- aTestStep->INFO_PRINTF2(_L("%S"), &aLine);
- }
-
-void CNotifyLineStatusBaseAct::CallGetCallInfo(const CTelephony::TCallSelect aSelect, CTelephony::TCallStatus aExpStatus)
-/**
-Call the GetCallInfo function and print out results
-*/
- {
- CTelephony::TCallInfoV1 callInfoV1;
- CTelephony::TCallInfoV1Pckg callInfoV1Pckg(callInfoV1);
- CTelephony::TRemotePartyInfoV1 remoteInfoV1;
- CTelephony::TRemotePartyInfoV1Pckg remoteInfoV1Pckg(remoteInfoV1);
-
- CTelephony::TCallSelectionV1 callSelection;
- CTelephony::TCallSelectionV1Pckg callSelectionV1Pckg(callSelection);
- callSelection.iSelect = aSelect;
- callSelection.iLine = CTelephony::EVoiceLine;
-
- TInt err = iTelephony->GetCallInfo(callSelectionV1Pckg, callInfoV1Pckg, remoteInfoV1Pckg);
- iTestStep->TEST1(err == KErrNone, ETrue);
- iTestStep->TEST1(callInfoV1.iStatus == aExpStatus,ETrue);
- PrintGetCallInfo(iTestStep, aSelect, callInfoV1, remoteInfoV1);
- }
-
-/**
-Active Object to request a notifications of line status change and create an MO call.
-This AO is used to test two APIs GetLineStatus() and GetCallInfo().
-**/
-CNotifyLineStatusMOAct* CNotifyLineStatusMOAct::NewLC(CEtelIsvTestStep* aTestStep, CTelephony* aTelephony)
-//Factory constructor
- {
- CNotifyLineStatusMOAct* obj = new(ELeave) CNotifyLineStatusMOAct(aTestStep, aTelephony);
- CleanupStack::PushL(obj);
- obj->ConstructL();
- return obj;
- }
-
-CNotifyLineStatusMOAct::CNotifyLineStatusMOAct(CEtelIsvTestStep* aTestStep, CTelephony* aTelephony)
- : CNotifyLineStatusBaseAct(aTestStep, aTelephony)
- {
- }
-
-void CNotifyLineStatusMOAct::ConstructL()
- {
- iCanceller = new(ELeave) CTestCanceller(this);
- CActiveScheduler::Add(this);
- }
-
-CNotifyLineStatusMOAct::~CNotifyLineStatusMOAct()
- {
- delete iDialNewCallAct;
- delete iHangupAct;
- Cancel(); // if any Req outstanding, calls DoCancel() to cleanup.
- delete iCanceller;
- }
-
-void CNotifyLineStatusMOAct::DoCancel()
- {
- iTelephony->CancelAsync(CTelephony::EVoiceLineStatusChangeCancel);
- }
-
-void CNotifyLineStatusMOAct::StartTestL(TTestCallParams& aTestCallParams, TTestToRun aTestToRun)
-/**
-Start the test
-*/
- {
- iTestStep-> INFO_PRINTF1(_L("CNotifyLineStatusMOAct::StartTest() Start"));
- iTestCallParams = &aTestCallParams;
- // Update the expected return value.
- iExpStat=aTestCallParams.iExpStat;
- iTestToRun = aTestToRun;
-
- //start the notify request for Line Status Change
- iEvent = CTelephony::EVoiceLineStatusChange;
-
- //set notification request going
- iTelephony->NotifyChange(iStatus, iEvent, iCallStatusV1Pckg);
- SetActive();
-
- //now initiate a call
- if(iDialNewCallAct)
- {
- delete iDialNewCallAct;
- iDialNewCallAct = NULL;
- }
- //create dial AO
- iDialNewCallAct = CTestDialNewCallAct::NewL(iTestStep, iTelephony, this);
- //create hangup AO
- if(iHangupAct)
- {
- delete iHangupAct;
- iHangupAct = NULL;
- }
- iHangupAct = CTestHangupAct::NewL(iTestStep, iTelephony, this);
-
- //dial
- iDialNewCallAct->TestDialNewCall(*iTestCallParams);
- }
-
-void CNotifyLineStatusMOAct::ActionParent(const TRequestStatus aCallStatus, const TActionEvent aEvent)
- {
-/**
-Gets called from a child AO when its RunL has been called.
-*/
- //got callback from child AO. Proceed the test.
- if(aCallStatus.Int() == KErrNone)
- {
- if(aEvent == EDialNewCall) //new call has been successfully made. So hangup
- {
- iHangupAct->TestHangup(*iTestCallParams);
- return;
- }
- }
- //finish the test by cancelling the registered notification
- DoCancel();
- iFinish = ETrue;
- CActiveScheduler::Stop();
- }
-
-void CNotifyLineStatusMOAct::RunL()
- {
- // ActiveScheduler will have set status to KRequestComplete, just before
- // calling this RunL().
- iTestStep-> INFO_PRINTF1(_L(" CNotifyLineStatusMOAct::RunL "));
- iTestStep->INFO_PRINTF2(_L("CNotifyLineStatusMOAct: Request Status returned is: %d"), iStatus.Int() );
- iTestStep->TEST1(iStatus.Int() == iExpStat.Int(), ETrue);
-
- if(iStatus.Int() == KErrNone)
- {
- TBuf<100> line=_L("CNotifyLineStatusMOAct: Line status from notification = ");
- //line status from notification
- PrintLineStatus(iTestStep, line, iCallStatusV1.iStatus);
-
- if(iTestToRun == EGetLineStatus) //test GetLinStatus
- {
- //line status from GetLineStatus API
- CTelephony::TCallStatusV1 statusV1;
- CTelephony::TCallStatusV1Pckg statusV1Pckg(statusV1);
- TInt err = iTelephony->GetLineStatus(iTestCallParams->iLine, statusV1Pckg);
- line=_L("CNotifyLineStatusMOAct: Line status from GetLineStatus = ");
- iTestStep->TEST1(err == iTestCallParams->iExpAPIErr, ETrue);
- PrintLineStatus(iTestStep, line, statusV1.iStatus);
- //These should match
- iTestStep->TEST1(statusV1.iStatus == iCallStatusV1.iStatus, ETrue);
- }
- else //test GetCallInfo
- {
- //call GetCallInfo API for each call select notification that is call in progress.
- if(iCallStatusV1.iStatus != CTelephony::EStatusConnected && iCallStatusV1.iStatus != CTelephony::EStatusIdle)
- CallGetCallInfo(CTelephony::EInProgressCall, iCallStatusV1.iStatus);
- }
- }
- else
- {
- iTestStep->INFO_PRINTF2(_L("CNotifyLineStatusMOAct: Error for notify ELineStatusChange: %d"), iStatus.Int() );
- }
- //if true finish the test.
- if(iFinish)
- CActiveScheduler::Stop();
- else
- {
- iTelephony->NotifyChange(iStatus, iEvent, iCallStatusV1Pckg);
- SetActive();
- }
- }
-
-/**
-Active Object to request a notifications of line status change and answer a MT call.
-This AO is used to test two APIs GetLineStatus() and GetCallInfo().
-**/
-CNotifyLineStatusMTAct* CNotifyLineStatusMTAct::NewLC(CEtelIsvTestStep* aTestStep, CTelephony* aTelephony, TInt& aCallCount)
-//Factory constructor
- {
- CNotifyLineStatusMTAct* obj = new(ELeave) CNotifyLineStatusMTAct(aTestStep, aTelephony, aCallCount);
- CleanupStack::PushL(obj);
- obj->ConstructL();
- return obj;
- }
-
-CNotifyLineStatusMTAct::CNotifyLineStatusMTAct(CEtelIsvTestStep* aTestStep, CTelephony* aTelephony, TInt& aCallCount)
- : CNotifyLineStatusBaseAct(aTestStep, aTelephony)
- , iCallCount(aCallCount)
- {
- }
-
-void CNotifyLineStatusMTAct::ConstructL()
- {
- iCanceller = new(ELeave) CTestCanceller(this);
- CActiveScheduler::Add(this);
- }
-
-CNotifyLineStatusMTAct::~CNotifyLineStatusMTAct()
- {
- delete iAnswerIncomingCallAct;
- delete iHangupAct;
- Cancel(); // if any Req outstanding, calls DoCancel() to cleanup.
- delete iCanceller;
- }
-
-void CNotifyLineStatusMTAct::DoCancel()
- {
- iTelephony->CancelAsync(CTelephony::EVoiceLineStatusChangeCancel);
- }
-
-void CNotifyLineStatusMTAct::StartTestL(TTestCallParams& aTestCallParams, TTestToRun aTestToRun)
-/**
-Start the test
-*/
- {
- iTestStep->INFO_PRINTF1(_L("CNotifyLineStatusMTAct::StartTest() Start"));
- iTestCallParams = &aTestCallParams;
- // Update the expected return value.
- iExpStat=aTestCallParams.iExpStat;
- iTestToRun = aTestToRun;
-
- //start the notify request for Line Status Change
- iEvent = CTelephony::EVoiceLineStatusChange;
-
- //set notification request going
- iTelephony->NotifyChange(iStatus, iEvent, iCallStatusV1Pckg);
- SetActive();
-
- //get SIMTSY to call us
- CallMe(iCallCount);
-
- //now set up AO to wait for a call
- if(iAnswerIncomingCallAct)
- {
- delete iAnswerIncomingCallAct;
- iAnswerIncomingCallAct = NULL;
- }
- //create dial AO
- iAnswerIncomingCallAct = CTestAnswerIncomingCallAct::NewL(iTestStep, iTelephony, this);
- //create hangup AO
- if(iHangupAct)
- {
- delete iHangupAct;
- iHangupAct = NULL;
- }
- iHangupAct = CTestHangupAct::NewL(iTestStep, iTelephony, this);
- }
-
-void CNotifyLineStatusMTAct::ActionParent(const TRequestStatus aCallStatus, const TActionEvent aEvent)
- {
-/**
-Gets called from a child AO when its RunL has been called.
-*/
- //got callback from child AO. Proceed the test.
- if(aCallStatus.Int() == KErrNone)
- {
- if(aEvent == EAnswerIncomingCall) //new call has been successfully made. So hangup
- {
- iHangupAct->TestHangup(*iTestCallParams);
- return;
- }
- }
- //finish the test by cancelling the registered notification
- DoCancel();
- iFinish = ETrue;
- CActiveScheduler::Stop();
- }
-
-void CNotifyLineStatusMTAct::RunL()
- {
- // ActiveScheduler will have set status to KRequestComplete, just before
- // calling this RunL().
- iTestStep-> INFO_PRINTF1(_L("CNotifyLineStatusMTAct::RunL "));
- iTestStep->INFO_PRINTF2(_L("CNotifyLineStatusMTAct: Request Status returned is: %d"), iStatus.Int() );
- iTestStep->TEST1(iStatus.Int() == iExpStat.Int(), ETrue);
-
- if(iStatus.Int() == KErrNone)
- {
- TBuf<100> line=_L("CNotifyLineStatusMTAct: Line status from notification = ");
- //line status from notification
- PrintLineStatus(iTestStep, line, iCallStatusV1.iStatus);
-
- if(iTestToRun == EGetLineStatus) //test GetLinStatus
- {
- //line status from GetLineStatus API
- CTelephony::TCallStatusV1 statusV1;
- CTelephony::TCallStatusV1Pckg statusV1Pckg(statusV1);
- TInt err = iTelephony->GetLineStatus(iTestCallParams->iLine, statusV1Pckg);
- line=_L("CNotifyLineStatusMTAct: Line status from GetLineStatus = ");
- iTestStep->TEST1(err == iTestCallParams->iExpAPIErr, ETrue);
- PrintLineStatus(iTestStep, line, statusV1.iStatus);
- //These should match
- iTestStep->TEST1(statusV1.iStatus == iCallStatusV1.iStatus, ETrue);
- }
- }
- else
- {
- iTestStep->INFO_PRINTF2(_L("CNotifyLineStatusMTAct: Error for notify ELineStatusChange: %d"), iStatus.Int() );
- }
-
- if(iTestToRun == EGetLineStatus && iCallStatusV1.iStatus == CTelephony::EStatusRinging)
- {
- //answer the call call
- iAnswerIncomingCallAct->TestAnswerIncomingCall(*iTestCallParams);
- }
-
- //if true finish the test.
- if(iFinish)
- {
- CActiveScheduler::Stop();
- }
- else
- {
- iTelephony->NotifyChange(iStatus, iEvent, iCallStatusV1Pckg);
- SetActive();
- }
- }
-
-/**
-Each test step initialises it's own name
-*/
-CTestLineFuncFlightModeOnWithPublishSubscribe::CTestLineFuncFlightModeOnWithPublishSubscribe()
- {
- // store the name of this test case
- // this is the name that is used by the script file
- SetTestStepName(_L("TestLineFuncFlightModeOnWithPublishSubscribe"));
- }
-
-/**
-@SYMTestCaseID Etel3rdParty 25,1, TestLineFuncFlightModeOn
-@SYMTestCaseDesc Test GetLineStatus, GetCallInfo 3rd party APIs
-@SYMFssID SGL.GT0166.054 v1.3 A2_Telephony_Functional_Specification.doc, REQ 2116.2.2, 2116.3.4, 2116.3.9
-*/
-enum TVerdict CTestLineFuncFlightModeOnWithPublishSubscribe::doTestStepL()
- {
- INFO_PRINTF1(_L("START TEST 25.1"));
-
- INFO_PRINTF1(_L(" TEST: Signal Strength information not retrievable when flight mode on with publish and subscribe "));
-
- //Set test number
- SetTestNumber(15);
-
-
- //Set the call parameters for MO call
- _LIT(KGoodNumber,"1789");
-
- CTelephony::TCallParamsV1 callParams;
- callParams.iIdRestrict = CTelephony::ESendMyId;
- CTelephony::TCallParamsV1Pckg callParamsPckg(callParams);
-
- TTestCallParams testCallParams;
- testCallParams.iLine = CTelephony::EVoiceLine;
- testCallParams.iCallParamsV1Pckg = &callParamsPckg;
- testCallParams.iTelAddress.iTelNumber = KGoodNumber;
- testCallParams.iExpStat = KErrNone;
- testCallParams.iExpAPIErr = KErrNone;
-
- CTelephony::TCallStatusV1 statusV1;
- CTelephony::TCallStatusV1Pckg statusV1Pckg(statusV1);
-
- // Set up phonePowerProperty variable so that flight mode can be manipulated.
- RProperty phonePowerProperty;
- User::LeaveIfError(phonePowerProperty.Attach(KUidSystemCategory, KUidPhonePwr.iUid));
- CleanupClosePushL(phonePowerProperty);
-
-
- //
- //
- // Test GetLineStatus with flight mode on.
- //
- //
-
- INFO_PRINTF1(_L("Test retrieval of the mobile line status - flight mode on"));
-
- // Create active DialNewCallAct objects
- CTestDialNewCallAct* testDialNewCallAct = CTestDialNewCallAct::NewLC(this, iTelephony);
-
- // Create a call - should succeed
- testCallParams.iCallId = CTelephony::EISVMaxNumOfCalls;
- testDialNewCallAct->TestDialNewCall(testCallParams);
- CActiveScheduler::Start();
-
-
- //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);
-
- // Attempt to get line status from GetLineStatus API
- // This should fail as flight mode is on.
- //testCallParams.iExpStat = KErrAccessDenied;
- TInt err = iTelephony->GetLineStatus(testCallParams.iLine, statusV1Pckg);
- TEST1(err == KErrAccessDenied, ETrue);
-
-
- //
- //
- // Test GetCallInfo with flight mode on.
- //
- //
-
- INFO_PRINTF1(_L("Test retrieval of call info - flight mode on"));
-
- CTelephony::TCallInfoV1 callInfoV1;
- CTelephony::TCallInfoV1 expCallInfoV1;
- CTelephony::TCallInfoV1Pckg callInfoV1Pckg(callInfoV1);
- CTelephony::TRemotePartyInfoV1 remoteInfoV1;
- CTelephony::TRemotePartyInfoV1 expRemoteInfoV1;
- CTelephony::TRemotePartyInfoV1Pckg remoteInfoV1Pckg(remoteInfoV1);
-
- CTelephony::TCallSelectionV1 callSelection;
- CTelephony::TCallSelectionV1Pckg callSelectionV1Pckg(callSelection);
- callSelection.iSelect = CTelephony::EActiveCall;
- callSelection.iLine = CTelephony::EVoiceLine;
- expCallInfoV1.iStatus = CTelephony::EStatusConnected;
- expCallInfoV1.iCallId = CTelephony::EISVCall1;
- expCallInfoV1.iDuration = 0;
- expCallInfoV1.iExitCode = 0;
- expCallInfoV1.iSecurity = CTelephony::ECipheringOff;
- expCallInfoV1.iDialledParty.iTypeOfNumber = CTelephony::EUnknownNumber;
- expCallInfoV1.iDialledParty.iNumberPlan = CTelephony::EUnknownNumberingPlan;
-
- expRemoteInfoV1.iRemoteIdStatus = CTelephony::ERemoteIdentityUnknown;
- expRemoteInfoV1.iDirection = CTelephony::EDirectionUnknown;
- expRemoteInfoV1.iRemoteNumber.iTypeOfNumber = CTelephony::EUnknownNumber;
- expRemoteInfoV1.iRemoteNumber.iNumberPlan = CTelephony::EUnknownNumberingPlan;
-
- // attempt to get call info of active call
- callSelection.iSelect = CTelephony::EActiveCall;
- err = iTelephony->GetCallInfo(callSelectionV1Pckg, callInfoV1Pckg, remoteInfoV1Pckg);
- TEST1(err==KErrAccessDenied, ETrue);
-
-
- //
- //
- // Test GetCallStatus with flight mode on.
- //
- //
-
- INFO_PRINTF1(_L("Test retrieval of call status - flight mode on"));
-
- // Attempt to retrive the call status while flight mode is on.
- err = iTelephony->GetCallStatus(testCallParams.iCallId, statusV1Pckg);
- TEST1(err==KErrAccessDenied, ETrue);
-
- INFO_PRINTF1(_L("END TEST 25.1"));
-
-
- CleanupStack::PopAndDestroy(testDialNewCallAct);
- CleanupStack::PopAndDestroy(&phonePowerProperty);
-
- return TestStepResult();
- }
-
-CTestGetLineStatusNoCaps::CTestGetLineStatusNoCaps(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("TestGetLineStatusNoCaps"));
- }
-
-enum TVerdict CTestGetLineStatusNoCaps::doTestStepL()
-/**
-Tests an incoming call can be detected when the client has no capabilities.
- The test preamble constructs CTelephony::NewL() which makes a request
- to RLine::NotifyIncomingCall.
- The test step does the following:
- 1) Makes a request to be notified of a change to the line status
- by calling RMobileLine::NotifyMobileLineStatusChange.
- 2) Triggers an incoming call
- 3) Validates that the client receives the line status change.
-
- The test does not directly check that RLine::NotifyIncomingCall completes
- successfully. This is because CNotifyIncomingCallAc only notifies
- CAnswerIncomingCallAct when an incoming call is received. However
- CAnswerIncomingCallAct calls RMobileCall::AnswerIncomingCallISV()
- which needs Network Service capabilities. The fact that the test
- completes is sufficient to prove that the RLine::NotifyIncomingCall does not
- require NetworkServices - if it did, the CNotifyIncomingCallAc gets
- locked in an infinite loop, causing the test to hang.
- */
- {
- INFO_PRINTF1(_L("START TEST 1"));
-
- INFO_PRINTF1(_L("Test retrieving of the mobile line status"));
- _LIT(KGoodNumber,"1789");
-
- SetTestNumber(15);
-
- //Set the call parameters for MO call
- CTelephony::TCallParamsV1 callParams;
- callParams.iIdRestrict = CTelephony::ESendMyId;
- CTelephony::TCallParamsV1Pckg callParamsPckg(callParams);
-
- TTestCallParams testCallParams;
- testCallParams.iLine = CTelephony::EVoiceLine;
- testCallParams.iCallParamsV1Pckg = &callParamsPckg;
- testCallParams.iTelAddress.iTelNumber = KGoodNumber;
- testCallParams.iExpStat = KErrNone;
- testCallParams.iExpAPIErr = KErrNone;
-
- //test line status for MT calls
- CNotifyLineStatusNoCapsMTAct* testGetLineStatusMTAct = CNotifyLineStatusNoCapsMTAct::NewLC(this, iTelephony, iCallCount);
- testGetLineStatusMTAct->StartTestL(testCallParams, CNotifyLineStatusBaseAct::EGetLineStatus);
- CActiveScheduler::Start();
- CleanupStack::PopAndDestroy(); //testGetLineStatusMTAct
-
- return TestStepResult();
- }
-
-
- void CNotifyLineStatusNoCapsMTAct::RunL()
- {
- // ActiveScheduler will have set status to KRequestComplete, just before
- // calling this RunL().
- iTestStep-> INFO_PRINTF1(_L("CNotifyLineStatusMTAct::RunL "));
- iTestStep->INFO_PRINTF2(_L("CNotifyLineStatusMTAct: Request Status returned is: %d"), iStatus.Int() );
- iTestStep->TEST1(iStatus.Int() == iExpStat.Int(), ETrue);
-
- if(iStatus.Int() == KErrNone)
- {
- TBuf<100> line=_L("CNotifyLineStatusMTAct: Line status from notification = ");
- //line status from notification
- PrintLineStatus(iTestStep, line, iCallStatusV1.iStatus);
-
- if(iTestToRun == EGetLineStatus) //test GetLinStatus
- {
- //line status from GetLineStatus API
- CTelephony::TCallStatusV1 statusV1;
- CTelephony::TCallStatusV1Pckg statusV1Pckg(statusV1);
- TInt err = iTelephony->GetLineStatus(iTestCallParams->iLine, statusV1Pckg);
- line=_L("CNotifyLineStatusMTAct: Line status from GetLineStatus = ");
- iTestStep->TEST1(err == iTestCallParams->iExpAPIErr, ETrue);
- PrintLineStatus(iTestStep, line, statusV1.iStatus);
- //These should match
- iTestStep->TEST1(statusV1.iStatus == iCallStatusV1.iStatus, ETrue);
- }
- }
- else
- {
- iTestStep->INFO_PRINTF2(_L("CNotifyLineStatusMTAct: Error for notify ELineStatusChange: %d"), iStatus.Int() );
- }
-
- CActiveScheduler::Stop();
- }
-
-
- CNotifyLineStatusNoCapsMTAct* CNotifyLineStatusNoCapsMTAct::NewLC(CEtelIsvTestStep* aTestStep,CTelephony* aTelephony, TInt& aCallCount)
- {
- CNotifyLineStatusNoCapsMTAct* obj = new(ELeave) CNotifyLineStatusNoCapsMTAct(aTestStep, aTelephony, aCallCount);
- CleanupStack::PushL(obj);
- obj->ConstructL();
- return obj;
- }
-
- CNotifyLineStatusNoCapsMTAct::CNotifyLineStatusNoCapsMTAct(CEtelIsvTestStep* aTestStep, CTelephony* aTelephony, TInt& aCallCount):
- CNotifyLineStatusMTAct(aTestStep, aTelephony, aCallCount)
- {
- }
-
+// 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:
+//
+
+#include "TE_EtelIsvbase.h"
+#include "TE_EtelIsvCallFunc.h"
+#include "TE_EtelIsvLineInfo.h"
+
+
+/**
+@file
+
+@SYMTestCaseID Etel3rdParty 22.1, TestGetLineStatus
+@SYMTestCaseDesc Test GetLineStatus 3rd party API
+@SYMFssID SGL.GT0166.054 v1.3 A2_Telephony_Functional_Specification.doc, REQ 2116.2.2
+*/
+
+
+CTestGetLineStatus::CTestGetLineStatus(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("TestGetLineStatus"));
+ }
+
+enum TVerdict CTestGetLineStatus::doTestStepL()
+ {
+/**
+This step tests the CTelephony::GetLineStatus() API
+*/
+
+ INFO_PRINTF1(_L("START TEST 22.1"));
+
+ INFO_PRINTF1(_L("Test retrieving of the mobile line status"));
+ _LIT(KGoodNumber,"1789");
+
+ SetTestNumber(15);
+
+ //Set the call parameters for MO call
+ CTelephony::TCallParamsV1 callParams;
+ callParams.iIdRestrict = CTelephony::ESendMyId;
+ CTelephony::TCallParamsV1Pckg callParamsPckg(callParams);
+
+ TTestCallParams testCallParams;
+ testCallParams.iLine = CTelephony::EVoiceLine;
+ testCallParams.iCallParamsV1Pckg = &callParamsPckg;
+ testCallParams.iTelAddress.iTelNumber = KGoodNumber;
+ testCallParams.iExpStat = KErrNone;
+ testCallParams.iExpAPIErr = KErrNone;
+
+ CTelephony::TCallStatusV1 statusV1;
+ CTelephony::TCallStatusV1Pckg statusV1Pckg(statusV1);
+
+ // set up local data references
+ TDes8* statusV1Data;
+ if (iBufferMode)
+ {
+ statusV1Data = &iStatusV1Buff;
+ }
+ else
+ {
+ statusV1Data = &statusV1Pckg;
+ }
+
+ CTelephony::TCallStatusV1& statusV1Results = reinterpret_cast<CTelephony::TCallStatusV1&>
+ ( const_cast<TUint8&> ( *statusV1Data->Ptr() ));
+
+
+ //
+ //TEST 1: GetLineStatus with on Data & Fax line.
+ //
+ testCallParams.iLine = CTelephony::EDataLine;
+ TInt err = iTelephony->GetLineStatus(testCallParams.iLine, *statusV1Data);
+ TEST1(err==KErrNone, ETrue);
+ TEST1(statusV1Results.iStatus==CTelephony::EStatusIdle, ETrue);
+
+ testCallParams.iLine = CTelephony::EFaxLine;
+ err = iTelephony->GetLineStatus(testCallParams.iLine, *statusV1Data);
+ //Fax line not in SIM TSY
+ TEST1(err==KErrNotSupported, ETrue);
+
+ //
+ //TEST 2: GetLineStatus with no active call.
+ //
+ testCallParams.iLine = CTelephony::EVoiceLine;
+ //test GetLineStatus with no active call
+ err = iTelephony->GetLineStatus(testCallParams.iLine, *statusV1Data);
+ TEST1(err==testCallParams.iExpAPIErr, ETrue);
+ TEST1(statusV1Results.iStatus==CTelephony::EStatusIdle, ETrue);
+
+ //
+ //TEST 3:Make a call & Hangup a call. Set a linetstatus notifer going and each time it is invoked call
+ // GetLineStatus to compare the states which should match.
+ //
+
+ //test line status for MO calls
+ testCallParams.iExpAPIErr = KErrNone;
+ CNotifyLineStatusMOAct* testGetLineStatusMOAct = CNotifyLineStatusMOAct::NewLC(this, iTelephony);
+ testGetLineStatusMOAct->StartTestL(testCallParams, CNotifyLineStatusBaseAct::EGetLineStatus);
+ CActiveScheduler::Start();
+ CleanupStack::PopAndDestroy(); //testGetLineStatusMOAct
+
+ //
+ //TEST 4:Answer a call & Hangup a call. Set a linestatus notifer going and each time it is invoked call
+ // GetLineStatus to compare the states which should match.
+ //
+
+ //test line status for MT calls
+ CNotifyLineStatusMTAct* testGetLineStatusMTAct = CNotifyLineStatusMTAct::NewLC(this, iTelephony, iCallCount);
+ testGetLineStatusMTAct->StartTestL(testCallParams, CNotifyLineStatusBaseAct::EGetLineStatus);
+ CActiveScheduler::Start();
+ CleanupStack::PopAndDestroy(); //testGetLineStatusMTAct
+
+//
+//TEST 5:Make a call - check the line state.
+// Put the call on hold - check the line state.
+// Resume the call - check the line state.
+// Hangup the call.- check the line state.
+//
+
+ //test state change for calls on hold
+
+ // Create active DialNewCallAct objects
+ CTestDialNewCallAct* testDialNewCallAct = CTestDialNewCallAct::NewLC(this, iTelephony);
+
+ // Create a call - should succeed
+ testCallParams.iCallId = CTelephony::EISVMaxNumOfCalls;
+ testDialNewCallAct->TestDialNewCall(testCallParams);
+ CActiveScheduler::Start();
+
+ //get line status from GetLineStatus API
+ err = iTelephony->GetLineStatus(testCallParams.iLine, *statusV1Data);
+ TEST1(err == KErrNone, ETrue);
+ TEST1(statusV1Results.iStatus==CTelephony::EStatusConnected, ETrue);
+
+ //put call on hold
+ CTestHoldAct* TestHoldAct = CTestHoldAct::NewLC(this, iTelephony);
+ testCallParams.iExpStat=KErrNone;
+ TestHoldAct->TestHold(testCallParams);
+ CActiveScheduler::Start();
+ CleanupStack::PopAndDestroy(TestHoldAct);//TestHoldAct
+
+ //get line status from GetLineStatus API
+ err = iTelephony->GetLineStatus(testCallParams.iLine, *statusV1Data);
+ TEST1(err == KErrNone, ETrue);
+ TEST1(statusV1Results.iStatus==CTelephony::EStatusHold, ETrue);
+
+ //resume the call
+ CTestResumeAct* testResumeAct = CTestResumeAct::NewLC(this, iTelephony);
+ testCallParams.iExpStat=KErrNone;
+ testResumeAct->TestResume(testCallParams);
+ CActiveScheduler::Start();
+ CleanupStack::PopAndDestroy(testResumeAct);//testResumeAct
+
+ //get line status from GetLineStatus API
+ err = iTelephony->GetLineStatus(testCallParams.iLine, *statusV1Data);
+ TEST1(err == KErrNone, ETrue);
+ TEST1(statusV1Results.iStatus==CTelephony::EStatusConnected, ETrue);
+
+ // Create an activeHangupAct object
+ CTestHangupAct* testHangupAct = CTestHangupAct::NewLC(this, iTelephony);
+
+ //Hangup call1
+ testHangupAct->TestHangup(testCallParams);
+ CActiveScheduler::Start();
+
+ err = iTelephony->GetLineStatus(testCallParams.iLine, *statusV1Data);
+ TEST1(err == KErrNone, ETrue);
+ TEST1(statusV1Results.iStatus==CTelephony::EStatusIdle, ETrue);
+
+ CleanupStack::PopAndDestroy(testHangupAct);//testHangupAct
+ CleanupStack::PopAndDestroy(testDialNewCallAct);//testDialNewCallAct
+
+ return TestStepResult();
+ }
+
+CTestGetCallInfo::CTestGetCallInfo()
+/** 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("TestGetCallInfo"));
+ }
+
+/**
+*
+@SYMTestCaseID Etel3rdParty 23.1, TestGetCallInfo
+@SYMTestCaseDesc Test GetCallInfo 3rd party API
+@SYMFssID SGL.GT0166.054 v1.3 A2_Telephony_Functional_Specification.doc, REQ 2116.3.4, REQ 2116.3.9
+*/
+
+enum TVerdict CTestGetCallInfo::doTestStepL()
+ {
+/**
+This step tests the CTelephony::GetCallInfo() API
+*/
+ INFO_PRINTF1(_L("Test retrieving of the mobile call status"));
+ _LIT(KGoodNumber,"1789");
+
+ SetTestNumber(15);
+
+ //Set the call parameters for MO call
+ CTelephony::TCallParamsV1 callParams;
+ callParams.iIdRestrict = CTelephony::ESendMyId;
+ CTelephony::TCallParamsV1Pckg callParamsPckg(callParams);
+
+ TTestCallParams testCallParams;
+ testCallParams.iLine = CTelephony::EVoiceLine;
+ testCallParams.iCallParamsV1Pckg = &callParamsPckg;
+ testCallParams.iTelAddress.iTelNumber = KGoodNumber;
+ testCallParams.iExpStat = KErrNone;
+
+ //test GetCallInfo with no active call
+
+ CTelephony::TCallInfoV1 callInfoV1;
+ CTelephony::TCallInfoV1 expCallInfoV1;
+ CTelephony::TCallInfoV1Pckg callInfoV1Pckg(callInfoV1);
+ CTelephony::TRemotePartyInfoV1 remoteInfoV1;
+ CTelephony::TRemotePartyInfoV1 expRemoteInfoV1;
+ CTelephony::TRemotePartyInfoV1Pckg remoteInfoV1Pckg(remoteInfoV1);
+
+ CTelephony::TCallSelectionV1 callSelection;
+ CTelephony::TCallSelectionV1Pckg callSelectionV1Pckg(callSelection);
+ callSelection.iSelect = CTelephony::EActiveCall;
+ callSelection.iLine = CTelephony::EVoiceLine;
+
+ // set up local data references
+ TDes8* callInfoV1Data;
+ TDes8* remoteInfoV1Data;
+ TDes8* callSelectionV1Data;
+
+ if (iBufferMode)
+ {
+ // initialize required buffers
+ iCallSelectionV1Buff = callSelection;
+
+ //initialize data pointers
+ callInfoV1Data = &iCallInfoV1Buff;
+ remoteInfoV1Data = &iRemoteInfoV1Buff;
+ callSelectionV1Data = &iCallSelectionV1Buff;
+ }
+ else
+ {
+ callInfoV1Data = &callInfoV1Pckg;
+ remoteInfoV1Data = &remoteInfoV1Pckg;
+ callSelectionV1Data = &callSelectionV1Pckg;
+ }
+
+ CTelephony::TCallInfoV1& callInfoV1Results = reinterpret_cast<CTelephony::TCallInfoV1&>
+ ( const_cast<TUint8&> ( *callInfoV1Data->Ptr() ) );
+ CTelephony::TRemotePartyInfoV1& remoteInfoV1Results = reinterpret_cast<CTelephony::TRemotePartyInfoV1&>
+ ( const_cast<TUint8&> ( *remoteInfoV1Data->Ptr() ) );
+
+ TInt err;
+ #if defined(_DEBUG)
+ //
+ //TEST 1: OOM
+ //
+
+ __UHEAP_FAILNEXT(3);
+ err = iTelephony->GetCallInfo(callSelectionV1Pckg, callInfoV1Pckg, remoteInfoV1Pckg);
+ TEST1(err==KErrNoMemory, ETrue);
+ __UHEAP_RESET;
+ #endif
+
+ //
+ //TEST 2: GetCallInfo with no active call
+ //
+ err = iTelephony->GetCallInfo(*callSelectionV1Data, *callInfoV1Data, *remoteInfoV1Data);
+ TEST1(err==KErrNotFound, ETrue);
+
+ //
+ //TEST 2: GetCallInfo for a single MO call that is put on held and resumed
+ // This tests EActiveCall and EHeldCall
+ //
+
+ // Create active DialNewCallAct object and Hangup object
+ CTestDialNewCallAct* testDialNewCallAct = CTestDialNewCallAct::NewLC(this, iTelephony);
+
+ // Create a call - should succeed
+ testCallParams.iCallId = CTelephony::EISVMaxNumOfCalls;
+ testDialNewCallAct->TestDialNewCall(testCallParams);
+ CActiveScheduler::Start();
+ CleanupStack::PopAndDestroy(testDialNewCallAct);
+
+ CTelephony::TCallStatusV1 status;
+ CTelephony::TCallStatusV1Pckg statusPckg(status);
+ iTelephony->GetCallStatus(testCallParams.iCallId, statusPckg);
+ TEST1(status.iStatus == CTelephony::EStatusConnected, ETrue);
+
+ expCallInfoV1.iStatus = CTelephony::EStatusConnected;
+ expCallInfoV1.iCallId = CTelephony::EISVCall1;
+ expCallInfoV1.iDuration = 0;
+ expCallInfoV1.iExitCode = 0;
+ expCallInfoV1.iSecurity = CTelephony::ECipheringOff;
+ expCallInfoV1.iDialledParty.iTypeOfNumber = CTelephony::EUnknownNumber;
+ expCallInfoV1.iDialledParty.iNumberPlan = CTelephony::EUnknownNumberingPlan;
+
+ expRemoteInfoV1.iRemoteIdStatus = CTelephony::ERemoteIdentityUnknown;
+ expRemoteInfoV1.iDirection = CTelephony::EDirectionUnknown;
+ expRemoteInfoV1.iRemoteNumber.iTypeOfNumber = CTelephony::EUnknownNumber;
+ expRemoteInfoV1.iRemoteNumber.iNumberPlan = CTelephony::EUnknownNumberingPlan;
+
+ //check status of active call
+ callSelection.iSelect = CTelephony::EActiveCall;
+ if (iBufferMode)
+ {
+ iCallSelectionV1Buff = callSelection;
+ }
+
+ err = iTelephony->GetCallInfo(*callSelectionV1Data, *callInfoV1Data, *remoteInfoV1Data);
+ TEST1(err==KErrNone, ETrue);
+ if(err == KErrNone)
+ {
+ CNotifyLineStatusBaseAct::PrintGetCallInfo(this, CTelephony::EActiveCall, callInfoV1Results, remoteInfoV1Results);
+ TestResults(callInfoV1Results, expCallInfoV1, remoteInfoV1Results, expRemoteInfoV1);
+ }
+
+ //check status of held call - should fail
+ callSelection.iSelect = CTelephony::EHeldCall;
+ if (iBufferMode)
+ {
+ iCallSelectionV1Buff = callSelection;
+ }
+ err = iTelephony->GetCallInfo(*callSelectionV1Data, *callInfoV1Data, *remoteInfoV1Data);
+ TEST1(err==KErrNotFound, ETrue);
+
+ //check status of in-progress call - should fail
+ callSelection.iSelect = CTelephony::EInProgressCall;
+ if (iBufferMode)
+ {
+ iCallSelectionV1Buff = callSelection;
+ }
+ err = iTelephony->GetCallInfo(*callSelectionV1Data, *callInfoV1Data, *remoteInfoV1Data);
+ TEST1(err==KErrNotFound, ETrue);
+
+ //put call on hold
+ CTestHoldAct* TestHoldAct = CTestHoldAct::NewLC(this, iTelephony);
+ testCallParams.iExpStat=KErrNone;
+ TestHoldAct->TestHold(testCallParams);
+ CActiveScheduler::Start();
+ CleanupStack::PopAndDestroy(TestHoldAct);//TestHoldAct
+
+ //check status of held call
+ callSelection.iSelect = CTelephony::EHeldCall;
+ if (iBufferMode)
+ {
+ iCallSelectionV1Buff = callSelection;
+ }
+ expCallInfoV1.iStatus = CTelephony::EStatusHold;
+ err = iTelephony->GetCallInfo(*callSelectionV1Data, *callInfoV1Data, *remoteInfoV1Data);
+ TEST1(err==KErrNone, ETrue);
+ if(err == KErrNone)
+ {
+ CNotifyLineStatusBaseAct::PrintGetCallInfo(this, CTelephony::EHeldCall, callInfoV1Results, remoteInfoV1Results);
+ TestResults(callInfoV1Results, expCallInfoV1, remoteInfoV1Results, expRemoteInfoV1);
+ }
+
+ //Hangup call1
+ CTestHangupAct* testHangupAct = CTestHangupAct::NewLC(this, iTelephony);
+ testCallParams.iExpStat = KErrNone;
+ testHangupAct->TestHangup(testCallParams);
+ CActiveScheduler::Start();
+ CleanupStack::PopAndDestroy(testHangupAct);
+
+ //
+ //TEST 3: Create a single MO call and each time a line state change notification is received call
+ // GetCallInfo. This tests EInProgressCall
+ //
+ //test call info for MO calls
+ CNotifyLineStatusMOAct* testGetCallInfoMOAct = CNotifyLineStatusMOAct::NewLC(this, iTelephony);
+ testGetCallInfoMOAct->StartTestL(testCallParams, CNotifyLineStatusBaseAct::EGetCallInfo);
+ CActiveScheduler::Start();
+ CleanupStack::PopAndDestroy(); //testGetCallInfoMOAct
+
+ return TestStepResult();
+ }
+
+void CTestGetCallInfo::TestResults(CTelephony::TCallInfoV1& aActualCallInfo, CTelephony::TCallInfoV1& aExpCallInfo, CTelephony::TRemotePartyInfoV1& aActualRemotePartyInfo, CTelephony::TRemotePartyInfoV1& aExpRemotePartyInfo)
+ {
+ TEST1(aActualCallInfo.iStatus == aExpCallInfo.iStatus, ETrue);
+ TEST1(aActualCallInfo.iDialledParty.iTypeOfNumber == aExpCallInfo.iDialledParty.iTypeOfNumber, ETrue);
+ TEST1(aActualCallInfo.iDialledParty.iNumberPlan == aExpCallInfo.iDialledParty.iNumberPlan, ETrue);
+ TEST1(aActualCallInfo.iDialledParty.iTelNumber == aExpCallInfo.iDialledParty.iTelNumber, ETrue);
+ TEST1(aActualCallInfo.iDuration == aExpCallInfo.iDuration, ETrue);
+ TEST1(aActualCallInfo.iExitCode == aExpCallInfo.iExitCode, ETrue);
+ TEST1(aActualCallInfo.iSecurity == aExpCallInfo.iSecurity, ETrue);
+ TEST1(aActualCallInfo.iCallId == aExpCallInfo.iCallId, ETrue);
+
+ TEST1(aActualRemotePartyInfo.iRemoteIdStatus == aExpRemotePartyInfo.iRemoteIdStatus, ETrue);
+ TEST1(aActualRemotePartyInfo.iCallingName == aExpRemotePartyInfo.iCallingName, ETrue);
+ TEST1(aActualRemotePartyInfo.iDirection == aExpRemotePartyInfo.iDirection, ETrue);
+ TEST1(aActualRemotePartyInfo.iRemoteNumber.iTypeOfNumber == aExpRemotePartyInfo.iRemoteNumber.iTypeOfNumber, ETrue);
+ TEST1(aActualRemotePartyInfo.iRemoteNumber.iNumberPlan == aExpRemotePartyInfo.iRemoteNumber.iNumberPlan, ETrue);
+ TEST1(aActualRemotePartyInfo.iRemoteNumber.iTelNumber == aExpRemotePartyInfo.iRemoteNumber.iTelNumber, ETrue);
+ }
+
+
+
+//
+//AO classes used by test steps above
+//
+
+
+CNotifyLineStatusBaseAct::CNotifyLineStatusBaseAct(CEtelIsvTestStep* aTestStep, CTelephony* aTelephony)
+ : CEtelIsvActBase(aTestStep, aTelephony)
+ , iCallStatusV1Pckg(iCallStatusV1)
+ , iFinish(EFalse)
+ {
+ }
+
+
+
+void CNotifyLineStatusBaseAct::PrintGetCallInfo(CEtelIsvTestStep* aTestStep, CTelephony::TCallSelect aCallSelect, CTelephony::TCallInfoV1& aCallInfoV1, CTelephony::TRemotePartyInfoV1& aRemoteInfoV1)
+/**
+Print out results for GetCallInfo
+*/
+ {
+ TBuf<150> strBuf;
+
+ if(aCallSelect == CTelephony::EActiveCall)
+ strBuf = _L("EActiveCall");
+ else if(aCallSelect == CTelephony::EHeldCall)
+ strBuf = _L("EHeldCall");
+ else // CTelephony::EInProgressCall
+ strBuf = _L("EInProgressCall");
+ aTestStep->INFO_PRINTF2(_L("For %S GetCallInfo paramters are..."), &strBuf );
+
+ //TCallInfoV1
+ strBuf=_L("GetCallInfo TCallInfoV1::iStatus=");
+ PrintLineStatus(aTestStep, strBuf, aCallInfoV1.iStatus);
+ aTestStep->INFO_PRINTF2(_L("GetCallInfo TCallInfoV1::iDuration=%d "), aCallInfoV1.iDuration.Int() );
+ aTestStep->INFO_PRINTF2(_L("GetCallInfo TCallInfoV1::iExitCode=%d "), aCallInfoV1.iExitCode );
+
+ switch(aCallInfoV1.iSecurity)
+ {
+ case CTelephony::ECipheringOff:
+ strBuf = _L("ECipheringOff");
+ break;
+ case CTelephony::ECipheringGSM:
+ strBuf = _L("ECipheringGSM");
+ break;
+ case CTelephony::ECipheringWCDMA:
+ strBuf = _L("ECipheringWCDMA");
+ break;
+ default:
+ strBuf = _L("UNKNOWN");
+ break;
+
+ };
+ aTestStep->INFO_PRINTF2(_L("GetCallInfo TCallInfoV1::iSecurity=%S "), &strBuf );
+ aTestStep->INFO_PRINTF2(_L("GetCallInfo TCallInfoV1::iCallId=%d "), aCallInfoV1.iCallId );
+
+ switch(aRemoteInfoV1.iRemoteIdStatus)
+ {
+ case CTelephony::ERemoteIdentityUnknown:
+ strBuf = _L("ERemoteIdentityUnknown");
+ break;
+ case CTelephony::ERemoteIdentityAvailable:
+ strBuf = _L("ERemoteIdentityAvailable");
+ break;
+ case CTelephony::ERemoteIdentitySuppressed:
+ strBuf = _L("ERemoteIdentitySuppressed");
+ break;
+ default:
+ strBuf = _L("UNKNOWN");
+ break;
+ };
+ aTestStep->INFO_PRINTF2(_L("GetCallInfo TRemotePartyInfoV1::iRemoteIdStatus=%S "), &strBuf );
+ aTestStep->INFO_PRINTF2(_L("GetCallInfo TRemotePartyInfoV1::iCallingName=%S "), &aRemoteInfoV1.iCallingName );
+
+ switch( aRemoteInfoV1.iDirection)
+ {
+ case CTelephony::EDirectionUnknown:
+ strBuf = _L("EDirectionUnknown");
+ break;
+ case CTelephony::EMobileOriginated:
+ strBuf = _L("EMobileOriginated");
+ break;
+ case CTelephony::EMobileTerminated:
+ strBuf = _L("EMobileTerminated");
+ break;
+ default:
+ strBuf = _L("UNKNOWN");
+ break;
+ };
+ aTestStep->INFO_PRINTF2(_L("GetCallInfo TRemotePartyInfoV1::iDirection=%S "), &strBuf );
+
+ }
+
+void CNotifyLineStatusBaseAct::PrintLineStatus(CEtelIsvTestStep* aTestStep, TDes& aLine, const CTelephony::TCallStatus aStatus)
+/**
+Print out line status
+*/
+ {
+ switch(aStatus)
+ {
+ case CTelephony::EStatusUnknown:
+ aLine.Append(_L("EStatusUnknown"));
+ break;
+ case CTelephony::EStatusIdle:
+ aLine.Append(_L("EStatusIdle"));
+ break;
+ case CTelephony::EStatusDialling:
+ aLine.Append(_L("EStatusDialling"));
+ break;
+ case CTelephony::EStatusRinging:
+ aLine.Append(_L("EStaEStatusRinging"));
+ break;
+ case CTelephony::EStatusAnswering:
+ aLine.Append(_L("EStatusAnswering"));
+ break;
+ case CTelephony::EStatusConnecting:
+ aLine.Append(_L("EStatusConnecting"));
+ break;
+ case CTelephony::EStatusConnected:
+ aLine.Append(_L("EStatusConnected"));
+ break;
+ case CTelephony::EStatusReconnectPending:
+ aLine.Append(_L("EStatusReconnectPending"));
+ break;
+ case CTelephony::EStatusDisconnecting:
+ aLine.Append(_L("EStatusDisconnecting"));
+ break;
+ case CTelephony::EStatusHold:
+ aLine.Append(_L("EStatusHold"));
+ break;
+ case CTelephony::EStatusTransferring:
+ aLine.Append(_L("EStatusTransfering"));
+ break;
+ case CTelephony::EStatusTransferAlerting:
+ aLine.Append(_L("EStatusTransferAlerting"));
+ break;
+ default:
+ aLine.Append(_L("Unknown State"));
+ }
+ aTestStep->INFO_PRINTF2(_L("%S"), &aLine);
+ }
+
+void CNotifyLineStatusBaseAct::CallGetCallInfo(const CTelephony::TCallSelect aSelect, CTelephony::TCallStatus aExpStatus)
+/**
+Call the GetCallInfo function and print out results
+*/
+ {
+ CTelephony::TCallInfoV1 callInfoV1;
+ CTelephony::TCallInfoV1Pckg callInfoV1Pckg(callInfoV1);
+ CTelephony::TRemotePartyInfoV1 remoteInfoV1;
+ CTelephony::TRemotePartyInfoV1Pckg remoteInfoV1Pckg(remoteInfoV1);
+
+ CTelephony::TCallSelectionV1 callSelection;
+ CTelephony::TCallSelectionV1Pckg callSelectionV1Pckg(callSelection);
+ callSelection.iSelect = aSelect;
+ callSelection.iLine = CTelephony::EVoiceLine;
+
+ TInt err = iTelephony->GetCallInfo(callSelectionV1Pckg, callInfoV1Pckg, remoteInfoV1Pckg);
+ iTestStep->TEST1(err == KErrNone, ETrue);
+ iTestStep->TEST1(callInfoV1.iStatus == aExpStatus,ETrue);
+ PrintGetCallInfo(iTestStep, aSelect, callInfoV1, remoteInfoV1);
+ }
+
+/**
+Active Object to request a notifications of line status change and create an MO call.
+This AO is used to test two APIs GetLineStatus() and GetCallInfo().
+**/
+CNotifyLineStatusMOAct* CNotifyLineStatusMOAct::NewLC(CEtelIsvTestStep* aTestStep, CTelephony* aTelephony)
+//Factory constructor
+ {
+ CNotifyLineStatusMOAct* obj = new(ELeave) CNotifyLineStatusMOAct(aTestStep, aTelephony);
+ CleanupStack::PushL(obj);
+ obj->ConstructL();
+ return obj;
+ }
+
+CNotifyLineStatusMOAct::CNotifyLineStatusMOAct(CEtelIsvTestStep* aTestStep, CTelephony* aTelephony)
+ : CNotifyLineStatusBaseAct(aTestStep, aTelephony)
+ {
+ }
+
+void CNotifyLineStatusMOAct::ConstructL()
+ {
+ iCanceller = new(ELeave) CTestCanceller(this);
+ CActiveScheduler::Add(this);
+ }
+
+CNotifyLineStatusMOAct::~CNotifyLineStatusMOAct()
+ {
+ delete iDialNewCallAct;
+ delete iHangupAct;
+ Cancel(); // if any Req outstanding, calls DoCancel() to cleanup.
+ delete iCanceller;
+ }
+
+void CNotifyLineStatusMOAct::DoCancel()
+ {
+ iTelephony->CancelAsync(CTelephony::EVoiceLineStatusChangeCancel);
+ }
+
+void CNotifyLineStatusMOAct::StartTestL(TTestCallParams& aTestCallParams, TTestToRun aTestToRun)
+/**
+Start the test
+*/
+ {
+ iTestStep-> INFO_PRINTF1(_L("CNotifyLineStatusMOAct::StartTest() Start"));
+ iTestCallParams = &aTestCallParams;
+ // Update the expected return value.
+ iExpStat=aTestCallParams.iExpStat;
+ iTestToRun = aTestToRun;
+
+ //start the notify request for Line Status Change
+ iEvent = CTelephony::EVoiceLineStatusChange;
+
+ //set notification request going
+ iTelephony->NotifyChange(iStatus, iEvent, iCallStatusV1Pckg);
+ SetActive();
+
+ //now initiate a call
+ if(iDialNewCallAct)
+ {
+ delete iDialNewCallAct;
+ iDialNewCallAct = NULL;
+ }
+ //create dial AO
+ iDialNewCallAct = CTestDialNewCallAct::NewL(iTestStep, iTelephony, this);
+ //create hangup AO
+ if(iHangupAct)
+ {
+ delete iHangupAct;
+ iHangupAct = NULL;
+ }
+ iHangupAct = CTestHangupAct::NewL(iTestStep, iTelephony, this);
+
+ //dial
+ iDialNewCallAct->TestDialNewCall(*iTestCallParams);
+ }
+
+void CNotifyLineStatusMOAct::ActionParent(const TRequestStatus aCallStatus, const TActionEvent aEvent)
+ {
+/**
+Gets called from a child AO when its RunL has been called.
+*/
+ //got callback from child AO. Proceed the test.
+ if(aCallStatus.Int() == KErrNone)
+ {
+ if(aEvent == EDialNewCall) //new call has been successfully made. So hangup
+ {
+ iHangupAct->TestHangup(*iTestCallParams);
+ return;
+ }
+ }
+ //finish the test by cancelling the registered notification
+ DoCancel();
+ iFinish = ETrue;
+ CActiveScheduler::Stop();
+ }
+
+void CNotifyLineStatusMOAct::RunL()
+ {
+ // ActiveScheduler will have set status to KRequestComplete, just before
+ // calling this RunL().
+ iTestStep-> INFO_PRINTF1(_L(" CNotifyLineStatusMOAct::RunL "));
+ iTestStep->INFO_PRINTF2(_L("CNotifyLineStatusMOAct: Request Status returned is: %d"), iStatus.Int() );
+ iTestStep->TEST1(iStatus.Int() == iExpStat.Int(), ETrue);
+
+ if(iStatus.Int() == KErrNone)
+ {
+ TBuf<100> line=_L("CNotifyLineStatusMOAct: Line status from notification = ");
+ //line status from notification
+ PrintLineStatus(iTestStep, line, iCallStatusV1.iStatus);
+
+ if(iTestToRun == EGetLineStatus) //test GetLinStatus
+ {
+ //line status from GetLineStatus API
+ CTelephony::TCallStatusV1 statusV1;
+ CTelephony::TCallStatusV1Pckg statusV1Pckg(statusV1);
+ TInt err = iTelephony->GetLineStatus(iTestCallParams->iLine, statusV1Pckg);
+ line=_L("CNotifyLineStatusMOAct: Line status from GetLineStatus = ");
+ iTestStep->TEST1(err == iTestCallParams->iExpAPIErr, ETrue);
+ PrintLineStatus(iTestStep, line, statusV1.iStatus);
+ //These should match
+ iTestStep->TEST1(statusV1.iStatus == iCallStatusV1.iStatus, ETrue);
+ }
+ else //test GetCallInfo
+ {
+ //call GetCallInfo API for each call select notification that is call in progress.
+ if(iCallStatusV1.iStatus != CTelephony::EStatusConnected && iCallStatusV1.iStatus != CTelephony::EStatusIdle)
+ CallGetCallInfo(CTelephony::EInProgressCall, iCallStatusV1.iStatus);
+ }
+ }
+ else
+ {
+ iTestStep->INFO_PRINTF2(_L("CNotifyLineStatusMOAct: Error for notify ELineStatusChange: %d"), iStatus.Int() );
+ }
+ //if true finish the test.
+ if(iFinish)
+ CActiveScheduler::Stop();
+ else
+ {
+ iTelephony->NotifyChange(iStatus, iEvent, iCallStatusV1Pckg);
+ SetActive();
+ }
+ }
+
+/**
+Active Object to request a notifications of line status change and answer a MT call.
+This AO is used to test two APIs GetLineStatus() and GetCallInfo().
+**/
+CNotifyLineStatusMTAct* CNotifyLineStatusMTAct::NewLC(CEtelIsvTestStep* aTestStep, CTelephony* aTelephony, TInt& aCallCount)
+//Factory constructor
+ {
+ CNotifyLineStatusMTAct* obj = new(ELeave) CNotifyLineStatusMTAct(aTestStep, aTelephony, aCallCount);
+ CleanupStack::PushL(obj);
+ obj->ConstructL();
+ return obj;
+ }
+
+CNotifyLineStatusMTAct::CNotifyLineStatusMTAct(CEtelIsvTestStep* aTestStep, CTelephony* aTelephony, TInt& aCallCount)
+ : CNotifyLineStatusBaseAct(aTestStep, aTelephony)
+ , iCallCount(aCallCount)
+ {
+ }
+
+void CNotifyLineStatusMTAct::ConstructL()
+ {
+ iCanceller = new(ELeave) CTestCanceller(this);
+ CActiveScheduler::Add(this);
+ }
+
+CNotifyLineStatusMTAct::~CNotifyLineStatusMTAct()
+ {
+ delete iAnswerIncomingCallAct;
+ delete iHangupAct;
+ Cancel(); // if any Req outstanding, calls DoCancel() to cleanup.
+ delete iCanceller;
+ }
+
+void CNotifyLineStatusMTAct::DoCancel()
+ {
+ iTelephony->CancelAsync(CTelephony::EVoiceLineStatusChangeCancel);
+ }
+
+void CNotifyLineStatusMTAct::StartTestL(TTestCallParams& aTestCallParams, TTestToRun aTestToRun)
+/**
+Start the test
+*/
+ {
+ iTestStep->INFO_PRINTF1(_L("CNotifyLineStatusMTAct::StartTest() Start"));
+ iTestCallParams = &aTestCallParams;
+ // Update the expected return value.
+ iExpStat=aTestCallParams.iExpStat;
+ iTestToRun = aTestToRun;
+
+ //start the notify request for Line Status Change
+ iEvent = CTelephony::EVoiceLineStatusChange;
+
+ //set notification request going
+ iTelephony->NotifyChange(iStatus, iEvent, iCallStatusV1Pckg);
+ SetActive();
+
+ //get SIMTSY to call us
+ CallMe(iCallCount);
+
+ //now set up AO to wait for a call
+ if(iAnswerIncomingCallAct)
+ {
+ delete iAnswerIncomingCallAct;
+ iAnswerIncomingCallAct = NULL;
+ }
+ //create dial AO
+ iAnswerIncomingCallAct = CTestAnswerIncomingCallAct::NewL(iTestStep, iTelephony, this);
+ //create hangup AO
+ if(iHangupAct)
+ {
+ delete iHangupAct;
+ iHangupAct = NULL;
+ }
+ iHangupAct = CTestHangupAct::NewL(iTestStep, iTelephony, this);
+ }
+
+void CNotifyLineStatusMTAct::ActionParent(const TRequestStatus aCallStatus, const TActionEvent aEvent)
+ {
+/**
+Gets called from a child AO when its RunL has been called.
+*/
+ //got callback from child AO. Proceed the test.
+ if(aCallStatus.Int() == KErrNone)
+ {
+ if(aEvent == EAnswerIncomingCall) //new call has been successfully made. So hangup
+ {
+ iHangupAct->TestHangup(*iTestCallParams);
+ return;
+ }
+ }
+ //finish the test by cancelling the registered notification
+ DoCancel();
+ iFinish = ETrue;
+ CActiveScheduler::Stop();
+ }
+
+void CNotifyLineStatusMTAct::RunL()
+ {
+ // ActiveScheduler will have set status to KRequestComplete, just before
+ // calling this RunL().
+ iTestStep-> INFO_PRINTF1(_L("CNotifyLineStatusMTAct::RunL "));
+ iTestStep->INFO_PRINTF2(_L("CNotifyLineStatusMTAct: Request Status returned is: %d"), iStatus.Int() );
+ iTestStep->TEST1(iStatus.Int() == iExpStat.Int(), ETrue);
+
+ if(iStatus.Int() == KErrNone)
+ {
+ TBuf<100> line=_L("CNotifyLineStatusMTAct: Line status from notification = ");
+ //line status from notification
+ PrintLineStatus(iTestStep, line, iCallStatusV1.iStatus);
+
+ if(iTestToRun == EGetLineStatus) //test GetLinStatus
+ {
+ //line status from GetLineStatus API
+ CTelephony::TCallStatusV1 statusV1;
+ CTelephony::TCallStatusV1Pckg statusV1Pckg(statusV1);
+ TInt err = iTelephony->GetLineStatus(iTestCallParams->iLine, statusV1Pckg);
+ line=_L("CNotifyLineStatusMTAct: Line status from GetLineStatus = ");
+ iTestStep->TEST1(err == iTestCallParams->iExpAPIErr, ETrue);
+ PrintLineStatus(iTestStep, line, statusV1.iStatus);
+ //These should match
+ iTestStep->TEST1(statusV1.iStatus == iCallStatusV1.iStatus, ETrue);
+ }
+ }
+ else
+ {
+ iTestStep->INFO_PRINTF2(_L("CNotifyLineStatusMTAct: Error for notify ELineStatusChange: %d"), iStatus.Int() );
+ }
+
+ if(iTestToRun == EGetLineStatus && iCallStatusV1.iStatus == CTelephony::EStatusRinging)
+ {
+ //answer the call call
+ iAnswerIncomingCallAct->TestAnswerIncomingCall(*iTestCallParams);
+ }
+
+ //if true finish the test.
+ if(iFinish)
+ {
+ CActiveScheduler::Stop();
+ }
+ else
+ {
+ iTelephony->NotifyChange(iStatus, iEvent, iCallStatusV1Pckg);
+ SetActive();
+ }
+ }
+
+/**
+Each test step initialises it's own name
+*/
+CTestLineFuncFlightModeOnWithPublishSubscribe::CTestLineFuncFlightModeOnWithPublishSubscribe()
+ {
+ // store the name of this test case
+ // this is the name that is used by the script file
+ SetTestStepName(_L("TestLineFuncFlightModeOnWithPublishSubscribe"));
+ }
+
+/**
+@SYMTestCaseID Etel3rdParty 25,1, TestLineFuncFlightModeOn
+@SYMTestCaseDesc Test GetLineStatus, GetCallInfo 3rd party APIs
+@SYMFssID SGL.GT0166.054 v1.3 A2_Telephony_Functional_Specification.doc, REQ 2116.2.2, 2116.3.4, 2116.3.9
+*/
+enum TVerdict CTestLineFuncFlightModeOnWithPublishSubscribe::doTestStepL()
+ {
+ INFO_PRINTF1(_L("START TEST 25.1"));
+
+ INFO_PRINTF1(_L(" TEST: Signal Strength information not retrievable when flight mode on with publish and subscribe "));
+
+ //Set test number
+ SetTestNumber(15);
+
+
+ //Set the call parameters for MO call
+ _LIT(KGoodNumber,"1789");
+
+ CTelephony::TCallParamsV1 callParams;
+ callParams.iIdRestrict = CTelephony::ESendMyId;
+ CTelephony::TCallParamsV1Pckg callParamsPckg(callParams);
+
+ TTestCallParams testCallParams;
+ testCallParams.iLine = CTelephony::EVoiceLine;
+ testCallParams.iCallParamsV1Pckg = &callParamsPckg;
+ testCallParams.iTelAddress.iTelNumber = KGoodNumber;
+ testCallParams.iExpStat = KErrNone;
+ testCallParams.iExpAPIErr = KErrNone;
+
+ CTelephony::TCallStatusV1 statusV1;
+ CTelephony::TCallStatusV1Pckg statusV1Pckg(statusV1);
+
+ // Set up phonePowerProperty variable so that flight mode can be manipulated.
+ RProperty phonePowerProperty;
+ User::LeaveIfError(phonePowerProperty.Attach(KUidSystemCategory, KUidPhonePwr.iUid));
+ CleanupClosePushL(phonePowerProperty);
+
+
+ //
+ //
+ // Test GetLineStatus with flight mode on.
+ //
+ //
+
+ INFO_PRINTF1(_L("Test retrieval of the mobile line status - flight mode on"));
+
+ // Create active DialNewCallAct objects
+ CTestDialNewCallAct* testDialNewCallAct = CTestDialNewCallAct::NewLC(this, iTelephony);
+
+ // Create a call - should succeed
+ testCallParams.iCallId = CTelephony::EISVMaxNumOfCalls;
+ testDialNewCallAct->TestDialNewCall(testCallParams);
+ CActiveScheduler::Start();
+
+
+ //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);
+
+ // Attempt to get line status from GetLineStatus API
+ // This should fail as flight mode is on.
+ //testCallParams.iExpStat = KErrAccessDenied;
+ TInt err = iTelephony->GetLineStatus(testCallParams.iLine, statusV1Pckg);
+ TEST1(err == KErrAccessDenied, ETrue);
+
+
+ //
+ //
+ // Test GetCallInfo with flight mode on.
+ //
+ //
+
+ INFO_PRINTF1(_L("Test retrieval of call info - flight mode on"));
+
+ CTelephony::TCallInfoV1 callInfoV1;
+ CTelephony::TCallInfoV1 expCallInfoV1;
+ CTelephony::TCallInfoV1Pckg callInfoV1Pckg(callInfoV1);
+ CTelephony::TRemotePartyInfoV1 remoteInfoV1;
+ CTelephony::TRemotePartyInfoV1 expRemoteInfoV1;
+ CTelephony::TRemotePartyInfoV1Pckg remoteInfoV1Pckg(remoteInfoV1);
+
+ CTelephony::TCallSelectionV1 callSelection;
+ CTelephony::TCallSelectionV1Pckg callSelectionV1Pckg(callSelection);
+ callSelection.iSelect = CTelephony::EActiveCall;
+ callSelection.iLine = CTelephony::EVoiceLine;
+ expCallInfoV1.iStatus = CTelephony::EStatusConnected;
+ expCallInfoV1.iCallId = CTelephony::EISVCall1;
+ expCallInfoV1.iDuration = 0;
+ expCallInfoV1.iExitCode = 0;
+ expCallInfoV1.iSecurity = CTelephony::ECipheringOff;
+ expCallInfoV1.iDialledParty.iTypeOfNumber = CTelephony::EUnknownNumber;
+ expCallInfoV1.iDialledParty.iNumberPlan = CTelephony::EUnknownNumberingPlan;
+
+ expRemoteInfoV1.iRemoteIdStatus = CTelephony::ERemoteIdentityUnknown;
+ expRemoteInfoV1.iDirection = CTelephony::EDirectionUnknown;
+ expRemoteInfoV1.iRemoteNumber.iTypeOfNumber = CTelephony::EUnknownNumber;
+ expRemoteInfoV1.iRemoteNumber.iNumberPlan = CTelephony::EUnknownNumberingPlan;
+
+ // attempt to get call info of active call
+ callSelection.iSelect = CTelephony::EActiveCall;
+ err = iTelephony->GetCallInfo(callSelectionV1Pckg, callInfoV1Pckg, remoteInfoV1Pckg);
+ TEST1(err==KErrAccessDenied, ETrue);
+
+
+ //
+ //
+ // Test GetCallStatus with flight mode on.
+ //
+ //
+
+ INFO_PRINTF1(_L("Test retrieval of call status - flight mode on"));
+
+ // Attempt to retrive the call status while flight mode is on.
+ err = iTelephony->GetCallStatus(testCallParams.iCallId, statusV1Pckg);
+ TEST1(err==KErrAccessDenied, ETrue);
+
+ INFO_PRINTF1(_L("END TEST 25.1"));
+
+
+ CleanupStack::PopAndDestroy(testDialNewCallAct);
+ CleanupStack::PopAndDestroy(&phonePowerProperty);
+
+ return TestStepResult();
+ }
+
+CTestGetLineStatusNoCaps::CTestGetLineStatusNoCaps(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("TestGetLineStatusNoCaps"));
+ }
+
+enum TVerdict CTestGetLineStatusNoCaps::doTestStepL()
+/**
+Tests an incoming call can be detected when the client has no capabilities.
+ The test preamble constructs CTelephony::NewL() which makes a request
+ to RLine::NotifyIncomingCall.
+ The test step does the following:
+ 1) Makes a request to be notified of a change to the line status
+ by calling RMobileLine::NotifyMobileLineStatusChange.
+ 2) Triggers an incoming call
+ 3) Validates that the client receives the line status change.
+
+ The test does not directly check that RLine::NotifyIncomingCall completes
+ successfully. This is because CNotifyIncomingCallAc only notifies
+ CAnswerIncomingCallAct when an incoming call is received. However
+ CAnswerIncomingCallAct calls RMobileCall::AnswerIncomingCallISV()
+ which needs Network Service capabilities. The fact that the test
+ completes is sufficient to prove that the RLine::NotifyIncomingCall does not
+ require NetworkServices - if it did, the CNotifyIncomingCallAc gets
+ locked in an infinite loop, causing the test to hang.
+ */
+ {
+ INFO_PRINTF1(_L("START TEST 1"));
+
+ INFO_PRINTF1(_L("Test retrieving of the mobile line status"));
+ _LIT(KGoodNumber,"1789");
+
+ SetTestNumber(15);
+
+ //Set the call parameters for MO call
+ CTelephony::TCallParamsV1 callParams;
+ callParams.iIdRestrict = CTelephony::ESendMyId;
+ CTelephony::TCallParamsV1Pckg callParamsPckg(callParams);
+
+ TTestCallParams testCallParams;
+ testCallParams.iLine = CTelephony::EVoiceLine;
+ testCallParams.iCallParamsV1Pckg = &callParamsPckg;
+ testCallParams.iTelAddress.iTelNumber = KGoodNumber;
+ testCallParams.iExpStat = KErrNone;
+ testCallParams.iExpAPIErr = KErrNone;
+
+ //test line status for MT calls
+ CNotifyLineStatusNoCapsMTAct* testGetLineStatusMTAct = CNotifyLineStatusNoCapsMTAct::NewLC(this, iTelephony, iCallCount);
+ testGetLineStatusMTAct->StartTestL(testCallParams, CNotifyLineStatusBaseAct::EGetLineStatus);
+ CActiveScheduler::Start();
+ CleanupStack::PopAndDestroy(); //testGetLineStatusMTAct
+
+ return TestStepResult();
+ }
+
+
+ void CNotifyLineStatusNoCapsMTAct::RunL()
+ {
+ // ActiveScheduler will have set status to KRequestComplete, just before
+ // calling this RunL().
+ iTestStep-> INFO_PRINTF1(_L("CNotifyLineStatusMTAct::RunL "));
+ iTestStep->INFO_PRINTF2(_L("CNotifyLineStatusMTAct: Request Status returned is: %d"), iStatus.Int() );
+ iTestStep->TEST1(iStatus.Int() == iExpStat.Int(), ETrue);
+
+ if(iStatus.Int() == KErrNone)
+ {
+ TBuf<100> line=_L("CNotifyLineStatusMTAct: Line status from notification = ");
+ //line status from notification
+ PrintLineStatus(iTestStep, line, iCallStatusV1.iStatus);
+
+ if(iTestToRun == EGetLineStatus) //test GetLinStatus
+ {
+ //line status from GetLineStatus API
+ CTelephony::TCallStatusV1 statusV1;
+ CTelephony::TCallStatusV1Pckg statusV1Pckg(statusV1);
+ TInt err = iTelephony->GetLineStatus(iTestCallParams->iLine, statusV1Pckg);
+ line=_L("CNotifyLineStatusMTAct: Line status from GetLineStatus = ");
+ iTestStep->TEST1(err == iTestCallParams->iExpAPIErr, ETrue);
+ PrintLineStatus(iTestStep, line, statusV1.iStatus);
+ //These should match
+ iTestStep->TEST1(statusV1.iStatus == iCallStatusV1.iStatus, ETrue);
+ }
+ }
+ else
+ {
+ iTestStep->INFO_PRINTF2(_L("CNotifyLineStatusMTAct: Error for notify ELineStatusChange: %d"), iStatus.Int() );
+ }
+
+ CActiveScheduler::Stop();
+ }
+
+
+ CNotifyLineStatusNoCapsMTAct* CNotifyLineStatusNoCapsMTAct::NewLC(CEtelIsvTestStep* aTestStep,CTelephony* aTelephony, TInt& aCallCount)
+ {
+ CNotifyLineStatusNoCapsMTAct* obj = new(ELeave) CNotifyLineStatusNoCapsMTAct(aTestStep, aTelephony, aCallCount);
+ CleanupStack::PushL(obj);
+ obj->ConstructL();
+ return obj;
+ }
+
+ CNotifyLineStatusNoCapsMTAct::CNotifyLineStatusNoCapsMTAct(CEtelIsvTestStep* aTestStep, CTelephony* aTelephony, TInt& aCallCount):
+ CNotifyLineStatusMTAct(aTestStep, aTelephony, aCallCount)
+ {
+ }
+