diff -r 6b1d113cdff3 -r 6638e7f4bd8f telephonyserverplugins/common_tsy/test/integration/src/cctsyintegrationtestcallcontrol.cpp --- a/telephonyserverplugins/common_tsy/test/integration/src/cctsyintegrationtestcallcontrol.cpp Mon May 03 13:37:20 2010 +0300 +++ b/telephonyserverplugins/common_tsy/test/integration/src/cctsyintegrationtestcallcontrol.cpp Thu May 06 15:10:38 2010 +0100 @@ -1,17434 +1,17434 @@ -/* -* Copyright (c) 2007-2008 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: -* -*/ - - - -/** - * Test step definitions for the CallControl functional unit. - * @internalTechnology - */ - -#include "cctsyintegrationtestcallcontrol.h" -#include "cetelsessionmgr.h" -#include "cctsyinidata.h" -#include "tcallcontroltsytesthelper.h" -#include -#include "rpsasciirqstdefs.h" -#include "rpsmaster.h" -#include -#include "rpsasciirqstdefs.h" -#include "rpsmaster.h" - - -CCTSYIntegrationTestCallControlBase::CCTSYIntegrationTestCallControlBase(CEtelSessionMgr& aEtelSessionMgr) - : CCTSYIntegrationTestSuiteStepBase(aEtelSessionMgr), iCallControlTestHelper(*this), iNetworkTestHelper(*this), iPacketServiceTestHelper(*this) -/** - * Constructor - */ - { - } - -CCTSYIntegrationTestCallControlBase::~CCTSYIntegrationTestCallControlBase() -/* - * Destructor - */ - { - } - -CCTSYIntegrationTestCallControl0001::CCTSYIntegrationTestCallControl0001(CEtelSessionMgr& aEtelSessionMgr) - : CCTSYIntegrationTestCallControlBase(aEtelSessionMgr) -/** - * Constructor. - */ - { - SetTestStepName(CCTSYIntegrationTestCallControl0001::GetTestStepName()); - } - -CCTSYIntegrationTestCallControl0001::~CCTSYIntegrationTestCallControl0001() -/** - * Destructor. - */ - { - } - - -TVerdict CCTSYIntegrationTestCallControl0001::doTestStepL() -/** - * @SYMTestCaseID BA-CTSY-INT-CCON-0001 - * @SYMFssID BA/CTSY/CCON-0001 - * @SYMTestCaseDesc Make an outgoing voice call that connects - * @SYMTestPriority High - * @SYMTestActions RPhone::EnumerateLines, RCall::Dial - * @SYMTestExpectedResults Pass - MO call connects. Phone status updates correctly. - * @SYMTestType CIT - * @SYMTestCaseDependencies live/automatic - * - * Reason for test: Verify change in call state is reflected in RPhone. - * - * @return - TVerdict code - */ - { - - //////////////////////////////////////////////////////////////// - // SET UP - //////////////////////////////////////////////////////////////// - RMobilePhone& phone = iEtelSessionMgr.GetPhoneL(KMainServer,KMainPhone); - - // Get Voice line 1 - RMobileLine& voiceLine = iEtelSessionMgr.GetLineL(KMainServer, KMainPhone, KVoiceLine); - - // Get call 1 - RMobileCall& call1 = iEtelSessionMgr.GetCallL(KMainServer, KMainPhone, KVoiceLine, KCall1); - - // Check phone supports KCapsVoice - RLine::TCaps lineCaps; - CHECK_EQUALS_L(voiceLine.GetCaps(lineCaps), KErrNone, - _L("RMobileLine::GetCaps returned an error")); - CHECK_BITS_SET_L(lineCaps.iFlags, RLine::KCapsVoice, KNoUnwantedBits, - _L("RLine::GetCaps returned wrong caps")); - - // Call TNetworkTsyTestHelper::WaitForRegisteredOnHomeNetworkL - CHECK_EQUALS_L(iNetworkTestHelper.WaitForRegisteredOnHomeNetworkL(phone), KErrNone, _L("TNetworkTsyTestHelper::WaitForRegisteredOnHomeNetworkL returned with an error")); - - //////////////////////////////////////////////////////////////// - // SET UP END - //////////////////////////////////////////////////////////////// - - StartTest(); - - //////////////////////////////////////////////////////////////// - // TEST START - //////////////////////////////////////////////////////////////// - - - // Check RPhone::EnumerateLines returns 4 (CTSY hard-coded value) - - TInt count = 0; - ASSERT_EQUALS(phone.EnumerateLines(count), KErrNone, - _L("RPhone::EnumerateLines did returned an error")); - ASSERT_EQUALS(count, 4, - _L("RPhone::EnumerateLines did not return a count of four")); - - // Check RPhone::GetLineInfo returns iStatus of EStatusIdle - RPhone::TLineInfo lineInfo; - TInt dataLineIndex=0; - ASSERT_EQUALS(phone.GetLineInfo(dataLineIndex, lineInfo), KErrNone, - _L("RPhone::GetLineInfo returned an error")); - ASSERT_EQUALS(lineInfo.iStatus, RCall::EStatusIdle, - _L("RPhone::GetLineInfo wrong iStatus, should be EStatusIdle")); - - // Check RPhone::GetLineInfo returns iLineCapsFlags of KCapsVoice - ASSERT_BITS_SET(lineInfo.iLineCapsFlags, RLine::KCapsVoice, KNoUnwantedBits, - _L("RPhone::GetLineInfo returned wrong caps")); - - // Check RPhone::GetLineInfo returns a valid line name - ASSERT_TRUE(lineInfo.iName.Length() >0, - _L("RPhone::GetLineInfo wrong call name")); - - // Dial voice number that answers. - TPtrC number; - ASSERT_TRUE(GetStringFromConfig(KIniVoiceNumSection, KIniVoiceNumber1, number) != EFalse, - _L("CTestStep::GetStringFromConfig did not complete as expected")); - TCoreEtelRequestStatus dialStatus(call1, &RCall::DialCancel); - CleanupStack::PushL(dialStatus); - call1.Dial(dialStatus, number); - ASSERT_EQUALS(WaitForRequestWithTimeOut(dialStatus, ETimeMedium), KErrNone, - _L("RCall::Dial timed-out")); - ASSERT_EQUALS(dialStatus.Int(), KErrNone, - _L("RCall::Dial returned with an error")); - - // Check RPhone::GetLineInfo returns iStatus of EStatusConnected - ASSERT_EQUALS(phone.GetLineInfo(dataLineIndex, lineInfo), KErrNone, - _L("RPhone::GetLineInfo returned an error")); - ASSERT_EQUALS(lineInfo.iStatus, RCall::EStatusConnected, - _L("RPhone::GetLineInfo wrong iStatus, should be EStatusConnected")); - - // Check RPhone::GetLineInfo returns iLineCapsFlags of KCapsVoice - ASSERT_BITS_SET(lineInfo.iLineCapsFlags, RLine::KCapsVoice, KNoUnwantedBits, - _L("RPhone::GetLineInfo returned wrong caps")); - - // Check RPhone::GetLineInfo returns a valid line name - ASSERT_TRUE(lineInfo.iName.Length() >0, - _L("RPhone::GetLineInfo wrong call name")); - - //////////////////////////////////////////////////////////////// - // TEST END - //////////////////////////////////////////////////////////////// - - StartCleanup(); - - // hang up the active call - TCoreEtelRequestStatus hangUpStatus (call1,&RCall::HangUpCancel); - CleanupStack::PushL(hangUpStatus); - call1.HangUp(hangUpStatus); - WaitForRequestWithTimeOut(hangUpStatus, ETimeMedium); - - - CleanupStack::PopAndDestroy(2,&dialStatus); - - return TestStepResult(); - } - -TPtrC CCTSYIntegrationTestCallControl0001::GetTestStepName() -/** - * @return The test step name. - */ - { - return _L("CCTSYIntegrationTestCallControl0001"); - } - - - -CCTSYIntegrationTestCallControl0002::CCTSYIntegrationTestCallControl0002(CEtelSessionMgr& aEtelSessionMgr) - : CCTSYIntegrationTestCallControlBase(aEtelSessionMgr) -/** - * Constructor. - */ - { - SetTestStepName(CCTSYIntegrationTestCallControl0002::GetTestStepName()); - } - -CCTSYIntegrationTestCallControl0002::~CCTSYIntegrationTestCallControl0002() -/** - * Destructor. - */ - { - } - -TVerdict CCTSYIntegrationTestCallControl0002::doTestStepL() -/** - * @SYMTestCaseID BA-CTSY-INT-CCON-0002 - * @SYMFssID BA/CTSY/CCON-0002 - * @SYMTestCaseDesc Make an outgoing voice call that connects - * @SYMTestPriority High - * @SYMTestActions RLine::NotifyStatusChange, RLine::GetStatus, RMobileLine::NotifyMobileLineStatusChange, RMobileLine::GetMobileLineStatus, RLine::GetInfo, RLine::GetCallInfo, RLine::EnumerateCall - * @SYMTestExpectedResults Pass - Mo call connects. Line status updates corectly. - * @SYMTestType CIT - * @SYMTestCaseDependencies live/automatic - * - * Reason for test: Verify change in call state is reflected in RLine and RMobileLine - * - * @return - TVerdict code - */ - { - - //////////////////////////////////////////////////////////////// - // SET UP - //////////////////////////////////////////////////////////////// - - // Get phone - RMobilePhone& phone = iEtelSessionMgr.GetPhoneL(KMainServer,KMainPhone); - - // Check phone supports KCapsVoice - // Get Voice line 1 - RMobileLine& voiceLine = iEtelSessionMgr.GetLineL(KMainServer, KMainPhone, KVoiceLine); - - // Get call 1 - RMobileCall& call1 = iEtelSessionMgr.GetCallL(KMainServer, KMainPhone, KVoiceLine, KCall1); - - // Check GetCaps returns iLineCapsFlags of KCapsVoice - RLine::TCaps lineCaps; - CHECK_EQUALS_L(voiceLine.GetCaps(lineCaps), KErrNone, - _L("RMobileLine::GetCaps returned an error")); - CHECK_BITS_SET_L(lineCaps.iFlags, RLine::KCapsVoice, KNoUnwantedBits, - _L("RLine::GetCaps returned wrong caps")); - - // Call TNetworkTsyTestHelper::WaitForRegisteredOnHomeNetworkL - CHECK_EQUALS_L(iNetworkTestHelper.WaitForRegisteredOnHomeNetworkL(phone), KErrNone, _L("TNetworkTsyTestHelper::WaitForRegisteredOnHomeNetworkL returned with an error")); - - //////////////////////////////////////////////////////////////// - // SET UP END - //////////////////////////////////////////////////////////////// - - StartTest(); - - //////////////////////////////////////////////////////////////// - // TEST START - //////////////////////////////////////////////////////////////// - - - // === Check line caps === - - // Check RLine::GetCaps supports caps in set of KCapsVoice. - ASSERT_EQUALS(voiceLine.GetCaps(lineCaps), KErrNone, - _L("RMobileLine::GetCaps returned an error")); - ASSERT_BITS_SET(lineCaps.iFlags, RLine::KCapsVoice, KNoUnwantedBits, - _L("RLine::GetCaps returned wrong caps")); - - // === Check line status === - - // Check RLine::GetStatus returns EStatusIdle. - RCall::TStatus callStatus; - ASSERT_EQUALS(voiceLine.GetStatus(callStatus), KErrNone, - _L("RLine::GetStatus returned an error")); - ASSERT_EQUALS(callStatus, RCall::EStatusIdle, - _L("RLine::GetStatus wrong iStatus, should be EStatusIdle")); - - // Check RMobileLine::GetMobileLineStatus returns EStatusIdle. - RMobileCall::TMobileCallStatus lineStatus; - ASSERT_EQUALS(voiceLine.GetMobileLineStatus(lineStatus), KErrNone, - _L("RMobileLine::GetMobileLineStatus returned an error")); - ASSERT_EQUALS(lineStatus, RMobileCall::EStatusIdle, - _L("RMobileLine::GetMobileLineStatus did not return EStatusIdle as expected")); - - // === Check line info === - - // Check RLine::GetCallInfo returns valid name. - // Check RLine::GetCallInfo returns caps in set of KCapsVoice | KCapsDial. - // Check RLine::GetCallInfo returns status of EStatusIdle. - RLine::TCallInfo callInfo; - TInt dataLineIndex=0; - ASSERT_EQUALS(voiceLine.GetCallInfo(dataLineIndex, callInfo), KErrNone, - _L("RLine::GetCallInfo returned an error")); - ASSERT_TRUE(callInfo.iCallName.Length() >0, - _L("RLine::GetCallInfo returned an invalid name")); - ASSERT_BITS_SET(callInfo.iCallCapsFlags, RCall::KCapsVoice | RCall::KCapsDial, KNoUnwantedBits , - _L("RLine::GetCallInfo returned wrong caps")); - ASSERT_EQUALS(callInfo.iStatus, RCall::EStatusIdle, - _L("RLine::GetCallInfo wrong iStatus, should be EStatusIdle")); - - // Check RLine::GetInfo returns status of EStatusIdle. - RLine::TLineInfo lineInfo; - ASSERT_EQUALS(voiceLine.GetInfo(lineInfo),KErrNone, - _L("RLine::GetInfo returned an error")); - ASSERT_EQUALS(lineInfo.iStatus, RCall::EStatusIdle, - _L("RLine::GetInfo did not return EStatusIdle")); - - // Check RLine::EnumerateCall returns aCount of 4 - TInt count = 0; - ASSERT_EQUALS(phone.EnumerateLines(count), KErrNone, - _L("RPhone::EnumerateLines did returned an error")); - ASSERT_EQUALS(count, 4, - _L("RPhone::EnumerateLines did not return a count of four")); - - // post notifier for RLine::NotifyStatusChange - TCoreEtelRequestStatus notifyStatusChangeStatus (voiceLine,&RLine::NotifyStatusChangeCancel); - CleanupStack::PushL(notifyStatusChangeStatus); - voiceLine.NotifyStatusChange(notifyStatusChangeStatus,callStatus); - - // post a notifier for RMobileLine::NotifyMobileLineStatusChange - RMobileCall::TMobileCallStatus mobileCallStatus; - TExtEtelRequestStatus notifyMobileLineChangeStatus(voiceLine, EMobileLineNotifyMobileLineStatusChange); - CleanupStack::PushL(notifyMobileLineChangeStatus); - voiceLine.NotifyMobileLineStatusChange(notifyMobileLineChangeStatus, mobileCallStatus); - - // Dial a voice number that answers. - TPtrC number; - ASSERT_TRUE(GetStringFromConfig(KIniVoiceNumSection, KIniVoiceNumber1, number) != EFalse, - _L("CTestStep::GetStringFromConfig did not complete as expected")); - TCoreEtelRequestStatus dialStatus(call1, &RCall::DialCancel); - CleanupStack::PushL(dialStatus); - call1.Dial(dialStatus, number); - ASSERT_EQUALS(WaitForRequestWithTimeOut(dialStatus, ETimeMedium), KErrNone, - _L("RCall::Dial timed-out")); - ASSERT_EQUALS(dialStatus.Int(), KErrNone, - _L("RCall::Dial returned with an error")); - - // === Check line status === - - // Check RLine::NotifyStatusChange completes with EStatusDialling -> - TInt expectedStatus = KErrNone; - RCall::TStatus expectedCallStatus = RCall::EStatusDialling; - iCallControlTestHelper.WaitForLineNotifyStatusChange(voiceLine, - notifyStatusChangeStatus, - callStatus, - expectedCallStatus, - expectedStatus); - - // Check RLine::NotifyStatusChange completes with EStatusConnecting -> - expectedCallStatus = RCall::EStatusConnecting; - voiceLine.NotifyStatusChange(notifyStatusChangeStatus,callStatus); - iCallControlTestHelper.WaitForLineNotifyStatusChange(voiceLine, - notifyStatusChangeStatus, - callStatus, - expectedCallStatus, - expectedStatus); - - // Check RLine::NotifyStatusChange completes with EStatusConnected. - expectedCallStatus = RCall::EStatusConnected; - voiceLine.NotifyStatusChange(notifyStatusChangeStatus,callStatus); - iCallControlTestHelper.WaitForLineNotifyStatusChange(voiceLine, - notifyStatusChangeStatus, - callStatus, - expectedCallStatus, - expectedStatus); - - // Check RLine::GetStatus returns EStatusConnected - ASSERT_EQUALS(voiceLine.GetStatus(callStatus), KErrNone, - _L("RLine::GetStatus returned an error")); - ASSERT_EQUALS(callStatus, RCall::EStatusConnected, - _L("RLine::GetStatus did not return EStatusConnected as expected")); - - // Check RMobileLine::NotifyMobileLineStatusChange completes with with EStatusDialling -> - RMobileCall::TMobileCallStatus expectedMobileCallStatus = RMobileCall::EStatusDialling; - iCallControlTestHelper.WaitForMobileLineNotifyMobileLineStatusChange(voiceLine, - notifyMobileLineChangeStatus, - mobileCallStatus, - expectedMobileCallStatus, - expectedStatus); - - // Check RMobileLine::NotifyMobileLineStatusChange completes with with EStatusConnecting -> - expectedMobileCallStatus = RMobileCall::EStatusConnecting; - voiceLine.NotifyMobileLineStatusChange(notifyMobileLineChangeStatus, mobileCallStatus); - iCallControlTestHelper.WaitForMobileLineNotifyMobileLineStatusChange(voiceLine, - notifyMobileLineChangeStatus, - mobileCallStatus, - expectedMobileCallStatus, - expectedStatus); - - // Check RMobileLine::NotifyMobileLineStatusChange completes with with EStatusConnected. - expectedMobileCallStatus = RMobileCall::EStatusConnected; - voiceLine.NotifyMobileLineStatusChange(notifyMobileLineChangeStatus, mobileCallStatus); - iCallControlTestHelper.WaitForMobileLineNotifyMobileLineStatusChange(voiceLine, - notifyMobileLineChangeStatus, - mobileCallStatus, - expectedMobileCallStatus, - expectedStatus); - - - // Check RMobileLine::GetMobileLineStatus returns EStatusConnected - ASSERT_EQUALS(voiceLine.GetMobileLineStatus(mobileCallStatus), KErrNone, - _L("RMobileLine::GetMobileLineStatus returned an error")); - ASSERT_EQUALS(mobileCallStatus, RMobileCall::EStatusConnected, - _L("RMobileLine::GetMobileLineStatus did not set line status to EStatusConnected")); - - - // === Check line info === - - // Check RLine::GetCallInfo returns valid name. - // Check RLine::GetCallInfo returns caps in set of KCapsHangUp. - // Check RLine::GetCallInfo returns status of EStatusConnected. - ASSERT_EQUALS(voiceLine.GetCallInfo(dataLineIndex, callInfo), KErrNone, - _L("RLine::GetCallInfo returned an error")); - ASSERT_TRUE(callInfo.iCallName.Length() >0, - _L("RLine::GetCallInfo returned an invalid name")); - ASSERT_BITS_SET(callInfo.iCallCapsFlags, RCall::KCapsHangUp, KNoUnwantedBits, - _L("RLine::GetCallInfo returned wrong caps")); - ASSERT_EQUALS(callInfo.iStatus, RCall::EStatusConnected, - _L("RLine::GetCallInfo wrong iStatus, should be EStatusConnected")); - - // Check RLine::GetInfo returns status of EStatusConnected. - ASSERT_EQUALS(voiceLine.GetInfo(lineInfo), KErrNone, - _L("RLine::GetInfo returned an error")); - ASSERT_EQUALS(lineInfo.iStatus, RCall::EStatusConnected, - _L("RLine::GetInfo did not return EStatusConnected")); - - - //////////////////////////////////////////////////////////////// - // TEST END - //////////////////////////////////////////////////////////////// - - StartCleanup(); - - // hang up the active call - TCoreEtelRequestStatus hangUpStatus (call1,&RCall::HangUpCancel); - CleanupStack::PushL(hangUpStatus); - call1.HangUp(hangUpStatus); - WaitForRequestWithTimeOut(hangUpStatus, ETimeMedium); - - // Pop - // notifyStatusChangeStatus - // notifyMobileLineChangeStatus - // dialStatus - // hangUpStatus - CleanupStack::PopAndDestroy(4,¬ifyStatusChangeStatus); - - return TestStepResult(); - } - -TPtrC CCTSYIntegrationTestCallControl0002::GetTestStepName() -/** - * @return The test step name. - */ - { - return _L("CCTSYIntegrationTestCallControl0002"); - } - - - -CCTSYIntegrationTestCallControl0003::CCTSYIntegrationTestCallControl0003(CEtelSessionMgr& aEtelSessionMgr) - : CCTSYIntegrationTestCallControlBase(aEtelSessionMgr) -/** - * Constructor. - */ - { - SetTestStepName(CCTSYIntegrationTestCallControl0003::GetTestStepName()); - } - -CCTSYIntegrationTestCallControl0003::~CCTSYIntegrationTestCallControl0003() -/** - * Destructor. - */ - { - } - -TVerdict CCTSYIntegrationTestCallControl0003::doTestStepL() -/** - * @SYMTestCaseID BA-CTSY-INT-CCON-0003 - * @SYMFssID BA/CTSY/CCON-0003 - * @SYMTestCaseDesc Make an outgoing voice call that connects - * @SYMTestPriority High - * @SYMTestActions RCall::GetInfo, RCall::GetStatus, RCall::NotifyCapsChange, RCall::NotifyStatusChange, RMobileCall::GetMobileCallCaps, RMobileCall::GetMobileCallInfo, RMobileCall::GetMobileCallStatus, RMobileCall::NotifyMobileCallCapsChange, RMobileCall::NotifyMobileCallStatusChange - * @SYMTestExpectedResults Pass - Mo call connects. Call status updates correctly. - * @SYMTestType CIT - * @SYMTestCaseDependencies live/automatic - * - * Reason for test: Verify change in call state is reflected in RCall and RMobileCall. - * - * @return - TVerdict code - */ - { - - //////////////////////////////////////////////////////////////// - // SET UP - //////////////////////////////////////////////////////////////// - RMobilePhone& phone = iEtelSessionMgr.GetPhoneL(KMainServer,KMainPhone); - - // Check phone supports KCapsVoice - // Get Voice line 1 - RMobileLine& voiceLine = iEtelSessionMgr.GetLineL(KMainServer, KMainPhone, KVoiceLine); - - // Get call 1 - RMobileCall& call1 = iEtelSessionMgr.GetCallL(KMainServer, KMainPhone, KVoiceLine, KCall1); - - RLine::TCaps lineCaps; - CHECK_EQUALS_L(voiceLine.GetCaps(lineCaps), KErrNone, - _L("RMobileLine::GetCaps returned an error")); - CHECK_BITS_SET_L(lineCaps.iFlags, RLine::KCapsVoice, KNoUnwantedBits, - _L("RLine::GetCaps returned wrong caps")); - - // Call TNetworkTsyTestHelper::WaitForRegisteredOnHomeNetworkL - CHECK_EQUALS_L(iNetworkTestHelper.WaitForRegisteredOnHomeNetworkL(phone), KErrNone, _L("TNetworkTsyTestHelper::WaitForRegisteredOnHomeNetworkL returned with an error")); - - //////////////////////////////////////////////////////////////// - // SET UP END - //////////////////////////////////////////////////////////////// - - StartTest(); - - //////////////////////////////////////////////////////////////// - // TEST START - //////////////////////////////////////////////////////////////// - - - // === Check call caps === - - // Check RCall::GetCaps supports KCapsDial | KCapsVoice. - RCall::TCaps callCaps; - TUint32 wantedCaps = RCall::KCapsDial | RCall::KCapsVoice; - ASSERT_EQUALS(call1.GetCaps(callCaps),KErrNone, - _L("RCall::GetCaps returned an error")); - ASSERT_BITS_SET(callCaps.iFlags, wantedCaps, KNoUnwantedBits, - _L("RCall::GetCaps returned wrong caps")); - - // Check RMobileCall::GetMobileCallCaps returns iCallControlCaps in set of KCapsVoice | KCapsDial. - // Check RMobileCall::GetMobileCallCaps includes iCallEventCaps in set of 0. - TUint32 wantedCallControlCaps = RCall::KCapsDial | RCall::KCapsVoice; - TUint32 wantedCallEventCaps = 0; - RMobileCall::TMobileCallCapsV1 mobileCallCaps; - RMobileCall::TMobileCallCapsV1Pckg capsPckg(mobileCallCaps); - ASSERT_EQUALS(call1.GetMobileCallCaps(capsPckg), KErrNone, - _L("RMobileCall::GetMobileCallCaps returned an error")); - ASSERT_BITS_SET(mobileCallCaps.iCallControlCaps, wantedCallControlCaps, KNoUnwantedBits, - _L("RMobileCall::GetMobileCallCaps returned wrong caps")); - ASSERT_BITS_SET(mobileCallCaps.iCallEventCaps, wantedCallEventCaps, KNoUnwantedBits, - _L("RMobileCall::GetMobileCallCaps returned wrong caps")); - - // === Check call status === - - // Check RCall::GetStatus returns EStatusIdle. - RCall::TStatus callStatus; - ASSERT_EQUALS(call1.GetStatus(callStatus), KErrNone, - _L("RCall::GetStatus returned an Error")); - ASSERT_EQUALS(callStatus, RCall::EStatusIdle, - _L("RCall::GetStatus did not return EStatusIdle")); - - // Check RMobileCall::GetMobileCallStatus returns status of EStatusIdle. - RMobileCall::TMobileCallStatus mobileCallStatus; - ASSERT_EQUALS(call1.GetMobileCallStatus(mobileCallStatus), KErrNone, - _L("RMobileCall::GetMobileCallStatus returned an Error")); - ASSERT_EQUALS(mobileCallStatus, RMobileCall::EStatusIdle, - _L("RMobileCall::GetMobileCallStatus did not set the status to EStatusIdle")); - - // === Check call info === - - // Check RCall::GetInfo returns valid call name. - // Check RCall::GetInfo returns valid voice line name. - // Check RCall::GetInfo returns call status of EStatusIdle. - - RCall::TCallInfo callInfo; - ASSERT_EQUALS(call1.GetInfo(callInfo), KErrNone, - _L("RCall::GetInfo returned an error")); - ASSERT_TRUE(callInfo.iCallName.Length() >0, - _L("RCall::GetInfo returned an invalid name")); - ASSERT_TRUE(callInfo.iLineName.Length() >0, - _L("RCall::GetInfo returned an invalid Line name")); - ASSERT_EQUALS(callInfo.iStatus, RCall::EStatusIdle, - _L("RCall::GetInfo wrong iStatus, should be EStatusIdle")); - - // Check RMobileCall::GetMobileCallInfo returns iValid with correct flags for returned parameters set. - // Check RMobileCall::GetMobileCallInfo returns valid call name. - // Check RMobileCall::GetMobileCallInfo returns valid line name. - RMobileCall::TMobileCallInfoV1 mobileCallInfo; - RMobileCall::TMobileCallInfoV1Pckg callInfoPckg(mobileCallInfo); - RMobileCall::TMobileCallInfoV1 validCallInfo; - validCallInfo.iValid = RMobileCall::KCallStartTime; - ASSERT_EQUALS(call1.GetMobileCallInfo(callInfoPckg), KErrNone, - _L("RMobileCall::GetMobileCallInfo returned an error")); - ASSERT_BITS_SET(mobileCallInfo.iValid, validCallInfo.iValid,KNoUnwantedBits, - _L("RMobileCall::GetMobileCallInfo returned unexpected flags in iValid")); - ASSERT_TRUE(mobileCallInfo.iCallName.Length() >0, - _L("RMobileCall::GetMobileCallInfo returned an invalid callName")); - ASSERT_TRUE(mobileCallInfo.iLineName.Length() >0, - _L("RMobileCall::GetMobileCallInfo returned an invalid line name")); - - // post notifier for RCall::NotifyCapsChange - TCoreEtelRequestStatus notifyCapsChangeStatus (call1,&RCall::NotifyCapsChangeCancel); - CleanupStack::PushL(notifyCapsChangeStatus); - call1.NotifyCapsChange(notifyCapsChangeStatus,callCaps); - - // post notifier for RMobileCall::NotifyMobileCallCapsChange - TExtEtelRequestStatus notifyMobileCallCapsChangeStatus(call1, EMobileCallNotifyMobileCallCapsChange); - CleanupStack::PushL(notifyMobileCallCapsChangeStatus); - call1.NotifyMobileCallCapsChange(notifyMobileCallCapsChangeStatus,capsPckg); - - // post notifier for RCall::NotifyStatusChange - TCoreEtelRequestStatus notifyStatusChangeStatus (call1,&RCall::NotifyStatusChangeCancel); - CleanupStack::PushL(notifyStatusChangeStatus); - call1.NotifyStatusChange(notifyStatusChangeStatus,callStatus); - - // post notifier for RMobileCall::NotifyMobileCallStatusChange - TExtEtelRequestStatus notifyMobileCallStatusChangeStatus(call1, EMobileCallNotifyMobileCallStatusChange); - CleanupStack::PushL(notifyMobileCallStatusChangeStatus); - call1.NotifyMobileCallStatusChange(notifyMobileCallStatusChangeStatus, mobileCallStatus); - - // Dial a voice number. - TPtrC number; - ASSERT_TRUE(GetStringFromConfig(KIniVoiceNumSection, KIniVoiceNumber1, number) != EFalse, - _L("CTestStep::GetStringFromConfig did not complete as expected")); - TCoreEtelRequestStatus dialStatus(call1, &RCall::DialCancel); - CleanupStack::PushL(dialStatus); - call1.Dial(dialStatus, number); - ASSERT_EQUALS(WaitForRequestWithTimeOut(dialStatus, ETimeMedium), KErrNone, - _L("RCall::Dial timed-out")); - ASSERT_EQUALS(dialStatus.Int(), KErrNone, - _L("RCall::Dial returned with an error")); - - // === Check call caps === - - // Check RCall::NotifyCapsChange completes with caps in set of KCapsVoice | KCapsHangUp. - RCall::TCaps wantedCaps2, unwantedCaps2; - wantedCaps2.iFlags = RCall::KCapsVoice | RCall::KCapsHangUp; - unwantedCaps2.iFlags = 0; - const TInt wantedStatus = KErrNone; - iCallControlTestHelper.WaitForCallNotifyCapsChange(call1, - notifyCapsChangeStatus, - callCaps, - wantedCaps2, - unwantedCaps2, - wantedStatus); - - // Check RCall::GetCaps supports KCapsHangUp | KCapsVoice. - wantedCaps = RCall::KCapsHangUp | RCall::KCapsVoice; - ASSERT_EQUALS(call1.GetCaps(callCaps), KErrNone, - _L("RCall::GetCaps returned an Error")); - ASSERT_BITS_SET(callCaps.iFlags, wantedCaps, KNoUnwantedBits, - _L("RCall::GetCaps returned unexpected Caps")); - - - // Check RMobileCall::NotifyMobileCallCapsChange completes with iCallControlCaps in set of - // KCapsVoice | KCapsHold | KCapsHangUp | KCapsTransfer. - // Check RMobileCall::NotifyMobileCallCapsChange completes with iCallEventCaps in set of - // KCapsLocalHold | KCapsLocalTransfer | KCapsRemoteHold | KCapsRemoteTerminate | - // KCapsRemoteConferenceCreate. - RMobileCall::TMobileCallCapsV1 wantedMobileCaps; - wantedMobileCaps.iCallControlCaps = RMobileCall::KCapsVoice | - RMobileCall::KCapsHold | - RMobileCall::KCapsHangUp; - - wantedMobileCaps.iCallEventCaps = RMobileCall::KCapsLocalHold | - RMobileCall::KCapsLocalTransfer | - RMobileCall::KCapsRemoteHold | - RMobileCall::KCapsRemoteTerminate | - RMobileCall::KCapsRemoteConferenceCreate; - - TCmpRMobileCallTMobileCallCaps mobileCapsComp(wantedMobileCaps,mobileCallCaps, *this); - iCallControlTestHelper.WaitForMobileCallNotifyMobileCallCapsChange(call1, - notifyMobileCallCapsChangeStatus, - mobileCapsComp, - wantedStatus); - - // Check RMobileCall::GetMobileCallCaps includes iCallControlCaps in set of - // KCapsVoice |KCapsHold | KCapsHangUp | KCapsTransfer. - // Check RMobileCall::GetMobileCallCaps includes iCallEventCaps in set of - // KCapsLocalHold | KCapsLocalTransfer | KCapsRemoteHold | KCapsRemoteTerminate | - // KCapsRemoteConferenceCreate. - ASSERT_EQUALS(call1.GetMobileCallCaps(capsPckg), KErrNone, - _L("RMobileCall::GetMobileCallCaps returned an error")); - wantedMobileCaps.iCallControlCaps = RMobileCall::KCapsVoice | - RMobileCall::KCapsHold | - RMobileCall::KCapsHangUp; - ASSERT_BITS_SET(mobileCallCaps.iCallControlCaps, wantedMobileCaps.iCallControlCaps,KNoUnwantedBits, - _L("RMobileCall::GetMobileCallCaps returned unexpected iCallControlCaps")); - - wantedMobileCaps.iCallEventCaps = RMobileCall::KCapsLocalHold | - RMobileCall::KCapsLocalTransfer | - RMobileCall::KCapsRemoteHold | - RMobileCall::KCapsRemoteTerminate | - RMobileCall::KCapsRemoteConferenceCreate; - ASSERT_BITS_SET(mobileCallCaps.iCallEventCaps, wantedMobileCaps.iCallEventCaps,KNoUnwantedBits, - _L("RMobileCall::GetMobileCallCaps returned unexpected iCallEventCaps")); - - - // === Check call status === - - // Check RCall::NotifyStatusChange completes with EStatusDialling -> - RCall::TStatus expectedCallStatus = RCall::EStatusDialling; - iCallControlTestHelper.WaitForCallNotifyStatusChange(call1, - notifyStatusChangeStatus, - callStatus, - expectedCallStatus, - wantedStatus); - - // Check RCall::NotifyStatusChange completes with EStatusConnecting -> - expectedCallStatus = RCall::EStatusConnecting; - call1.NotifyStatusChange(notifyStatusChangeStatus,callStatus); - iCallControlTestHelper.WaitForCallNotifyStatusChange(call1, - notifyStatusChangeStatus, - callStatus, - expectedCallStatus, - wantedStatus); - - // Check RCall::NotifyStatusChange completes with EStatusConnected. - expectedCallStatus = RCall::EStatusConnected; - call1.NotifyStatusChange(notifyStatusChangeStatus,callStatus); - iCallControlTestHelper.WaitForCallNotifyStatusChange(call1, - notifyStatusChangeStatus, - callStatus, - expectedCallStatus, - wantedStatus); - - // Check RCall::GetStatus returns EStatusConnected. - ASSERT_EQUALS(call1.GetStatus(callStatus),KErrNone, - _L("RCall::GetStatus returned an error")); - ASSERT_EQUALS(callStatus, RCall::EStatusConnected, - _L("RCall::GetStatus returned an unexpected call status")); - - // Check RMobileCall::NotifyMobileCallStatusChange completes with EStatusDialling -> - RMobileCall::TMobileCallStatus expectedMobileCallStatus = RMobileCall::EStatusDialling; - iCallControlTestHelper.WaitForMobileCallNotifyMobileCallStatusChange(call1, - notifyMobileCallStatusChangeStatus, - mobileCallStatus, - expectedMobileCallStatus, - wantedStatus); - - // Check RMobileCall::NotifyMobileCallStatusChange completes with EStatusConnecting -> - call1.NotifyMobileCallStatusChange(notifyMobileCallStatusChangeStatus, mobileCallStatus); - expectedMobileCallStatus = RMobileCall::EStatusConnecting; - iCallControlTestHelper.WaitForMobileCallNotifyMobileCallStatusChange(call1, - notifyMobileCallStatusChangeStatus, - mobileCallStatus, - expectedMobileCallStatus, - wantedStatus); - - // Check RMobileCall::NotifyMobileCallStatusChange completes with EStatusConnected. - call1.NotifyMobileCallStatusChange(notifyMobileCallStatusChangeStatus, mobileCallStatus); - expectedMobileCallStatus = RMobileCall::EStatusConnected; - iCallControlTestHelper.WaitForMobileCallNotifyMobileCallStatusChange(call1, - notifyMobileCallStatusChangeStatus, - mobileCallStatus, - expectedMobileCallStatus, - wantedStatus); - - // Check RMobileCall::GetMobileCallStatus returns status of EStatusConnected. - ASSERT_EQUALS(call1.GetMobileCallStatus(mobileCallStatus), KErrNone, - _L("RMobileCall::GetMobileStatus returned an error")); - ASSERT_EQUALS(mobileCallStatus, RMobileCall::EStatusConnected, - _L("RMobileCall::GetMobileStatus did not return a status EStatusConnected")); - - - // === Check call info === - - // Check RCall::GetInfo returns valid call name. - // Check RCall::GetInfo returns valid voice line name. - // Check RCall::GetInfo returns call status of EStatusConnected. - // Check RCall::GetInfo returns call duration of > 0. - User::After(KOneSecond*1); - ASSERT_EQUALS(call1.GetInfo(callInfo), KErrNone, - _L("RCall::GetInfo returned an error")); - ASSERT_TRUE(callInfo.iCallName.Length() >0, - _L("RCall::GetInfo returned an invalid name")); - ASSERT_TRUE(callInfo.iLineName.Length() >0, - _L("RCall::GetInfo returned an invalid Line name")); - ASSERT_EQUALS(callInfo.iStatus, RCall::EStatusConnected, - _L("RCall::GetInfo wrong iStatus, should be EStatusConnected")); - ASSERT_TRUE(callInfo.iDuration.Int() > 0, - _L("RCall::GetInfo wrong iDuration, should be >0")); - - // Check RMobileCall::GetMobileCallInfo returns iValid > 0. - // Check RMobileCall::GetMobileCallInfo returns data for attributes marked as valid in iValid. - // Check RMobileCall::GetMobileCallInfo returns valid line name. - ASSERT_EQUALS(call1.GetMobileCallInfo(callInfoPckg), KErrNone, - _L("RMobileCall::GetMobileCallInfo returned an error")); - ASSERT_TRUE(mobileCallInfo.iLineName.Length() >0, - _L("RMobileCall::GetMobileCallInfo returned an invalid line name")); - ASSERT_TRUE(mobileCallInfo.iValid > 0, - _L("RMobileCall::GetMobileCallInfo returned unexpected flags in iValid")); - - iCallControlTestHelper.CheckForValidCallInfo(mobileCallInfo, number); - - - //////////////////////////////////////////////////////////////// - // TEST END - //////////////////////////////////////////////////////////////// - - StartCleanup(); - - // hang up the active call - TCoreEtelRequestStatus hangUpStatus (call1,&RCall::HangUpCancel); - CleanupStack::PushL(hangUpStatus); - call1.HangUp(hangUpStatus); - WaitForRequestWithTimeOut(hangUpStatus, ETimeMedium); - - // Pop - // notifyCapsChangeStatus - // notifyMobileCallCapsChangeStatus - // notifyStatusChangeStatus - // notifyMobileCallStatusChangeStatus - // dialStatus - // hangUpStatus - - CleanupStack::PopAndDestroy(6,¬ifyCapsChangeStatus); - - return TestStepResult(); - } - -TPtrC CCTSYIntegrationTestCallControl0003::GetTestStepName() -/** - * @return The test step name. - */ - { - return _L("CCTSYIntegrationTestCallControl0003"); - } - - - -CCTSYIntegrationTestCallControl0004::CCTSYIntegrationTestCallControl0004(CEtelSessionMgr& aEtelSessionMgr) - : CCTSYIntegrationTestCallControlBase(aEtelSessionMgr) -/** - * Constructor. - */ - { - SetTestStepName(CCTSYIntegrationTestCallControl0004::GetTestStepName()); - } - -CCTSYIntegrationTestCallControl0004::~CCTSYIntegrationTestCallControl0004() -/** - * Destructor. - */ - { - } - -TVerdict CCTSYIntegrationTestCallControl0004::doTestStepL() -/** - * @SYMTestCaseID BA-CTSY-INT-CCON-0004 - * @SYMFssID BA/CTSY/CCON-0004 - * @SYMTestCaseDesc Dial a call which remote party rejects. - * @SYMTestPriority High - * @SYMTestActions RLine::NotifyStatusChange, RMobileLine::NotifyMobileLineStatusChange, RMobileCall::GetMobileCallStatus, RCall::NotifyStatusChange, RMobileCall::NotifyMobileCallStatusChange, RLine::GetStatus, RMobileLine::GetMobileLineStatus, RCall::GetStatus - * @SYMTestExpectedResults Pass - Dial completes with an error. - * @SYMTestType CIT - * @SYMTestCaseDependencies live/rps - * - * Reason for test: Verify call and line status after call is rejected. - * - * @return - TVerdict code - */ - { - - //////////////////////////////////////////////////////////////// - // SET UP - //////////////////////////////////////////////////////////////// - RMobilePhone& phone = iEtelSessionMgr.GetPhoneL(KMainServer,KMainPhone); - - // Check phone supports KCapsVoice - // Get Voice line 1 - RMobileLine& voiceLine = iEtelSessionMgr.GetLineL(KMainServer, KMainPhone, KVoiceLine); - - // Get call 1 - RMobileCall& call1 = iEtelSessionMgr.GetCallL(KMainServer, KMainPhone, KVoiceLine, KCall1); - - RLine::TCaps lineCaps; - CHECK_EQUALS_L(voiceLine.GetCaps(lineCaps), KErrNone, - _L("RMobileLine::GetCaps returned an error")); - CHECK_BITS_SET_L(lineCaps.iFlags, RLine::KCapsVoice, KNoUnwantedBits, - _L("RLine::GetCaps returned wrong caps")); - - // Call TNetworkTsyTestHelper::WaitForRegisteredOnHomeNetworkL - CHECK_EQUALS_L(iNetworkTestHelper.WaitForRegisteredOnHomeNetworkL(phone), KErrNone, _L("TNetworkTsyTestHelper::WaitForRegisteredOnHomeNetworkL returned with an error")); - - //////////////////////////////////////////////////////////////// - // SET UP END - //////////////////////////////////////////////////////////////// - - StartTest(); - - //////////////////////////////////////////////////////////////// - // TEST START - //////////////////////////////////////////////////////////////// - - // post a notifier for RLine::NotifyStatusChange - RCall::TStatus lineStatus; - TCoreEtelRequestStatus notifyStatusChangeStatus (voiceLine,&RLine::NotifyStatusChangeCancel); - CleanupStack::PushL(notifyStatusChangeStatus); - voiceLine.NotifyStatusChange(notifyStatusChangeStatus,lineStatus); - - // post a notifier for RMobileLine::NotifyMobileLineStatusChange - RMobileCall::TMobileCallStatus mobileLineStatus; - TExtEtelRequestStatus notifyMobileLineChangeStatus(voiceLine, EMobileLineNotifyMobileLineStatusChange); - CleanupStack::PushL(notifyMobileLineChangeStatus); - voiceLine.NotifyMobileLineStatusChange(notifyMobileLineChangeStatus, mobileLineStatus); - - // post notifier for RCall::NotifyStatusChange - RCall::TStatus callStatus; - TCoreEtelRequestStatus notifyCallStatusChangeStatus (call1,&RCall::NotifyStatusChangeCancel); - CleanupStack::PushL(notifyCallStatusChangeStatus); - call1.NotifyStatusChange(notifyCallStatusChangeStatus,callStatus); - - // post a notifier for RMobileCall::NotifyMobileCallStatusChange - RMobileCall::TMobileCallStatus mobileCallStatus; - TExtEtelRequestStatus notifyMobileCallChangeStatus(call1, EMobileCallNotifyMobileCallStatusChange); - CleanupStack::PushL(notifyMobileCallChangeStatus); - call1.NotifyMobileCallStatusChange(notifyMobileCallChangeStatus, mobileCallStatus); - - // Dial RPS which will reject the call. - TPtrC number; - TCoreEtelRequestStatus dialStatus(call1, &RCall::DialCancel); - CleanupStack::PushL(dialStatus); - RPSRejectNextCallL(EVoiceLine); - GetRPSNumber(EVoiceLine, number); // Voicemail should be deactivated for this number - call1.Dial(dialStatus, number); - ASSERT_EQUALS(WaitForRequestWithTimeOut(dialStatus, ETimeVeryLong), KErrNone, - _L("RCall::Dial timed-out")); - ASSERT_TRUE(dialStatus.Int() != KErrNone, - _L("RCall::Dial did not return an error")); - - // === Check line status === - - // Check RLine::NotifyStatusChange completes with EStatusDialling -> EStatusHangingUp -> EStatusIdle - RCall::TStatus expectedLineStatus = RCall::EStatusDialling; - TInt expectedStatus = KErrNone; - iCallControlTestHelper.WaitForLineNotifyStatusChange(voiceLine, - notifyStatusChangeStatus, - lineStatus, - expectedLineStatus, - expectedStatus); - - - voiceLine.NotifyStatusChange(notifyStatusChangeStatus,lineStatus); - expectedLineStatus = RCall::EStatusHangingUp; - ERR_PRINTF2(_L("$CTSYKnownFailure: defect id = %d"), 10065); - iCallControlTestHelper.WaitForLineNotifyStatusChange(voiceLine, - notifyStatusChangeStatus, - lineStatus, - expectedLineStatus, - expectedStatus); - - voiceLine.NotifyStatusChange(notifyStatusChangeStatus,lineStatus); - expectedLineStatus = RCall::EStatusIdle; - iCallControlTestHelper.WaitForLineNotifyStatusChange(voiceLine, - notifyStatusChangeStatus, - lineStatus, - expectedLineStatus, - expectedStatus); - - // Check RLine::GetStatus returns EStatusIdle - ASSERT_EQUALS(voiceLine.GetStatus(lineStatus), KErrNone, - _L("RLine::GetStatus returned an error")); - ASSERT_EQUALS(lineStatus, RCall::EStatusIdle, - _L("RLine::GetStatus did not return EStatusIdle as expected")); - - - // Check RMobileLine::NotifyMobileLineStatusChange completes with with EStatusDisconnecting -> EStatusIdle - RMobileCall::TMobileCallStatus expectedMobileLineStatus = RMobileCall::EStatusDisconnecting; - ERR_PRINTF2(_L("$CTSYKnownFailure: defect id = %d"), 10065); - voiceLine.NotifyMobileLineStatusChange(notifyMobileLineChangeStatus, mobileLineStatus); - iCallControlTestHelper.WaitForMobileLineNotifyMobileLineStatusChange(voiceLine, - notifyMobileLineChangeStatus, - mobileLineStatus, - expectedMobileLineStatus, - expectedStatus); - - // Check RMobileLine::NotifyMobileLineStatusChange completes with with EStatusIdle - expectedMobileLineStatus = RMobileCall::EStatusIdle; - voiceLine.NotifyMobileLineStatusChange(notifyMobileLineChangeStatus, mobileLineStatus); - iCallControlTestHelper.WaitForMobileLineNotifyMobileLineStatusChange(voiceLine, - notifyMobileLineChangeStatus, - mobileLineStatus, - expectedMobileLineStatus, - expectedStatus); - // === Check call status === - - // Check RCall::NotifyStatusChange completes with EStatusHangingUp -> EStatusIdle. - RCall::TStatus expectedCallStatus = RCall::EStatusHangingUp; - iCallControlTestHelper.WaitForCallNotifyStatusChange(call1, - notifyCallStatusChangeStatus, - callStatus, - expectedCallStatus, - expectedStatus); - - expectedCallStatus = RCall::EStatusIdle; - call1.NotifyStatusChange(notifyCallStatusChangeStatus,callStatus); - iCallControlTestHelper.WaitForCallNotifyStatusChange(call1, - notifyCallStatusChangeStatus, - callStatus, - expectedCallStatus, - expectedStatus); - // Check RCall::GetStatus returns EStatusIdle. - ASSERT_EQUALS(call1.GetStatus(callStatus), KErrNone, - _L("RCall::GetStatus returned an Error")); - ASSERT_EQUALS(callStatus, RCall::EStatusIdle, - _L("RCall::GetStatus did not return EStatusIdle")); - - // Check RMobileCall::NotifyMobileCallStatusChange completes with EStatusDisconnecting -> EStatusIdle. - RMobileCall::TMobileCallStatus expectedMobileCallStatus = RMobileCall::EStatusDisconnecting; - iCallControlTestHelper.WaitForMobileCallNotifyMobileCallStatusChange(call1, - notifyMobileCallChangeStatus, - mobileCallStatus, - expectedMobileCallStatus, - expectedStatus); - - expectedMobileCallStatus = RMobileCall::EStatusIdle; - call1.NotifyMobileCallStatusChange(notifyMobileCallChangeStatus, mobileCallStatus); - iCallControlTestHelper.WaitForMobileCallNotifyMobileCallStatusChange(call1, - notifyMobileCallChangeStatus, - mobileCallStatus, - expectedMobileCallStatus, - expectedStatus); - - - // Check RMobileCall::GetMobileCallStatus returns status of EStatusIdle. - ASSERT_EQUALS(call1.GetMobileCallStatus(mobileCallStatus), KErrNone, - _L("RMobileCall::GetMobileCallStatus returned an error")); - ASSERT_EQUALS(mobileCallStatus, RMobileCall::EStatusIdle, - _L("RMobileCall::GetMobileCallStatus did not return EStatusIdle")); - - //////////////////////////////////////////////////////////////// - // TEST END - //////////////////////////////////////////////////////////////// - - StartCleanup(); - - // hang up the active call - TCoreEtelRequestStatus hangUpStatus (call1,&RCall::HangUpCancel); - CleanupStack::PushL(hangUpStatus); - call1.HangUp(hangUpStatus); - WaitForRequestWithTimeOut(hangUpStatus, ETimeMedium); - - // Pop - // notifyStatusChangeStatus - // notifyMobileLineChangeStatus - // notifyCallStatusChangeStatus - // notifyMobileCallChangeStatus - // dialStatus - // hangUpStatus - CleanupStack::PopAndDestroy(6,¬ifyStatusChangeStatus); - - return TestStepResult(); - } - -TPtrC CCTSYIntegrationTestCallControl0004::GetTestStepName() -/** - * @return The test step name. - */ - { - return _L("CCTSYIntegrationTestCallControl0004"); - } - - - -CCTSYIntegrationTestCallControl0005::CCTSYIntegrationTestCallControl0005(CEtelSessionMgr& aEtelSessionMgr) - : CCTSYIntegrationTestCallControlBase(aEtelSessionMgr) -/** - * Constructor. - */ - { - SetTestStepName(CCTSYIntegrationTestCallControl0005::GetTestStepName()); - } - -CCTSYIntegrationTestCallControl0005::~CCTSYIntegrationTestCallControl0005() -/** - * Destructor. - */ - { - } - -TVerdict CCTSYIntegrationTestCallControl0005::doTestStepL() -/** - * @SYMTestCaseID BA-CTSY-INT-CCON-0005 - * @SYMFssID BA/CTSY/CCON-0005 - * @SYMTestCaseDesc Dial. Remote end doesn't pick up - * @SYMTestPriority High - * @SYMTestActions This requires a mobile SIM with voicemail deactivated. This test will only time out after 100seconds. - * @SYMTestExpectedResults Pass - Error returned. - * @SYMTestType CIT - * @SYMTestCaseDependencies live/manual - * - * Reason for test: Verify error is returned on attempt to dial. - * - * @return - TVerdict code - */ - { - - //////////////////////////////////////////////////////////////// - // SET UP - //////////////////////////////////////////////////////////////// - RMobilePhone& phone = iEtelSessionMgr.GetPhoneL(KMainServer,KMainPhone); - - // Get Voice line 1 - RMobileLine& voiceLine = iEtelSessionMgr.GetLineL(KMainServer, KMainPhone, KVoiceLine); - - // Get call 1 - RMobileCall& call1 = iEtelSessionMgr.GetCallL(KMainServer, KMainPhone, KVoiceLine, KCall1); - - // Check phone supports KCapsVoice. - RLine::TCaps lineCaps; - CHECK_EQUALS_L(voiceLine.GetCaps(lineCaps), KErrNone, - _L("RMobileLine::GetCaps returned an error")); - CHECK_BITS_SET_L(lineCaps.iFlags, RLine::KCapsVoice, KNoUnwantedBits, - _L("RLine::GetCaps returned wrong caps")); - - // Call TNetworkTsyTestHelper::WaitForRegisteredOnHomeNetworkL - CHECK_EQUALS_L(iNetworkTestHelper.WaitForRegisteredOnHomeNetworkL(phone), KErrNone, _L("TNetworkTsyTestHelper::WaitForRegisteredOnHomeNetworkL returned with an error")); - - //////////////////////////////////////////////////////////////// - // SET UP END - //////////////////////////////////////////////////////////////// - - StartTest(); - - //////////////////////////////////////////////////////////////// - // TEST START - //////////////////////////////////////////////////////////////// - - - // Dial a number which will not answer. - TPtrC number; - GetStringFromConfig(KIniVoiceNumSection,KIniVoiceNumDoesNotConnect,number); - TCoreEtelRequestStatus dialStatus(call1, &RCall::DialCancel); - CleanupStack::PushL(dialStatus); - call1.Dial(dialStatus, number); - ASSERT_EQUALS(WaitForRequestWithTimeOut(dialStatus, ETimeVeryLong), KErrNone, - _L("RCall::Dial timed-out")); - // Check Dial request completes with an error - ASSERT_TRUE(dialStatus.Int() != KErrNone, - _L("RCall::Dial did not return KErrNone")); - - //////////////////////////////////////////////////////////////// - // TEST END - //////////////////////////////////////////////////////////////// - - StartCleanup(); - - // hang up the active call - TCoreEtelRequestStatus hangUpStatus (call1,&RCall::HangUpCancel); - CleanupStack::PushL(hangUpStatus); - call1.HangUp(hangUpStatus); - WaitForRequestWithTimeOut(hangUpStatus, ETimeMedium); - - //Pop - // dialStatus - // hangUpStatus - CleanupStack::PopAndDestroy(2,&dialStatus); - - return TestStepResult(); - } - -TPtrC CCTSYIntegrationTestCallControl0005::GetTestStepName() -/** - * @return The test step name. - */ - { - return _L("CCTSYIntegrationTestCallControl0005"); - } - - - -CCTSYIntegrationTestCallControl0006::CCTSYIntegrationTestCallControl0006(CEtelSessionMgr& aEtelSessionMgr) - : CCTSYIntegrationTestCallControlBase(aEtelSessionMgr) -/** - * Constructor. - */ - { - SetTestStepName(CCTSYIntegrationTestCallControl0006::GetTestStepName()); - } - -CCTSYIntegrationTestCallControl0006::~CCTSYIntegrationTestCallControl0006() -/** - * Destructor. - */ - { - } - -TVerdict CCTSYIntegrationTestCallControl0006::doTestStepL() -/** - * @SYMTestCaseID BA-CTSY-INT-CCON-0006 - * @SYMFssID BA/CTSY/CCON-0006 - * @SYMTestCaseDesc Dial when no network is present - * @SYMTestPriority High - * @SYMTestActions RCall::Dial - * @SYMTestExpectedResults Pass - KErrGsmOfflineOpNotAllowed returned. - * @SYMTestType CIT - * @SYMTestCaseDependencies live/manual - * - * Reason for test: Verify error is returned on attempt to dial. - * - * @return - TVerdict code - */ - { - - //////////////////////////////////////////////////////////////// - // SET UP - //////////////////////////////////////////////////////////////// - RMobilePhone& phone = iEtelSessionMgr.GetPhoneL(KMainServer,KMainPhone); - - // Check phone supports KCapsVoice. - // Get Voice line 1 - RMobileLine& voiceLine = iEtelSessionMgr.GetLineL(KMainServer, KMainPhone, KVoiceLine); - // Get call 1 - RMobileCall& call1 = iEtelSessionMgr.GetCallL(KMainServer, KMainPhone, KVoiceLine, KCall1); - - RLine::TCaps lineCaps; - CHECK_EQUALS_L(voiceLine.GetCaps(lineCaps), KErrNone, - _L("RMobileLine::GetCaps returned an error")); - CHECK_BITS_SET_L(lineCaps.iFlags, RLine::KCapsVoice, KNoUnwantedBits, - _L("RLine::GetCaps returned wrong caps")); - - //////////////////////////////////////////////////////////////// - // SET UP END - //////////////////////////////////////////////////////////////// - - StartTest(); - - //////////////////////////////////////////////////////////////// - // TEST START - //////////////////////////////////////////////////////////////// - - // Remove aerial from phone. - - // Check RMobilePhone::GetNetworkRegistrationStatus returns one of ENotRegisteredNoService | ENotRegisteredSearching - RMobilePhone::TMobilePhoneRegistrationStatus registrationStatus; - TExtEtelRequestStatus getNWRegistraionStatusStatus(phone,EMobilePhoneGetNetworkRegistrationStatus); - CleanupStack::PushL(getNWRegistraionStatusStatus); - phone.GetNetworkRegistrationStatus(getNWRegistraionStatusStatus,registrationStatus); - ASSERT_EQUALS(WaitForRequestWithTimeOut(getNWRegistraionStatusStatus, ETimeMedium), KErrNone, - _L("RMobilePhone::GetNetworkRegistrationStatus timed out")); - ASSERT_EQUALS(getNWRegistraionStatusStatus.Int(), KErrNone, - _L("RMobilePhone::GetNetworkRegistrationStatus returned an error")); - ASSERT_TRUE(((registrationStatus == RMobilePhone::ENotRegisteredNoService) || (registrationStatus ==RMobilePhone::ENotRegisteredSearching)), - _L("RMobilePhone::GetNetworkRegistrationStatus did not set the registration status to ENotRegisteredNoService | ENotRegisteredSearching")); - - // Dial a number. - TCoreEtelRequestStatus dialStatus(call1, &RCall::DialCancel); - CleanupStack::PushL(dialStatus); - TPtrC number; - ASSERT_TRUE(GetStringFromConfig(KIniVoiceNumSection, KIniVoiceNumber1, number) != EFalse, - _L("GetStringFromConfig did not complete as expected")); - call1.Dial(dialStatus, number); - ASSERT_EQUALS(WaitForRequestWithTimeOut(dialStatus, ETimeLong), KErrNone, - _L("RCall::Dial timed-out")); - - // Check KErrGsmOfflineOpNotAllowed or KErrGsmNoService is returned. - ASSERT_TRUE( ((dialStatus.Int() == KErrGsmOfflineOpNotAllowed) || (dialStatus.Int() == KErrGsmNoService) ), - _L("RCall::Dial did not return KErrGsmOfflineOpNotAllowed nor KErrGsmNoService")); - - //////////////////////////////////////////////////////////////// - // TEST END - //////////////////////////////////////////////////////////////// - - StartCleanup(); - - // hang up the active call - TCoreEtelRequestStatus hangUpStatus (call1,&RCall::HangUpCancel); - CleanupStack::PushL(hangUpStatus); - call1.HangUp(hangUpStatus); - WaitForRequestWithTimeOut(hangUpStatus, ETimeMedium); - - // Pop - // getNWRegistraionStatusStatus - // dialStatus - // hangUpStatus - CleanupStack::PopAndDestroy(3, &getNWRegistraionStatusStatus); - - return TestStepResult(); - } - -TPtrC CCTSYIntegrationTestCallControl0006::GetTestStepName() -/** - * @return The test step name. - */ - { - return _L("CCTSYIntegrationTestCallControl0006"); - } - - - -CCTSYIntegrationTestCallControl0007::CCTSYIntegrationTestCallControl0007(CEtelSessionMgr& aEtelSessionMgr) - : CCTSYIntegrationTestCallControlBase(aEtelSessionMgr) -/** - * Constructor. - */ - { - SetTestStepName(CCTSYIntegrationTestCallControl0007::GetTestStepName()); - } - -CCTSYIntegrationTestCallControl0007::~CCTSYIntegrationTestCallControl0007() -/** - * Destructor. - */ - { - } - -TVerdict CCTSYIntegrationTestCallControl0007::doTestStepL() -/** - * @SYMTestCaseID BA-CTSY-INT-CCON-0007 - * @SYMFssID BA/CTSY/CCON-0007 - * @SYMTestCaseDesc Make a voice call to remote party that is engaged. - * @SYMTestPriority High - * @SYMTestActions RMobileLine::NotifyMobileLineStatusChange, RMobileCall::GetMobileCallStatus, RCall::NotifyStatusChange, RMobileCall::NotifyMobileCallStatusChange, RLine::GetStatus, RMobileLine::GetMobileLineStatus, RCall::GetStatus, RCall::Dial - * @SYMTestExpectedResults Pass - Dialling to a busy number fails. - * @SYMTestType CIT - * @SYMTestCaseDependencies live/automatic - * - * Reason for test: Verify dialling fails and line returns to idle. - * - * @return - TVerdict code - */ - { - - //////////////////////////////////////////////////////////////// - // SET UP - //////////////////////////////////////////////////////////////// - RMobilePhone& phone = iEtelSessionMgr.GetPhoneL(KMainServer,KMainPhone); - - // Get Voice line 1 - RMobileLine& voiceLine = iEtelSessionMgr.GetLineL(KMainServer, KMainPhone, KVoiceLine); - // Get call 1 - RMobileCall& call1 = iEtelSessionMgr.GetCallL(KMainServer, KMainPhone, KVoiceLine, KCall1); - - // Call TNetworkTsyTestHelper::WaitForRegisteredOnHomeNetworkL - CHECK_EQUALS_L(iNetworkTestHelper.WaitForRegisteredOnHomeNetworkL(phone), KErrNone, _L("TNetworkTsyTestHelper::WaitForRegisteredOnHomeNetworkL returned with an error")); - - //////////////////////////////////////////////////////////////// - // SET UP END - //////////////////////////////////////////////////////////////// - - StartTest(); - - //////////////////////////////////////////////////////////////// - // TEST START - //////////////////////////////////////////////////////////////// - - // post notifier for RCall::NotifyStatusChange - RCall::TStatus callStatus; - TCoreEtelRequestStatus notifyCallStatusChangeStatus (call1,&RCall::NotifyStatusChangeCancel); - CleanupStack::PushL(notifyCallStatusChangeStatus); - call1.NotifyStatusChange(notifyCallStatusChangeStatus,callStatus); - - // post a notifier for RMobileCall::NotifyMobileCallStatusChange - RMobileCall::TMobileCallStatus mobileCallStatus; - TExtEtelRequestStatus notifyMobileCallChangeStatus(call1, EMobileCallNotifyMobileCallStatusChange); - CleanupStack::PushL(notifyMobileCallChangeStatus); - call1.NotifyMobileCallStatusChange(notifyMobileCallChangeStatus, mobileCallStatus); - - // post a notifier for RLine::NotifyStatusChange - RCall::TStatus lineStatus; - TCoreEtelRequestStatus notifyStatusChangeStatus (voiceLine,&RLine::NotifyStatusChangeCancel); - CleanupStack::PushL(notifyStatusChangeStatus); - voiceLine.NotifyStatusChange(notifyStatusChangeStatus,lineStatus); - - // post a notifier for RMobileLine::NotifyMobileLineStatusChange - RMobileCall::TMobileCallStatus mobileLineStatus; - TExtEtelRequestStatus notifyMobileLineChangeStatus(voiceLine, EMobileLineNotifyMobileLineStatusChange); - CleanupStack::PushL(notifyMobileLineChangeStatus); - voiceLine.NotifyMobileLineStatusChange(notifyMobileLineChangeStatus, mobileLineStatus); - - // Set RPS to simulate an engaged remote party. - TPtrC number; - ASSERT_TRUE(GetStringFromConfig(KIniVoiceNumSection, KIniVoiceNumber1, number) != EFalse, - _L("GetStringFromConfig did not complete as expected")); - RPSDialNumberL(number,EVoiceLine); - - // Dial RPS. - TPtrC engagedNumber; - GetRPSNumber(EVoiceLine,engagedNumber); //this will return KIniVoiceNumber2 if not using RPS, - //This should be the phone which is engaged, if testing manually. - TCoreEtelRequestStatus dialStatus(call1, &RCall::DialCancel); - CleanupStack::PushL(dialStatus); - call1.Dial(dialStatus, engagedNumber); - - // === Check call status === - - // Check RCall::NotifyStatusChange completes with EStatusDialling. - RCall::TStatus expectedCallStatus = RCall::EStatusDialling; - const TInt expectedStatus = KErrNone; - iCallControlTestHelper.WaitForCallNotifyStatusChange(call1, - notifyCallStatusChangeStatus, - callStatus, - expectedCallStatus, - expectedStatus); - - // Check RMobileCall::NotifyMobileCallStatusChange completes with EStatusDialling. - RMobileCall::TMobileCallStatus expectedMobileCallStatus = RMobileCall::EStatusDialling; - iCallControlTestHelper.WaitForMobileCallNotifyMobileCallStatusChange(call1, - notifyMobileCallChangeStatus, - mobileCallStatus, - expectedMobileCallStatus, - expectedStatus); - - - // === Check line status === - - // Check RLine::NotifyStatusChange completes with EStatusDialling. - RCall::TStatus expectedLineStatus = RCall::EStatusDialling; - iCallControlTestHelper.WaitForLineNotifyStatusChange(voiceLine, - notifyStatusChangeStatus, - lineStatus, - expectedLineStatus, - expectedStatus); - - // Check RLine::GetStatus returns EStatusDialling - ASSERT_EQUALS(voiceLine.GetStatus(lineStatus), KErrNone, - _L("RLine::GetStatus returned an error")); - ASSERT_EQUALS(lineStatus, RCall::EStatusDialling, - _L("RLine::GetStatus did not return EStatusDialling as expected")); - - // Check RMobileLine::NotifyMobileLineStatusChange completes with with EStatusDialling . - expectedMobileCallStatus = RMobileCall::EStatusDialling; - iCallControlTestHelper.WaitForMobileLineNotifyMobileLineStatusChange(voiceLine, - notifyMobileLineChangeStatus, - mobileLineStatus, - expectedMobileCallStatus, - expectedStatus); - - // Check RMobileLine::GetMobileLineStatus returns EStatusDialling - ASSERT_EQUALS(voiceLine.GetMobileLineStatus(mobileLineStatus), KErrNone, - _L("RMobileLine::GetMobileLineStatus returned an error")); - ASSERT_EQUALS(mobileLineStatus, RMobileCall::EStatusDialling, - _L("RMobileLine::GetMobileLineStatus did not set the status to EStatusDialling")); - - // Check dial fails because line is engaged. - ASSERT_EQUALS(WaitForRequestWithTimeOut(dialStatus, ETimeLong), KErrNone, - _L("RCall::Dial timed-out")); - ASSERT_TRUE(dialStatus.Int() != KErrNone, - _L("RCall::Dial Should have failed because engaged")); - - // === Check line goes back to idle === - // post notifier for RLine::NotifyStatusChange - voiceLine.NotifyStatusChange(notifyStatusChangeStatus,lineStatus); - call1.NotifyStatusChange(notifyCallStatusChangeStatus,callStatus); - voiceLine.NotifyMobileLineStatusChange(notifyMobileCallChangeStatus, mobileCallStatus); - - // Check RLine::NotifyStatusChange completes with RCall::EStatusIdle - expectedLineStatus = RCall::EStatusIdle; - ERR_PRINTF2(_L("$CTSYKnownFailure: defect id = %d"), 10065); - iCallControlTestHelper.WaitForLineNotifyStatusChange(voiceLine, - notifyStatusChangeStatus, - lineStatus, - expectedLineStatus, - expectedStatus); - - // Check RLine::GetStatus returns RCall::EStatusIdle - ASSERT_EQUALS(voiceLine.GetStatus(lineStatus), KErrNone, - _L("RLine::GetStatus returned an error")); - ASSERT_EQUALS(lineStatus, RCall::EStatusIdle, - _L("RLine::GetStatus did not return EStatusIdle as expected")); - - // === Check call status goes back to idle === - - // Check RCall::NotifyStatusChange completes with EStatusIdle. - expectedCallStatus = RCall::EStatusIdle; - iCallControlTestHelper.WaitForCallNotifyStatusChange(call1, - notifyCallStatusChangeStatus, - callStatus, - expectedCallStatus, - expectedStatus); - // Check RCall::GetStatus returns EStatusIdle. - ASSERT_EQUALS(call1.GetStatus(callStatus), KErrNone, - _L("RCall::GetStatus returned an error")); - ASSERT_EQUALS(callStatus, RCall::EStatusIdle, - _L("RCall::GetStatus did not return EStatusIdle")); - - // Check RMobileCall::NotifyMobileCallStatusChange completes with EStatusIdle. - expectedMobileCallStatus = RMobileCall::EStatusIdle; - ERR_PRINTF2(_L("$CTSYKnownFailure: defect id = %d"), 10066); - iCallControlTestHelper.WaitForMobileCallNotifyMobileCallStatusChange(call1, - notifyMobileCallChangeStatus, - mobileCallStatus, - expectedMobileCallStatus, - expectedStatus); - - // Check RMobileCall::GetMobileCallStatus returns status of EStatusIdle. - ASSERT_EQUALS(call1.GetMobileCallStatus(mobileCallStatus), KErrNone, - _L("RMobileCall::GetMobileCallStatus returned an error")); - ASSERT_EQUALS(mobileCallStatus, RMobileCall::EStatusIdle, - _L("RMobileCall::GetMobileCallStatus did not return EStatusIdle")); - - - //////////////////////////////////////////////////////////////// - // TEST END - //////////////////////////////////////////////////////////////// - - StartCleanup(); - - // tell RPS to hang up after 0 seconds - RPSHangupL(EVoiceLine,0); - - // Pop - // notifyCallStatusChangeStatus - // notifyMobileCallChangeStatus - // notifyStatusChangeStatus - // notifyMobileLineChangeStatus - // dialStatus - CleanupStack::PopAndDestroy(5, ¬ifyCallStatusChangeStatus); - - return TestStepResult(); - } - -TPtrC CCTSYIntegrationTestCallControl0007::GetTestStepName() -/** - * @return The test step name. - */ - { - return _L("CCTSYIntegrationTestCallControl0007"); - } - - - -CCTSYIntegrationTestCallControl0008::CCTSYIntegrationTestCallControl0008(CEtelSessionMgr& aEtelSessionMgr) - : CCTSYIntegrationTestCallControlBase(aEtelSessionMgr) -/** - * Constructor. - */ - { - SetTestStepName(CCTSYIntegrationTestCallControl0008::GetTestStepName()); - } - -CCTSYIntegrationTestCallControl0008::~CCTSYIntegrationTestCallControl0008() -/** - * Destructor. - */ - { - } - -TVerdict CCTSYIntegrationTestCallControl0008::doTestStepL() -/** - * @SYMTestCaseID BA-CTSY-INT-CCON-0008 - * @SYMFssID BA/CTSY/CCON-0008 - * @SYMTestCaseDesc Make a call to an international number - * @SYMTestPriority High - * @SYMTestActions RLine::NotifyStatusChange, RLine::GetStatus, RMobileLine::NotifyMobileLineStatusChange, RMobileLine::GetMobileLineStatus, RCall::NotifyStatusChange, RCall::GetStatus, RMobileCall::NotifyMobileCallStatusChange, RMobileCall::GetMobileCallStatus, RCall::HangUp, RCall::GetInfo, RMobileCall::GetMobileCallInfo - * @SYMTestExpectedResults Pass - Can dial international numbers - * @SYMTestType CIT - * @SYMTestCaseDependencies live/automatic - * - * Reason for test: Verify international number can be dialled and line and call statuses are correct. - * - * @return - TVerdict code - */ - { - - //////////////////////////////////////////////////////////////// - // SET UP - //////////////////////////////////////////////////////////////// - - - // Get Voice line 1 - RMobileLine& voiceLine = iEtelSessionMgr.GetLineL(KMainServer, KMainPhone, KVoiceLine); - // Get call 1 - RMobileCall& call1 = iEtelSessionMgr.GetCallL(KMainServer, KMainPhone, KVoiceLine, KCall1); - - // Call TNetworkTsyTestHelper::WaitForRegisteredOnHomeNetworkL - RMobilePhone& phone = iEtelSessionMgr.GetPhoneL(KMainServer,KMainPhone); - CHECK_EQUALS_L(iNetworkTestHelper.WaitForRegisteredOnHomeNetworkL(phone), KErrNone, - _L("TNetworkTsyTestHelper::WaitForRegisteredOnHomeNetworkL returned with an error")); - - //////////////////////////////////////////////////////////////// - // SET UP END - //////////////////////////////////////////////////////////////// - - StartTest(); - - //////////////////////////////////////////////////////////////// - // TEST START - //////////////////////////////////////////////////////////////// - - - // === Check call status === - - // Check RCall::GetStatus returns EStatusIdle or EStatusUnknown. - RCall::TStatus callStatus; - ASSERT_EQUALS(call1.GetStatus(callStatus), KErrNone, - _L("RCall::GetStatus returned an error")); - ASSERT_TRUE(callStatus == RCall::EStatusIdle || - callStatus == RCall::EStatusUnknown, - _L("RCall::GetStatus did not set call status EStatusIdle or EStatusUnknown as expected")); - - // Check RMobileCall::GetMobileCallStatus returns status of EStatusIdle or EStatusUnknown. - RMobileCall::TMobileCallStatus mobileCallStatus; - ASSERT_EQUALS(call1.GetMobileCallStatus(mobileCallStatus), KErrNone, - _L("RMobileCall::GetMobileCallStatus returned an error")); - ASSERT_TRUE(mobileCallStatus == RMobileCall::EStatusUnknown || - mobileCallStatus == RMobileCall::EStatusIdle, - _L("RMobileCall::GetMobileCallStatus did not set call status EStatusIdle or EStatusUnknown as expected")); - - // === Check line status === - - // Check RLine::GetStatus returns EStatusIdle or EStatusUnknown. - ASSERT_EQUALS(voiceLine.GetStatus(callStatus), KErrNone, - _L("RLine::GetStatus returned an error")); - ASSERT_TRUE(callStatus == RCall::EStatusUnknown || - callStatus == RCall::EStatusIdle, - _L("RLine::GetStatus did not set call status to EStatusIdle or EStatusUnknown as expected")); - - // Check RMobileLine::GetMobileLineStatus returns EStatusIdle or EStatusUnknown. - ASSERT_EQUALS(voiceLine.GetMobileLineStatus(mobileCallStatus), KErrNone, - _L("RMobileLine::GetMobileLineStatus returned an error")); - ASSERT_TRUE(mobileCallStatus == RMobileCall::EStatusUnknown || - mobileCallStatus == RMobileCall::EStatusIdle, - _L("RMobileLine::GetMobileLineStatus did not set status to EStatusIdle or EStatusUnknown")); - - // post notifier for RCall::NotifyStatusChange - TCoreEtelRequestStatus notifyCallStatusChangeStatus (call1,&RCall::NotifyStatusChangeCancel); - CleanupStack::PushL(notifyCallStatusChangeStatus); - call1.NotifyStatusChange(notifyCallStatusChangeStatus,callStatus); - - // post a notifier for RMobileCall::NotifyMobileCallStatusChange - TExtEtelRequestStatus notifyMobileCallChangeStatus(call1, EMobileCallNotifyMobileCallStatusChange); - CleanupStack::PushL(notifyMobileCallChangeStatus); - call1.NotifyMobileCallStatusChange(notifyMobileCallChangeStatus, mobileCallStatus); - - // post a notifier for RLine::NotifyStatusChange - TCoreEtelRequestStatus notifyStatusChangeStatus (voiceLine,&RLine::NotifyStatusChangeCancel); - CleanupStack::PushL(notifyStatusChangeStatus); - RCall::TStatus lineStatus; - voiceLine.NotifyStatusChange(notifyStatusChangeStatus,lineStatus); - - // post a notifier for RMobileLine::NotifyMobileLineStatusChange - TExtEtelRequestStatus notifyMobileLineChangeStatus(voiceLine, EMobileLineNotifyMobileLineStatusChange); - CleanupStack::PushL(notifyMobileLineChangeStatus); - RMobileCall::TMobileCallStatus mobileLineStatus; - voiceLine.NotifyMobileLineStatusChange(notifyMobileLineChangeStatus, mobileLineStatus); - - - // Dial a number with a + prefix where remote party answers. - TPtrC number; - GetStringFromConfig(KIniVoiceNumSection, KIniVoiceNumber2, number); - TCoreEtelRequestStatus dialStatus(call1, &RCall::DialCancel); - CleanupStack::PushL(dialStatus); - call1.Dial(dialStatus, number); - ASSERT_EQUALS(WaitForRequestWithTimeOut(dialStatus, ETimeMedium), KErrNone, - _L("RCall::Dial timed-out")); - ASSERT_EQUALS(dialStatus.Int(), KErrNone, - _L("RCall::Dial returned with an error")); - - // === Check call status === - - // Check RCall::NotifyStatusChange completes with EStatusDialling -> EStatusConnecting -> EStatusConnected. - RCall::TStatus expectedCallStatus = RCall::EStatusDialling; - const TInt expectedStatus = KErrNone; - iCallControlTestHelper.WaitForCallNotifyStatusChange(call1, - notifyCallStatusChangeStatus, - callStatus, - expectedCallStatus, - expectedStatus); - - call1.NotifyStatusChange(notifyCallStatusChangeStatus,callStatus); - expectedCallStatus = RCall::EStatusConnecting; - iCallControlTestHelper.WaitForCallNotifyStatusChange(call1, - notifyCallStatusChangeStatus, - callStatus, - expectedCallStatus, - expectedStatus); - - call1.NotifyStatusChange(notifyCallStatusChangeStatus,callStatus); - expectedCallStatus = RCall::EStatusConnected; - iCallControlTestHelper.WaitForCallNotifyStatusChange(call1, - notifyCallStatusChangeStatus, - callStatus, - expectedCallStatus, - expectedStatus); - - // Check RCall::GetStatus returns EStatusConnected. - ASSERT_EQUALS(call1.GetStatus(callStatus), KErrNone, - _L("RCall::GetStatus returned an error")); - ASSERT_EQUALS(callStatus, RCall::EStatusConnected, - _L("RCall::GetStatus did not set call status EStatusConnected as expected")); - - // Check RMobileCall::NotifyMobileCallStatusChange completes with EStatusDialling -> EStatusConnecting -> EStatusConnected. - RMobileCall::TMobileCallStatus expectedMobileCallStatus = RMobileCall::EStatusDialling; - iCallControlTestHelper.WaitForMobileCallNotifyMobileCallStatusChange(call1, - notifyMobileCallChangeStatus, - mobileCallStatus, - expectedMobileCallStatus, - expectedStatus); - expectedMobileCallStatus = RMobileCall::EStatusConnecting; - call1.NotifyMobileCallStatusChange(notifyMobileCallChangeStatus, mobileCallStatus); - iCallControlTestHelper.WaitForMobileCallNotifyMobileCallStatusChange(call1, - notifyMobileCallChangeStatus, - mobileCallStatus, - expectedMobileCallStatus, - expectedStatus); - expectedMobileCallStatus = RMobileCall::EStatusConnected; - call1.NotifyMobileCallStatusChange(notifyMobileCallChangeStatus, mobileCallStatus); - iCallControlTestHelper.WaitForMobileCallNotifyMobileCallStatusChange(call1, - notifyMobileCallChangeStatus, - mobileCallStatus, - expectedMobileCallStatus, - expectedStatus); - - // Check RMobileCall::GetMobileCallStatus returns status of EStatusConnected. - ASSERT_EQUALS(call1.GetMobileCallStatus(mobileCallStatus), KErrNone, - _L("RMobileCall::GetMobileCallStatus returned an error")); - ASSERT_EQUALS(mobileCallStatus, RMobileCall::EStatusConnected, - _L("RMobileCall::GetMobileCallStatus did not set call status EStatusConnected as expected")); - - // === Check line status === - - // Check RLine::NotifyStatusChange completes with EStatusDialling -> EStatusConnecting -> EStatusConnected. - RCall::TStatus expectedLineStatus = RCall::EStatusDialling; - iCallControlTestHelper.WaitForLineNotifyStatusChange(voiceLine, - notifyStatusChangeStatus, - lineStatus, - expectedLineStatus, - expectedStatus); - expectedLineStatus = RCall::EStatusConnecting; - voiceLine.NotifyStatusChange(notifyStatusChangeStatus, lineStatus); - iCallControlTestHelper.WaitForLineNotifyStatusChange(voiceLine, - notifyStatusChangeStatus, - lineStatus, - expectedLineStatus, - expectedStatus); - expectedLineStatus = RCall::EStatusConnected; - voiceLine.NotifyStatusChange(notifyStatusChangeStatus, lineStatus); - iCallControlTestHelper.WaitForLineNotifyStatusChange(voiceLine, - notifyStatusChangeStatus, - lineStatus, - expectedLineStatus, - expectedStatus); - - // Check RLine::GetStatus returns EStatusConnected - ASSERT_EQUALS(voiceLine.GetStatus(callStatus), KErrNone, - _L("RLine::GetStatus returned an error")); - ASSERT_EQUALS(callStatus, RCall::EStatusConnected, - _L("RLine::GetStatus did not set call status to EStatusConnected as expected")); - - // Check RMobileLine::NotifyMobileLineStatusChange completes with with EStatusDialling -> EStatusConnecting -> EStatusConnected. - RMobileCall::TMobileCallStatus expectedMobileLineStatus = RMobileCall::EStatusDialling; - iCallControlTestHelper.WaitForMobileLineNotifyMobileLineStatusChange(voiceLine, - notifyMobileLineChangeStatus, - mobileLineStatus, - expectedMobileLineStatus, - expectedStatus); - - voiceLine.NotifyMobileLineStatusChange(notifyMobileLineChangeStatus, mobileLineStatus); - expectedMobileLineStatus = RMobileCall::EStatusConnecting; - iCallControlTestHelper.WaitForMobileLineNotifyMobileLineStatusChange(voiceLine, - notifyMobileLineChangeStatus, - mobileLineStatus, - expectedMobileLineStatus, - expectedStatus); - - voiceLine.NotifyMobileLineStatusChange(notifyMobileLineChangeStatus, mobileLineStatus); - expectedMobileLineStatus = RMobileCall::EStatusConnected; - iCallControlTestHelper.WaitForMobileLineNotifyMobileLineStatusChange(voiceLine, - notifyMobileLineChangeStatus, - mobileLineStatus, - expectedMobileLineStatus, - expectedStatus); - - // Check RMobileLine::GetMobileLineStatus returns EStatusConnected - ASSERT_EQUALS(voiceLine.GetMobileLineStatus(mobileCallStatus), KErrNone, - _L("RMobileLine::GetMobileLineStatus returned an error")); - ASSERT_EQUALS(mobileCallStatus, RMobileCall::EStatusConnected, - _L("RMobileLine::GetMobileLineStatus did not set status to EStatusConnected")); - - // === Check call info === - - // Wait 3 seconds, so that the call duration will be more then 0 seconds - User::After(3*KOneSecond); - - // Check RCall::GetInfo returns valid call name. - // Check RCall::GetInfo returns valid voice line name. - // Check RCall::GetInfo returns call status of EStatusConnected. - // Check RCall::GetInfo returns call duration of > 0. - RCall::TCallInfo callInfo; - ASSERT_EQUALS(call1.GetInfo(callInfo), KErrNone, - _L("RCall::GetInfo returned an error")); - ASSERT_TRUE(callInfo.iCallName.Length() >0, - _L("RCall::GetInfo returned an invalid name")); - ASSERT_TRUE(callInfo.iLineName.Length() >0, - _L("RCall::GetInfo returned an invalid Line name")); - ASSERT_EQUALS(callInfo.iStatus, RCall::EStatusConnected, - _L("RCall::GetInfo wrong iStatus, should be EStatusIdle")); - ASSERT_TRUE(callInfo.iDuration.Int()>0, - _L("RCall::GetInfo wrong iDuration, should be > 0")); - - - - // Check RMobileCall::GetMobileCallInfo returns iValid > 0. - // Check RMobileCall::GetMobileCallInfo returns data for attributes marked as valid in iValid. - // Check RMobileCall::GetMobileCallInfo returns valid line name. - // Check RMobileCall::GetMobileCallInfo returns correct number for iDialledParty.iTelNumber - // Check RMobileCall::GetMobileCallInfo returns iDialledParty.iTypeOfNumber of EInternationalNumber - RMobileCall::TMobileCallInfoV1 mobileCallInfo; - RMobileCall::TMobileCallInfoV1Pckg callInfoPckg(mobileCallInfo); - ASSERT_EQUALS(call1.GetMobileCallInfo(callInfoPckg), KErrNone, - _L("RMobileCall::GetMobileCallInfo returned an error")); - ASSERT_TRUE(mobileCallInfo.iValid > 0, - _L("RMobileCall::GetMobileCallInfo returned unexpected flags in iValid")); - ASSERT_TRUE(mobileCallInfo.iCallName.Length() >0, - _L("RMobileCall::GetMobileCallInfo returned an invalid callName")); - ASSERT_TRUE(mobileCallInfo.iLineName.Length() >0, - _L("RMobileCall::GetMobileCallInfo returned an invalid line name")); - ASSERT_EQUALS_DES16(mobileCallInfo.iDialledParty.iTelNumber, number, - _L("RMobileCall::GetMobileCallInfo returned incorrect number for iDialledParty.iTelNumber")); - ASSERT_EQUALS(mobileCallInfo.iDialledParty.iTypeOfNumber, RMobilePhone::EInternationalNumber, - _L("RMobileCall::GetMobileCallInfo returned incorrect type for iDialledParty.iTypeOfNumber")); - - - //------------ Post Notifiers ---------------------------- - call1.NotifyStatusChange(notifyCallStatusChangeStatus,callStatus); - call1.NotifyMobileCallStatusChange(notifyMobileCallChangeStatus, mobileCallStatus); - voiceLine.NotifyStatusChange(notifyStatusChangeStatus,lineStatus); - voiceLine.NotifyMobileLineStatusChange(notifyMobileLineChangeStatus, mobileLineStatus); - - - // Hang up. - TCoreEtelRequestStatus hangUpStatus (call1,&RCall::HangUpCancel); - CleanupStack::PushL(hangUpStatus); - call1.HangUp(hangUpStatus); - ASSERT_EQUALS(WaitForRequestWithTimeOut(hangUpStatus, ETimeMedium), KErrNone, - _L("RCall::HangUp timed-out")); - ASSERT_EQUALS(hangUpStatus.Int(), KErrNone, - _L("RCall::HangUp returned an error")); - - // === Check call status === - - // Check RCall::NotifyStatusChange completes with EStatusHangingUp -> EStatusIdle. - expectedCallStatus = RCall::EStatusHangingUp; - const TInt wantedStatus = KErrNone; - iCallControlTestHelper.WaitForCallNotifyStatusChange(call1, - notifyStatusChangeStatus, - callStatus, - expectedCallStatus, - wantedStatus); - - call1.NotifyStatusChange(notifyStatusChangeStatus,callStatus); - expectedCallStatus = RCall::EStatusIdle; - iCallControlTestHelper.WaitForCallNotifyStatusChange(call1, - notifyStatusChangeStatus, - callStatus, - expectedCallStatus, - wantedStatus); - - // Check RCall::GetStatus returns EStatusIdle. - ASSERT_EQUALS(call1.GetStatus(callStatus),KErrNone, - _L("RCall::GetStatus returned an error")); - ASSERT_EQUALS(callStatus, RCall::EStatusIdle, - _L("RCall::GetStatus returned an unexpected call status")); - - // Check RMobileCall::NotifyMobileCallStatusChange completes with EStatusDisconnecting -> EStatusIdle. - expectedMobileCallStatus = RMobileCall::EStatusDisconnecting; - iCallControlTestHelper.WaitForMobileCallNotifyMobileCallStatusChange(call1, - notifyMobileCallChangeStatus, - mobileCallStatus, - expectedMobileCallStatus, - wantedStatus); - - call1.NotifyMobileCallStatusChange(notifyMobileCallChangeStatus, mobileCallStatus); - expectedMobileCallStatus = RMobileCall::EStatusIdle; - iCallControlTestHelper.WaitForMobileCallNotifyMobileCallStatusChange(call1, - notifyMobileCallChangeStatus, - mobileCallStatus, - expectedMobileCallStatus, - wantedStatus); - - // Check RMobileCall::GetMobileCallStatus returns status of EStatusIdle. - ASSERT_EQUALS(call1.GetMobileCallStatus(mobileCallStatus), KErrNone, - _L("RMobileCall::GetMobileStatus returned an error")); - ASSERT_EQUALS(mobileCallStatus, RMobileCall::EStatusIdle, - _L("RMobileCall::GetMobileStatus did not return a status EStatusIdle")); - - // === Check line status === - - // Check RMobileLine::NotifyStatusChange completes with EStatusHangingUp -> EStatusIdle - expectedLineStatus = RCall::EStatusHangingUp; - iCallControlTestHelper.WaitForLineNotifyStatusChange(voiceLine, - notifyStatusChangeStatus, - lineStatus, - expectedLineStatus, - expectedStatus); - - voiceLine.NotifyStatusChange(notifyStatusChangeStatus,lineStatus); - expectedLineStatus = RCall::EStatusIdle; - iCallControlTestHelper.WaitForLineNotifyStatusChange(voiceLine, - notifyStatusChangeStatus, - lineStatus, - expectedLineStatus, - expectedStatus); - voiceLine.NotifyStatusChange(notifyStatusChangeStatus,lineStatus); - // Check RMobileLine::GetStatus returns EStatusIdle - ASSERT_EQUALS(voiceLine.GetStatus(lineStatus), KErrNone, - _L("RLine::GetStatus returned an error")); - ASSERT_EQUALS(lineStatus, RCall::EStatusIdle, - _L("RLine::GetStatus did not return EStatusIdle as expected")); - - // Check RMobileLine::NotifyMobileLineStatusChange completes with with EStatusDisconnecting -> EStatusIdle - expectedMobileLineStatus = RMobileCall::EStatusDisconnecting; - iCallControlTestHelper.WaitForMobileLineNotifyMobileLineStatusChange(voiceLine, - notifyMobileLineChangeStatus, - mobileLineStatus, - expectedMobileLineStatus, - expectedStatus); - - voiceLine.NotifyMobileLineStatusChange(notifyMobileLineChangeStatus, mobileLineStatus); - expectedMobileLineStatus = RMobileCall::EStatusIdle; - iCallControlTestHelper.WaitForMobileLineNotifyMobileLineStatusChange(voiceLine, - notifyMobileLineChangeStatus, - mobileLineStatus, - expectedMobileLineStatus, - expectedStatus); - // Check RMobileLine::GetMobileLineStatus returns EStatusIdle - ASSERT_EQUALS(voiceLine.GetMobileLineStatus(mobileLineStatus), KErrNone, - _L("RMobileLine::GetMobileLineStatus returned an error")); - ASSERT_EQUALS(mobileLineStatus, RMobileCall::EStatusIdle, - _L("RMobileLine::GetMobileLineStatus did not set the status to EStatusIdle")); - - - //////////////////////////////////////////////////////////////// - // TEST END - //////////////////////////////////////////////////////////////// - - StartCleanup(); - - // Pop: - // hangUpStatus - // dialStatus - // notifyMobileLineChangeStatus - // notifyStatusChangeStatus - // notifyMobileCallChangeStatus - // notifyCallStatusChangeStatus - CleanupStack::PopAndDestroy(6,¬ifyCallStatusChangeStatus); - - return TestStepResult(); - } - -TPtrC CCTSYIntegrationTestCallControl0008::GetTestStepName() -/** - * @return The test step name. - */ - { - return _L("CCTSYIntegrationTestCallControl0008"); - } - - - -CCTSYIntegrationTestCallControl0009::CCTSYIntegrationTestCallControl0009(CEtelSessionMgr& aEtelSessionMgr) - : CCTSYIntegrationTestCallControlBase(aEtelSessionMgr) -/** - * Constructor. - */ - { - SetTestStepName(CCTSYIntegrationTestCallControl0009::GetTestStepName()); - } - -CCTSYIntegrationTestCallControl0009::~CCTSYIntegrationTestCallControl0009() -/** - * Destructor. - */ - { - } - -TVerdict CCTSYIntegrationTestCallControl0009::doTestStepL() -/** - * @SYMTestCaseID BA-CTSY-INT-CCON-0009 - * @SYMFssID BA/CTSY/CCON-0009 - * @SYMTestCaseDesc Dial and hang up a call specifying valid call parameters 01. - * @SYMTestPriority High - * @SYMTestActions RMobileCall::NotifyMobileCallStatusChange, RCall::NotifyStatusChange, RLine::NotifyStatusChange, RMobileLine::GetMobileLineStatus, RMobileLine::NotifyMobileLineStatusChange, RLine::GetStatus, RMobileCall::GetMobileCallStatus, RCall::GetCallParams, RCall::GetStatus, RCall::GetCallParams, RCall::GetStatus, RCall::HangUp - * @SYMTestExpectedResults Pass - Call connects and call parameters are correct. - * @SYMTestType CIT - * @SYMTestCaseDependencies live/automatic - * - * Reason for test: Verify call and line statuses and call params are correct. - * - * @return - TVerdict code - */ - { - - //////////////////////////////////////////////////////////////// - // SET UP - //////////////////////////////////////////////////////////////// - - RMobilePhone& phone = iEtelSessionMgr.GetPhoneL(KMainServer,KMainPhone); - - // Check phone supports KCapsVoice - - // Get Voice line 1 - RMobileLine& voiceLine = iEtelSessionMgr.GetLineL(KMainServer, KMainPhone, KVoiceLine); - // Get call 1 - RMobileCall& call1 = iEtelSessionMgr.GetCallL(KMainServer, KMainPhone, KVoiceLine, KCall1); - - RLine::TCaps lineCaps; - CHECK_EQUALS_L(voiceLine.GetCaps(lineCaps), KErrNone, - _L("RMobileLine::GetCaps returned an error")); - CHECK_BITS_SET_L(lineCaps.iFlags, RLine::KCapsVoice, KNoUnwantedBits, - _L("RLine::GetCaps returned wrong caps")); - - // Call TNetworkTsyTestHelper::WaitForRegisteredOnHomeNetworkL - CHECK_EQUALS_L(iNetworkTestHelper.WaitForRegisteredOnHomeNetworkL(phone), KErrNone, _L("TNetworkTsyTestHelper::WaitForRegisteredOnHomeNetworkL returned with an error")); - - //////////////////////////////////////////////////////////////// - // SET UP END - //////////////////////////////////////////////////////////////// - - StartTest(); - - //////////////////////////////////////////////////////////////// - // TEST START - //////////////////////////////////////////////////////////////// - - - // Populate RMobileCall::TMobileCallParamsV1 with - RMobileCall::TMobileCallParamsV1 mobileCallParams; - // ?iSpeakerControl = EMonitorSpeakerControlAlwaysOff - mobileCallParams.iSpeakerControl = RCall::EMonitorSpeakerControlAlwaysOff; - // ?iSpeakerVolume = EMonitorSpeakerVolumeOff - mobileCallParams.iSpeakerVolume = RCall::EMonitorSpeakerVolumeOff; - // ?iInterval = 0x01 - mobileCallParams.iInterval = 0x01; - // ?iWaitForDialTone = EDialToneWait - mobileCallParams.iWaitForDialTone = RCall::EDialToneWait; - // ?iIdRestrict = EIdRestrictDefault - mobileCallParams.iIdRestrict = RMobileCall::EIdRestrictDefault; - // ?iExplicitInvoke = TRUE - mobileCallParams.iCug.iExplicitInvoke = TRUE ; - // ?iCugIndex = 0x0000 - mobileCallParams.iCug.iCugIndex = 0x0000; - // ?iSuppressOA = FALSE - mobileCallParams.iCug.iSuppressOA = FALSE; - // ?iSuppressPrefCug = TRUE - mobileCallParams.iCug.iSuppressPrefCug = TRUE; - // ?iAutoRedial = TRUE - mobileCallParams.iAutoRedial = TRUE; - - RMobileCall::TMobileCallParamsV1Pckg mobileCallParamsPkg(mobileCallParams); - - //=========Post Notifiers=============== - - // post notifier for RCall::NotifyStatusChange - TCoreEtelRequestStatus notifyCallStatusChangeStatus (call1,&RCall::NotifyStatusChangeCancel); - CleanupStack::PushL(notifyCallStatusChangeStatus); - RCall::TStatus callStatus; - call1.NotifyStatusChange(notifyCallStatusChangeStatus,callStatus); - - // post a notifier for RMobileCall::NotifyMobileCallStatusChange - TExtEtelRequestStatus notifyMobileCallChangeStatus(call1, EMobileCallNotifyMobileCallStatusChange); - CleanupStack::PushL(notifyMobileCallChangeStatus); - RMobileCall::TMobileCallStatus mobileCallStatus; - call1.NotifyMobileCallStatusChange(notifyMobileCallChangeStatus, mobileCallStatus); - - // post a notifier for RLine::NotifyStatusChange - TCoreEtelRequestStatus notifyStatusChangeStatus (voiceLine,&RLine::NotifyStatusChangeCancel); - CleanupStack::PushL(notifyStatusChangeStatus); - RCall::TStatus lineStatus; - voiceLine.NotifyStatusChange(notifyStatusChangeStatus,lineStatus); - - // post a notifier for RMobileLine::NotifyMobileLineStatusChange - TExtEtelRequestStatus notifyMobileLineChangeStatus(voiceLine, EMobileLineNotifyMobileLineStatusChange); - CleanupStack::PushL(notifyMobileLineChangeStatus); - RMobileCall::TMobileCallStatus mobileLineStatus; - voiceLine.NotifyMobileLineStatusChange(notifyMobileLineChangeStatus, mobileLineStatus); - - - //======= Dial a number which answers using call params. - TCoreEtelRequestStatus dialStatus(call1, &RCall::DialCancel); - CleanupStack::PushL(dialStatus); - TPtrC number; - ASSERT_TRUE(GetStringFromConfig(KIniVoiceNumSection, KIniVoiceNumber1, number) != EFalse, - _L("GetStringFromConfig did not complete as expected")); - call1.Dial(dialStatus,mobileCallParamsPkg, number); - // Wait for completion. - ASSERT_EQUALS(WaitForRequestWithTimeOut(dialStatus, ETimeMedium), KErrNone, - _L("RCall::Dial timed-out")); - ASSERT_EQUALS(dialStatus.Int(), KErrNone, - _L("RCall::Dial returned an error")); - - const TInt expectedStatus = KErrNone; - - // === Check line status === - - // Check RLine::NotifyStatusChange completes with EStatusDialling -> EStatusConnecting -> EStatusConnected. - RCall::TStatus expectedLineStatus = RCall::EStatusDialling; - iCallControlTestHelper.WaitForLineNotifyStatusChange(voiceLine, - notifyStatusChangeStatus, - lineStatus, - expectedLineStatus, - expectedStatus); - - expectedLineStatus = RCall::EStatusConnecting; - voiceLine.NotifyStatusChange(notifyStatusChangeStatus, lineStatus); - iCallControlTestHelper.WaitForLineNotifyStatusChange(voiceLine, - notifyStatusChangeStatus, - lineStatus, - expectedLineStatus, - expectedStatus); - - expectedLineStatus = RCall::EStatusConnected; - voiceLine.NotifyStatusChange(notifyStatusChangeStatus, lineStatus); - iCallControlTestHelper.WaitForLineNotifyStatusChange(voiceLine, - notifyStatusChangeStatus, - lineStatus, - expectedLineStatus, - expectedStatus); - - // Check RLine::GetStatus returns EStatusConnected - ASSERT_EQUALS(voiceLine.GetStatus(lineStatus), KErrNone, - _L("RLine::GetStatus returned an error")); - ASSERT_EQUALS(lineStatus, RCall::EStatusConnected, - _L("RLine::GetStatus did not set line status to EStatusConnected as expected")); - - // Check RMobileLine::NotifyMobileLineStatusChange completes with with EStatusDialling -> EStatusConnecting -> EStatusConnected. - RMobileCall::TMobileCallStatus expectedMobileLineStatus = RMobileCall::EStatusDialling; - iCallControlTestHelper.WaitForMobileLineNotifyMobileLineStatusChange(voiceLine, - notifyMobileLineChangeStatus, - mobileLineStatus, - expectedMobileLineStatus, - expectedStatus); - - voiceLine.NotifyMobileLineStatusChange(notifyMobileLineChangeStatus, mobileLineStatus); - expectedMobileLineStatus = RMobileCall::EStatusConnecting; - iCallControlTestHelper.WaitForMobileLineNotifyMobileLineStatusChange(voiceLine, - notifyMobileLineChangeStatus, - mobileLineStatus, - expectedMobileLineStatus, - expectedStatus); - - voiceLine.NotifyMobileLineStatusChange(notifyMobileLineChangeStatus, mobileLineStatus); - expectedMobileLineStatus = RMobileCall::EStatusConnected; - iCallControlTestHelper.WaitForMobileLineNotifyMobileLineStatusChange(voiceLine, - notifyMobileLineChangeStatus, - mobileLineStatus, - expectedMobileLineStatus, - expectedStatus); - - // Check RMobileLine::GetMobileLineStatus returns EStatusConnected - ASSERT_EQUALS(voiceLine.GetMobileLineStatus(mobileLineStatus), KErrNone, - _L("RMobileLine::GetMobileLineStatus returned an error")); - ASSERT_EQUALS(mobileLineStatus, RMobileCall::EStatusConnected, - _L("RMobileLine::GetMobileLineStatus did not set status to EStatusConnected")); - - // === Check call status === - - // Check RCall::NotifyStatusChange completes with EStatusDialling -> EStatusConnecting -> EStatusConnected. - RCall::TStatus expectedCallStatus = RCall::EStatusDialling; - iCallControlTestHelper.WaitForCallNotifyStatusChange(call1, - notifyCallStatusChangeStatus, - callStatus, - expectedCallStatus, - expectedStatus); - - call1.NotifyStatusChange(notifyCallStatusChangeStatus,callStatus); - expectedCallStatus = RCall::EStatusConnecting; - iCallControlTestHelper.WaitForCallNotifyStatusChange(call1, - notifyCallStatusChangeStatus, - callStatus, - expectedCallStatus, - expectedStatus); - DEBUG_PRINTF1(_L("3")); - call1.NotifyStatusChange(notifyCallStatusChangeStatus,callStatus); - expectedCallStatus = RCall::EStatusConnected; - iCallControlTestHelper.WaitForCallNotifyStatusChange(call1, - notifyCallStatusChangeStatus, - callStatus, - expectedCallStatus, - expectedStatus); - - // Check RCall::GetStatus returns EStatusConnected. - ASSERT_EQUALS(voiceLine.GetStatus(callStatus), KErrNone, - _L("RLine::GetStatus returned an error")); - ASSERT_EQUALS(callStatus, RCall::EStatusConnected, - _L("RLine::GetStatus did not return EStatusConnected as expected")); - DEBUG_PRINTF1(_L("5 check for mobile call dialling")); - // Check RMobileCall::NotifyMobileCallStatusChange completes with EStatusDialling -> EStatusConnecting -> EStatusConnected. - RMobileCall::TMobileCallStatus expectedMobileCallStatus = RMobileCall::EStatusDialling; - iCallControlTestHelper.WaitForMobileCallNotifyMobileCallStatusChange(call1, - notifyMobileCallChangeStatus, - mobileCallStatus, - expectedMobileCallStatus, - expectedStatus); - - expectedMobileCallStatus = RMobileCall::EStatusConnecting; - call1.NotifyMobileCallStatusChange(notifyMobileCallChangeStatus, mobileCallStatus); - iCallControlTestHelper.WaitForMobileCallNotifyMobileCallStatusChange(call1, - notifyMobileCallChangeStatus, - mobileCallStatus, - expectedMobileCallStatus, - expectedStatus); - - expectedMobileCallStatus = RMobileCall::EStatusConnected; - call1.NotifyMobileCallStatusChange(notifyMobileCallChangeStatus, mobileCallStatus); - iCallControlTestHelper.WaitForMobileCallNotifyMobileCallStatusChange(call1, - notifyMobileCallChangeStatus, - mobileCallStatus, - expectedMobileCallStatus, - expectedStatus); - - // Check RMobileCall::GetMobileCallStatus returns status of EStatusConnected. - ASSERT_EQUALS(call1.GetMobileCallStatus(mobileCallStatus), KErrNone, - _L("RMobileCall::GetMobileCallStatus returned an error")); - ASSERT_EQUALS(mobileCallStatus, RMobileCall::EStatusConnected, - _L("RMobileCall::GetMobileCallStatus did not set call status EStatusConnected as expected")); - - - // === Get call parameters. === - RMobileCall::TMobileCallParamsV1 checkParams; - RMobileCall::TMobileCallParamsV1Pckg checkParamsPkg(checkParams); - call1.GetCallParams(checkParamsPkg); - - // Check RCall::GetCallParams with aParams as a packaged RMobileCall::TMobileCallParamsV1 returns same iSpeakerControl as that used for Dial. - ASSERT_EQUALS(checkParams.iSpeakerControl, mobileCallParams.iSpeakerControl, - _L("RCall::GetCallParams did not return the same iSpeakerControl as that used for Dial")); - // Check RCall::GetCallParams with aParams as a packaged RMobileCall::TMobileCallParamsV1 returns same iSpeakerVolume as that used for Dial. - ASSERT_EQUALS(checkParams.iSpeakerVolume, mobileCallParams.iSpeakerVolume, - _L("RCall::GetCallParams did not return the same iSpeakerVolume as that used for Dial")); - // Check RCall::GetCallParams with aParams as a packaged RMobileCall::TMobileCallParamsV1 returns same iInterval as that used for Dial. - ASSERT_EQUALS(checkParams.iInterval, mobileCallParams.iInterval, - _L("RCall::GetCallParams did not return the same iInterval as that used for Dial")); - // Check RCall::GetCallParams with aParams as a packaged RMobileCall::TMobileCallParamsV1 returns same iWaitForDialTone as that used for Dial. - ASSERT_EQUALS(checkParams.iWaitForDialTone, mobileCallParams.iWaitForDialTone, - _L("RCall::GetCallParams did not return the same iWaitForDialTone as that used for Dial")); - // Check RCall::GetCallParams with aParams as a packaged RMobileCall::TMobileCallParamsV1 returns same iIdRestrict as that used for Dial. - ASSERT_EQUALS(checkParams.iIdRestrict, mobileCallParams.iIdRestrict, - _L("RCall::GetCallParams did not return the same iIdRestrict as that used for Dial")); - // Check RCall::GetCallParams with aParams as a packaged RMobileCall::TMobileCallParamsV1 returns same iCug.iExplicitInvoke as that used for Dial. - ASSERT_EQUALS(checkParams.iCug.iExplicitInvoke, mobileCallParams.iCug.iExplicitInvoke, - _L("RCall::GetCallParams did not return the same iCug.iExplicitInvoke as that used for Dial")); - // Check RCall::GetCallParams with aParams as a packaged RMobileCall::TMobileCallParamsV1 returns same iCug.iCugIndex as that used for Dial. - ASSERT_EQUALS(checkParams.iCug.iCugIndex, mobileCallParams.iCug.iCugIndex, - _L("RCall::GetCallParams did not return the same iCug.iCugIndex as that used for Dial")); - // Check RCall::GetCallParams with aParams as a packaged RMobileCall::TMobileCallParamsV1 returns same iCug.iSuppressPrefCug as that used for Dial. - ASSERT_EQUALS(checkParams.iCug.iSuppressPrefCug, mobileCallParams.iCug.iSuppressPrefCug, - _L("RCall::GetCallParams did not return the same iCug.iSuppressPrefCug as that used for Dial")); - // Check RCall::GetCallParams with aParams as a packaged RMobileCall::TMobileCallParamsV1 returns same iCug.iSuppressOA as that used for Dial. - ASSERT_EQUALS(checkParams.iCug.iSuppressOA, mobileCallParams.iCug.iSuppressOA, - _L("RCall::GetCallParams did not return the same iCug.iSuppressOA as that used for Dial")); - // Check RCall::GetCallParams with aParams as a packaged RMobileCall::TMobileCallParamsV1 returns same iAutoRedial as that used for Dial. - ASSERT_EQUALS(checkParams.iAutoRedial, mobileCallParams.iAutoRedial, - _L("RCall::GetCallParams did not return the same iAutoRedial as that used for Dial")); - - - //------------ Post Notifiers ---------------------------- - call1.NotifyStatusChange(notifyCallStatusChangeStatus,callStatus); - call1.NotifyMobileCallStatusChange(notifyMobileCallChangeStatus, mobileCallStatus); - voiceLine.NotifyStatusChange(notifyStatusChangeStatus,lineStatus); - voiceLine.NotifyMobileLineStatusChange(notifyMobileLineChangeStatus, mobileLineStatus); - - // Hang up call. - TCoreEtelRequestStatus hangUpStatus (call1,&RCall::HangUpCancel); - CleanupStack::PushL(hangUpStatus); - call1.HangUp(hangUpStatus); - ASSERT_EQUALS(WaitForRequestWithTimeOut(hangUpStatus, ETimeMedium), KErrNone, - _L("RCall::HangUp timed-out")); - ASSERT_EQUALS(hangUpStatus.Int(), KErrNone, - _L("RCall::HangUp returned an error")); - - // === Check call status === - - // Check RCall::NotifyStatusChange completes with EStatusHangingUp -> EStatusIdle - expectedCallStatus = RCall::EStatusHangingUp; - const TInt wantedStatus = KErrNone; - iCallControlTestHelper.WaitForCallNotifyStatusChange(call1, - notifyStatusChangeStatus, - callStatus, - expectedCallStatus, - wantedStatus); - - call1.NotifyStatusChange(notifyStatusChangeStatus,callStatus); - expectedCallStatus = RCall::EStatusIdle; - iCallControlTestHelper.WaitForCallNotifyStatusChange(call1, - notifyStatusChangeStatus, - callStatus, - expectedCallStatus, - wantedStatus); - // Check RCall::GetStatus returns EStatusIdle. - ASSERT_EQUALS(call1.GetStatus(callStatus),KErrNone, - _L("RCall::GetStatus returned an error")); - ASSERT_EQUALS(callStatus, RCall::EStatusIdle, - _L("RCall::GetStatus returned an unexpected call status")); - - // Check RMobileCall::NotifyMobileCallStatusChange completes with EStatusDisconnecting -> EStatusIdle - expectedMobileCallStatus = RMobileCall::EStatusDisconnecting; - iCallControlTestHelper.WaitForMobileCallNotifyMobileCallStatusChange(call1, - notifyMobileCallChangeStatus, - mobileCallStatus, - expectedMobileCallStatus, - wantedStatus); - - call1.NotifyMobileCallStatusChange(notifyMobileCallChangeStatus, mobileCallStatus); - expectedMobileCallStatus = RMobileCall::EStatusIdle; - iCallControlTestHelper.WaitForMobileCallNotifyMobileCallStatusChange(call1, - notifyMobileCallChangeStatus, - mobileCallStatus, - expectedMobileCallStatus, - wantedStatus); - - // Check RMobileCall::GetMobileCallStatus returns status of EStatusIdle. - ASSERT_EQUALS(call1.GetMobileCallStatus(mobileCallStatus), KErrNone, - _L("RMobileCall::GetMobileStatus returned an error")); - ASSERT_EQUALS(mobileCallStatus, RMobileCall::EStatusIdle, - _L("RMobileCall::GetMobileStatus did not return a status EStatusIdle")); - - // === Check line status === - - // Check RLine::NotifyStatusChange completes with EStatusHangingUp -> EStatusIdle - DEBUG_PRINTF1(_L("12")); - expectedLineStatus = RCall::EStatusHangingUp; - iCallControlTestHelper.WaitForLineNotifyStatusChange(voiceLine, - notifyStatusChangeStatus, - lineStatus, - expectedLineStatus, - expectedStatus); - - voiceLine.NotifyStatusChange(notifyStatusChangeStatus,lineStatus); - expectedLineStatus = RCall::EStatusIdle; - iCallControlTestHelper.WaitForLineNotifyStatusChange(voiceLine, - notifyStatusChangeStatus, - lineStatus, - expectedLineStatus, - expectedStatus); - - // Check RLine::GetStatus returns EStatusIdle - ASSERT_EQUALS(voiceLine.GetStatus(lineStatus), KErrNone, - _L("RLine::GetStatus returned an error")); - ASSERT_EQUALS(lineStatus, RCall::EStatusIdle, - _L("RLine::GetStatus did not return EStatusIdle as expected")); - - // Check RMobileLine::NotifyMobileLineStatusChange completes with with EStatusDisconnecting -> EStatusIdle - DEBUG_PRINTF1(_L("13")); - expectedMobileLineStatus = RMobileCall::EStatusDisconnecting; - iCallControlTestHelper.WaitForMobileLineNotifyMobileLineStatusChange(voiceLine, - notifyMobileLineChangeStatus, - mobileLineStatus, - expectedMobileLineStatus, - expectedStatus); - - voiceLine.NotifyMobileLineStatusChange(notifyMobileLineChangeStatus, mobileLineStatus); - expectedMobileLineStatus = RMobileCall::EStatusIdle; - iCallControlTestHelper.WaitForMobileLineNotifyMobileLineStatusChange(voiceLine, - notifyMobileLineChangeStatus, - mobileLineStatus, - expectedMobileLineStatus, - expectedStatus); - - // Check RMobileLine::GetMobileLineStatus returns EStatusIdle - ASSERT_EQUALS(voiceLine.GetMobileLineStatus(mobileLineStatus), KErrNone, - _L("RMobileLine::GetMobileLineStatus returned an error")); - ASSERT_EQUALS(mobileLineStatus, RMobileCall::EStatusIdle, - _L("RMobileLine::GetMobileLineStatus did not set the status to EStatusIdle")); - - - //////////////////////////////////////////////////////////////// - // TEST END - //////////////////////////////////////////////////////////////// - - StartCleanup(); - - // Pop - // notifyCallStatusChangeStatus - // notifyMobileCallChangeStatus - // notifyStatusChangeStatus - // notifyMobileLineChangeStatus - // dialStatus - // hangUpStatus - CleanupStack::PopAndDestroy(6,¬ifyCallStatusChangeStatus); - - return TestStepResult(); - } - -TPtrC CCTSYIntegrationTestCallControl0009::GetTestStepName() -/** - * @return The test step name. - */ - { - return _L("CCTSYIntegrationTestCallControl0009"); - } - - - -CCTSYIntegrationTestCallControl0010::CCTSYIntegrationTestCallControl0010(CEtelSessionMgr& aEtelSessionMgr) - : CCTSYIntegrationTestCallControlBase(aEtelSessionMgr) -/** - * Constructor. - */ - { - SetTestStepName(CCTSYIntegrationTestCallControl0010::GetTestStepName()); - } - -CCTSYIntegrationTestCallControl0010::~CCTSYIntegrationTestCallControl0010() -/** - * Destructor. - */ - { - } - -TVerdict CCTSYIntegrationTestCallControl0010::doTestStepL() -/** - * @SYMTestCaseID BA-CTSY-INT-CCON-0010 - * @SYMFssID BA/CTSY/CCON-0010 - * @SYMTestCaseDesc Dial and hang up a call specifying valid call parameters 02. - * @SYMTestPriority High - * @SYMTestActions RMobileCall::NotifyMobileCallStatusChange, RCall::NotifyStatusChange, RLine::NotifyStatusChange, RMobileLine::GetMobileLineStatus, RMobileLine::NotifyMobileLineStatusChange, RLine::GetStatus, RMobileCall::GetMobileCallStatus, RCall::GetCallParams, RCall::GetStatus, RCall::GetCallParams, RCall::GetStatus, RCall::HangUp - * @SYMTestExpectedResults Pass - Call connects and call parameters are correct. - * @SYMTestType CIT - * @SYMTestCaseDependencies live/automatic - * - * Reason for test: Verify call and line statuses and call params are correct. - * - * @return - TVerdict code - */ - { - - //////////////////////////////////////////////////////////////// - // SET UP - //////////////////////////////////////////////////////////////// - - - // Check phone supports KCapsVoice - // Get Voice line 1 - RMobileLine& voiceLine = iEtelSessionMgr.GetLineL(KMainServer, KMainPhone, KVoiceLine); - // Get call 1 - RMobileCall& call1 = iEtelSessionMgr.GetCallL(KMainServer, KMainPhone, KVoiceLine, KCall1); - - RLine::TCaps lineCaps; - CHECK_EQUALS_L(voiceLine.GetCaps(lineCaps), KErrNone, - _L("RMobileLine::GetCaps returned an error")); - CHECK_BITS_SET_L(lineCaps.iFlags, RLine::KCapsVoice, KNoUnwantedBits, - _L("RLine::GetCaps returned wrong caps")); - - // Call TNetworkTsyTestHelper::WaitForRegisteredOnHomeNetworkL - RMobilePhone& phone = iEtelSessionMgr.GetPhoneL(KMainServer,KMainPhone); - CHECK_EQUALS_L(iNetworkTestHelper.WaitForRegisteredOnHomeNetworkL(phone), KErrNone, - _L("TNetworkTsyTestHelper::WaitForRegisteredOnHomeNetworkL returned with an error")); - - //////////////////////////////////////////////////////////////// - // SET UP END - //////////////////////////////////////////////////////////////// - - StartTest(); - - //////////////////////////////////////////////////////////////// - // TEST START - //////////////////////////////////////////////////////////////// - - - // Populate RMobileCall::TMobileCallParamsV1 with - RMobileCall::TMobileCallParamsV1 mobileCallParams; - RMobileCall::TMobileCallParamsV1Pckg mobileCallParamsPkg(mobileCallParams); - // ?iSpeakerControl = EMonitorSpeakerControlAlwaysOff - mobileCallParams.iSpeakerControl = RCall::EMonitorSpeakerControlAlwaysOff; - // ?iSpeakerVolume = EMonitorSpeakerVolumeHigh - mobileCallParams.iSpeakerVolume = RCall::EMonitorSpeakerVolumeHigh; - // ?iInterval = 0x02 - mobileCallParams.iInterval = 0x02; - // ?iWaitForDialTone = EDialToneWait - mobileCallParams.iWaitForDialTone = RCall::EDialToneWait; - // ?iIdRestrict = ESendMyId - mobileCallParams.iIdRestrict = RMobileCall::ESendMyId; - // ?iExplicitInvoke = FALSE - mobileCallParams.iCug.iExplicitInvoke = FALSE ; - // ?iCugIndex = 0x0000 - mobileCallParams.iCug.iCugIndex = 0x0000; - // ?iSuppressOA = FALSE - mobileCallParams.iCug.iSuppressOA = FALSE; - // ?iSuppressPrefCug = FALSE - mobileCallParams.iCug.iSuppressPrefCug = FALSE; - // ?iAutoRedial = FALSE - mobileCallParams.iAutoRedial = FALSE; - - //=========Post Notifiers=============== - - // post notifier for RCall::NotifyStatusChange - TCoreEtelRequestStatus notifyCallStatusChangeStatus (call1,&RCall::NotifyStatusChangeCancel); - CleanupStack::PushL(notifyCallStatusChangeStatus); - RCall::TStatus callStatus; - call1.NotifyStatusChange(notifyCallStatusChangeStatus,callStatus); - - // post a notifier for RMobileCall::NotifyMobileCallStatusChange - TExtEtelRequestStatus notifyMobileCallChangeStatus(call1, EMobileCallNotifyMobileCallStatusChange); - CleanupStack::PushL(notifyMobileCallChangeStatus); - RMobileCall::TMobileCallStatus mobileCallStatus; - call1.NotifyMobileCallStatusChange(notifyMobileCallChangeStatus, mobileCallStatus); - - // post a notifier for RLine::NotifyStatusChange - TCoreEtelRequestStatus notifyStatusChangeStatus (voiceLine,&RLine::NotifyStatusChangeCancel); - CleanupStack::PushL(notifyStatusChangeStatus); - RCall::TStatus lineStatus; - voiceLine.NotifyStatusChange(notifyStatusChangeStatus,lineStatus); - - // post a notifier for RMobileLine::NotifyMobileLineStatusChange - TExtEtelRequestStatus notifyMobileLineChangeStatus(voiceLine, EMobileLineNotifyMobileLineStatusChange); - CleanupStack::PushL(notifyMobileLineChangeStatus); - RMobileCall::TMobileCallStatus mobileLineStatus; - voiceLine.NotifyMobileLineStatusChange(notifyMobileLineChangeStatus, mobileLineStatus); - - // Dial a number which answers using call params. - TCoreEtelRequestStatus dialStatus(call1, &RCall::DialCancel); - CleanupStack::PushL(dialStatus); - TPtrC number; - ASSERT_TRUE(GetStringFromConfig(KIniVoiceNumSection, KIniVoiceNumber1, number) != EFalse, - _L("GetStringFromConfig did not complete as expected")); - call1.Dial(dialStatus,mobileCallParamsPkg, number); - // Wait for completion. - ASSERT_EQUALS(WaitForRequestWithTimeOut(dialStatus, ETimeMedium), KErrNone, - _L("RCall::Dial timed-out")); - ASSERT_EQUALS(dialStatus.Int(), KErrNone, - _L("RCall::Dial returned an error")); - - - // === Check line status === - - const TInt expectedStatus = KErrNone; - - // === Check line status === - - // Check RLine::NotifyStatusChange completes with EStatusDialling -> EStatusConnecting -> EStatusConnected. - RCall::TStatus expectedLineStatus = RCall::EStatusDialling; - iCallControlTestHelper.WaitForLineNotifyStatusChange(voiceLine, - notifyStatusChangeStatus, - lineStatus, - expectedLineStatus, - expectedStatus); - - expectedLineStatus = RCall::EStatusConnecting; - voiceLine.NotifyStatusChange(notifyStatusChangeStatus, lineStatus); - iCallControlTestHelper.WaitForLineNotifyStatusChange(voiceLine, - notifyStatusChangeStatus, - lineStatus, - expectedLineStatus, - expectedStatus); - - expectedLineStatus = RCall::EStatusConnected; - voiceLine.NotifyStatusChange(notifyStatusChangeStatus, lineStatus); - iCallControlTestHelper.WaitForLineNotifyStatusChange(voiceLine, - notifyStatusChangeStatus, - lineStatus, - expectedLineStatus, - expectedStatus); - - // Check RLine::GetStatus returns EStatusConnected - ASSERT_EQUALS(voiceLine.GetStatus(lineStatus), KErrNone, - _L("RLine::GetStatus returned an error")); - ASSERT_EQUALS(lineStatus, RCall::EStatusConnected, - _L("RLine::GetStatus did not set line status to EStatusConnected as expected")); - - // Check RMobileLine::NotifyMobileLineStatusChange completes with with EStatusDialling -> EStatusConnecting -> EStatusConnected. - RMobileCall::TMobileCallStatus expectedMobileLineStatus = RMobileCall::EStatusDialling; - iCallControlTestHelper.WaitForMobileLineNotifyMobileLineStatusChange(voiceLine, - notifyMobileLineChangeStatus, - mobileLineStatus, - expectedMobileLineStatus, - expectedStatus); - - voiceLine.NotifyMobileLineStatusChange(notifyMobileLineChangeStatus, mobileLineStatus); - expectedMobileLineStatus = RMobileCall::EStatusConnecting; - iCallControlTestHelper.WaitForMobileLineNotifyMobileLineStatusChange(voiceLine, - notifyMobileLineChangeStatus, - mobileLineStatus, - expectedMobileLineStatus, - expectedStatus); - - voiceLine.NotifyMobileLineStatusChange(notifyMobileLineChangeStatus, mobileLineStatus); - expectedMobileLineStatus = RMobileCall::EStatusConnected; - iCallControlTestHelper.WaitForMobileLineNotifyMobileLineStatusChange(voiceLine, - notifyMobileLineChangeStatus, - mobileLineStatus, - expectedMobileLineStatus, - expectedStatus); - - // Check RMobileLine::GetMobileLineStatus returns EStatusConnected - ASSERT_EQUALS(voiceLine.GetMobileLineStatus(mobileLineStatus), KErrNone, - _L("RMobileLine::GetMobileLineStatus returned an error")); - ASSERT_EQUALS(mobileLineStatus, RMobileCall::EStatusConnected, - _L("RMobileLine::GetMobileLineStatus did not set status to EStatusConnected")); - - // === Check call status === - - // Check RCall::NotifyStatusChange completes with EStatusDialling -> EStatusConnecting -> EStatusConnected. - RCall::TStatus expectedCallStatus = RCall::EStatusDialling; - iCallControlTestHelper.WaitForCallNotifyStatusChange(call1, - notifyCallStatusChangeStatus, - callStatus, - expectedCallStatus, - expectedStatus); - - call1.NotifyStatusChange(notifyCallStatusChangeStatus,callStatus); - expectedCallStatus = RCall::EStatusConnecting; - iCallControlTestHelper.WaitForCallNotifyStatusChange(call1, - notifyCallStatusChangeStatus, - callStatus, - expectedCallStatus, - expectedStatus); - - call1.NotifyStatusChange(notifyCallStatusChangeStatus,callStatus); - expectedCallStatus = RCall::EStatusConnected; - iCallControlTestHelper.WaitForCallNotifyStatusChange(call1, - notifyCallStatusChangeStatus, - callStatus, - expectedCallStatus, - expectedStatus); - - // Check RCall::GetStatus returns EStatusConnected. - ASSERT_EQUALS(voiceLine.GetStatus(callStatus), KErrNone, - _L("RLine::GetStatus returned an error")); - ASSERT_EQUALS(callStatus, RCall::EStatusConnected, - _L("RLine::GetStatus did not return EStatusConnected as expected")); - - // Check RMobileCall::NotifyMobileCallStatusChange completes with EStatusDialling -> EStatusConnecting -> EStatusConnected. - RMobileCall::TMobileCallStatus expectedMobileCallStatus = RMobileCall::EStatusDialling; - iCallControlTestHelper.WaitForMobileCallNotifyMobileCallStatusChange(call1, - notifyMobileCallChangeStatus, - mobileCallStatus, - expectedMobileCallStatus, - expectedStatus); - - expectedMobileCallStatus = RMobileCall::EStatusConnecting; - call1.NotifyMobileCallStatusChange(notifyMobileCallChangeStatus, mobileCallStatus); - iCallControlTestHelper.WaitForMobileCallNotifyMobileCallStatusChange(call1, - notifyMobileCallChangeStatus, - mobileCallStatus, - expectedMobileCallStatus, - expectedStatus); - - expectedMobileCallStatus = RMobileCall::EStatusConnected; - call1.NotifyMobileCallStatusChange(notifyMobileCallChangeStatus, mobileCallStatus); - iCallControlTestHelper.WaitForMobileCallNotifyMobileCallStatusChange(call1, - notifyMobileCallChangeStatus, - mobileCallStatus, - expectedMobileCallStatus, - expectedStatus); - - // Check RMobileCall::GetMobileCallStatus returns status of EStatusConnected. - ASSERT_EQUALS(call1.GetMobileCallStatus(mobileCallStatus), KErrNone, - _L("RMobileCall::GetMobileCallStatus returned an error")); - ASSERT_EQUALS(mobileCallStatus, RMobileCall::EStatusConnected, - _L("RMobileCall::GetMobileCallStatus did not set call status EStatusConnected as expected")); - - // === Get call parameters. === - RMobileCall::TMobileCallParamsV1 checkParams; - RMobileCall::TMobileCallParamsV1Pckg checkParamsPkg(checkParams); - call1.GetCallParams(checkParamsPkg); - - // Check RCall::GetCallParams with aParams as a packaged RMobileCall::TMobileCallParamsV1 returns same iSpeakerControl as that used for Dial. - ASSERT_EQUALS(checkParams.iSpeakerControl, mobileCallParams.iSpeakerControl, - _L("RCall::GetCallParams did not return the same iSpeakerControl as that used for Dial")); - // Check RCall::GetCallParams with aParams as a packaged RMobileCall::TMobileCallParamsV1 returns same iSpeakerVolume as that used for Dial. - ASSERT_EQUALS(checkParams.iSpeakerVolume, mobileCallParams.iSpeakerVolume, - _L("RCall::GetCallParams did not return the same iSpeakerVolume as that used for Dial")); - // Check RCall::GetCallParams with aParams as a packaged RMobileCall::TMobileCallParamsV1 returns same iInterval as that used for Dial. - ASSERT_EQUALS(checkParams.iInterval, mobileCallParams.iInterval, - _L("RCall::GetCallParams did not return the same iInterval as that used for Dial")); - // Check RCall::GetCallParams with aParams as a packaged RMobileCall::TMobileCallParamsV1 returns same iWaitForDialTone as that used for Dial. - ASSERT_EQUALS(checkParams.iWaitForDialTone, mobileCallParams.iWaitForDialTone, - _L("RCall::GetCallParams did not return the same iWaitForDialTone as that used for Dial")); - // Check RCall::GetCallParams with aParams as a packaged RMobileCall::TMobileCallParamsV1 returns same iIdRestrict as that used for Dial. - ASSERT_EQUALS(checkParams.iIdRestrict, mobileCallParams.iIdRestrict, - _L("RCall::GetCallParams did not return the same iIdRestrict as that used for Dial")); - // Check RCall::GetCallParams with aParams as a packaged RMobileCall::TMobileCallParamsV1 returns same iCug.iExplicitInvoke as that used for Dial. - ASSERT_EQUALS(checkParams.iCug.iExplicitInvoke, mobileCallParams.iCug.iExplicitInvoke, - _L("RCall::GetCallParams did not return the same iCug.iExplicitInvoke as that used for Dial")); - // Check RCall::GetCallParams with aParams as a packaged RMobileCall::TMobileCallParamsV1 returns same iCug.iCugIndex as that used for Dial. - ASSERT_EQUALS(checkParams.iCug.iCugIndex, mobileCallParams.iCug.iCugIndex, - _L("RCall::GetCallParams did not return the same iCug.iCugIndex as that used for Dial")); - // Check RCall::GetCallParams with aParams as a packaged RMobileCall::TMobileCallParamsV1 returns same iCug.iSuppressPrefCug as that used for Dial. - ASSERT_EQUALS(checkParams.iCug.iSuppressPrefCug, mobileCallParams.iCug.iSuppressPrefCug, - _L("RCall::GetCallParams did not return the same iCug.iSuppressPrefCug as that used for Dial")); - // Check RCall::GetCallParams with aParams as a packaged RMobileCall::TMobileCallParamsV1 returns same iCug.iSuppressOA as that used for Dial. - ASSERT_EQUALS(checkParams.iCug.iSuppressOA, mobileCallParams.iCug.iSuppressOA, - _L("RCall::GetCallParams did not return the same iCug.iSuppressOA as that used for Dial")); - // Check RCall::GetCallParams with aParams as a packaged RMobileCall::TMobileCallParamsV1 returns same iAutoRedial as that used for Dial. - ASSERT_EQUALS(checkParams.iAutoRedial, mobileCallParams.iAutoRedial, - _L("RCall::GetCallParams did not return the same iAutoRedial as that used for Dial")); - - //------------ Post Notifiers ---------------------------- - call1.NotifyStatusChange(notifyCallStatusChangeStatus,callStatus); - call1.NotifyMobileCallStatusChange(notifyMobileCallChangeStatus, mobileCallStatus); - voiceLine.NotifyStatusChange(notifyStatusChangeStatus,lineStatus); - voiceLine.NotifyMobileLineStatusChange(notifyMobileLineChangeStatus, mobileLineStatus); - - // Hang up call. - TCoreEtelRequestStatus hangUpStatus (call1,&RCall::HangUpCancel); - CleanupStack::PushL(hangUpStatus); - call1.HangUp(hangUpStatus); - ASSERT_EQUALS(WaitForRequestWithTimeOut(hangUpStatus, ETimeMedium), KErrNone, - _L("RCall::HangUp timed-out")); - ASSERT_EQUALS(hangUpStatus.Int(), KErrNone, - _L("RCall::HangUp returned an error")); - - // === Check call status === - - // Check RCall::NotifyStatusChange completes with EStatusHangingUp -> EStatusIdle - expectedCallStatus = RCall::EStatusHangingUp; - const TInt wantedStatus = KErrNone; - iCallControlTestHelper.WaitForCallNotifyStatusChange(call1, - notifyStatusChangeStatus, - callStatus, - expectedCallStatus, - wantedStatus); - - call1.NotifyStatusChange(notifyStatusChangeStatus,callStatus); - expectedCallStatus = RCall::EStatusIdle; - iCallControlTestHelper.WaitForCallNotifyStatusChange(call1, - notifyStatusChangeStatus, - callStatus, - expectedCallStatus, - wantedStatus); - // Check RCall::GetStatus returns EStatusIdle. - ASSERT_EQUALS(call1.GetStatus(callStatus),KErrNone, - _L("RCall::GetStatus returned an error")); - ASSERT_EQUALS(callStatus, RCall::EStatusIdle, - _L("RCall::GetStatus returned an unexpected call status")); - - // Check RMobileCall::NotifyMobileCallStatusChange completes with EStatusDisconnecting -> EStatusIdle - expectedMobileCallStatus = RMobileCall::EStatusDisconnecting; - iCallControlTestHelper.WaitForMobileCallNotifyMobileCallStatusChange(call1, - notifyMobileCallChangeStatus, - mobileCallStatus, - expectedMobileCallStatus, - wantedStatus); - - call1.NotifyMobileCallStatusChange(notifyMobileCallChangeStatus, mobileCallStatus); - expectedMobileCallStatus = RMobileCall::EStatusIdle; - iCallControlTestHelper.WaitForMobileCallNotifyMobileCallStatusChange(call1, - notifyMobileCallChangeStatus, - mobileCallStatus, - expectedMobileCallStatus, - wantedStatus); - - // Check RMobileCall::GetMobileCallStatus returns status of EStatusIdle. - ASSERT_EQUALS(call1.GetMobileCallStatus(mobileCallStatus), KErrNone, - _L("RMobileCall::GetMobileStatus returned an error")); - ASSERT_EQUALS(mobileCallStatus, RMobileCall::EStatusIdle, - _L("RMobileCall::GetMobileStatus did not return a status EStatusIdle")); - - // === Check line status === - - // Check RLine::NotifyStatusChange completes with EStatusHangingUp -> EStatusIdle - expectedLineStatus = RCall::EStatusHangingUp; - iCallControlTestHelper.WaitForLineNotifyStatusChange(voiceLine, - notifyStatusChangeStatus, - lineStatus, - expectedLineStatus, - expectedStatus); - - voiceLine.NotifyStatusChange(notifyStatusChangeStatus,lineStatus); - expectedLineStatus = RCall::EStatusIdle; - iCallControlTestHelper.WaitForLineNotifyStatusChange(voiceLine, - notifyStatusChangeStatus, - lineStatus, - expectedLineStatus, - expectedStatus); - - // Check RLine::GetStatus returns EStatusIdle - ASSERT_EQUALS(voiceLine.GetStatus(lineStatus), KErrNone, - _L("RLine::GetStatus returned an error")); - ASSERT_EQUALS(lineStatus, RCall::EStatusIdle, - _L("RLine::GetStatus did not return EStatusIdle as expected")); - - // Check RMobileLine::NotifyMobileLineStatusChange completes with with EStatusDisconnecting -> EStatusIdle - expectedMobileLineStatus = RMobileCall::EStatusDisconnecting; - iCallControlTestHelper.WaitForMobileLineNotifyMobileLineStatusChange(voiceLine, - notifyMobileLineChangeStatus, - mobileLineStatus, - expectedMobileLineStatus, - expectedStatus); - - voiceLine.NotifyMobileLineStatusChange(notifyMobileLineChangeStatus, mobileLineStatus); - expectedMobileLineStatus = RMobileCall::EStatusIdle; - iCallControlTestHelper.WaitForMobileLineNotifyMobileLineStatusChange(voiceLine, - notifyMobileLineChangeStatus, - mobileLineStatus, - expectedMobileLineStatus, - expectedStatus); - - // Check RMobileLine::GetMobileLineStatus returns EStatusIdle - ASSERT_EQUALS(voiceLine.GetMobileLineStatus(mobileLineStatus), KErrNone, - _L("RMobileLine::GetMobileLineStatus returned an error")); - ASSERT_EQUALS(mobileLineStatus, RMobileCall::EStatusIdle, - _L("RMobileLine::GetMobileLineStatus did not set the status to EStatusIdle")); - - - //////////////////////////////////////////////////////////////// - // TEST END - //////////////////////////////////////////////////////////////// - - StartCleanup(); - - // Pop - // notifyCallStatusChangeStatus - // notifyMobileCallChangeStatus - // notifyStatusChangeStatus - // notifyMobileLineChangeStatus - // dialStatus - // hangUpStatus - CleanupStack::PopAndDestroy(6,¬ifyCallStatusChangeStatus); - - return TestStepResult(); - } - -TPtrC CCTSYIntegrationTestCallControl0010::GetTestStepName() -/** - * @return The test step name. - */ - { - return _L("CCTSYIntegrationTestCallControl0010"); - } - - - -CCTSYIntegrationTestCallControl0011::CCTSYIntegrationTestCallControl0011(CEtelSessionMgr& aEtelSessionMgr) - : CCTSYIntegrationTestCallControlBase(aEtelSessionMgr) -/** - * Constructor. - */ - { - SetTestStepName(CCTSYIntegrationTestCallControl0011::GetTestStepName()); - } - -CCTSYIntegrationTestCallControl0011::~CCTSYIntegrationTestCallControl0011() -/** - * Destructor. - */ - { - } - -TVerdict CCTSYIntegrationTestCallControl0011::doTestStepL() -/** - * @SYMTestCaseID BA-CTSY-INT-CCON-0011 - * @SYMFssID BA/CTSY/CCON-0011 - * @SYMTestCaseDesc Dial and hang up a call specifying valid call parameters 03. - * @SYMTestPriority High - * @SYMTestActions RMobileCall::NotifyMobileCallStatusChange, RCall::NotifyStatusChange, RLine::NotifyStatusChange, RMobileLine::GetMobileLineStatus, RMobileLine::NotifyMobileLineStatusChange, RLine::GetStatus, RMobileCall::GetMobileCallStatus, RCall::GetCallParams, RCall::GetStatus, RCall::GetCallParams, RCall::GetStatus, RCall::HangUp - * @SYMTestExpectedResults Pass - Call connects and call parameters are correct. - * @SYMTestType CIT - * @SYMTestCaseDependencies live/automatic - * - * Reason for test: Verify call and line statuses and call params are correct. - * - * @return - TVerdict code - */ - { - - //////////////////////////////////////////////////////////////// - // SET UP - //////////////////////////////////////////////////////////////// - - - // Check phone supports KCapsVoice - // Get Voice line 1 - RMobileLine& voiceLine = iEtelSessionMgr.GetLineL(KMainServer, KMainPhone, KVoiceLine); - // Get call 1 - RMobileCall& call1 = iEtelSessionMgr.GetCallL(KMainServer, KMainPhone, KVoiceLine, KCall1); - - RLine::TCaps lineCaps; - CHECK_EQUALS_L(voiceLine.GetCaps(lineCaps), KErrNone, - _L("RMobileLine::GetCaps returned an error")); - CHECK_BITS_SET_L(lineCaps.iFlags, RLine::KCapsVoice, KNoUnwantedBits, - _L("RLine::GetCaps returned wrong caps")); - - // Call TNetworkTsyTestHelper::WaitForRegisteredOnHomeNetworkL - RMobilePhone& phone = iEtelSessionMgr.GetPhoneL(KMainServer,KMainPhone); - CHECK_EQUALS_L(iNetworkTestHelper.WaitForRegisteredOnHomeNetworkL(phone), KErrNone, - _L("TNetworkTsyTestHelper::WaitForRegisteredOnHomeNetworkL returned with an error")); - - //////////////////////////////////////////////////////////////// - // SET UP END - //////////////////////////////////////////////////////////////// - - StartTest(); - - //////////////////////////////////////////////////////////////// - // TEST START - //////////////////////////////////////////////////////////////// - - - // Populate RMobileCall::TMobileCallParamsV1 with - RMobileCall::TMobileCallParamsV1 mobileCallParams; - RMobileCall::TMobileCallParamsV1Pckg mobileCallParamsPkg(mobileCallParams); - // ?iSpeakerControl = EMonitorSpeakerControlUnknown - mobileCallParams.iSpeakerControl = RCall::EMonitorSpeakerControlUnknown; - // ?iSpeakerVolume = EMonitorSpeakerVolumeUnknown - mobileCallParams.iSpeakerVolume = RCall::EMonitorSpeakerVolumeUnknown; - // ?iInterval = 0x03 - mobileCallParams.iInterval = 0x03; - // ?iWaitForDialTone = EDialToneWait - mobileCallParams.iWaitForDialTone = RCall::EDialToneWait; - // ?iIdRestrict = EDontSendMyId - mobileCallParams.iIdRestrict = RMobileCall::EDontSendMyId; - // ?iExplicitInvoke = TRUE - mobileCallParams.iCug.iExplicitInvoke = TRUE; - // ?iCugIndex = 0x9c40 - mobileCallParams.iCug.iCugIndex = 0x9c40 ; - // ?iSuppressOA = FALSE - mobileCallParams.iCug.iSuppressOA = FALSE; - // ?iSuppressPrefCug = TRUE - mobileCallParams.iCug.iSuppressPrefCug = TRUE; - // ?iAutoRedial = TRUE - mobileCallParams.iAutoRedial = TRUE; - - - - //=========Post Notifiers=============== - - // post notifier for RCall::NotifyStatusChange - TCoreEtelRequestStatus notifyCallStatusChangeStatus (call1,&RCall::NotifyStatusChangeCancel); - CleanupStack::PushL(notifyCallStatusChangeStatus); - RCall::TStatus callStatus; - call1.NotifyStatusChange(notifyCallStatusChangeStatus,callStatus); - - // post a notifier for RMobileCall::NotifyMobileCallStatusChange - TExtEtelRequestStatus notifyMobileCallChangeStatus(call1, EMobileCallNotifyMobileCallStatusChange); - CleanupStack::PushL(notifyMobileCallChangeStatus); - RMobileCall::TMobileCallStatus mobileCallStatus; - call1.NotifyMobileCallStatusChange(notifyMobileCallChangeStatus, mobileCallStatus); - - // post a notifier for RLine::NotifyStatusChange - TCoreEtelRequestStatus notifyStatusChangeStatus (voiceLine,&RLine::NotifyStatusChangeCancel); - CleanupStack::PushL(notifyStatusChangeStatus); - RCall::TStatus lineStatus; - voiceLine.NotifyStatusChange(notifyStatusChangeStatus,lineStatus); - - // post a notifier for RMobileLine::NotifyMobileLineStatusChange - TExtEtelRequestStatus notifyMobileLineChangeStatus(voiceLine, EMobileLineNotifyMobileLineStatusChange); - CleanupStack::PushL(notifyMobileLineChangeStatus); - RMobileCall::TMobileCallStatus mobileLineStatus; - voiceLine.NotifyMobileLineStatusChange(notifyMobileLineChangeStatus, mobileLineStatus); - - // Dial a number which answers using call params. - TCoreEtelRequestStatus dialStatus(call1, &RCall::DialCancel); - CleanupStack::PushL(dialStatus); - TPtrC number; - ASSERT_TRUE(GetStringFromConfig(KIniVoiceNumSection, KIniVoiceNumber1, number) != EFalse, - _L("GetStringFromConfig did not complete as expected")); - call1.Dial(dialStatus,mobileCallParamsPkg, number); - // Wait for completion. - ASSERT_EQUALS(WaitForRequestWithTimeOut(dialStatus, ETimeMedium), KErrNone, - _L("RCall::Dial timed-out")); - ASSERT_EQUALS(dialStatus.Int(), KErrNone, - _L("RCall::Dial returned an error")); - - // === Check line status === - TInt expectedStatus = KErrNone; - - // Check RLine::NotifyStatusChange completes with EStatusDialling -> EStatusConnecting -> EStatusConnected. - RCall::TStatus expectedLineStatus = RCall::EStatusDialling; - iCallControlTestHelper.WaitForLineNotifyStatusChange(voiceLine, - notifyStatusChangeStatus, - lineStatus, - expectedLineStatus, - expectedStatus); - - expectedLineStatus = RCall::EStatusConnecting; - voiceLine.NotifyStatusChange(notifyStatusChangeStatus, lineStatus); - iCallControlTestHelper.WaitForLineNotifyStatusChange(voiceLine, - notifyStatusChangeStatus, - lineStatus, - expectedLineStatus, - expectedStatus); - - expectedLineStatus = RCall::EStatusConnected; - voiceLine.NotifyStatusChange(notifyStatusChangeStatus, lineStatus); - iCallControlTestHelper.WaitForLineNotifyStatusChange(voiceLine, - notifyStatusChangeStatus, - lineStatus, - expectedLineStatus, - expectedStatus); - - // Check RLine::GetStatus returns EStatusConnected - ASSERT_EQUALS(voiceLine.GetStatus(lineStatus), KErrNone, - _L("RLine::GetStatus returned an error")); - ASSERT_EQUALS(lineStatus, RCall::EStatusConnected, - _L("RLine::GetStatus did not set line status to EStatusConnected as expected")); - - // Check RMobileLine::NotifyMobileLineStatusChange completes with with EStatusDialling -> EStatusConnecting -> EStatusConnected. - RMobileCall::TMobileCallStatus expectedMobileLineStatus = RMobileCall::EStatusDialling; - iCallControlTestHelper.WaitForMobileLineNotifyMobileLineStatusChange(voiceLine, - notifyMobileLineChangeStatus, - mobileLineStatus, - expectedMobileLineStatus, - expectedStatus); - - - voiceLine.NotifyMobileLineStatusChange(notifyMobileLineChangeStatus, mobileLineStatus); - expectedMobileLineStatus = RMobileCall::EStatusConnecting; - iCallControlTestHelper.WaitForMobileLineNotifyMobileLineStatusChange(voiceLine, - notifyMobileLineChangeStatus, - mobileLineStatus, - expectedMobileLineStatus, - expectedStatus); - - voiceLine.NotifyMobileLineStatusChange(notifyMobileLineChangeStatus, mobileLineStatus); - expectedMobileLineStatus = RMobileCall::EStatusConnected; - iCallControlTestHelper.WaitForMobileLineNotifyMobileLineStatusChange(voiceLine, - notifyMobileLineChangeStatus, - mobileLineStatus, - expectedMobileLineStatus, - expectedStatus); - - // Check RMobileLine::GetMobileLineStatus returns EStatusConnected - ASSERT_EQUALS(voiceLine.GetMobileLineStatus(mobileLineStatus), KErrNone, - _L("RMobileLine::GetMobileLineStatus returned an error")); - ASSERT_EQUALS(mobileLineStatus, RMobileCall::EStatusConnected, - _L("RMobileLine::GetMobileLineStatus did not set status to EStatusConnected")); - - // === Check call status === - - // Check RCall::NotifyStatusChange completes with EStatusDialling -> EStatusConnecting -> EStatusConnected. - RCall::TStatus expectedCallStatus = RCall::EStatusDialling; - - iCallControlTestHelper.WaitForCallNotifyStatusChange(call1, - notifyCallStatusChangeStatus, - callStatus, - expectedCallStatus, - expectedStatus); - - call1.NotifyStatusChange(notifyCallStatusChangeStatus,callStatus); - expectedCallStatus = RCall::EStatusConnecting; - iCallControlTestHelper.WaitForCallNotifyStatusChange(call1, - notifyCallStatusChangeStatus, - callStatus, - expectedCallStatus, - expectedStatus); - - call1.NotifyStatusChange(notifyCallStatusChangeStatus,callStatus); - expectedCallStatus = RCall::EStatusConnected; - iCallControlTestHelper.WaitForCallNotifyStatusChange(call1, - notifyCallStatusChangeStatus, - callStatus, - expectedCallStatus, - expectedStatus); - - // Check RCall::GetStatus returns EStatusConnected. - ASSERT_EQUALS(voiceLine.GetStatus(callStatus), KErrNone, - _L("RLine::GetStatus returned an error")); - ASSERT_EQUALS(callStatus, RCall::EStatusConnected, - _L("RLine::GetStatus did not return EStatusConnected as expected")); - - // Check RMobileCall::NotifyMobileCallStatusChange completes with EStatusDialling -> EStatusConnecting -> EStatusConnected. - RMobileCall::TMobileCallStatus expectedMobileCallStatus = RMobileCall::EStatusDialling; - iCallControlTestHelper.WaitForMobileCallNotifyMobileCallStatusChange(call1, - notifyMobileCallChangeStatus, - mobileCallStatus, - expectedMobileCallStatus, - expectedStatus); - - expectedMobileCallStatus = RMobileCall::EStatusConnecting; - call1.NotifyMobileCallStatusChange(notifyMobileCallChangeStatus, mobileCallStatus); - iCallControlTestHelper.WaitForMobileCallNotifyMobileCallStatusChange(call1, - notifyMobileCallChangeStatus, - mobileCallStatus, - expectedMobileCallStatus, - expectedStatus); - - expectedMobileCallStatus = RMobileCall::EStatusConnected; - call1.NotifyMobileCallStatusChange(notifyMobileCallChangeStatus, mobileCallStatus); - iCallControlTestHelper.WaitForMobileCallNotifyMobileCallStatusChange(call1, - notifyMobileCallChangeStatus, - mobileCallStatus, - expectedMobileCallStatus, - expectedStatus); - - // Check RMobileCall::GetMobileCallStatus returns status of EStatusConnected. - ASSERT_EQUALS(call1.GetMobileCallStatus(mobileCallStatus), KErrNone, - _L("RMobileCall::GetMobileCallStatus returned an error")); - ASSERT_EQUALS(mobileCallStatus, RMobileCall::EStatusConnected, - _L("RMobileCall::GetMobileCallStatus did not set call status EStatusConnected as expected")); - - // === Get call parameters. === - RMobileCall::TMobileCallParamsV1 checkParams; - RMobileCall::TMobileCallParamsV1Pckg checkParamsPkg(checkParams); - call1.GetCallParams(checkParamsPkg); - - // Check RCall::GetCallParams with aParams as a packaged RMobileCall::TMobileCallParamsV1 returns same iSpeakerControl as that used for Dial. - ASSERT_EQUALS(checkParams.iSpeakerControl, mobileCallParams.iSpeakerControl, - _L("RCall::GetCallParams did not return the same iSpeakerControl as that used for Dial")); - // Check RCall::GetCallParams with aParams as a packaged RMobileCall::TMobileCallParamsV1 returns same iSpeakerVolume as that used for Dial. - ASSERT_EQUALS(checkParams.iSpeakerVolume, mobileCallParams.iSpeakerVolume, - _L("RCall::GetCallParams did not return the same iSpeakerVolume as that used for Dial")); - // Check RCall::GetCallParams with aParams as a packaged RMobileCall::TMobileCallParamsV1 returns same iInterval as that used for Dial. - ASSERT_EQUALS(checkParams.iInterval, mobileCallParams.iInterval, - _L("RCall::GetCallParams did not return the same iInterval as that used for Dial")); - // Check RCall::GetCallParams with aParams as a packaged RMobileCall::TMobileCallParamsV1 returns same iWaitForDialTone as that used for Dial. - ASSERT_EQUALS(checkParams.iWaitForDialTone, mobileCallParams.iWaitForDialTone, - _L("RCall::GetCallParams did not return the same iWaitForDialTone as that used for Dial")); - // Check RCall::GetCallParams with aParams as a packaged RMobileCall::TMobileCallParamsV1 returns same iIdRestrict as that used for Dial. - ASSERT_EQUALS(checkParams.iIdRestrict, mobileCallParams.iIdRestrict, - _L("RCall::GetCallParams did not return the same iIdRestrict as that used for Dial")); - // Check RCall::GetCallParams with aParams as a packaged RMobileCall::TMobileCallParamsV1 returns same iCug.iExplicitInvoke as that used for Dial. - ASSERT_EQUALS(checkParams.iCug.iExplicitInvoke, mobileCallParams.iCug.iExplicitInvoke, - _L("RCall::GetCallParams did not return the same iCug.iExplicitInvoke as that used for Dial")); - // Check RCall::GetCallParams with aParams as a packaged RMobileCall::TMobileCallParamsV1 returns same iCug.iCugIndex as that used for Dial. - ASSERT_EQUALS(checkParams.iCug.iCugIndex, mobileCallParams.iCug.iCugIndex, - _L("RCall::GetCallParams did not return the same iCug.iCugIndex as that used for Dial")); - // Check RCall::GetCallParams with aParams as a packaged RMobileCall::TMobileCallParamsV1 returns same iCug.iSuppressPrefCug as that used for Dial. - ASSERT_EQUALS(checkParams.iCug.iSuppressPrefCug, mobileCallParams.iCug.iSuppressPrefCug, - _L("RCall::GetCallParams did not return the same iCug.iSuppressPrefCug as that used for Dial")); - // Check RCall::GetCallParams with aParams as a packaged RMobileCall::TMobileCallParamsV1 returns same iCug.iSuppressOA as that used for Dial. - ASSERT_EQUALS(checkParams.iCug.iSuppressOA, mobileCallParams.iCug.iSuppressOA, - _L("RCall::GetCallParams did not return the same iCug.iSuppressOA as that used for Dial")); - // Check RCall::GetCallParams with aParams as a packaged RMobileCall::TMobileCallParamsV1 returns same iAutoRedial as that used for Dial. - ASSERT_EQUALS(checkParams.iAutoRedial, mobileCallParams.iAutoRedial, - _L("RCall::GetCallParams did not return the same iAutoRedial as that used for Dial")); - - //------------ Post Notifiers ---------------------------- - call1.NotifyStatusChange(notifyCallStatusChangeStatus,callStatus); - call1.NotifyMobileCallStatusChange(notifyMobileCallChangeStatus, mobileCallStatus); - voiceLine.NotifyStatusChange(notifyStatusChangeStatus,lineStatus); - voiceLine.NotifyMobileLineStatusChange(notifyMobileLineChangeStatus, mobileLineStatus); - - // Hang up call. - TCoreEtelRequestStatus hangUpStatus (call1,&RCall::HangUpCancel); - CleanupStack::PushL(hangUpStatus); - call1.HangUp(hangUpStatus); - ASSERT_EQUALS(WaitForRequestWithTimeOut(hangUpStatus, ETimeMedium), KErrNone, - _L("RCall::HangUp timed-out")); - ASSERT_EQUALS(hangUpStatus.Int(), KErrNone, - _L("RCall::HangUp returned an error")); - - // === Check call status === - // Check RCall::NotifyStatusChange completes with EStatusHangingUp -> EStatusIdle - expectedCallStatus = RCall::EStatusHangingUp; - const TInt wantedStatus = KErrNone; - iCallControlTestHelper.WaitForCallNotifyStatusChange(call1, - notifyStatusChangeStatus, - callStatus, - expectedCallStatus, - wantedStatus); - - call1.NotifyStatusChange(notifyStatusChangeStatus,callStatus); - expectedCallStatus = RCall::EStatusIdle; - iCallControlTestHelper.WaitForCallNotifyStatusChange(call1, - notifyStatusChangeStatus, - callStatus, - expectedCallStatus, - wantedStatus); - // Check RCall::GetStatus returns EStatusIdle. - ASSERT_EQUALS(call1.GetStatus(callStatus),KErrNone, - _L("RCall::GetStatus returned an error")); - ASSERT_EQUALS(callStatus, RCall::EStatusIdle, - _L("RCall::GetStatus returned an unexpected call status")); - - // Check RMobileCall::NotifyMobileCallStatusChange completes with EStatusDisconnecting -> EStatusIdle - expectedMobileCallStatus = RMobileCall::EStatusDisconnecting; - iCallControlTestHelper.WaitForMobileCallNotifyMobileCallStatusChange(call1, - notifyMobileCallChangeStatus, - mobileCallStatus, - expectedMobileCallStatus, - wantedStatus); - - call1.NotifyMobileCallStatusChange(notifyMobileCallChangeStatus, mobileCallStatus); - expectedMobileCallStatus = RMobileCall::EStatusIdle; - iCallControlTestHelper.WaitForMobileCallNotifyMobileCallStatusChange(call1, - notifyMobileCallChangeStatus, - mobileCallStatus, - expectedMobileCallStatus, - wantedStatus); - - // Check RMobileCall::GetMobileCallStatus returns status of EStatusIdle. - ASSERT_EQUALS(call1.GetMobileCallStatus(mobileCallStatus), KErrNone, - _L("RMobileCall::GetMobileStatus returned an error")); - ASSERT_EQUALS(mobileCallStatus, RMobileCall::EStatusIdle, - _L("RMobileCall::GetMobileStatus did not return a status EStatusIdle")); - - // === Check line status === - - // Check RLine::NotifyStatusChange completes with EStatusHangingUp -> EStatusIdle - expectedLineStatus = RCall::EStatusHangingUp; - iCallControlTestHelper.WaitForLineNotifyStatusChange(voiceLine, - notifyStatusChangeStatus, - lineStatus, - expectedLineStatus, - expectedStatus); - - voiceLine.NotifyStatusChange(notifyStatusChangeStatus,lineStatus); - expectedLineStatus = RCall::EStatusIdle; - iCallControlTestHelper.WaitForLineNotifyStatusChange(voiceLine, - notifyStatusChangeStatus, - lineStatus, - expectedLineStatus, - expectedStatus); - - // Check RLine::GetStatus returns EStatusIdle - ASSERT_EQUALS(voiceLine.GetStatus(lineStatus), KErrNone, - _L("RLine::GetStatus returned an error")); - ASSERT_EQUALS(lineStatus, RCall::EStatusIdle, - _L("RLine::GetStatus did not return EStatusIdle as expected")); - - // Check RMobileLine::NotifyMobileLineStatusChange completes with with EStatusDisconnecting -> EStatusIdle - expectedMobileLineStatus = RMobileCall::EStatusDisconnecting; - iCallControlTestHelper.WaitForMobileLineNotifyMobileLineStatusChange(voiceLine, - notifyMobileLineChangeStatus, - mobileLineStatus, - expectedMobileLineStatus, - expectedStatus); - - voiceLine.NotifyMobileLineStatusChange(notifyMobileLineChangeStatus, mobileLineStatus); - expectedMobileLineStatus = RMobileCall::EStatusIdle; - iCallControlTestHelper.WaitForMobileLineNotifyMobileLineStatusChange(voiceLine, - notifyMobileLineChangeStatus, - mobileLineStatus, - expectedMobileLineStatus, - expectedStatus); - - // Check RMobileLine::GetMobileLineStatus returns EStatusIdle - ASSERT_EQUALS(voiceLine.GetMobileLineStatus(mobileLineStatus), KErrNone, - _L("RMobileLine::GetMobileLineStatus returned an error")); - ASSERT_EQUALS(mobileLineStatus, RMobileCall::EStatusIdle, - _L("RMobileLine::GetMobileLineStatus did not set the status to EStatusIdle")); - - - //////////////////////////////////////////////////////////////// - // TEST END - //////////////////////////////////////////////////////////////// - - StartCleanup(); - - // Pop - // notifyCallStatusChangeStatus - // notifyMobileCallChangeStatus - // notifyStatusChangeStatus - // notifyMobileLineChangeStatus - // dialStatus - // hangUpStatus - CleanupStack::PopAndDestroy(6,¬ifyCallStatusChangeStatus); - - return TestStepResult(); - } - -TPtrC CCTSYIntegrationTestCallControl0011::GetTestStepName() -/** - * @return The test step name. - */ - { - return _L("CCTSYIntegrationTestCallControl0011"); - } - - - -CCTSYIntegrationTestCallControl0012::CCTSYIntegrationTestCallControl0012(CEtelSessionMgr& aEtelSessionMgr) - : CCTSYIntegrationTestCallControlBase(aEtelSessionMgr) -/** - * Constructor. - */ - { - SetTestStepName(CCTSYIntegrationTestCallControl0012::GetTestStepName()); - } - -CCTSYIntegrationTestCallControl0012::~CCTSYIntegrationTestCallControl0012() -/** - * Destructor. - */ - { - } - -TVerdict CCTSYIntegrationTestCallControl0012::doTestStepL() -/** - * @SYMTestCaseID BA-CTSY-INT-CCON-0012 - * @SYMFssID BA/CTSY/CCON-0012 - * @SYMTestCaseDesc Dial and hang up a call specifying valid call parameters 04. - * @SYMTestPriority High - * @SYMTestActions RMobileCall::NotifyMobileCallStatusChange, RCall::NotifyStatusChange, RLine::NotifyStatusChange, RMobileLine::GetMobileLineStatus, RMobileLine::NotifyMobileLineStatusChange, RLine::GetStatus, RMobileCall::GetMobileCallStatus, RCall::GetCallParams, RCall::GetStatus, RCall::GetCallParams, RCall::GetStatus, RCall::HangUp - * @SYMTestExpectedResults Pass - Call connects and call parameters are correct. - * @SYMTestType CIT - * @SYMTestCaseDependencies live/automatic - * - * Reason for test: Verify call and line statuses and call params are correct. - * - * @return - TVerdict code - */ - { - - //////////////////////////////////////////////////////////////// - // SET UP - //////////////////////////////////////////////////////////////// - - - // Check phone supports KCapsVoice - // Get Voice line 1 - RMobileLine& voiceLine = iEtelSessionMgr.GetLineL(KMainServer, KMainPhone, KVoiceLine); - // Get call 1 - RMobileCall& call1 = iEtelSessionMgr.GetCallL(KMainServer, KMainPhone, KVoiceLine, KCall1); - - RLine::TCaps lineCaps; - CHECK_EQUALS_L(voiceLine.GetCaps(lineCaps), KErrNone, - _L("RMobileLine::GetCaps returned an error")); - CHECK_BITS_SET_L(lineCaps.iFlags, RLine::KCapsVoice, KNoUnwantedBits, - _L("RLine::GetCaps returned wrong caps")); - - // Call TNetworkTsyTestHelper::WaitForRegisteredOnHomeNetworkL - RMobilePhone& phone = iEtelSessionMgr.GetPhoneL(KMainServer,KMainPhone); - CHECK_EQUALS_L(iNetworkTestHelper.WaitForRegisteredOnHomeNetworkL(phone), KErrNone, - _L("TNetworkTsyTestHelper::WaitForRegisteredOnHomeNetworkL returned with an error")); - - //////////////////////////////////////////////////////////////// - // SET UP END - //////////////////////////////////////////////////////////////// - - StartTest(); - - //////////////////////////////////////////////////////////////// - // TEST START - //////////////////////////////////////////////////////////////// - - - // Populate RMobileCall::TMobileCallParamsV1 with - RMobileCall::TMobileCallParamsV1 mobileCallParams; - RMobileCall::TMobileCallParamsV1Pckg mobileCallParamsPkg(mobileCallParams); - - // ?iSpeakerControl = EMonitorSpeakerControlOnExceptDuringDialling - mobileCallParams.iSpeakerControl = RCall::EMonitorSpeakerControlOnExceptDuringDialling; - // ?iSpeakerVolume = EMonitorSpeakerVolumeUnknown - mobileCallParams.iSpeakerVolume = RCall::EMonitorSpeakerVolumeUnknown; - // ?iInterval = 0x02 - mobileCallParams.iInterval = 0x02; - // ?iWaitForDialTone = EDialToneWait - mobileCallParams.iWaitForDialTone = RCall::EDialToneWait; - // ?iIdRestrict = ESendMyId - mobileCallParams.iIdRestrict = RMobileCall::ESendMyId; - // ?iExplicitInvoke = FALSE - mobileCallParams.iCug.iExplicitInvoke = FALSE ; - // ?iCugIndex = 0x00 - mobileCallParams.iCug.iCugIndex = 0x0000; - // ?iSuppressOA = FALSE - mobileCallParams.iCug.iSuppressOA = FALSE; - // ?iSuppressPrefCug = FALSE - mobileCallParams.iCug.iSuppressPrefCug = FALSE; - // ?iAutoRedial = FALSE - mobileCallParams.iAutoRedial = FALSE; - - //=========Post Notifiers=============== - - // post notifier for RCall::NotifyStatusChange - TCoreEtelRequestStatus notifyCallStatusChangeStatus (call1,&RCall::NotifyStatusChangeCancel); - CleanupStack::PushL(notifyCallStatusChangeStatus); - RCall::TStatus callStatus; - call1.NotifyStatusChange(notifyCallStatusChangeStatus,callStatus); - - // post a notifier for RMobileCall::NotifyMobileCallStatusChange - TExtEtelRequestStatus notifyMobileCallChangeStatus(call1, EMobileCallNotifyMobileCallStatusChange); - CleanupStack::PushL(notifyMobileCallChangeStatus); - RMobileCall::TMobileCallStatus mobileCallStatus; - call1.NotifyMobileCallStatusChange(notifyMobileCallChangeStatus, mobileCallStatus); - - // post a notifier for RLine::NotifyStatusChange - TCoreEtelRequestStatus notifyStatusChangeStatus (voiceLine,&RLine::NotifyStatusChangeCancel); - CleanupStack::PushL(notifyStatusChangeStatus); - RCall::TStatus lineStatus; - voiceLine.NotifyStatusChange(notifyStatusChangeStatus,lineStatus); - - // post a notifier for RMobileLine::NotifyMobileLineStatusChange - TExtEtelRequestStatus notifyMobileLineChangeStatus(voiceLine, EMobileLineNotifyMobileLineStatusChange); - CleanupStack::PushL(notifyMobileLineChangeStatus); - RMobileCall::TMobileCallStatus mobileLineStatus; - voiceLine.NotifyMobileLineStatusChange(notifyMobileLineChangeStatus, mobileLineStatus); - - // Dial a number which answers using call params. - TCoreEtelRequestStatus dialStatus(call1, &RCall::DialCancel); - CleanupStack::PushL(dialStatus); - TPtrC number; - ASSERT_TRUE(GetStringFromConfig(KIniVoiceNumSection, KIniVoiceNumber1, number) != EFalse, - _L("GetStringFromConfig did not complete as expected")); - call1.Dial(dialStatus,mobileCallParamsPkg, number); - // Wait for completion. - ASSERT_EQUALS(WaitForRequestWithTimeOut(dialStatus, ETimeMedium), KErrNone, - _L("RCall::Dial timed-out")); - ASSERT_EQUALS(dialStatus.Int(), KErrNone, - _L("RCall::Dial returned an error")); - - // === Check line status === - - TInt expectedStatus = KErrNone; - - // Check RLine::NotifyStatusChange completes with EStatusDialling -> EStatusConnecting -> EStatusConnected. - RCall::TStatus expectedLineStatus = RCall::EStatusDialling; - iCallControlTestHelper.WaitForLineNotifyStatusChange(voiceLine, - notifyStatusChangeStatus, - lineStatus, - expectedLineStatus, - expectedStatus); - - expectedLineStatus = RCall::EStatusConnecting; - voiceLine.NotifyStatusChange(notifyStatusChangeStatus, lineStatus); - iCallControlTestHelper.WaitForLineNotifyStatusChange(voiceLine, - notifyStatusChangeStatus, - lineStatus, - expectedLineStatus, - expectedStatus); - - expectedLineStatus = RCall::EStatusConnected; - voiceLine.NotifyStatusChange(notifyStatusChangeStatus, lineStatus); - iCallControlTestHelper.WaitForLineNotifyStatusChange(voiceLine, - notifyStatusChangeStatus, - lineStatus, - expectedLineStatus, - expectedStatus); - - // Check RLine::GetStatus returns EStatusConnected - ASSERT_EQUALS(voiceLine.GetStatus(lineStatus), KErrNone, - _L("RLine::GetStatus returned an error")); - ASSERT_EQUALS(lineStatus, RCall::EStatusConnected, - _L("RLine::GetStatus did not set line status to EStatusConnected as expected")); - - // Check RMobileLine::NotifyMobileLineStatusChange completes with with EStatusDialling -> EStatusConnecting -> EStatusConnected. - RMobileCall::TMobileCallStatus expectedMobileLineStatus = RMobileCall::EStatusDialling; - iCallControlTestHelper.WaitForMobileLineNotifyMobileLineStatusChange(voiceLine, - notifyMobileLineChangeStatus, - mobileLineStatus, - expectedMobileLineStatus, - expectedStatus); - - voiceLine.NotifyMobileLineStatusChange(notifyMobileLineChangeStatus, mobileLineStatus); - expectedMobileLineStatus = RMobileCall::EStatusConnecting; - iCallControlTestHelper.WaitForMobileLineNotifyMobileLineStatusChange(voiceLine, - notifyMobileLineChangeStatus, - mobileLineStatus, - expectedMobileLineStatus, - expectedStatus); - - voiceLine.NotifyMobileLineStatusChange(notifyMobileLineChangeStatus, mobileLineStatus); - expectedMobileLineStatus = RMobileCall::EStatusConnected; - iCallControlTestHelper.WaitForMobileLineNotifyMobileLineStatusChange(voiceLine, - notifyMobileLineChangeStatus, - mobileLineStatus, - expectedMobileLineStatus, - expectedStatus); - - // Check RMobileLine::GetMobileLineStatus returns EStatusConnected - ASSERT_EQUALS(voiceLine.GetMobileLineStatus(mobileLineStatus), KErrNone, - _L("RMobileLine::GetMobileLineStatus returned an error")); - ASSERT_EQUALS(mobileLineStatus, RMobileCall::EStatusConnected, - _L("RMobileLine::GetMobileLineStatus did not set status to EStatusConnected")); - - // === Check call status === - - // Check RCall::NotifyStatusChange completes with EStatusDialling -> EStatusConnecting -> EStatusConnected. - RCall::TStatus expectedCallStatus = RCall::EStatusDialling; - - iCallControlTestHelper.WaitForCallNotifyStatusChange(call1, - notifyCallStatusChangeStatus, - callStatus, - expectedCallStatus, - expectedStatus); - - call1.NotifyStatusChange(notifyCallStatusChangeStatus,callStatus); - expectedCallStatus = RCall::EStatusConnecting; - iCallControlTestHelper.WaitForCallNotifyStatusChange(call1, - notifyCallStatusChangeStatus, - callStatus, - expectedCallStatus, - expectedStatus); - - call1.NotifyStatusChange(notifyCallStatusChangeStatus,callStatus); - expectedCallStatus = RCall::EStatusConnected; - iCallControlTestHelper.WaitForCallNotifyStatusChange(call1, - notifyCallStatusChangeStatus, - callStatus, - expectedCallStatus, - expectedStatus); - - // Check RCall::GetStatus returns EStatusConnected. - ASSERT_EQUALS(voiceLine.GetStatus(callStatus), KErrNone, - _L("RLine::GetStatus returned an error")); - ASSERT_EQUALS(callStatus, RCall::EStatusConnected, - _L("RLine::GetStatus did not return EStatusConnected as expected")); - - // Check RMobileCall::NotifyMobileCallStatusChange completes with EStatusDialling -> EStatusConnecting -> EStatusConnected. - RMobileCall::TMobileCallStatus expectedMobileCallStatus = RMobileCall::EStatusDialling; - iCallControlTestHelper.WaitForMobileCallNotifyMobileCallStatusChange(call1, - notifyMobileCallChangeStatus, - mobileCallStatus, - expectedMobileCallStatus, - expectedStatus); - - expectedMobileCallStatus = RMobileCall::EStatusConnecting; - call1.NotifyMobileCallStatusChange(notifyMobileCallChangeStatus, mobileCallStatus); - iCallControlTestHelper.WaitForMobileCallNotifyMobileCallStatusChange(call1, - notifyMobileCallChangeStatus, - mobileCallStatus, - expectedMobileCallStatus, - expectedStatus); - - expectedMobileCallStatus = RMobileCall::EStatusConnected; - call1.NotifyMobileCallStatusChange(notifyMobileCallChangeStatus, mobileCallStatus); - iCallControlTestHelper.WaitForMobileCallNotifyMobileCallStatusChange(call1, - notifyMobileCallChangeStatus, - mobileCallStatus, - expectedMobileCallStatus, - expectedStatus); - - // Check RMobileCall::GetMobileCallStatus returns status of EStatusConnected. - ASSERT_EQUALS(call1.GetMobileCallStatus(mobileCallStatus), KErrNone, - _L("RMobileCall::GetMobileCallStatus returned an error")); - ASSERT_EQUALS(mobileCallStatus, RMobileCall::EStatusConnected, - _L("RMobileCall::GetMobileCallStatus did not set call status EStatusConnected as expected")); - - // === Get call parameters. === - RMobileCall::TMobileCallParamsV1 checkParams; - RMobileCall::TMobileCallParamsV1Pckg checkParamsPkg(checkParams); - call1.GetCallParams(checkParamsPkg); - - // Check RCall::GetCallParams with aParams as a packaged RMobileCall::TMobileCallParamsV1 returns same iSpeakerControl as that used for Dial. - ASSERT_EQUALS(checkParams.iSpeakerControl, mobileCallParams.iSpeakerControl, - _L("RCall::GetCallParams did not return the same iSpeakerControl as that used for Dial")); - // Check RCall::GetCallParams with aParams as a packaged RMobileCall::TMobileCallParamsV1 returns same iSpeakerVolume as that used for Dial. - ASSERT_EQUALS(checkParams.iSpeakerVolume, mobileCallParams.iSpeakerVolume, - _L("RCall::GetCallParams did not return the same iSpeakerVolume as that used for Dial")); - // Check RCall::GetCallParams with aParams as a packaged RMobileCall::TMobileCallParamsV1 returns same iInterval as that used for Dial. - ASSERT_EQUALS(checkParams.iInterval, mobileCallParams.iInterval, - _L("RCall::GetCallParams did not return the same iInterval as that used for Dial")); - // Check RCall::GetCallParams with aParams as a packaged RMobileCall::TMobileCallParamsV1 returns same iWaitForDialTone as that used for Dial. - ASSERT_EQUALS(checkParams.iWaitForDialTone, mobileCallParams.iWaitForDialTone, - _L("RCall::GetCallParams did not return the same iWaitForDialTone as that used for Dial")); - // Check RCall::GetCallParams with aParams as a packaged RMobileCall::TMobileCallParamsV1 returns same iIdRestrict as that used for Dial. - ASSERT_EQUALS(checkParams.iIdRestrict, mobileCallParams.iIdRestrict, - _L("RCall::GetCallParams did not return the same iIdRestrict as that used for Dial")); - // Check RCall::GetCallParams with aParams as a packaged RMobileCall::TMobileCallParamsV1 returns same iCug.iExplicitInvoke as that used for Dial. - ASSERT_EQUALS(checkParams.iCug.iExplicitInvoke, mobileCallParams.iCug.iExplicitInvoke, - _L("RCall::GetCallParams did not return the same iCug.iExplicitInvoke as that used for Dial")); - // Check RCall::GetCallParams with aParams as a packaged RMobileCall::TMobileCallParamsV1 returns same iCug.iCugIndex as that used for Dial. - ASSERT_EQUALS(checkParams.iCug.iCugIndex, mobileCallParams.iCug.iCugIndex, - _L("RCall::GetCallParams did not return the same iCug.iCugIndex as that used for Dial")); - // Check RCall::GetCallParams with aParams as a packaged RMobileCall::TMobileCallParamsV1 returns same iCug.iSuppressPrefCug as that used for Dial. - ASSERT_EQUALS(checkParams.iCug.iSuppressPrefCug, mobileCallParams.iCug.iSuppressPrefCug, - _L("RCall::GetCallParams did not return the same iCug.iSuppressPrefCug as that used for Dial")); - // Check RCall::GetCallParams with aParams as a packaged RMobileCall::TMobileCallParamsV1 returns same iCug.iSuppressOA as that used for Dial. - ASSERT_EQUALS(checkParams.iCug.iSuppressOA, mobileCallParams.iCug.iSuppressOA, - _L("RCall::GetCallParams did not return the same iCug.iSuppressOA as that used for Dial")); - // Check RCall::GetCallParams with aParams as a packaged RMobileCall::TMobileCallParamsV1 returns same iAutoRedial as that used for Dial. - ASSERT_EQUALS(checkParams.iAutoRedial, mobileCallParams.iAutoRedial, - _L("RCall::GetCallParams did not return the same iAutoRedial as that used for Dial")); - - //------------ Post Notifiers ---------------------------- - call1.NotifyStatusChange(notifyCallStatusChangeStatus,callStatus); - call1.NotifyMobileCallStatusChange(notifyMobileCallChangeStatus, mobileCallStatus); - voiceLine.NotifyStatusChange(notifyStatusChangeStatus,lineStatus); - voiceLine.NotifyMobileLineStatusChange(notifyMobileLineChangeStatus, mobileLineStatus); - - // Hang up call. - TCoreEtelRequestStatus hangUpStatus (call1,&RCall::HangUpCancel); - CleanupStack::PushL(hangUpStatus); - call1.HangUp(hangUpStatus); - ASSERT_EQUALS(WaitForRequestWithTimeOut(hangUpStatus, ETimeMedium), KErrNone, - _L("RCall::HangUp timed-out")); - ASSERT_EQUALS(hangUpStatus.Int(), KErrNone, - _L("RCall::HangUp returned an error")); - - // === Check call status === - // Check RCall::NotifyStatusChange completes with EStatusHangingUp -> EStatusIdle - expectedCallStatus = RCall::EStatusHangingUp; - const TInt wantedStatus = KErrNone; - iCallControlTestHelper.WaitForCallNotifyStatusChange(call1, - notifyStatusChangeStatus, - callStatus, - expectedCallStatus, - wantedStatus); - - call1.NotifyStatusChange(notifyStatusChangeStatus,callStatus); - expectedCallStatus = RCall::EStatusIdle; - iCallControlTestHelper.WaitForCallNotifyStatusChange(call1, - notifyStatusChangeStatus, - callStatus, - expectedCallStatus, - wantedStatus); - // Check RCall::GetStatus returns EStatusIdle. - ASSERT_EQUALS(call1.GetStatus(callStatus),KErrNone, - _L("RCall::GetStatus returned an error")); - ASSERT_EQUALS(callStatus, RCall::EStatusIdle, - _L("RCall::GetStatus returned an unexpected call status")); - - // Check RMobileCall::NotifyMobileCallStatusChange completes with EStatusDisconnecting -> EStatusIdle - expectedMobileCallStatus = RMobileCall::EStatusDisconnecting; - iCallControlTestHelper.WaitForMobileCallNotifyMobileCallStatusChange(call1, - notifyMobileCallChangeStatus, - mobileCallStatus, - expectedMobileCallStatus, - wantedStatus); - - call1.NotifyMobileCallStatusChange(notifyMobileCallChangeStatus, mobileCallStatus); - expectedMobileCallStatus = RMobileCall::EStatusIdle; - iCallControlTestHelper.WaitForMobileCallNotifyMobileCallStatusChange(call1, - notifyMobileCallChangeStatus, - mobileCallStatus, - expectedMobileCallStatus, - wantedStatus); - - // Check RMobileCall::GetMobileCallStatus returns status of EStatusIdle. - ASSERT_EQUALS(call1.GetMobileCallStatus(mobileCallStatus), KErrNone, - _L("RMobileCall::GetMobileStatus returned an error")); - ASSERT_EQUALS(mobileCallStatus, RMobileCall::EStatusIdle, - _L("RMobileCall::GetMobileStatus did not return a status EStatusIdle")); - - // === Check line status === - - // Check RLine::NotifyStatusChange completes with EStatusHangingUp -> EStatusIdle - expectedLineStatus = RCall::EStatusHangingUp; - iCallControlTestHelper.WaitForLineNotifyStatusChange(voiceLine, - notifyStatusChangeStatus, - lineStatus, - expectedLineStatus, - expectedStatus); - - voiceLine.NotifyStatusChange(notifyStatusChangeStatus,lineStatus); - expectedLineStatus = RCall::EStatusIdle; - iCallControlTestHelper.WaitForLineNotifyStatusChange(voiceLine, - notifyStatusChangeStatus, - lineStatus, - expectedLineStatus, - expectedStatus); - - // Check RLine::GetStatus returns EStatusIdle - ASSERT_EQUALS(voiceLine.GetStatus(lineStatus), KErrNone, - _L("RLine::GetStatus returned an error")); - ASSERT_EQUALS(lineStatus, RCall::EStatusIdle, - _L("RLine::GetStatus did not return EStatusIdle as expected")); - - // Check RMobileLine::NotifyMobileLineStatusChange completes with with EStatusDisconnecting -> EStatusIdle - expectedMobileLineStatus = RMobileCall::EStatusDisconnecting; - iCallControlTestHelper.WaitForMobileLineNotifyMobileLineStatusChange(voiceLine, - notifyMobileLineChangeStatus, - mobileLineStatus, - expectedMobileLineStatus, - expectedStatus); - - voiceLine.NotifyMobileLineStatusChange(notifyMobileLineChangeStatus, mobileLineStatus); - expectedMobileLineStatus = RMobileCall::EStatusIdle; - iCallControlTestHelper.WaitForMobileLineNotifyMobileLineStatusChange(voiceLine, - notifyMobileLineChangeStatus, - mobileLineStatus, - expectedMobileLineStatus, - expectedStatus); - - // Check RMobileLine::GetMobileLineStatus returns EStatusIdle - ASSERT_EQUALS(voiceLine.GetMobileLineStatus(mobileLineStatus), KErrNone, - _L("RMobileLine::GetMobileLineStatus returned an error")); - ASSERT_EQUALS(mobileLineStatus, RMobileCall::EStatusIdle, - _L("RMobileLine::GetMobileLineStatus did not set the status to EStatusIdle")); - - - - //////////////////////////////////////////////////////////////// - // TEST END - //////////////////////////////////////////////////////////////// - - StartCleanup(); - - // Pop - // notifyCallStatusChangeStatus - // notifyMobileCallChangeStatus - // notifyStatusChangeStatus - // notifyMobileLineChangeStatus - // dialStatus - // hangUpStatus - CleanupStack::PopAndDestroy(6,¬ifyCallStatusChangeStatus); - - return TestStepResult(); - } - -TPtrC CCTSYIntegrationTestCallControl0012::GetTestStepName() -/** - * @return The test step name. - */ - { - return _L("CCTSYIntegrationTestCallControl0012"); - } - - - -CCTSYIntegrationTestCallControl0013::CCTSYIntegrationTestCallControl0013(CEtelSessionMgr& aEtelSessionMgr) - : CCTSYIntegrationTestCallControlBase(aEtelSessionMgr) -/** - * Constructor. - */ - { - SetTestStepName(CCTSYIntegrationTestCallControl0013::GetTestStepName()); - } - -CCTSYIntegrationTestCallControl0013::~CCTSYIntegrationTestCallControl0013() -/** - * Destructor. - */ - { - } - -TVerdict CCTSYIntegrationTestCallControl0013::doTestStepL() -/** - * @SYMTestCaseID BA-CTSY-INT-CCON-0013 - * @SYMFssID BA/CTSY/CCON-0013 - * @SYMTestCaseDesc Dial and hang up a call specifying valid call parameters 05. - * @SYMTestPriority High - * @SYMTestActions RMobileCall::NotifyMobileCallStatusChange, RCall::NotifyStatusChange, RLine::NotifyStatusChange, RMobileLine::GetMobileLineStatus, RMobileLine::NotifyMobileLineStatusChange, RLine::GetStatus, RMobileCall::GetMobileCallStatus, RCall::GetCallParams, RCall::GetStatus, RCall::GetCallParams, RCall::GetStatus, RCall::HangUp - * @SYMTestExpectedResults Pass - Call connects and call parameters are correct. - * @SYMTestType CIT - * @SYMTestCaseDependencies live/automatic - * - * Reason for test: Verify call and line statuses and call params are correct. - * - * @return - TVerdict code - */ - { - - //////////////////////////////////////////////////////////////// - // SET UP - //////////////////////////////////////////////////////////////// - - - // Check phone supports KCapsVoice - // Get Voice line 1 - RMobileLine& voiceLine = iEtelSessionMgr.GetLineL(KMainServer, KMainPhone, KVoiceLine); - // Get call 1 - RMobileCall& call1 = iEtelSessionMgr.GetCallL(KMainServer, KMainPhone, KVoiceLine, KCall1); - - RLine::TCaps lineCaps; - CHECK_EQUALS_L(voiceLine.GetCaps(lineCaps), KErrNone, - _L("RMobileLine::GetCaps returned an error")); - CHECK_BITS_SET_L(lineCaps.iFlags, RLine::KCapsVoice, KNoUnwantedBits, - _L("RLine::GetCaps returned wrong caps")); - - // Call TNetworkTsyTestHelper::WaitForRegisteredOnHomeNetworkL - RMobilePhone& phone = iEtelSessionMgr.GetPhoneL(KMainServer,KMainPhone); - CHECK_EQUALS_L(iNetworkTestHelper.WaitForRegisteredOnHomeNetworkL(phone), KErrNone, - _L("TNetworkTsyTestHelper::WaitForRegisteredOnHomeNetworkL returned with an error")); - - //////////////////////////////////////////////////////////////// - // SET UP END - //////////////////////////////////////////////////////////////// - - StartTest(); - - //////////////////////////////////////////////////////////////// - // TEST START - //////////////////////////////////////////////////////////////// - - - // Populate RMobileCall::TMobileCallParamsV1 with - RMobileCall::TMobileCallParamsV1 mobileCallParams; - RMobileCall::TMobileCallParamsV1Pckg mobileCallParamsPkg(mobileCallParams); - - // ?iSpeakerControl = EMonitorSpeakerControlUnknown - mobileCallParams.iSpeakerControl = RCall::EMonitorSpeakerControlUnknown; - // ?iSpeakerVolume = EMonitorSpeakerVolumeHigh - mobileCallParams.iSpeakerVolume = RCall::EMonitorSpeakerVolumeHigh; - // ?iInterval = 0x01 - mobileCallParams.iInterval = 0x01; - // ?iWaitForDialTone = EDialToneWait - mobileCallParams.iWaitForDialTone = RCall::EDialToneWait; - // ?iIdRestrict = EIdRestrictDefault - mobileCallParams.iIdRestrict = RMobileCall::EIdRestrictDefault; - // ?iExplicitInvoke = FALSE - mobileCallParams.iCug.iExplicitInvoke = FALSE ; - // ?iCugIndex = 0x00 - mobileCallParams.iCug.iCugIndex = 0x00; - // ?iSuppressOA = FALSE - mobileCallParams.iCug.iSuppressOA = FALSE; - // ?iSuppressPrefCug = FALSE - mobileCallParams.iCug.iSuppressPrefCug = FALSE; - // ?iAutoRedial = FALSE - mobileCallParams.iAutoRedial = FALSE; - - //=========Post Notifiers=============== - - // post notifier for RCall::NotifyStatusChange - TCoreEtelRequestStatus notifyCallStatusChangeStatus (call1,&RCall::NotifyStatusChangeCancel); - CleanupStack::PushL(notifyCallStatusChangeStatus); - RCall::TStatus callStatus; - call1.NotifyStatusChange(notifyCallStatusChangeStatus,callStatus); - - // post a notifier for RMobileCall::NotifyMobileCallStatusChange - TExtEtelRequestStatus notifyMobileCallChangeStatus(call1, EMobileCallNotifyMobileCallStatusChange); - CleanupStack::PushL(notifyMobileCallChangeStatus); - RMobileCall::TMobileCallStatus mobileCallStatus; - call1.NotifyMobileCallStatusChange(notifyMobileCallChangeStatus, mobileCallStatus); - - // post a notifier for RLine::NotifyStatusChange - TCoreEtelRequestStatus notifyStatusChangeStatus (voiceLine,&RLine::NotifyStatusChangeCancel); - CleanupStack::PushL(notifyStatusChangeStatus); - RCall::TStatus lineStatus; - voiceLine.NotifyStatusChange(notifyStatusChangeStatus,lineStatus); - - // post a notifier for RMobileLine::NotifyMobileLineStatusChange - TExtEtelRequestStatus notifyMobileLineChangeStatus(voiceLine, EMobileLineNotifyMobileLineStatusChange); - CleanupStack::PushL(notifyMobileLineChangeStatus); - RMobileCall::TMobileCallStatus mobileLineStatus; - voiceLine.NotifyMobileLineStatusChange(notifyMobileLineChangeStatus, mobileLineStatus); - - // Dial a number which answers using call params. - TCoreEtelRequestStatus dialStatus(call1, &RCall::DialCancel); - CleanupStack::PushL(dialStatus); - TPtrC number; - ASSERT_TRUE(GetStringFromConfig(KIniVoiceNumSection, KIniVoiceNumber1, number) != EFalse, - _L("GetStringFromConfig did not complete as expected")); - call1.Dial(dialStatus,mobileCallParamsPkg, number); - // Wait for completion. - ASSERT_EQUALS(WaitForRequestWithTimeOut(dialStatus, ETimeMedium), KErrNone, - _L("RCall::Dial timed-out")); - ASSERT_EQUALS(dialStatus.Int(), KErrNone, - _L("RCall::Dial returned an error")); - - // === Check line status === - - TInt expectedStatus = KErrNone; - - // Check RLine::NotifyStatusChange completes with EStatusDialling -> EStatusConnecting -> EStatusConnected. - RCall::TStatus expectedLineStatus = RCall::EStatusDialling; - iCallControlTestHelper.WaitForLineNotifyStatusChange(voiceLine, - notifyStatusChangeStatus, - lineStatus, - expectedLineStatus, - expectedStatus); - - expectedLineStatus = RCall::EStatusConnecting; - voiceLine.NotifyStatusChange(notifyStatusChangeStatus, lineStatus); - iCallControlTestHelper.WaitForLineNotifyStatusChange(voiceLine, - notifyStatusChangeStatus, - lineStatus, - expectedLineStatus, - expectedStatus); - - expectedLineStatus = RCall::EStatusConnected; - voiceLine.NotifyStatusChange(notifyStatusChangeStatus, lineStatus); - iCallControlTestHelper.WaitForLineNotifyStatusChange(voiceLine, - notifyStatusChangeStatus, - lineStatus, - expectedLineStatus, - expectedStatus); - - // Check RLine::GetStatus returns EStatusConnected - ASSERT_EQUALS(voiceLine.GetStatus(lineStatus), KErrNone, - _L("RLine::GetStatus returned an error")); - ASSERT_EQUALS(lineStatus, RCall::EStatusConnected, - _L("RLine::GetStatus did not set line status to EStatusConnected as expected")); - - // Check RMobileLine::NotifyMobileLineStatusChange completes with with EStatusDialling -> EStatusConnecting -> EStatusConnected. - RMobileCall::TMobileCallStatus expectedMobileLineStatus = RMobileCall::EStatusDialling; - iCallControlTestHelper.WaitForMobileLineNotifyMobileLineStatusChange(voiceLine, - notifyMobileLineChangeStatus, - mobileLineStatus, - expectedMobileLineStatus, - expectedStatus); - - voiceLine.NotifyMobileLineStatusChange(notifyMobileLineChangeStatus, mobileLineStatus); - expectedMobileLineStatus = RMobileCall::EStatusConnecting; - iCallControlTestHelper.WaitForMobileLineNotifyMobileLineStatusChange(voiceLine, - notifyMobileLineChangeStatus, - mobileLineStatus, - expectedMobileLineStatus, - expectedStatus); - - voiceLine.NotifyMobileLineStatusChange(notifyMobileLineChangeStatus, mobileLineStatus); - expectedMobileLineStatus = RMobileCall::EStatusConnected; - iCallControlTestHelper.WaitForMobileLineNotifyMobileLineStatusChange(voiceLine, - notifyMobileLineChangeStatus, - mobileLineStatus, - expectedMobileLineStatus, - expectedStatus); - - // Check RMobileLine::GetMobileLineStatus returns EStatusConnected - ASSERT_EQUALS(voiceLine.GetMobileLineStatus(mobileLineStatus), KErrNone, - _L("RMobileLine::GetMobileLineStatus returned an error")); - ASSERT_EQUALS(mobileLineStatus, RMobileCall::EStatusConnected, - _L("RMobileLine::GetMobileLineStatus did not set status to EStatusConnected")); - - // === Check call status === - - // Check RCall::NotifyStatusChange completes with EStatusDialling -> EStatusConnecting -> EStatusConnected. - RCall::TStatus expectedCallStatus = RCall::EStatusDialling; - - iCallControlTestHelper.WaitForCallNotifyStatusChange(call1, - notifyCallStatusChangeStatus, - callStatus, - expectedCallStatus, - expectedStatus); - - call1.NotifyStatusChange(notifyCallStatusChangeStatus,callStatus); - expectedCallStatus = RCall::EStatusConnecting; - iCallControlTestHelper.WaitForCallNotifyStatusChange(call1, - notifyCallStatusChangeStatus, - callStatus, - expectedCallStatus, - expectedStatus); - - call1.NotifyStatusChange(notifyCallStatusChangeStatus,callStatus); - expectedCallStatus = RCall::EStatusConnected; - iCallControlTestHelper.WaitForCallNotifyStatusChange(call1, - notifyCallStatusChangeStatus, - callStatus, - expectedCallStatus, - expectedStatus); - - // Check RCall::GetStatus returns EStatusConnected. - ASSERT_EQUALS(voiceLine.GetStatus(callStatus), KErrNone, - _L("RLine::GetStatus returned an error")); - ASSERT_EQUALS(callStatus, RCall::EStatusConnected, - _L("RLine::GetStatus did not return EStatusConnected as expected")); - - // Check RMobileCall::NotifyMobileCallStatusChange completes with EStatusDialling -> EStatusConnecting -> EStatusConnected. - RMobileCall::TMobileCallStatus expectedMobileCallStatus = RMobileCall::EStatusDialling; - iCallControlTestHelper.WaitForMobileCallNotifyMobileCallStatusChange(call1, - notifyMobileCallChangeStatus, - mobileCallStatus, - expectedMobileCallStatus, - expectedStatus); - - expectedMobileCallStatus = RMobileCall::EStatusConnecting; - call1.NotifyMobileCallStatusChange(notifyMobileCallChangeStatus, mobileCallStatus); - iCallControlTestHelper.WaitForMobileCallNotifyMobileCallStatusChange(call1, - notifyMobileCallChangeStatus, - mobileCallStatus, - expectedMobileCallStatus, - expectedStatus); - - expectedMobileCallStatus = RMobileCall::EStatusConnected; - call1.NotifyMobileCallStatusChange(notifyMobileCallChangeStatus, mobileCallStatus); - iCallControlTestHelper.WaitForMobileCallNotifyMobileCallStatusChange(call1, - notifyMobileCallChangeStatus, - mobileCallStatus, - expectedMobileCallStatus, - expectedStatus); - - // Check RMobileCall::GetMobileCallStatus returns status of EStatusConnected. - ASSERT_EQUALS(call1.GetMobileCallStatus(mobileCallStatus), KErrNone, - _L("RMobileCall::GetMobileCallStatus returned an error")); - ASSERT_EQUALS(mobileCallStatus, RMobileCall::EStatusConnected, - _L("RMobileCall::GetMobileCallStatus did not set call status EStatusConnected as expected")); - - // === Get call parameters. === - RMobileCall::TMobileCallParamsV1 checkParams; - RMobileCall::TMobileCallParamsV1Pckg checkParamsPkg(checkParams); - call1.GetCallParams(checkParamsPkg); - - // Check RCall::GetCallParams with aParams as a packaged RMobileCall::TMobileCallParamsV1 returns same iSpeakerControl as that used for Dial. - ASSERT_EQUALS(checkParams.iSpeakerControl, mobileCallParams.iSpeakerControl, - _L("RCall::GetCallParams did not return the same iSpeakerControl as that used for Dial")); - // Check RCall::GetCallParams with aParams as a packaged RMobileCall::TMobileCallParamsV1 returns same iSpeakerVolume as that used for Dial. - ASSERT_EQUALS(checkParams.iSpeakerVolume, mobileCallParams.iSpeakerVolume, - _L("RCall::GetCallParams did not return the same iSpeakerVolume as that used for Dial")); - // Check RCall::GetCallParams with aParams as a packaged RMobileCall::TMobileCallParamsV1 returns same iInterval as that used for Dial. - ASSERT_EQUALS(checkParams.iInterval, mobileCallParams.iInterval, - _L("RCall::GetCallParams did not return the same iInterval as that used for Dial")); - // Check RCall::GetCallParams with aParams as a packaged RMobileCall::TMobileCallParamsV1 returns same iWaitForDialTone as that used for Dial. - ASSERT_EQUALS(checkParams.iWaitForDialTone, mobileCallParams.iWaitForDialTone, - _L("RCall::GetCallParams did not return the same iWaitForDialTone as that used for Dial")); - // Check RCall::GetCallParams with aParams as a packaged RMobileCall::TMobileCallParamsV1 returns same iIdRestrict as that used for Dial. - ASSERT_EQUALS(checkParams.iIdRestrict, mobileCallParams.iIdRestrict, - _L("RCall::GetCallParams did not return the same iIdRestrict as that used for Dial")); - // Check RCall::GetCallParams with aParams as a packaged RMobileCall::TMobileCallParamsV1 returns same iCug.iExplicitInvoke as that used for Dial. - ASSERT_EQUALS(checkParams.iCug.iExplicitInvoke, mobileCallParams.iCug.iExplicitInvoke, - _L("RCall::GetCallParams did not return the same iCug.iExplicitInvoke as that used for Dial")); - // Check RCall::GetCallParams with aParams as a packaged RMobileCall::TMobileCallParamsV1 returns same iCug.iCugIndex as that used for Dial. - ASSERT_EQUALS(checkParams.iCug.iCugIndex, mobileCallParams.iCug.iCugIndex, - _L("RCall::GetCallParams did not return the same iCug.iCugIndex as that used for Dial")); - // Check RCall::GetCallParams with aParams as a packaged RMobileCall::TMobileCallParamsV1 returns same iCug.iSuppressPrefCug as that used for Dial. - ASSERT_EQUALS(checkParams.iCug.iSuppressPrefCug, mobileCallParams.iCug.iSuppressPrefCug, - _L("RCall::GetCallParams did not return the same iCug.iSuppressPrefCug as that used for Dial")); - // Check RCall::GetCallParams with aParams as a packaged RMobileCall::TMobileCallParamsV1 returns same iCug.iSuppressOA as that used for Dial. - ASSERT_EQUALS(checkParams.iCug.iSuppressOA, mobileCallParams.iCug.iSuppressOA, - _L("RCall::GetCallParams did not return the same iCug.iSuppressOA as that used for Dial")); - // Check RCall::GetCallParams with aParams as a packaged RMobileCall::TMobileCallParamsV1 returns same iAutoRedial as that used for Dial. - ASSERT_EQUALS(checkParams.iAutoRedial, mobileCallParams.iAutoRedial, - _L("RCall::GetCallParams did not return the same iAutoRedial as that used for Dial")); - - //------------ Post Notifiers ---------------------------- - call1.NotifyStatusChange(notifyCallStatusChangeStatus,callStatus); - call1.NotifyMobileCallStatusChange(notifyMobileCallChangeStatus, mobileCallStatus); - voiceLine.NotifyStatusChange(notifyStatusChangeStatus,lineStatus); - voiceLine.NotifyMobileLineStatusChange(notifyMobileLineChangeStatus, mobileLineStatus); - - // Hang up call. - TCoreEtelRequestStatus hangUpStatus (call1,&RCall::HangUpCancel); - CleanupStack::PushL(hangUpStatus); - call1.HangUp(hangUpStatus); - ASSERT_EQUALS(WaitForRequestWithTimeOut(hangUpStatus, ETimeMedium), KErrNone, - _L("RCall::HangUp timed-out")); - ASSERT_EQUALS(hangUpStatus.Int(), KErrNone, - _L("RCall::HangUp returned an error")); - - // === Check call status === - - // Check RCall::NotifyStatusChange completes with EStatusHangingUp -> EStatusIdle - expectedCallStatus = RCall::EStatusHangingUp; - const TInt wantedStatus = KErrNone; - iCallControlTestHelper.WaitForCallNotifyStatusChange(call1, - notifyStatusChangeStatus, - callStatus, - expectedCallStatus, - wantedStatus); - - call1.NotifyStatusChange(notifyStatusChangeStatus,callStatus); - expectedCallStatus = RCall::EStatusIdle; - iCallControlTestHelper.WaitForCallNotifyStatusChange(call1, - notifyStatusChangeStatus, - callStatus, - expectedCallStatus, - wantedStatus); - // Check RCall::GetStatus returns EStatusIdle. - ASSERT_EQUALS(call1.GetStatus(callStatus),KErrNone, - _L("RCall::GetStatus returned an error")); - ASSERT_EQUALS(callStatus, RCall::EStatusIdle, - _L("RCall::GetStatus returned an unexpected call status")); - - // Check RMobileCall::NotifyMobileCallStatusChange completes with EStatusDisconnecting -> EStatusIdle - expectedMobileCallStatus = RMobileCall::EStatusDisconnecting; - iCallControlTestHelper.WaitForMobileCallNotifyMobileCallStatusChange(call1, - notifyMobileCallChangeStatus, - mobileCallStatus, - expectedMobileCallStatus, - wantedStatus); - - call1.NotifyMobileCallStatusChange(notifyMobileCallChangeStatus, mobileCallStatus); - expectedMobileCallStatus = RMobileCall::EStatusIdle; - iCallControlTestHelper.WaitForMobileCallNotifyMobileCallStatusChange(call1, - notifyMobileCallChangeStatus, - mobileCallStatus, - expectedMobileCallStatus, - wantedStatus); - - // Check RMobileCall::GetMobileCallStatus returns status of EStatusIdle. - ASSERT_EQUALS(call1.GetMobileCallStatus(mobileCallStatus), KErrNone, - _L("RMobileCall::GetMobileStatus returned an error")); - ASSERT_EQUALS(mobileCallStatus, RMobileCall::EStatusIdle, - _L("RMobileCall::GetMobileStatus did not return a status EStatusIdle")); - - // === Check line status === - - // Check RLine::NotifyStatusChange completes with EStatusHangingUp -> EStatusIdle - expectedLineStatus = RCall::EStatusHangingUp; - iCallControlTestHelper.WaitForLineNotifyStatusChange(voiceLine, - notifyStatusChangeStatus, - lineStatus, - expectedLineStatus, - expectedStatus); - - voiceLine.NotifyStatusChange(notifyStatusChangeStatus,lineStatus); - expectedLineStatus = RCall::EStatusIdle; - iCallControlTestHelper.WaitForLineNotifyStatusChange(voiceLine, - notifyStatusChangeStatus, - lineStatus, - expectedLineStatus, - expectedStatus); - - // Check RLine::GetStatus returns EStatusIdle - ASSERT_EQUALS(voiceLine.GetStatus(lineStatus), KErrNone, - _L("RLine::GetStatus returned an error")); - ASSERT_EQUALS(lineStatus, RCall::EStatusIdle, - _L("RLine::GetStatus did not return EStatusIdle as expected")); - - // Check RMobileLine::NotifyMobileLineStatusChange completes with with EStatusDisconnecting -> EStatusIdle - expectedMobileLineStatus = RMobileCall::EStatusDisconnecting; - iCallControlTestHelper.WaitForMobileLineNotifyMobileLineStatusChange(voiceLine, - notifyMobileLineChangeStatus, - mobileLineStatus, - expectedMobileLineStatus, - expectedStatus); - - voiceLine.NotifyMobileLineStatusChange(notifyMobileLineChangeStatus, mobileLineStatus); - expectedMobileLineStatus = RMobileCall::EStatusIdle; - iCallControlTestHelper.WaitForMobileLineNotifyMobileLineStatusChange(voiceLine, - notifyMobileLineChangeStatus, - mobileLineStatus, - expectedMobileLineStatus, - expectedStatus); - - // Check RMobileLine::GetMobileLineStatus returns EStatusIdle - ASSERT_EQUALS(voiceLine.GetMobileLineStatus(mobileLineStatus), KErrNone, - _L("RMobileLine::GetMobileLineStatus returned an error")); - ASSERT_EQUALS(mobileLineStatus, RMobileCall::EStatusIdle, - _L("RMobileLine::GetMobileLineStatus did not set the status to EStatusIdle")); - - - //////////////////////////////////////////////////////////////// - // TEST END - //////////////////////////////////////////////////////////////// - - StartCleanup(); - - // Pop - // notifyCallStatusChangeStatus - // notifyMobileCallChangeStatus - // notifyStatusChangeStatus - // notifyMobileLineChangeStatus - // dialStatus - // hangUpStatus - CleanupStack::PopAndDestroy(6,¬ifyCallStatusChangeStatus); - - return TestStepResult(); - } - -TPtrC CCTSYIntegrationTestCallControl0013::GetTestStepName() -/** - * @return The test step name. - */ - { - return _L("CCTSYIntegrationTestCallControl0013"); - } - - - -CCTSYIntegrationTestCallControl0014::CCTSYIntegrationTestCallControl0014(CEtelSessionMgr& aEtelSessionMgr) - : CCTSYIntegrationTestCallControlBase(aEtelSessionMgr) -/** - * Constructor. - */ - { - SetTestStepName(CCTSYIntegrationTestCallControl0014::GetTestStepName()); - } - -CCTSYIntegrationTestCallControl0014::~CCTSYIntegrationTestCallControl0014() -/** - * Destructor. - */ - { - } - -TVerdict CCTSYIntegrationTestCallControl0014::doTestStepL() -/** - * @SYMTestCaseID BA-CTSY-INT-CCON-0014 - * @SYMFssID BA/CTSY/CCON-0014 - * @SYMTestCaseDesc Dial and hang up a call specifying valid call parameters 06. - * @SYMTestPriority High - * @SYMTestActions RMobileCall::NotifyMobileCallStatusChange, RCall::NotifyStatusChange, RLine::NotifyStatusChange, RMobileLine::GetMobileLineStatus, RMobileLine::NotifyMobileLineStatusChange, RLine::GetStatus, RMobileCall::GetMobileCallStatus, RCall::GetCallParams, RCall::GetStatus, RCall::GetCallParams, RCall::GetStatus, RCall::HangUp - * @SYMTestExpectedResults Pass - Call connects and call parameters are correct. - * @SYMTestType CIT - * @SYMTestCaseDependencies live/automatic - * - * Reason for test: Verify call and line statuses and call params are correct. - * - * @return - TVerdict code - */ - { - - //////////////////////////////////////////////////////////////// - // SET UP - //////////////////////////////////////////////////////////////// - - // Check phone supports KCapsVoice - // Get Voice line 1 - RMobileLine& voiceLine = iEtelSessionMgr.GetLineL(KMainServer, KMainPhone, KVoiceLine); - // Get call 1 - RMobileCall& call1 = iEtelSessionMgr.GetCallL(KMainServer, KMainPhone, KVoiceLine, KCall1); - - RLine::TCaps lineCaps; - CHECK_EQUALS_L(voiceLine.GetCaps(lineCaps), KErrNone, - _L("RMobileLine::GetCaps returned an error")); - CHECK_BITS_SET_L(lineCaps.iFlags, RLine::KCapsVoice, KNoUnwantedBits, - _L("RLine::GetCaps returned wrong caps")); - - // Call TNetworkTsyTestHelper::WaitForRegisteredOnHomeNetworkL - RMobilePhone& phone = iEtelSessionMgr.GetPhoneL(KMainServer,KMainPhone); - CHECK_EQUALS_L(iNetworkTestHelper.WaitForRegisteredOnHomeNetworkL(phone), KErrNone, - _L("TNetworkTsyTestHelper::WaitForRegisteredOnHomeNetworkL returned with an error")); - - //////////////////////////////////////////////////////////////// - // SET UP END - //////////////////////////////////////////////////////////////// - - StartTest(); - - //////////////////////////////////////////////////////////////// - // TEST START - //////////////////////////////////////////////////////////////// - - - // Populate RMobileCall::TMobileCallParamsV1 with - RMobileCall::TMobileCallParamsV1 mobileCallParams; - RMobileCall::TMobileCallParamsV1Pckg mobileCallParamsPkg(mobileCallParams); - - // ?iSpeakerControl = EMonitorSpeakerControlUnknown - mobileCallParams.iSpeakerControl = RCall::EMonitorSpeakerControlUnknown; - // ?iSpeakerVolume = EMonitorSpeakerVolumeHigh - mobileCallParams.iSpeakerVolume = RCall::EMonitorSpeakerVolumeHigh; - // ?iInterval = 0x01 - mobileCallParams.iInterval = 0x01; - // ?iWaitForDialTone = EDialToneWait - mobileCallParams.iWaitForDialTone = RCall::EDialToneWait; - // ?iIdRestrict = EIdRestrictDefault - mobileCallParams.iIdRestrict = RMobileCall::EIdRestrictDefault; - // ?iExplicitInvoke = FALSE - mobileCallParams.iCug.iExplicitInvoke = FALSE ; - // ?iCugIndex = 0xffff - mobileCallParams.iCug.iCugIndex = 0xffff; - // ?iSuppressOA = FALSE - mobileCallParams.iCug.iSuppressOA = FALSE; - // ?iSuppressPrefCug = FALSE - mobileCallParams.iCug.iSuppressPrefCug = FALSE; - // ?iAutoRedial = FALSE - mobileCallParams.iAutoRedial = FALSE; - - //=========Post Notifiers=============== - - // post notifier for RCall::NotifyStatusChange - TCoreEtelRequestStatus notifyCallStatusChangeStatus (call1,&RCall::NotifyStatusChangeCancel); - CleanupStack::PushL(notifyCallStatusChangeStatus); - RCall::TStatus callStatus; - call1.NotifyStatusChange(notifyCallStatusChangeStatus,callStatus); - - // post a notifier for RMobileCall::NotifyMobileCallStatusChange - TExtEtelRequestStatus notifyMobileCallChangeStatus(call1, EMobileCallNotifyMobileCallStatusChange); - CleanupStack::PushL(notifyMobileCallChangeStatus); - RMobileCall::TMobileCallStatus mobileCallStatus; - call1.NotifyMobileCallStatusChange(notifyMobileCallChangeStatus, mobileCallStatus); - - // post a notifier for RLine::NotifyStatusChange - TCoreEtelRequestStatus notifyStatusChangeStatus (voiceLine,&RLine::NotifyStatusChangeCancel); - CleanupStack::PushL(notifyStatusChangeStatus); - RCall::TStatus lineStatus; - voiceLine.NotifyStatusChange(notifyStatusChangeStatus,lineStatus); - - // post a notifier for RMobileLine::NotifyMobileLineStatusChange - TExtEtelRequestStatus notifyMobileLineChangeStatus(voiceLine, EMobileLineNotifyMobileLineStatusChange); - CleanupStack::PushL(notifyMobileLineChangeStatus); - RMobileCall::TMobileCallStatus mobileLineStatus; - voiceLine.NotifyMobileLineStatusChange(notifyMobileLineChangeStatus, mobileLineStatus); - - // Dial a number which answers using call params. - TCoreEtelRequestStatus dialStatus(call1, &RCall::DialCancel); - CleanupStack::PushL(dialStatus); - TPtrC number; - ASSERT_TRUE(GetStringFromConfig(KIniVoiceNumSection, KIniVoiceNumber1, number) != EFalse, - _L("GetStringFromConfig did not complete as expected")); - call1.Dial(dialStatus,mobileCallParamsPkg, number); - // Wait for completion. - ASSERT_EQUALS(WaitForRequestWithTimeOut(dialStatus, ETimeMedium), KErrNone, - _L("RCall::Dial timed-out")); - ASSERT_EQUALS(dialStatus.Int(), KErrNone, - _L("RCall::Dial returned an error")); - - // === Check line status === - - TInt expectedStatus = KErrNone; - - // Check RLine::NotifyStatusChange completes with EStatusDialling -> EStatusConnecting -> EStatusConnected. - RCall::TStatus expectedLineStatus = RCall::EStatusDialling; - iCallControlTestHelper.WaitForLineNotifyStatusChange(voiceLine, - notifyStatusChangeStatus, - lineStatus, - expectedLineStatus, - expectedStatus); - - expectedLineStatus = RCall::EStatusConnecting; - voiceLine.NotifyStatusChange(notifyStatusChangeStatus, lineStatus); - iCallControlTestHelper.WaitForLineNotifyStatusChange(voiceLine, - notifyStatusChangeStatus, - lineStatus, - expectedLineStatus, - expectedStatus); - - expectedLineStatus = RCall::EStatusConnected; - voiceLine.NotifyStatusChange(notifyStatusChangeStatus, lineStatus); - iCallControlTestHelper.WaitForLineNotifyStatusChange(voiceLine, - notifyStatusChangeStatus, - lineStatus, - expectedLineStatus, - expectedStatus); - - // Check RLine::GetStatus returns EStatusConnected - ASSERT_EQUALS(voiceLine.GetStatus(lineStatus), KErrNone, - _L("RLine::GetStatus returned an error")); - ASSERT_EQUALS(lineStatus, RCall::EStatusConnected, - _L("RLine::GetStatus did not set line status to EStatusConnected as expected")); - - voiceLine.NotifyMobileLineStatusChange(notifyMobileLineChangeStatus, mobileLineStatus); - RMobileCall::TMobileCallStatus expectedMobileLineStatus = RMobileCall::EStatusConnected; - iCallControlTestHelper.WaitForMobileLineNotifyMobileLineStatusChange(voiceLine, - notifyMobileLineChangeStatus, - mobileLineStatus, - expectedMobileLineStatus, - expectedStatus); - - // Check RMobileLine::GetMobileLineStatus returns EStatusConnected - ASSERT_EQUALS(voiceLine.GetMobileLineStatus(mobileLineStatus), KErrNone, - _L("RMobileLine::GetMobileLineStatus returned an error")); - ASSERT_EQUALS(mobileLineStatus, RMobileCall::EStatusConnected, - _L("RMobileLine::GetMobileLineStatus did not set status to EStatusConnected")); - - // === Check call status === - - // Check RCall::NotifyStatusChange completes with EStatusDialling -> EStatusConnecting -> EStatusConnected. - RCall::TStatus expectedCallStatus = RCall::EStatusDialling; - - iCallControlTestHelper.WaitForCallNotifyStatusChange(call1, - notifyCallStatusChangeStatus, - callStatus, - expectedCallStatus, - expectedStatus); - - call1.NotifyStatusChange(notifyCallStatusChangeStatus,callStatus); - expectedCallStatus = RCall::EStatusConnecting; - iCallControlTestHelper.WaitForCallNotifyStatusChange(call1, - notifyCallStatusChangeStatus, - callStatus, - expectedCallStatus, - expectedStatus); - - call1.NotifyStatusChange(notifyCallStatusChangeStatus,callStatus); - expectedCallStatus = RCall::EStatusConnected; - iCallControlTestHelper.WaitForCallNotifyStatusChange(call1, - notifyCallStatusChangeStatus, - callStatus, - expectedCallStatus, - expectedStatus); - - // Check RCall::GetStatus returns EStatusConnected. - ASSERT_EQUALS(voiceLine.GetStatus(callStatus), KErrNone, - _L("RLine::GetStatus returned an error")); - ASSERT_EQUALS(callStatus, RCall::EStatusConnected, - _L("RLine::GetStatus did not return EStatusConnected as expected")); - - // Check RMobileCall::NotifyMobileCallStatusChange completes with EStatusDialling -> EStatusConnecting -> EStatusConnected. - RMobileCall::TMobileCallStatus expectedMobileCallStatus = RMobileCall::EStatusDialling; - iCallControlTestHelper.WaitForMobileCallNotifyMobileCallStatusChange(call1, - notifyMobileCallChangeStatus, - mobileCallStatus, - expectedMobileCallStatus, - expectedStatus); - - expectedMobileCallStatus = RMobileCall::EStatusConnecting; - call1.NotifyMobileCallStatusChange(notifyMobileCallChangeStatus, mobileCallStatus); - iCallControlTestHelper.WaitForMobileCallNotifyMobileCallStatusChange(call1, - notifyMobileCallChangeStatus, - mobileCallStatus, - expectedMobileCallStatus, - expectedStatus); - - expectedMobileCallStatus = RMobileCall::EStatusConnected; - call1.NotifyMobileCallStatusChange(notifyMobileCallChangeStatus, mobileCallStatus); - iCallControlTestHelper.WaitForMobileCallNotifyMobileCallStatusChange(call1, - notifyMobileCallChangeStatus, - mobileCallStatus, - expectedMobileCallStatus, - expectedStatus); - - // Check RMobileCall::GetMobileCallStatus returns status of EStatusConnected. - ASSERT_EQUALS(call1.GetMobileCallStatus(mobileCallStatus), KErrNone, - _L("RMobileCall::GetMobileCallStatus returned an error")); - ASSERT_EQUALS(mobileCallStatus, RMobileCall::EStatusConnected, - _L("RMobileCall::GetMobileCallStatus did not set call status EStatusConnected as expected")); - - // === Get call parameters. === - RMobileCall::TMobileCallParamsV1 checkParams; - RMobileCall::TMobileCallParamsV1Pckg checkParamsPkg(checkParams); - call1.GetCallParams(checkParamsPkg); - - // Check RCall::GetCallParams with aParams as a packaged RMobileCall::TMobileCallParamsV1 returns same iSpeakerControl as that used for Dial. - ASSERT_EQUALS(checkParams.iSpeakerControl, mobileCallParams.iSpeakerControl, - _L("RCall::GetCallParams did not return the same iSpeakerControl as that used for Dial")); - // Check RCall::GetCallParams with aParams as a packaged RMobileCall::TMobileCallParamsV1 returns same iSpeakerVolume as that used for Dial. - ASSERT_EQUALS(checkParams.iSpeakerVolume, mobileCallParams.iSpeakerVolume, - _L("RCall::GetCallParams did not return the same iSpeakerVolume as that used for Dial")); - // Check RCall::GetCallParams with aParams as a packaged RMobileCall::TMobileCallParamsV1 returns same iInterval as that used for Dial. - ASSERT_EQUALS(checkParams.iInterval, mobileCallParams.iInterval, - _L("RCall::GetCallParams did not return the same iInterval as that used for Dial")); - // Check RCall::GetCallParams with aParams as a packaged RMobileCall::TMobileCallParamsV1 returns same iWaitForDialTone as that used for Dial. - ASSERT_EQUALS(checkParams.iWaitForDialTone, mobileCallParams.iWaitForDialTone, - _L("RCall::GetCallParams did not return the same iWaitForDialTone as that used for Dial")); - // Check RCall::GetCallParams with aParams as a packaged RMobileCall::TMobileCallParamsV1 returns same iIdRestrict as that used for Dial. - ASSERT_EQUALS(checkParams.iIdRestrict, mobileCallParams.iIdRestrict, - _L("RCall::GetCallParams did not return the same iIdRestrict as that used for Dial")); - // Check RCall::GetCallParams with aParams as a packaged RMobileCall::TMobileCallParamsV1 returns same iCug.iExplicitInvoke as that used for Dial. - ASSERT_EQUALS(checkParams.iCug.iExplicitInvoke, mobileCallParams.iCug.iExplicitInvoke, - _L("RCall::GetCallParams did not return the same iCug.iExplicitInvoke as that used for Dial")); - // Check RCall::GetCallParams with aParams as a packaged RMobileCall::TMobileCallParamsV1 returns same iCug.iCugIndex as that used for Dial. - ASSERT_EQUALS(checkParams.iCug.iCugIndex, mobileCallParams.iCug.iCugIndex, - _L("RCall::GetCallParams did not return the same iCug.iCugIndex as that used for Dial")); - // Check RCall::GetCallParams with aParams as a packaged RMobileCall::TMobileCallParamsV1 returns same iCug.iSuppressPrefCug as that used for Dial. - ASSERT_EQUALS(checkParams.iCug.iSuppressPrefCug, mobileCallParams.iCug.iSuppressPrefCug, - _L("RCall::GetCallParams did not return the same iCug.iSuppressPrefCug as that used for Dial")); - // Check RCall::GetCallParams with aParams as a packaged RMobileCall::TMobileCallParamsV1 returns same iCug.iSuppressOA as that used for Dial. - ASSERT_EQUALS(checkParams.iCug.iSuppressOA, mobileCallParams.iCug.iSuppressOA, - _L("RCall::GetCallParams did not return the same iCug.iSuppressOA as that used for Dial")); - // Check RCall::GetCallParams with aParams as a packaged RMobileCall::TMobileCallParamsV1 returns same iAutoRedial as that used for Dial. - ASSERT_EQUALS(checkParams.iAutoRedial, mobileCallParams.iAutoRedial, - _L("RCall::GetCallParams did not return the same iAutoRedial as that used for Dial")); - - //------------ Post Notifiers ---------------------------- - call1.NotifyStatusChange(notifyCallStatusChangeStatus,callStatus); - call1.NotifyMobileCallStatusChange(notifyMobileCallChangeStatus, mobileCallStatus); - voiceLine.NotifyStatusChange(notifyStatusChangeStatus,lineStatus); - voiceLine.NotifyMobileLineStatusChange(notifyMobileLineChangeStatus, mobileLineStatus); - - // Hang up call. - TCoreEtelRequestStatus hangUpStatus (call1,&RCall::HangUpCancel); - CleanupStack::PushL(hangUpStatus); - call1.HangUp(hangUpStatus); - ASSERT_EQUALS(WaitForRequestWithTimeOut(hangUpStatus, ETimeMedium), KErrNone, - _L("RCall::HangUp timed-out")); - ASSERT_EQUALS(hangUpStatus.Int(), KErrNone, - _L("RCall::HangUp returned an error")); - - // === Check call status === - // Check RCall::NotifyStatusChange completes with EStatusHangingUp -> EStatusIdle - expectedCallStatus = RCall::EStatusHangingUp; - const TInt wantedStatus = KErrNone; - iCallControlTestHelper.WaitForCallNotifyStatusChange(call1, - notifyStatusChangeStatus, - callStatus, - expectedCallStatus, - wantedStatus); - - call1.NotifyStatusChange(notifyStatusChangeStatus,callStatus); - expectedCallStatus = RCall::EStatusIdle; - iCallControlTestHelper.WaitForCallNotifyStatusChange(call1, - notifyStatusChangeStatus, - callStatus, - expectedCallStatus, - wantedStatus); - // Check RCall::GetStatus returns EStatusIdle. - ASSERT_EQUALS(call1.GetStatus(callStatus),KErrNone, - _L("RCall::GetStatus returned an error")); - ASSERT_EQUALS(callStatus, RCall::EStatusIdle, - _L("RCall::GetStatus returned an unexpected call status")); - - // Check RMobileCall::NotifyMobileCallStatusChange completes with EStatusDisconnecting -> EStatusIdle - expectedMobileCallStatus = RMobileCall::EStatusDisconnecting; - iCallControlTestHelper.WaitForMobileCallNotifyMobileCallStatusChange(call1, - notifyMobileCallChangeStatus, - mobileCallStatus, - expectedMobileCallStatus, - wantedStatus); - - call1.NotifyMobileCallStatusChange(notifyMobileCallChangeStatus, mobileCallStatus); - expectedMobileCallStatus = RMobileCall::EStatusIdle; - iCallControlTestHelper.WaitForMobileCallNotifyMobileCallStatusChange(call1, - notifyMobileCallChangeStatus, - mobileCallStatus, - expectedMobileCallStatus, - wantedStatus); - - // Check RMobileCall::GetMobileCallStatus returns status of EStatusIdle. - ASSERT_EQUALS(call1.GetMobileCallStatus(mobileCallStatus), KErrNone, - _L("RMobileCall::GetMobileStatus returned an error")); - ASSERT_EQUALS(mobileCallStatus, RMobileCall::EStatusIdle, - _L("RMobileCall::GetMobileStatus did not return a status EStatusIdle")); - - // === Check line status === - - // Check RLine::NotifyStatusChange completes with EStatusHangingUp -> EStatusIdle - expectedLineStatus = RCall::EStatusHangingUp; - iCallControlTestHelper.WaitForLineNotifyStatusChange(voiceLine, - notifyStatusChangeStatus, - lineStatus, - expectedLineStatus, - expectedStatus); - - voiceLine.NotifyStatusChange(notifyStatusChangeStatus,lineStatus); - expectedLineStatus = RCall::EStatusIdle; - iCallControlTestHelper.WaitForLineNotifyStatusChange(voiceLine, - notifyStatusChangeStatus, - lineStatus, - expectedLineStatus, - expectedStatus); - - // Check RLine::GetStatus returns EStatusIdle - ASSERT_EQUALS(voiceLine.GetStatus(lineStatus), KErrNone, - _L("RLine::GetStatus returned an error")); - ASSERT_EQUALS(lineStatus, RCall::EStatusIdle, - _L("RLine::GetStatus did not return EStatusIdle as expected")); - - // Check RMobileLine::NotifyMobileLineStatusChange completes with with EStatusDisconnecting -> EStatusIdle - expectedMobileLineStatus = RMobileCall::EStatusDisconnecting; - iCallControlTestHelper.WaitForMobileLineNotifyMobileLineStatusChange(voiceLine, - notifyMobileLineChangeStatus, - mobileLineStatus, - expectedMobileLineStatus, - expectedStatus); - - voiceLine.NotifyMobileLineStatusChange(notifyMobileLineChangeStatus, mobileLineStatus); - expectedMobileLineStatus = RMobileCall::EStatusIdle; - iCallControlTestHelper.WaitForMobileLineNotifyMobileLineStatusChange(voiceLine, - notifyMobileLineChangeStatus, - mobileLineStatus, - expectedMobileLineStatus, - expectedStatus); - - // Check RMobileLine::GetMobileLineStatus returns EStatusIdle - ASSERT_EQUALS(voiceLine.GetMobileLineStatus(mobileLineStatus), KErrNone, - _L("RMobileLine::GetMobileLineStatus returned an error")); - ASSERT_EQUALS(mobileLineStatus, RMobileCall::EStatusIdle, - _L("RMobileLine::GetMobileLineStatus did not set the status to EStatusIdle")); - - - - //////////////////////////////////////////////////////////////// - // TEST END - //////////////////////////////////////////////////////////////// - - StartCleanup(); - - // Pop - // notifyCallStatusChangeStatus - // notifyMobileCallChangeStatus - // notifyStatusChangeStatus - // notifyMobileLineChangeStatus - // dialStatus - // hangUpStatus - CleanupStack::PopAndDestroy(6,¬ifyCallStatusChangeStatus); - - return TestStepResult(); - } - -TPtrC CCTSYIntegrationTestCallControl0014::GetTestStepName() -/** - * @return The test step name. - */ - { - return _L("CCTSYIntegrationTestCallControl0014"); - } - - - -CCTSYIntegrationTestCallControl0015::CCTSYIntegrationTestCallControl0015(CEtelSessionMgr& aEtelSessionMgr) - : CCTSYIntegrationTestCallControlBase(aEtelSessionMgr) -/** - * Constructor. - */ - { - SetTestStepName(CCTSYIntegrationTestCallControl0015::GetTestStepName()); - } - -CCTSYIntegrationTestCallControl0015::~CCTSYIntegrationTestCallControl0015() -/** - * Destructor. - */ - { - } - -TVerdict CCTSYIntegrationTestCallControl0015::doTestStepL() -/** - * @SYMTestCaseID BA-CTSY-INT-CCON-0015 - * @SYMFssID BA/CTSY/CCON-0015 - * @SYMTestCaseDesc Hang up of call by remote user. - * @SYMTestPriority High - * @SYMTestActions RLine::NotifyStatusChange, RMobileLine::NotifyMobileLineStatusChange, RLine::GetCallInfo, RLine::GetStatus, RMobileLine::GetMobileLineStatus, RLine::GetInfo, RMobileCall::GetMobileCallStatus, RMobileCall::NotifyMobileCallCapsChange, RMobileCall::NotifyMobileCallStatusChange - * @SYMTestExpectedResults Pass - Call hung up. Call info correct. - * @SYMTestType CIT - * @SYMTestCaseDependencies live/manual - * - * Reason for test: Verify line status, hook status and line info is correctly reflected by RLine and RMobileLine - * - * This test tests that the line information is correct when the phone dials and the remote - * user hangs up. - * - * @return - TVerdict code - */ - { - - //////////////////////////////////////////////////////////////// - // SET UP - //////////////////////////////////////////////////////////////// - - RMobilePhone& phone = iEtelSessionMgr.GetPhoneL(KMainServer,KMainPhone); - // Check phone supports KCapsVoice - // Get Voice line 1 - RMobileLine& voiceLine = iEtelSessionMgr.GetLineL(KMainServer, KMainPhone, KVoiceLine); - // Get call 1 - RMobileCall& call1 = iEtelSessionMgr.GetCallL(KMainServer, KMainPhone, KVoiceLine, KCall1); - - RLine::TCaps lineCaps; - CHECK_EQUALS_L(voiceLine.GetCaps(lineCaps), KErrNone, - _L("RMobileLine::GetCaps returned an error")); - CHECK_BITS_SET_L(lineCaps.iFlags, RLine::KCapsVoice, KNoUnwantedBits, - _L("RLine::GetCaps returned wrong caps")); - - // Call TNetworkTsyTestHelper::WaitForRegisteredOnHomeNetworkL - CHECK_EQUALS_L(iNetworkTestHelper.WaitForRegisteredOnHomeNetworkL(phone), KErrNone, - _L("TNetworkTsyTestHelper::WaitForRegisteredOnHomeNetworkL returned with an error")); - - //////////////////////////////////////////////////////////////// - // SET UP END - //////////////////////////////////////////////////////////////// - - StartTest(); - - //////////////////////////////////////////////////////////////// - // TEST START - //////////////////////////////////////////////////////////////// - - // post notifier for RLine::NotifyStatusChange - TCoreEtelRequestStatus notifyStatusChangeStatus (voiceLine,&RLine::NotifyStatusChangeCancel); - CleanupStack::PushL(notifyStatusChangeStatus); - RCall::TStatus lineStatus; - voiceLine.NotifyStatusChange(notifyStatusChangeStatus,lineStatus); - - // post a notifier for RMobileLine::NotifyMobileLineStatusChange - TExtEtelRequestStatus notifyMobileLineChangeStatus(voiceLine, EMobileLineNotifyMobileLineStatusChange); - CleanupStack::PushL(notifyMobileLineChangeStatus); - RMobileCall::TMobileCallStatus mobileLineStatus; - voiceLine.NotifyMobileLineStatusChange(notifyMobileLineChangeStatus, mobileLineStatus); - - DisplayUserInteractionPromptL(_L("To run this test correctly, you should have set your own phone number to voice number 1 in the ini file. After you press a key, the test will call your phone, answer the call."), ETimeLong); - - TPtrC number; - ASSERT_TRUE(GetStringFromConfig(KIniVoiceNumSection, KIniVoiceNumber1, number) != EFalse, - _L("CTestStep::GetStringFromConfig did not complete as expected")); - TCoreEtelRequestStatus dialStatus(call1, &RCall::DialCancel); - CleanupStack::PushL(dialStatus); - call1.Dial(dialStatus, number); - ASSERT_EQUALS(WaitForRequestWithTimeOut(dialStatus, ETimeMedium), KErrNone, - _L("RCall::Dial timed-out")); - ASSERT_EQUALS(dialStatus.Int(), KErrNone, - _L("RCall::Dial returned with an error")); - - TEST_CHECK_POINT_L(_L("Couldn't dial a call, no point continuing.")); - - // === Check line status === - // Check RLine::NotifyStatusChange completes with EStatusDialling -> EStatusConnecting -> EStatusConnected. - const TInt expectedStatus = KErrNone; - RCall::TStatus expectedLineStatus = RCall::EStatusDialling; - iCallControlTestHelper.WaitForLineNotifyStatusChange(voiceLine, - notifyStatusChangeStatus, - lineStatus, - expectedLineStatus, - expectedStatus); - - voiceLine.NotifyStatusChange(notifyStatusChangeStatus,lineStatus); - expectedLineStatus = RCall::EStatusConnecting; - iCallControlTestHelper.WaitForLineNotifyStatusChange(voiceLine, - notifyStatusChangeStatus, - lineStatus, - expectedLineStatus, - expectedStatus); - - voiceLine.NotifyStatusChange(notifyStatusChangeStatus,lineStatus); - expectedLineStatus = RCall::EStatusConnected; - iCallControlTestHelper.WaitForLineNotifyStatusChange(voiceLine, - notifyStatusChangeStatus, - lineStatus, - expectedLineStatus, - expectedStatus); - - // Check RLine::GetStatus returns EStatusConnected - ASSERT_EQUALS(voiceLine.GetStatus(lineStatus), KErrNone, - _L("RLine::GetStatus returned an error")); - ASSERT_EQUALS(lineStatus, RCall::EStatusConnected, - _L("RLine::GetStatus did not return EStatusConnected as expected")); - - // Check RMobileLine::NotifyMobileLineStatusChange completes with with EStatusDialling -> EStatusConnecting -> EStatusConnected. - RMobileCall::TMobileCallStatus expectedMobileLineStatus = RMobileCall::EStatusDialling; - iCallControlTestHelper.WaitForMobileLineNotifyMobileLineStatusChange(voiceLine, - notifyMobileLineChangeStatus, - mobileLineStatus, - expectedMobileLineStatus, - expectedStatus); - - voiceLine.NotifyMobileLineStatusChange(notifyMobileLineChangeStatus, mobileLineStatus); - expectedMobileLineStatus = RMobileCall::EStatusConnecting; - iCallControlTestHelper.WaitForMobileLineNotifyMobileLineStatusChange(voiceLine, - notifyMobileLineChangeStatus, - mobileLineStatus, - expectedMobileLineStatus, - expectedStatus); - - voiceLine.NotifyMobileLineStatusChange(notifyMobileLineChangeStatus, mobileLineStatus); - expectedMobileLineStatus = RMobileCall::EStatusConnected; - iCallControlTestHelper.WaitForMobileLineNotifyMobileLineStatusChange(voiceLine, - notifyMobileLineChangeStatus, - mobileLineStatus, - expectedMobileLineStatus, - expectedStatus); - - - // Check RMobileLine::GetMobileLineStatus returns EStatusConnected - ASSERT_EQUALS(voiceLine.GetMobileLineStatus(mobileLineStatus), KErrNone, - _L("RMobileLine::GetMobileLineStatus returned an error")); - ASSERT_EQUALS(mobileLineStatus, RMobileCall::EStatusConnected, - _L("RMobileLine::GetMobileLineStatus did not set line status to EStatusConnected")); - - // === Check line info === - - // Check RLine::GetCallInfo returns valid name. - // Check RLine::GetCallInfo returns caps in set of KCapsHangUp. - // Check RLine::GetCallInfo returns status of EStatusConnected. - RLine::TCallInfo callInfo; - ASSERT_EQUALS(voiceLine.GetCallInfo(0, callInfo), KErrNone, - _L("RLine::GetCallInfo returned an error")); - ASSERT_TRUE(callInfo.iCallName.Length() >0, - _L("RLine::GetCallInfo returned an invalid name")); - ASSERT_BITS_SET(callInfo.iCallCapsFlags, RCall::KCapsHangUp, KNoUnwantedBits, - _L("RLine::GetCallInfo returned wrong caps")); - ASSERT_EQUALS(callInfo.iStatus, RCall::EStatusConnected, - _L("RLine::GetCallInfo wrong iStatus, should be EStatusIdle")); - - // Check RLine::GetInfo returns status of EStatusConnected. - RLine::TLineInfo lineInfo; - ASSERT_EQUALS(voiceLine.GetInfo(lineInfo), KErrNone, - _L("RLine::GetInfo returned an error")); - ASSERT_EQUALS(lineInfo.iStatus, RCall::EStatusConnected, - _L("RLine::GetInfo did not return EStatusConnected")); - - //===== Post notifiers== - voiceLine.NotifyStatusChange(notifyStatusChangeStatus,lineStatus); - voiceLine.NotifyMobileLineStatusChange(notifyMobileLineChangeStatus, mobileLineStatus); - - // Instruct user to hang up the call - DisplayUserInteractionPromptL(_L("Hang up the call now"), ETimeMedium); - - // === Check line status === - - // Check RLine::NotifyStatusChange completes with EStatusHangingUp -> EStatusIdle - expectedLineStatus = RCall::EStatusHangingUp; - iCallControlTestHelper.WaitForLineNotifyStatusChange(voiceLine, - notifyStatusChangeStatus, - lineStatus, - expectedLineStatus, - expectedStatus); - - voiceLine.NotifyStatusChange(notifyStatusChangeStatus,lineStatus); - expectedLineStatus = RCall::EStatusIdle; - iCallControlTestHelper.WaitForLineNotifyStatusChange(voiceLine, - notifyStatusChangeStatus, - lineStatus, - expectedLineStatus, - expectedStatus); - // Check RLine::GetStatus returns EStatusIdle - ASSERT_EQUALS(voiceLine.GetStatus(lineStatus), KErrNone, - _L("RLine::GetStatus returned an error")); - ASSERT_EQUALS(lineStatus, RCall::EStatusIdle, - _L("RLine::GetStatus did not return EStatusConnected as expected")); - - // Check RMobileLine::NotifyMobileLineStatusChange completes with with EStatusDisconnecting -> EStatusIdle - expectedMobileLineStatus = RMobileCall::EStatusDisconnecting; - iCallControlTestHelper.WaitForMobileLineNotifyMobileLineStatusChange(voiceLine, - notifyMobileLineChangeStatus, - mobileLineStatus, - expectedMobileLineStatus, - expectedStatus); - - voiceLine.NotifyMobileLineStatusChange(notifyMobileLineChangeStatus, mobileLineStatus); - expectedMobileLineStatus = RMobileCall::EStatusIdle; - iCallControlTestHelper.WaitForMobileLineNotifyMobileLineStatusChange(voiceLine, - notifyMobileLineChangeStatus, - mobileLineStatus, - expectedMobileLineStatus, - expectedStatus); - // Check RMobileLine::GetMobileLineStatus returns EStatusIdle - ASSERT_EQUALS(voiceLine.GetMobileLineStatus(mobileLineStatus), KErrNone, - _L("RMobileLine::GetMobileLineStatus returned an error")); - ASSERT_EQUALS(mobileLineStatus, RMobileCall::EStatusIdle, - _L("RMobileLine::GetMobileLineStatus did not set line status to EStatusConnected")); - - // === Check line info === - - // Check RLine::GetCallInfo returns valid name. - // Check RLine::GetCallInfo returns caps in set of KCapsVoice | KCapsDial. - // Check RLine::GetCallInfo returns status of EStatusIdle. - ASSERT_EQUALS(voiceLine.GetCallInfo(0, callInfo), KErrNone, - _L("RLine::GetCallInfo returned an error")); - ASSERT_TRUE(callInfo.iCallName.Length() >0, - _L("RLine::GetCallInfo returned an invalid name")); - ASSERT_BITS_SET(callInfo.iCallCapsFlags, RCall::KCapsVoice | RCall::KCapsDial, KNoUnwantedBits, - _L("RLine::GetCallInfo returned wrong caps")); - ASSERT_EQUALS(callInfo.iStatus, RCall::EStatusIdle, - _L("RLine::GetCallInfo wrong iStatus, should be EStatusIdle")); - - // Check RLine::GetInfo returns status of EStatusIdle. - ASSERT_EQUALS(voiceLine.GetInfo(lineInfo), KErrNone, - _L("RLine::GetInfo returned an error")); - ASSERT_EQUALS(lineInfo.iStatus, RCall::EStatusIdle, - _L("RLine::GetInfo did not return EStatusConnected")); - - - //////////////////////////////////////////////////////////////// - // TEST END - //////////////////////////////////////////////////////////////// - - StartCleanup(); - - // hang up the active call - TCoreEtelRequestStatus hangUpStatus (call1,&RCall::HangUpCancel); - CleanupStack::PushL(hangUpStatus); - call1.HangUp(hangUpStatus); - WaitForRequestWithTimeOut(hangUpStatus, ETimeMedium); - - // Pop - // notifyStatusChangeStatus - // notifyMobileLineChangeStatus - // dialStatus - // hangUpStatus - CleanupStack::PopAndDestroy(4,¬ifyStatusChangeStatus); - - return TestStepResult(); - } - -TPtrC CCTSYIntegrationTestCallControl0015::GetTestStepName() -/** - * @return The test step name. - */ - { - return _L("CCTSYIntegrationTestCallControl0015"); - } - - - -CCTSYIntegrationTestCallControl0016::CCTSYIntegrationTestCallControl0016(CEtelSessionMgr& aEtelSessionMgr) - : CCTSYIntegrationTestCallControlBase(aEtelSessionMgr) -/** - * Constructor. - */ - { - SetTestStepName(CCTSYIntegrationTestCallControl0016::GetTestStepName()); - } - -CCTSYIntegrationTestCallControl0016::~CCTSYIntegrationTestCallControl0016() -/** - * Destructor. - */ - { - } - -TVerdict CCTSYIntegrationTestCallControl0016::doTestStepL() -/** - * @SYMTestCaseID BA-CTSY-INT-CCON-0016 - * @SYMFssID BA/CTSY/CCON-0016 - * @SYMTestCaseDesc Hang up of call by remote user. - * @SYMTestPriority High - * @SYMTestActions RCall::GetCaps, RMobileCall::NotifyHookChange, RMobileCall::NotifyMobileCallCapsChange, RMobileCall::GetMobileCallStatus, RMobileCall::GetMobileCallInfo, RCall::GetInfo, RCall::NotifyStatusChange, RMobileCall::NotifyMobileCallStatusChange, RCall::NotifyCapsChange, RCall::GetStatus, RMobileCall::GetMobileCallCaps - * @SYMTestExpectedResults Pass - Call hung up. Line info correct. - * @SYMTestType CIT - * @SYMTestCaseDependencies live/automatic - * - * Reason for test: Verify call status, caps and call info is correctly reflected by RCall and RMobileCall - * - * @return - TVerdict code - */ - { - - //////////////////////////////////////////////////////////////// - // SET UP - //////////////////////////////////////////////////////////////// - - - // Check phone supports KCapsVoice - // Get Voice line 1 - RMobileLine& voiceLine = iEtelSessionMgr.GetLineL(KMainServer, KMainPhone, KVoiceLine); - // Get call 1 - RMobileCall& call1 = iEtelSessionMgr.GetCallL(KMainServer, KMainPhone, KVoiceLine, KCall1); - - RLine::TCaps lineCaps; - CHECK_EQUALS_L(voiceLine.GetCaps(lineCaps), KErrNone, - _L("RMobileLine::GetCaps returned an error")); - CHECK_BITS_SET_L(lineCaps.iFlags, RLine::KCapsVoice, KNoUnwantedBits, - _L("RLine::GetCaps returned wrong caps")); - - // Call TNetworkTsyTestHelper::WaitForRegisteredOnHomeNetworkL - RMobilePhone& phone = iEtelSessionMgr.GetPhoneL(KMainServer,KMainPhone); - CHECK_EQUALS_L(iNetworkTestHelper.WaitForRegisteredOnHomeNetworkL(phone), KErrNone, - _L("TNetworkTsyTestHelper::WaitForRegisteredOnHomeNetworkL returned with an error")); - - //////////////////////////////////////////////////////////////// - // SET UP END - //////////////////////////////////////////////////////////////// - - StartTest(); - - //////////////////////////////////////////////////////////////// - // TEST START - //////////////////////////////////////////////////////////////// - - - // Post Notifier for RCall::NotifyCapsChange - TCoreEtelRequestStatus notifyCapsChangeStatus (call1,&RCall::NotifyCapsChangeCancel); - CleanupStack::PushL(notifyCapsChangeStatus); - RCall::TCaps caps; - call1.NotifyCapsChange(notifyCapsChangeStatus,caps); - - // post a notifier for RMobileCall::NotifyMobileCallCapsChange - TExtEtelRequestStatus notifyMobileCallCapsChangeStatus(call1, EMobileCallNotifyMobileCallCapsChange); - CleanupStack::PushL(notifyMobileCallCapsChangeStatus); - RMobileCall::TMobileCallCapsV1 mobileCallCaps; - RMobileCall::TMobileCallCapsV1Pckg mobileCallCapsPckg(mobileCallCaps); - call1.NotifyMobileCallCapsChange(notifyMobileCallCapsChangeStatus, mobileCallCapsPckg); - - // post notifier for RCall::NotifyStatusChange - TCoreEtelRequestStatus notifyCallStatusChangeStatus (call1,&RCall::NotifyStatusChangeCancel); - CleanupStack::PushL(notifyCallStatusChangeStatus); - RCall::TStatus callStatus; - call1.NotifyStatusChange(notifyCallStatusChangeStatus,callStatus); - - // post a notifier for RMobileCall::NotifyMobileCallStatusChange - TExtEtelRequestStatus notifyMobileCallChangeStatus(call1, EMobileCallNotifyMobileCallStatusChange); - CleanupStack::PushL(notifyMobileCallChangeStatus); - RMobileCall::TMobileCallStatus mobileCallStatus; - call1.NotifyMobileCallStatusChange(notifyMobileCallChangeStatus, mobileCallStatus); - - // Dial RPS which answers - TPtrC number; - GetRPSNumber(EVoiceLine,number); - RPSAnswerNextCallL(EVoiceLine); - - TCoreEtelRequestStatus dialStatus(call1, &RCall::DialCancel); - CleanupStack::PushL(dialStatus); - call1.Dial(dialStatus, number); - ASSERT_EQUALS(WaitForRequestWithTimeOut(dialStatus, ETimeMedium), KErrNone, - _L("RCall::Dial timed-out")); - ASSERT_EQUALS(dialStatus.Int(), KErrNone, - _L("RCall::Dial Expected KErrNone, but an error returned")); - - // === Check call caps === - - // Check RCall::NotifyCapsChange completes with caps in set of KCapsVoice | KCapsHangUp. - RCall::TCaps wantedCaps, unwantedCaps; - wantedCaps.iFlags = RCall::KCapsVoice | RCall::KCapsHangUp; - unwantedCaps.iFlags = 0; - const TInt wantedStatus = KErrNone; - - iCallControlTestHelper.WaitForCallNotifyCapsChange(call1, - notifyCapsChangeStatus, - caps, - wantedCaps, - unwantedCaps, - wantedStatus); - - // Check RCall::GetCaps supports KCapsHangUp | KCapsVoice. - ASSERT_EQUALS(call1.GetCaps(caps), KErrNone, - _L("RCall::GetCaps returned an Error")); - ASSERT_BITS_SET(caps.iFlags, RCall::KCapsHangUp | RCall::KCapsVoice, KNoUnwantedBits, - _L("RCall::GetCaps returned wrong caps")); - - // Check RMobileCall::NotifyMobileCallCapsChange completes with iCallControlCaps in set of KCapsVoice | KCapsHold | KCapsHangUp. - // Check RMobileCall::NotifyMobileCallCapsChange completes with iCallEventCaps in set of KCapsLocalHold | KCapsLocalTransfer | KCapsRemoteHold | KCapsRemoteTerminate | KCapsRemoteConferenceCreate. - RMobileCall::TMobileCallCapsV1 wantedMobileCaps; - wantedMobileCaps.iCallControlCaps = RMobileCall::KCapsVoice | RMobileCall::KCapsHold | RMobileCall::KCapsHangUp; - wantedMobileCaps.iCallEventCaps = RMobileCall::KCapsLocalHold | RMobileCall::KCapsLocalTransfer | RMobileCall::KCapsRemoteHold | RMobileCall::KCapsRemoteTerminate | RMobileCall::KCapsRemoteConferenceCreate; - - TCmpRMobileCallTMobileCallCaps mobileCapsComp(wantedMobileCaps, mobileCallCaps, *this); - iCallControlTestHelper.WaitForMobileCallNotifyMobileCallCapsChange(call1, - notifyMobileCallCapsChangeStatus, - mobileCapsComp, - wantedStatus); - - // Check RMobileCall::GetMobileCallCaps includes iCallControlCaps in set of KCapsVoice | KCapsHold | KCapsHangUp. - // Check RMobileCall::GetMobileCallCaps includes iCallEventCaps in set of KCapsLocalHold | KCapsLocalTransfer | KCapsRemoteHold | KCapsRemoteTerminate | KCapsRemoteConferenceCreate. - ASSERT_EQUALS(call1.GetMobileCallCaps(mobileCallCapsPckg), KErrNone, - _L("RMobileCall::GetMobileCallCaps returned an error")); - wantedMobileCaps.iCallControlCaps = RMobileCall::KCapsVoice | RMobileCall::KCapsHold | RMobileCall::KCapsHangUp; - - ASSERT_BITS_SET(mobileCallCaps.iCallControlCaps, wantedMobileCaps.iCallControlCaps, KNoUnwantedBits, - _L("RMobileCall::GetMobileCallCaps returned unexpected iCallControlCaps")); - - wantedMobileCaps.iCallEventCaps = RMobileCall::KCapsLocalHold | - RMobileCall::KCapsLocalTransfer | - RMobileCall::KCapsRemoteHold | - RMobileCall::KCapsRemoteTerminate | - RMobileCall::KCapsRemoteConferenceCreate; - - ASSERT_BITS_SET(mobileCallCaps.iCallEventCaps, wantedMobileCaps.iCallEventCaps, KNoUnwantedBits, - _L("RMobileCall::GetMobileCallCaps returned unexpected iCallEventCaps")); - - // === Check call status === - - // Check RCall::NotifyStatusChange completes with EStatusDialling -> EStatusConnecting -> EStatusConnected. - RCall::TStatus expectedCallStatus = RCall::EStatusDialling; - iCallControlTestHelper.WaitForCallNotifyStatusChange(call1, - notifyCallStatusChangeStatus, - callStatus, - expectedCallStatus, - wantedStatus); - call1.NotifyStatusChange(notifyCallStatusChangeStatus,callStatus); - expectedCallStatus = RCall::EStatusConnecting; - iCallControlTestHelper.WaitForCallNotifyStatusChange(call1, - notifyCallStatusChangeStatus, - callStatus, - expectedCallStatus, - wantedStatus); - - call1.NotifyStatusChange(notifyCallStatusChangeStatus,callStatus); - expectedCallStatus = RCall::EStatusConnected; - iCallControlTestHelper.WaitForCallNotifyStatusChange(call1, - notifyCallStatusChangeStatus, - callStatus, - expectedCallStatus, - wantedStatus); - - // Check RCall::GetStatus returns EStatusConnected. - ASSERT_EQUALS(call1.GetStatus(callStatus),KErrNone, - _L("RCall::GetStatus returned an error")); - ASSERT_EQUALS(callStatus, RCall::EStatusConnected, - _L("RCall::GetStatus returned an unexpected call status")); - - // Check RMobileCall::NotifyMobileCallStatusChange completes with EStatusDialling -> EStatusConnecting -> EStatusConnected. - RMobileCall::TMobileCallStatus expectedMobileCallStatus = RMobileCall::EStatusDialling; - iCallControlTestHelper.WaitForMobileCallNotifyMobileCallStatusChange(call1, - notifyMobileCallChangeStatus, - mobileCallStatus, - expectedMobileCallStatus, - wantedStatus); - - call1.NotifyMobileCallStatusChange(notifyMobileCallChangeStatus, mobileCallStatus); - expectedMobileCallStatus = RMobileCall::EStatusConnecting; - iCallControlTestHelper.WaitForMobileCallNotifyMobileCallStatusChange(call1, - notifyMobileCallChangeStatus, - mobileCallStatus, - expectedMobileCallStatus, - wantedStatus); - - call1.NotifyMobileCallStatusChange(notifyMobileCallChangeStatus, mobileCallStatus); - expectedMobileCallStatus = RMobileCall::EStatusConnected; - iCallControlTestHelper.WaitForMobileCallNotifyMobileCallStatusChange(call1, - notifyMobileCallChangeStatus, - mobileCallStatus, - expectedMobileCallStatus, - wantedStatus); - - // Check RMobileCall::GetMobileCallStatus returns status of EStatusConnected. - ASSERT_EQUALS(call1.GetMobileCallStatus(mobileCallStatus), KErrNone, - _L("RMobileCall::GetMobileStatus returned an error")); - ASSERT_EQUALS(mobileCallStatus, RMobileCall::EStatusConnected, - _L("RMobileCall::GetMobileStatus did not return a status EStatusConnected")); - - // === Check call info === - - User::After(2000000); // Wait added for call duration - - // Check RCall::GetInfo returns valid call name. - // Check RCall::GetInfo returns valid voice line name. - // Check RCall::GetInfo returns call status of EStatusConnected. - // Check RCall::GetInfo returns call duration of > 0. - RCall::TCallInfo callInfo; - ASSERT_EQUALS(call1.GetInfo(callInfo), KErrNone, - _L("RCall::GetInfo returned an error")); - ASSERT_TRUE(callInfo.iCallName.Length() >0, - _L("RCall::GetInfo returned an invalid name")); - ASSERT_TRUE(callInfo.iLineName.Length() >0, - _L("RCall::GetInfo returned an invalid Line name")); - ASSERT_EQUALS(callInfo.iStatus, RCall::EStatusConnected, - _L("RCall::GetInfo wrong iStatus, should be EStatusConnected")); - ASSERT_TRUE(callInfo.iDuration.Int() > 0, - _L("RCall::GetInfo wrong iDuration, should be >0")); - - // Check RMobileCall::GetMobileCallInfo returns iValid > 0. - // Check RMobileCall::GetMobileCallInfo returns data for attributes makred as valid in iValid. - // Check RMobileCall::GetMobileCallInfo returns valid line name. - RMobileCall::TMobileCallInfoV1 mobileCallInfo; - RMobileCall::TMobileCallInfoV1Pckg mobileCallInfoPckg(mobileCallInfo); - ASSERT_EQUALS(call1.GetMobileCallInfo(mobileCallInfoPckg), KErrNone, - _L("RMobileCall::GetMobileCallInfo returned an error")); - ASSERT_TRUE(mobileCallInfo.iLineName.Length() >0, - _L("RMobileCall::GetMobileCallInfo returned an invalid line name")); - ASSERT_TRUE(mobileCallInfo.iValid > 0, - _L("RMobileCall::GetMobileCallInfo returned unexpected flags in iValid")); - - iCallControlTestHelper.CheckForValidCallInfo(mobileCallInfo, number); - - //==== Post Notifiers ======== - call1.NotifyCapsChange(notifyCapsChangeStatus,caps); - call1.NotifyMobileCallCapsChange(notifyMobileCallCapsChangeStatus, mobileCallCapsPckg); - call1.NotifyStatusChange(notifyCallStatusChangeStatus,callStatus); - call1.NotifyMobileCallStatusChange(notifyMobileCallChangeStatus, mobileCallStatus); - - // RPS hangs up. - ASSERT_EQUALS(RPSHangupL(EVoiceLine,0), KErrNone, _L("CCTSYIntegrationTestSuiteStepBase::RPSHangup returned an error")); - - // === Check call caps === - - // Check RCall::NotifyCapsChange completes with caps in set of KCapsVoice | KCapsDial. - wantedCaps.iFlags = RCall::KCapsVoice | RCall::KCapsDial; - unwantedCaps.iFlags = KNoUnwantedBits; - ERR_PRINTF2(_L("$CTSYKnownFailure: defect id = %d"), 10023); - iCallControlTestHelper.WaitForCallNotifyCapsChange(call1, - notifyCapsChangeStatus, - caps, - wantedCaps, - unwantedCaps, - wantedStatus); - - // Check RCall::GetCaps supports KCapsVoice | KCapsDial. - ASSERT_EQUALS(call1.GetCaps(caps), KErrNone, - _L("RCall::GetCaps returned an Error")); - ASSERT_BITS_SET(caps.iFlags, RCall::KCapsVoice | RCall::KCapsDial, KNoUnwantedBits, - _L("RCall::GetCaps returned wrong caps")); - - // Check RMobileCall::NotifyMobileCallCapsChange completes with iCallControlCaps in set of KCapsVoice | KCapsDial. - // Check RMobileCall::NotifyMobileCallCapsChange completes with iCallEventCaps in set of 0. - wantedMobileCaps.iCallControlCaps = RMobileCall::KCapsVoice | RMobileCall::KCapsDial; - wantedMobileCaps.iCallEventCaps = 0; - TCmpRMobileCallTMobileCallCaps mobileCapsComp2(wantedMobileCaps, mobileCallCaps, *this); - iCallControlTestHelper.WaitForMobileCallNotifyMobileCallCapsChange(call1, - notifyMobileCallCapsChangeStatus, - mobileCapsComp2, - wantedStatus); - - // Check RMobileCall::GetMobileCallCaps includes iCallControlCaps in set of KCapsVoice | KCapsDial. - // Check RMobileCall::GetMobileCallCaps includes iCallEventCaps in set of 0. - ASSERT_EQUALS(call1.GetMobileCallCaps(mobileCallCapsPckg), KErrNone, - _L("RMobileCall::GetMobileCallCaps returned an error")); - wantedMobileCaps.iCallControlCaps = RMobileCall::KCapsVoice | RMobileCall::KCapsDial; - ASSERT_BITS_SET(mobileCallCaps.iCallControlCaps, wantedMobileCaps.iCallControlCaps, KNoUnwantedBits, - _L("RMobileCall::GetMobileCallCaps returned unexpected iCallControlCaps")); - wantedMobileCaps.iCallEventCaps = 0; - ASSERT_BITS_SET(mobileCallCaps.iCallEventCaps, wantedMobileCaps.iCallEventCaps, KNoUnwantedBits, - _L("RMobileCall::GetMobileCallCaps returned unexpected iCallEventCaps")); - - // === Check call status === - - // Check RCall::NotifyStatusChange completes with EStatusHangingUp -> EStatusIdle. - expectedCallStatus = RCall::EStatusHangingUp; - iCallControlTestHelper.WaitForCallNotifyStatusChange(call1, - notifyCallStatusChangeStatus, - callStatus, - expectedCallStatus, - wantedStatus); - - call1.NotifyStatusChange(notifyCallStatusChangeStatus,callStatus); - expectedCallStatus = RCall::EStatusIdle; - iCallControlTestHelper.WaitForCallNotifyStatusChange(call1, - notifyCallStatusChangeStatus, - callStatus, - expectedCallStatus, - wantedStatus); - - // Check RCall::GetStatus returns EStatusIdle. - ASSERT_EQUALS(call1.GetStatus(callStatus),KErrNone, - _L("RCall::GetStatus returned an error")); - ASSERT_EQUALS(callStatus, RCall::EStatusIdle, - _L("RCall::GetStatus returned an unexpected call status")); - - // Check RMobileCall::NotifyMobileCallStatusChange completes with EStatusDisconnecting -> EStatusIdle. - expectedMobileCallStatus = RMobileCall::EStatusDisconnecting; - iCallControlTestHelper.WaitForMobileCallNotifyMobileCallStatusChange(call1, - notifyMobileCallChangeStatus, - mobileCallStatus, - expectedMobileCallStatus, - wantedStatus); - - call1.NotifyMobileCallStatusChange(notifyMobileCallChangeStatus, mobileCallStatus); - expectedMobileCallStatus = RMobileCall::EStatusIdle; - iCallControlTestHelper.WaitForMobileCallNotifyMobileCallStatusChange(call1, - notifyMobileCallChangeStatus, - mobileCallStatus, - expectedMobileCallStatus, - wantedStatus); - - // Check RMobileCall::GetMobileCallStatus returns status of EStatusIdle. - ASSERT_EQUALS(call1.GetMobileCallStatus(mobileCallStatus), KErrNone, - _L("RMobileCall::GetMobileStatus returned an error")); - ASSERT_EQUALS(mobileCallStatus, RMobileCall::EStatusIdle, - _L("RMobileCall::GetMobileStatus did not return a status EStatusIdle")); - - // === Check call info === - - // Check RCall::GetInfo returns valid call name. - // Check RCall::GetInfo returns valid voice line name. - // Check RCall::GetInfo returns call status of EStatusIdle. - // Check RCall::GetInfo returns call duration of > 0. - ASSERT_EQUALS(call1.GetInfo(callInfo), KErrNone, - _L("RCall::GetInfo returned an error")); - ASSERT_TRUE(callInfo.iCallName.Length() >0, - _L("RCall::GetInfo returned an invalid name")); - ASSERT_TRUE(callInfo.iLineName.Length() >0, - _L("RCall::GetInfo returned an invalid Line name")); - ASSERT_EQUALS(callInfo.iStatus, RCall::EStatusIdle, - _L("RCall::GetInfo wrong iStatus, should be EStatusIdle")); - ASSERT_TRUE(callInfo.iDuration.Int() > 0, - _L("RCall::GetInfo wrong iDuration, should be >0")); - - // Check RMobileCall::GetMobileCallInfo returns iValid > 0. - // Check RMobileCall::GetMobileCallInfo returns data for attributes makred as valid in iValid. - // Check RMobileCall::GetMobileCallInfo returns valid line name. - ASSERT_EQUALS(call1.GetMobileCallInfo(mobileCallInfoPckg), KErrNone, - _L("RMobileCall::GetMobileCallInfo returned an error")); - ASSERT_TRUE(mobileCallInfo.iLineName.Length() >0, - _L("RMobileCall::GetMobileCallInfo returned an invalid line name")); - ASSERT_TRUE(mobileCallInfo.iValid > 0, - _L("RMobileCall::GetMobileCallInfo returned unexpected flags in iValid")); - -// iCallControlTestHelper.CheckForValidCallInfo(mobileCallInfo, number); - // Note: not using TCallControlTsyTestHelper::CheckForValidCallInfo() as some checks would fail at this point - ERR_PRINTF2(_L("$CTSYKnownFailure: defect id = %d"), 10017); - if(mobileCallInfo.iValid & RMobileCall::KCallRemoteParty) - { - ASSERT_TRUE(mobileCallInfo.iRemoteParty.iRemoteNumber.iTelNumber.Length() > 0, - _L("RMobileCall::GetMobileCallInfo set bitmask for KCallRemoteParty to true, but iRemoteParty.iRemoteNumber.iTelNumber has invalid length")); - } - if(mobileCallInfo.iValid & RMobileCall::KCallDuration) - { - TTimeIntervalSeconds startTime = 0; - TTimeIntervalSeconds durationTime(mobileCallInfo.iDuration); - ASSERT_TRUE(durationTime > startTime, - _L("RMobileCall::GetMobileCallInfo set bitmask for KCallDuration to true, but set iDuration to an invalid number")); - } - - if(mobileCallInfo.iValid & RMobileCall::KCallId) - { - ASSERT_EQUALS( mobileCallInfo.iCallId, -1, - _L("RMobileCall::GetMobileCallInfo set bitmask for KCallId to true, but set iCallId to an invalid number")); - } - - //////////////////////////////////////////////////////////////// - // TEST END - //////////////////////////////////////////////////////////////// - - StartCleanup(); - - // Pop - // notifyCapsChangeStatus - // notifyMobileCallCapsChangeStatus - // notifyCallStatusChangeStatus - // notifyMobileCallChangeStatus - // dialStatus - CleanupStack::PopAndDestroy(5,¬ifyCapsChangeStatus); - - return TestStepResult(); - } - -TPtrC CCTSYIntegrationTestCallControl0016::GetTestStepName() -/** - * @return The test step name. - */ - { - return _L("CCTSYIntegrationTestCallControl0016"); - } - - - -CCTSYIntegrationTestCallControl0017::CCTSYIntegrationTestCallControl0017(CEtelSessionMgr& aEtelSessionMgr) - : CCTSYIntegrationTestCallControlBase(aEtelSessionMgr) -/** - * Constructor. - */ - { - SetTestStepName(CCTSYIntegrationTestCallControl0017::GetTestStepName()); - } - -CCTSYIntegrationTestCallControl0017::~CCTSYIntegrationTestCallControl0017() -/** - * Destructor. - */ - { - } - -TVerdict CCTSYIntegrationTestCallControl0017::doTestStepL() -/** - * @SYMTestCaseID BA-CTSY-INT-CCON-0017 - * @SYMFssID BA/CTSY/CCON-0017 - * @SYMTestCaseDesc Rejection of an incoming call - * @SYMTestPriority High - * @SYMTestActions RMobileLine::NotifyMobileLineStatusChange, RCall::HangUp, RMobileCall::GetMobileCallStatus, RLine::NotifyIncomingCall, RCall::NotifyStatusChange, RMobileCall::NotifyMobileCallStatusChange, RMobileLine::GetMobileLineStatus, RLine::GetStatus, RLine::NotifyHookChange, RLine::GetHookStatus, RCall::GetStatus - * @SYMTestExpectedResults Pass - Call, line and hook statuses return to idle. - * @SYMTestType CIT - * @SYMTestCaseDependencies live/automatic - * - * Reason for test: Verify call and line statuses return to - * idle. - * - * @return - TVerdict code - */ - { - - //////////////////////////////////////////////////////////////// - // SET UP - //////////////////////////////////////////////////////////////// - - // Check phone supports KCapsVoice - // Get Voice line 1 - RMobileLine& voiceLine = iEtelSessionMgr.GetLineL(KMainServer, KMainPhone, KVoiceLine); - // Get call 1 - RMobileCall& call1 = iEtelSessionMgr.GetCallL(KMainServer, KMainPhone, KVoiceLine, KCall1); - - RLine::TCaps lineCaps; - CHECK_EQUALS_L(voiceLine.GetCaps(lineCaps), KErrNone, - _L("RMobileLine::GetCaps returned an error")); - CHECK_BITS_SET_L(lineCaps.iFlags, RLine::KCapsVoice, KNoUnwantedBits, - _L("RLine::GetCaps returned wrong caps")); - - // Call TNetworkTsyTestHelper::WaitForRegisteredOnHomeNetworkL - RMobilePhone& phone = iEtelSessionMgr.GetPhoneL(KMainServer,KMainPhone); - CHECK_EQUALS_L(iNetworkTestHelper.WaitForRegisteredOnHomeNetworkL(phone), KErrNone, - _L("TNetworkTsyTestHelper::WaitForRegisteredOnHomeNetworkL returned with an error")); - - //////////////////////////////////////////////////////////////// - // SET UP END - //////////////////////////////////////////////////////////////// - - StartTest(); - - //////////////////////////////////////////////////////////////// - // TEST START - //////////////////////////////////////////////////////////////// - - // post notifier for RLine::NotifyIncomingCall - TCoreEtelRequestStatus notifyIncomingCallStatus (voiceLine,&RLine::NotifyIncomingCallCancel); - CleanupStack::PushL(notifyIncomingCallStatus); - TName name; - voiceLine.NotifyIncomingCall(notifyIncomingCallStatus,name); - - // Request incoming call from RPS. - RPSRequestIncomingCallL(EVoiceLine); - - // Check RLine::NotifyIncomingCall completes with call name. - ASSERT_EQUALS(WaitForRequestWithTimeOut(notifyIncomingCallStatus,ETimeMedium),KErrNone, - _L("RLine::NotifyIncomingCall did not complete without error")); - ASSERT_EQUALS(notifyIncomingCallStatus.Int(), KErrNone, - _L("RLine::NotifyIncomingCall set requestStatus to an error")); - ASSERT_TRUE(name.Length() > 0, - _L("RLine::NotifyIncomingCall did not set a line name")); - - // Get the incoming call - TCallId incomingCallId; - call1 = iEtelSessionMgr.GetIncomingCallL(KMainServer, KMainPhone, KVoiceLine, name, incomingCallId); - - // post notifier for RCall::NotifyStatusChange - TCoreEtelRequestStatus notifyCallStatusChangeStatus (call1,&RCall::NotifyStatusChangeCancel); - CleanupStack::PushL(notifyCallStatusChangeStatus); - RCall::TStatus callStatus; - call1.NotifyStatusChange(notifyCallStatusChangeStatus,callStatus); - - // post a notifier for RMobileCall::NotifyMobileCallStatusChange - TExtEtelRequestStatus notifyMobileCallChangeStatus(call1, EMobileCallNotifyMobileCallStatusChange); - CleanupStack::PushL(notifyMobileCallChangeStatus); - RMobileCall::TMobileCallStatus mobileCallStatus; - call1.NotifyMobileCallStatusChange(notifyMobileCallChangeStatus, mobileCallStatus); - - // post notifier for RLine::NotifyStatusChange - TCoreEtelRequestStatus notifyStatusChangeStatus (voiceLine,&RLine::NotifyStatusChangeCancel); - CleanupStack::PushL(notifyStatusChangeStatus); - RCall::TStatus lineStatus; - voiceLine.NotifyStatusChange(notifyStatusChangeStatus,lineStatus); - - // post a notifier for RMobileLine::NotifyMobileLineStatusChange - TExtEtelRequestStatus notifyMobileLineChangeStatus(voiceLine, EMobileLineNotifyMobileLineStatusChange); - CleanupStack::PushL(notifyMobileLineChangeStatus); - RMobileCall::TMobileCallStatus mobileLineStatus; - voiceLine.NotifyMobileLineStatusChange(notifyMobileLineChangeStatus, mobileLineStatus); - - // Reject call with RCall::HangUp - TCoreEtelRequestStatus hangUpStatus (call1,&RCall::HangUpCancel); - CleanupStack::PushL(hangUpStatus); - call1.HangUp(hangUpStatus); - ASSERT_EQUALS(WaitForRequestWithTimeOut(hangUpStatus, ETimeMedium), KErrNone, - _L("RCall::HangUp returned an error")); - ASSERT_EQUALS(hangUpStatus.Int(), KErrNone, - _L("RCall::HangUp returned an error")); - - const TInt expectedStatus = KErrNone; - - // === Check call status === - - // Check RCall::NotifyStatusChange completes with EStatusIdle. - RCall::TStatus expectedCallStatus = RCall::EStatusIdle; - const TInt wantedStatus = KErrNone; - iCallControlTestHelper.WaitForCallNotifyStatusChange(call1, - notifyStatusChangeStatus, - callStatus, - expectedCallStatus, - wantedStatus); - // Check RCall::GetStatus returns EStatusIdle. - ASSERT_EQUALS(call1.GetStatus(callStatus),KErrNone, - _L("RCall::GetStatus returned an error")); - ASSERT_EQUALS(callStatus, RCall::EStatusIdle, - _L("RCall::GetStatus returned an unexpected call status")); - - // Check RMobileCall::NotifyMobileCallStatusChange completes with EStatusIdle. - RMobileCall::TMobileCallStatus expectedMobileCallStatus = RMobileCall::EStatusIdle; - iCallControlTestHelper.WaitForMobileCallNotifyMobileCallStatusChange(call1, - notifyMobileCallChangeStatus, - mobileCallStatus, - expectedMobileCallStatus, - wantedStatus); - - // Check RMobileCall::GetMobileCallStatus returns status of EStatusIdle. - ASSERT_EQUALS(call1.GetMobileCallStatus(mobileCallStatus), KErrNone, - _L("RMobileCall::GetMobileStatus returned an error")); - ASSERT_EQUALS(mobileCallStatus, RMobileCall::EStatusIdle, - _L("RMobileCall::GetMobileStatus did not return a status EStatusIdle")); - - // === Check line status === - - // Check RLine::NotifyStatusChange completes with EStatusIdle - RCall::TStatus expectedLineStatus = RCall::EStatusIdle; - iCallControlTestHelper.WaitForLineNotifyStatusChange(voiceLine, - notifyStatusChangeStatus, - lineStatus, - expectedLineStatus, - expectedStatus); - // Check RLine::GetStatus returns EStatusIdle - ASSERT_EQUALS(voiceLine.GetStatus(lineStatus), KErrNone, - _L("RLine::GetStatus returned an error")); - ASSERT_EQUALS(lineStatus, RCall::EStatusIdle, - _L("RLine::GetStatus did not return EStatusIdle as expected")); - - // Check RMobileLine::NotifyMobileLineStatusChange completes with EStatusIdle - RMobileCall::TMobileCallStatus expectedMobileLineStatus = RMobileCall::EStatusIdle; - iCallControlTestHelper.WaitForMobileLineNotifyMobileLineStatusChange(voiceLine, - notifyMobileLineChangeStatus, - mobileLineStatus, - expectedMobileLineStatus, - expectedStatus); - - // Check RMobileLine::GetMobileLineStatus returns EStatusIdle - ASSERT_EQUALS(voiceLine.GetMobileLineStatus(mobileLineStatus), KErrNone, - _L("RMobileLine::GetMobileLineStatus returned an error")); - ASSERT_EQUALS(mobileLineStatus, RMobileCall::EStatusIdle, - _L("RMobileLine::GetMobileLineStatus did not set line status to EStatusIdle")); - - //////////////////////////////////////////////////////////////// - // TEST END - //////////////////////////////////////////////////////////////// - - StartCleanup(); - - // PopAndDestroy - // hangUpStatus - // notifyMobileLineChangeStatus - // notifyStatusChangeStatus - // notifyMobileCallChangeStatus - // notifyCallStatusChangeStatus - // notifyIncomingCallStatus - - CleanupStack::PopAndDestroy(6,¬ifyIncomingCallStatus); - - return TestStepResult(); - } - -TPtrC CCTSYIntegrationTestCallControl0017::GetTestStepName() -/** - * @return The test step name. - */ - { - return _L("CCTSYIntegrationTestCallControl0017"); - } - - - -CCTSYIntegrationTestCallControl0018::CCTSYIntegrationTestCallControl0018(CEtelSessionMgr& aEtelSessionMgr) - : CCTSYIntegrationTestCallControlBase(aEtelSessionMgr) -/** - * Constructor. - */ - { - SetTestStepName(CCTSYIntegrationTestCallControl0018::GetTestStepName()); - } - -CCTSYIntegrationTestCallControl0018::~CCTSYIntegrationTestCallControl0018() -/** - * Destructor. - */ - { - } - -TVerdict CCTSYIntegrationTestCallControl0018::doTestStepL() -/** - * @SYMTestCaseID BA-CTSY-INT-CCON-0018 - * @SYMFssID BA/CTSY/CCON-0018 - * @SYMTestCaseDesc Answer incoming call and hang up call. - * @SYMTestPriority High - * @SYMTestActions RCall::OpenExistingCall, RCall::AnswerIncomingCall, RCall::HangUp, RCall::NotifyStatusChange, RCall::GetStatus, RMobileCall::NotifyMobileCallStatusChange, RMobileCall::GetMobileCallStatus - * @SYMTestExpectedResults Pass - Call answered and then hung up. - * @SYMTestType CIT - * @SYMTestCaseDependencies live/automatic - * - * Reason for test: Verify call can be answered with specified params and call status, info and caps are correct. - * - * @return - TVerdict code - */ - { - - //////////////////////////////////////////////////////////////// - // SET UP - //////////////////////////////////////////////////////////////// - - // Check phone supports KCapsVoice - // Get Voice line 1 - RMobileLine& voiceLine = iEtelSessionMgr.GetLineL(KMainServer, KMainPhone, KVoiceLine); - - RLine::TCaps lineCaps; - CHECK_EQUALS_L(voiceLine.GetCaps(lineCaps), KErrNone, - _L("RMobileLine::GetCaps returned an error")); - CHECK_BITS_SET_L(lineCaps.iFlags, RLine::KCapsVoice, KNoUnwantedBits, - _L("RLine::GetCaps returned wrong caps")); - - // Call TNetworkTsyTestHelper::WaitForRegisteredOnHomeNetworkL - RMobilePhone& phone = iEtelSessionMgr.GetPhoneL(KMainServer,KMainPhone); - CHECK_EQUALS_L(iNetworkTestHelper.WaitForRegisteredOnHomeNetworkL(phone), KErrNone, - _L("TNetworkTsyTestHelper::WaitForRegisteredOnHomeNetworkL returned with an error")); - - //////////////////////////////////////////////////////////////// - // SET UP END - //////////////////////////////////////////////////////////////// - - StartTest(); - - //////////////////////////////////////////////////////////////// - // TEST START - //////////////////////////////////////////////////////////////// - - // post notifier for RLine::NotifyIncomingCall - TCoreEtelRequestStatus notifyIncomingCallStatus (voiceLine,&RLine::NotifyIncomingCallCancel); - CleanupStack::PushL(notifyIncomingCallStatus); - TName name; - voiceLine.NotifyIncomingCall(notifyIncomingCallStatus,name); - - // Request an incoming call from RPS. - RPSRequestIncomingCallL(EVoiceLine); - - // Check RLine::NotifyIncomingCall completes with valid call name. - ASSERT_EQUALS(WaitForRequestWithTimeOut(notifyIncomingCallStatus,ETimeMedium), KErrNone, - _L("RLine::NotifyIncomingCall did not complete without error")); - ASSERT_EQUALS(notifyIncomingCallStatus.Int(), KErrNone, - _L("RLine::NotifyIncomingCall set requestStatus to an error")); - ASSERT_TRUE(name.Length() > 0, - _L("RLine::NotifyIncomingCall did not set the name")); - - TCallId incomingCallId; - RMobileCall& incomingCall = iEtelSessionMgr.GetIncomingCallL(KMainServer, KMainPhone, KVoiceLine, name, incomingCallId); - - // === Check call caps === - - // Check RCall::GetCaps supports caps in set of KCapsVoice | KCapsAnswer - // Check RCall::GetCaps supports NOT in set of KCapsDial - RCall::TCaps caps; - ASSERT_EQUALS(incomingCall.GetCaps(caps), KErrNone, - _L("RCall::GetCaps returned an Error")); - ASSERT_BITS_SET(caps.iFlags, RCall::KCapsVoice | RCall::KCapsAnswer, RCall::KCapsDial, - _L("RCall::GetCaps returned wrong caps")); - - // Check RMobileCall::GetMobileCallCaps includes iCallControlCaps in set of KCapsVoice | KCapsDeflect | KCapsAnswer - // Check RMobileCall::GetMobileCallCaps includes iCallControlCaps NOT in set of KCapsDial - RMobileCall::TMobileCallCapsV1 mobileCallCaps; - RMobileCall::TMobileCallCapsV1Pckg capsPckg(mobileCallCaps); - RMobileCall::TMobileCallCapsV1 wantedMobileCaps, unWantedMobileCaps; - wantedMobileCaps.iCallControlCaps = RMobileCall::KCapsVoice | RMobileCall::KCapsDeflect | RMobileCall::KCapsAnswer; - unWantedMobileCaps.iCallControlCaps = RMobileCall::KCapsDial; - ASSERT_EQUALS(incomingCall.GetMobileCallCaps(capsPckg), KErrNone, - _L("RMobileCall::GetMobileCallCaps returned an error")); - ASSERT_BITS_SET(mobileCallCaps.iCallControlCaps, wantedMobileCaps.iCallControlCaps, unWantedMobileCaps.iCallControlCaps, - _L("RMobileCall::GetMobileCallCaps returned unexpected iCallControlCaps")); - - // === Check call status === - - // Check RCall::GetStatus returns EStatusRinging - RCall::TStatus callStatus; - ASSERT_EQUALS(incomingCall.GetStatus(callStatus), KErrNone, - _L("RCall::GetStatus returned an error")); - ASSERT_EQUALS(callStatus, RCall::EStatusRinging, - _L("RCall::GetStatus did not return EStatusRinging as expected")); - - // Check RMobileCall::GetMobileCallStatus returns status of EStatusRinging - RMobileCall::TMobileCallStatus mobileCallStatus; - ASSERT_EQUALS(incomingCall.GetMobileCallStatus(mobileCallStatus), KErrNone, - _L("RMobileCall::GetMobileCallStatus returned an error")); - ASSERT_EQUALS(mobileCallStatus, RMobileCall::EStatusRinging, - _L("RMobileCall::GetMobileCallStatus did not set call status EStatusRinging as expected")); - - // === Check call info === - - // Check RCall::GetInfo returns valid call name. - // Check RCall::GetInfo returns valid voice line name. - // Check RCall::GetInfo returns call status of EStatusRinging. - // Check RCall::GetInfo returns call duration of 0. - RCall::TCallInfo callInfo; - ASSERT_EQUALS(incomingCall.GetInfo(callInfo), KErrNone, - _L("RCall::GetInfo returned an error")); - ASSERT_TRUE(callInfo.iCallName.Length() >0, - _L("RCall::GetInfo returned an invalid name")); - ASSERT_TRUE(callInfo.iLineName.Length() >0, - _L("RCall::GetInfo returned an invalid Line name")); - ASSERT_EQUALS(callInfo.iStatus, RCall::EStatusRinging, - _L("RCall::GetInfo wrong iStatus, should be EStatusRinging")); - ASSERT_EQUALS(callInfo.iDuration.Int(), 0, - _L("RCall::GetInfo wrong iDuration, should be 0")); - - // Check RMobileCall::GetMobileCallInfo returns iValid > 0. - // Check RMobileCall::GetMobileCallInfo returns data for attributes makred as valid in iValid. - // Check RMobileCall::GetMobileCallInfo returns valid line name. - RMobileCall::TMobileCallInfoV1 mobileCallInfo; - RMobileCall::TMobileCallInfoV1Pckg mobileCallInfoPckg(mobileCallInfo); - User::After(KOneSecond*2); // Give timers enough time to increment - ASSERT_EQUALS(incomingCall.GetMobileCallInfo(mobileCallInfoPckg), KErrNone, - _L("RMobileCall::GetMobileCallInfo returned an error")); - ASSERT_TRUE(mobileCallInfo.iLineName.Length() > 0, - _L("RMobileCall::GetMobileCallInfo returned an invalid line name")); - ASSERT_TRUE(mobileCallInfo.iValid > 0, - _L("RMobileCall::GetMobileCallInfo returned unexpected flags in iValid")); - - // Check RMobileCall::GetMobileCallInfo returns valid remote number. - // Check RMobileCall::GetMobileCallInfo returns call duration=0 - // Check RMobileCall::GetMobileCallInfo returns valid callId - // Note: not using TCallControlTsyTestHelper::CheckForValidCallInfo() as some checks would fail at this point - if(mobileCallInfo.iValid & RMobileCall::KCallRemoteParty) - { - ASSERT_TRUE(mobileCallInfo.iRemoteParty.iRemoteNumber.iTelNumber.Length() > 0, - _L("RMobileCall::GetMobileCallInfo set bitmask for KCallRemoteParty to true, but iRemoteParty.iRemoteNumber.iTelNumber has invalid length")) - } - if(mobileCallInfo.iValid & RMobileCall::KCallDuration) - { - TTimeIntervalSeconds startTime = 0; - TTimeIntervalSeconds durationTime(mobileCallInfo.iDuration); - ASSERT_EQUALS(durationTime.Int(), startTime.Int(), - _L("RMobileCall::GetMobileCallInfo set bitmask for KCallDuration to true, but set iDuration to an invalid number")) - } - if(mobileCallInfo.iValid & RMobileCall::KCallId) - { - ASSERT_TRUE( mobileCallInfo.iCallId > -1, - _L("RMobileCall::GetMobileCallInfo set bitmask for KCallId to true, but set iCallId to an invalid number")) - DEBUG_PRINTF2(_L("call id=%d"), mobileCallInfo.iCallId); - } - - // Populate a RMobileCall::TMobileCallParamsV1 with: - RMobileCall::TMobileCallParamsV1 mobileCallParams; - // ?iSpeakerControl = EMonitorSpeakerControlAlwaysOff - mobileCallParams.iSpeakerControl = RCall::EMonitorSpeakerControlAlwaysOff; - // ?iSpeakerVolume = EMonitorSpeakerVolumeOff - mobileCallParams.iSpeakerVolume = RCall::EMonitorSpeakerVolumeOff; - // ?iInterval = 0x01 - mobileCallParams.iInterval = 0x01; - // ?iWaitForDialTone = EDialToneWait - mobileCallParams.iWaitForDialTone = RCall::EDialToneWait; - // ?iIdRestrict = EIdRestrictDefault - mobileCallParams.iIdRestrict = RMobileCall::EIdRestrictDefault; - // ?iExplicitInvoke = TRUE - mobileCallParams.iCug.iExplicitInvoke = TRUE ; - // ?iCugIndex = 0x0000 - mobileCallParams.iCug.iCugIndex = 0x0000; - // ?iSuppressOA = FALSE - mobileCallParams.iCug.iSuppressOA = FALSE; - // ?iSuppressPrefCug = FALSE - mobileCallParams.iCug.iSuppressPrefCug = FALSE; - // ?iAutoRedial = FALSE - mobileCallParams.iAutoRedial = FALSE; - - RMobileCall::TMobileCallParamsV1Pckg mobileCallParamsPckg(mobileCallParams); - - // ==== Post Notifiers ===== - TCoreEtelRequestStatus notifyCapsChangeStatus (incomingCall,&RCall::NotifyCapsChangeCancel); - CleanupStack::PushL(notifyCapsChangeStatus); - incomingCall.NotifyCapsChange(notifyCapsChangeStatus,caps); - - // post notifier for RMobileCall::NotifyMobileCallCapsChange - TExtEtelRequestStatus notifyMobileCallCapsChangeStatus(incomingCall, EMobileCallNotifyMobileCallCapsChange); - CleanupStack::PushL(notifyMobileCallCapsChangeStatus); - incomingCall.NotifyMobileCallCapsChange(notifyMobileCallCapsChangeStatus, capsPckg); - - // post notifier for RCall::NotifyStatusChange - TCoreEtelRequestStatus notifyCallStatusChangeStatus (incomingCall, &RCall::NotifyStatusChangeCancel); - CleanupStack::PushL(notifyCallStatusChangeStatus); - incomingCall.NotifyStatusChange(notifyCallStatusChangeStatus, callStatus); - - // post notifier for RMobileCall::NotifyMobileCallStatusChange - TExtEtelRequestStatus notifyMobileCallChangeStatus(incomingCall, EMobileCallNotifyMobileCallStatusChange); - CleanupStack::PushL(notifyMobileCallChangeStatus); - incomingCall.NotifyMobileCallStatusChange(notifyMobileCallChangeStatus, mobileCallStatus); - - // Answer incoming call by calling RCall::AnswerIncomingCall and using TMobileCallParamsV1 - ASSERT_EQUALS(incomingCall.AnswerIncomingCall(mobileCallParamsPckg), KErrNone, - _L("RCall::AnswerIncomingCall returned an error")); - - // === Check call caps === - - // Check RCall::NotifyCapsChange completes with caps in set of KCapsVoice | KCapsHangUp. - RCall::TCaps wantedCaps, unwantedCaps; - wantedCaps.iFlags = RCall::KCapsVoice | RCall::KCapsHangUp; - unwantedCaps.iFlags = KNoUnwantedBits; - const TInt wantedStatus = KErrNone; - iCallControlTestHelper.WaitForCallNotifyCapsChange(incomingCall, - notifyCapsChangeStatus, - caps, - wantedCaps, - unwantedCaps, - wantedStatus); - - // Check RCall::GetCaps supports KCapsHangUp | KCapsVoice. - ASSERT_EQUALS(incomingCall.GetCaps(caps), KErrNone, - _L("RCall::GetCaps returned an Error")); - ASSERT_BITS_SET(caps.iFlags, RCall::KCapsHangUp | RCall::KCapsVoice, KNoUnwantedBits, - _L("RCall::GetCaps returned wrong caps")); - - // Check RMobileCall::NotifyMobileCallCapsChange completes with iCallControlCaps in set of KCapsVoice | KCapsHold | KCapsHangUp. - // Check RMobileCall::NotifyMobileCallCapsChange completes with iCallEventCaps in set of KCapsLocalHold | KCapsLocalTransfer | KCapsRemoteHold | KCapsRemoteTerminate | KCapsRemoteConferenceCreate. - wantedMobileCaps.iCallControlCaps = RMobileCall::KCapsVoice | RMobileCall::KCapsHold | RMobileCall::KCapsHangUp; - wantedMobileCaps.iCallEventCaps = RMobileCall::KCapsLocalHold | RMobileCall::KCapsLocalTransfer | RMobileCall::KCapsRemoteHold | RMobileCall::KCapsRemoteTerminate | RMobileCall::KCapsRemoteConferenceCreate; - TCmpRMobileCallTMobileCallCaps mobileCapsComp(wantedMobileCaps, mobileCallCaps, *this); - iCallControlTestHelper.WaitForMobileCallNotifyMobileCallCapsChange(incomingCall, - notifyMobileCallCapsChangeStatus, - mobileCapsComp, - wantedStatus); - - - // Check RMobileCall::GetMobileCallCaps includes iCallControlCaps in set of KCapsVoice | KCapsHold | KCapsHangUp. - // Check RMobileCall::GetMobileCallCaps includes iCallEventCaps in set of KCapsLocalHold | KCapsLocalTransfer | KCapsRemoteHold | KCapsRemoteTerminate | KCapsRemoteConferenceCreate. - ASSERT_EQUALS(incomingCall.GetMobileCallCaps(capsPckg), KErrNone, - _L("RMobileCall::GetMobileCallCaps returned an error")); - wantedMobileCaps.iCallControlCaps = RMobileCall::KCapsVoice | RMobileCall::KCapsHold | RMobileCall::KCapsHangUp; - ASSERT_BITS_SET(mobileCallCaps.iCallControlCaps, wantedMobileCaps.iCallControlCaps, KNoUnwantedBits, - _L("RMobileCall::GetMobileCallCaps returned unexpected iCallControlCaps")); - wantedMobileCaps.iCallEventCaps = RMobileCall::KCapsLocalHold | RMobileCall::KCapsLocalTransfer |RMobileCall::KCapsRemoteHold | RMobileCall::KCapsRemoteTerminate | RMobileCall::KCapsRemoteConferenceCreate; - ASSERT_BITS_SET(mobileCallCaps.iCallEventCaps, wantedMobileCaps.iCallEventCaps, KNoUnwantedBits, - _L("RMobileCall::GetMobileCallCaps returned unexpected iCallEventCaps")); - - // === Check call status === - - // Check RCall::NotifyStatusChange completes with EStatusConnected - RCall::TStatus expectedCallStatus = RCall::EStatusConnected; - iCallControlTestHelper.WaitForCallNotifyStatusChange(incomingCall, - notifyCallStatusChangeStatus, - callStatus, - expectedCallStatus, - wantedStatus); - - // Check RCall::GetStatus returns EStatusConnected - ASSERT_EQUALS(incomingCall.GetStatus(callStatus),KErrNone, - _L("RCall::GetStatus returned an error")); - ASSERT_EQUALS(callStatus, RCall::EStatusConnected, - _L("RCall::GetStatus returned an unexpected call status")); - - // Check RMobileCall::NotifyMobileCallStatusChange completes with EStatusConnected. - RMobileCall::TMobileCallStatus expectedMobileCallStatus = RMobileCall::EStatusConnected; - iCallControlTestHelper.WaitForMobileCallNotifyMobileCallStatusChange(incomingCall, - notifyMobileCallChangeStatus, - mobileCallStatus, - expectedMobileCallStatus, - wantedStatus); - - // Check RMobileCall::GetMobileCallStatus returns status of EStatusConnected. - ASSERT_EQUALS(incomingCall.GetMobileCallStatus(mobileCallStatus), KErrNone, - _L("RMobileCall::GetMobileStatus returned an error")); - ASSERT_EQUALS(mobileCallStatus, RMobileCall::EStatusConnected, - _L("RMobileCall::GetMobileStatus did not return a status EStatusConnected")); - - // === Check call info === - - // Check RCall::GetInfo returns valid call name. - // Check RCall::GetInfo returns valid voice line name. - // Check RCall::GetInfo returns call status of EStatusConnected. - // Check RCall::GetInfo returns call duration of > 0. - User::After(KOneSecond*2); // Give timers enough time to increment - ASSERT_EQUALS(incomingCall.GetInfo(callInfo), KErrNone, - _L("RCall::GetInfo returned an error")); - ASSERT_TRUE(callInfo.iCallName.Length() > 0, - _L("RCall::GetInfo returned an invalid name")); - ASSERT_TRUE(callInfo.iLineName.Length() > 0, - _L("RCall::GetInfo returned an invalid Line name")); - ASSERT_EQUALS(callInfo.iStatus, RCall::EStatusConnected, - _L("RCall::GetInfo wrong iStatus, should be EStatusConnected")); - ASSERT_TRUE(callInfo.iDuration.Int() > 0, - _L("RCall::GetInfo wrong iDuration, should be > 0")); - - // Check RMobileCall::GetMobileCallInfo returns iValid > 0. - // Check RMobileCall::GetMobileCallInfo returns data for attributes makred as valid in iValid. - // Check RMobileCall::GetMobileCallInfo returns valid line name. - ASSERT_EQUALS(incomingCall.GetMobileCallInfo(mobileCallInfoPckg), KErrNone, - _L("RMobileCall::GetMobileCallInfo returned an error")); - ASSERT_TRUE(mobileCallInfo.iLineName.Length() > 0, - _L("RMobileCall::GetMobileCallInfo returned an invalid line name")); - ASSERT_TRUE(mobileCallInfo.iValid > 0, - _L("RMobileCall::GetMobileCallInfo returned unexpected flags in iValid")); - - iCallControlTestHelper.CheckForValidCallInfo(mobileCallInfo); - - //==== Post some notifiers ==== - incomingCall.NotifyCapsChange(notifyCapsChangeStatus,caps); - incomingCall.NotifyMobileCallCapsChange(notifyMobileCallCapsChangeStatus, capsPckg); - incomingCall.NotifyStatusChange(notifyCallStatusChangeStatus,callStatus); - incomingCall.NotifyMobileCallStatusChange(notifyMobileCallChangeStatus, mobileCallStatus); - - // Hang up the call - - TCoreEtelRequestStatus hangUpStatus (incomingCall,&RCall::HangUpCancel); - CleanupStack::PushL(hangUpStatus); - incomingCall.HangUp(hangUpStatus); - ASSERT_EQUALS(WaitForRequestWithTimeOut(hangUpStatus, ETimeMedium), KErrNone, - _L("RCall::HangUp returned an error")); - ASSERT_EQUALS(hangUpStatus.Int(), KErrNone, - _L("RCall::HangUp returned an error")); - - // === Check call caps === - - // Check RCall::NotifyCapsChange completes with caps in set of KCapsVoice | KCapsDial. - wantedCaps.iFlags = RCall::KCapsVoice | RCall::KCapsDial; - iCallControlTestHelper.WaitForCallNotifyCapsChange(incomingCall, - notifyCapsChangeStatus, - caps, - wantedCaps, - unwantedCaps, - wantedStatus); - - // Check RCall::GetCaps supports KCapsVoice | KCapsDial. - ASSERT_EQUALS(incomingCall.GetCaps(caps), KErrNone, - _L("RCall::GetCaps returned an Error")); - ASSERT_BITS_SET(caps.iFlags, RCall::KCapsVoice | RCall::KCapsDial, KNoUnwantedBits, - _L("RCall::GetCaps returned wrong caps")); - - // Check RMobileCall::NotifyMobileCallCapsChange completes with iCallControlCaps in set of KCapsVoice | KCapsDial. - // Check RMobileCall::NotifyMobileCallCapsChange completes with iCallEventCaps in set of 0. - wantedMobileCaps.iCallControlCaps = RMobileCall::KCapsVoice | RMobileCall::KCapsDial; - wantedMobileCaps.iCallEventCaps = 0; - TCmpRMobileCallTMobileCallCaps mobileCapsComp2(wantedMobileCaps, mobileCallCaps, *this); - iCallControlTestHelper.WaitForMobileCallNotifyMobileCallCapsChange(incomingCall, - notifyMobileCallCapsChangeStatus, - mobileCapsComp2, - wantedStatus); - - // Check RMobileCall::GetMobileCallCaps includes iCallControlCaps in set of KCapsVoice | KCapsDial. - // Check RMobileCall::GetMobileCallCaps includes iCallEventCaps in set of 0. - ASSERT_EQUALS(incomingCall.GetMobileCallCaps(capsPckg), KErrNone, - _L("RMobileCall::GetMobileCallCaps returned an error")); - wantedMobileCaps.iCallControlCaps = RMobileCall::KCapsVoice | RMobileCall::KCapsDial; - ASSERT_BITS_SET(mobileCallCaps.iCallControlCaps, wantedMobileCaps.iCallControlCaps,KNoUnwantedBits, - _L("RMobileCall::GetMobileCallCaps returned unexpected iCallControlCaps")); - wantedMobileCaps.iCallEventCaps = 0; - ASSERT_BITS_SET(mobileCallCaps.iCallEventCaps, wantedMobileCaps.iCallEventCaps,KNoUnwantedBits, - _L("RMobileCall::GetMobileCallCaps returned unexpected iCallEventCaps")); - - // === Check call status === - - // Check RCall::NotifyStatusChange completes with EStatusHangingUp -> EStatusIdle. - expectedCallStatus = RCall::EStatusHangingUp; - iCallControlTestHelper.WaitForCallNotifyStatusChange(incomingCall, - notifyCallStatusChangeStatus, - callStatus, - expectedCallStatus, - wantedStatus); - - incomingCall.NotifyStatusChange(notifyCallStatusChangeStatus,callStatus); - expectedCallStatus = RCall::EStatusIdle; - iCallControlTestHelper.WaitForCallNotifyStatusChange(incomingCall, - notifyCallStatusChangeStatus, - callStatus, - expectedCallStatus, - wantedStatus); - - // Check RCall::GetStatus returns EStatusIdle. - ASSERT_EQUALS(incomingCall.GetStatus(callStatus),KErrNone, - _L("RCall::GetStatus returned an error")); - ASSERT_EQUALS(callStatus, RCall::EStatusIdle, - _L("RCall::GetStatus returned an unexpected call status")); - - // Check RMobileCall::NotifyMobileCallStatusChange completes with EStatusDisconnecting -> EStatusIdle. - expectedMobileCallStatus = RMobileCall::EStatusDisconnecting; - iCallControlTestHelper.WaitForMobileCallNotifyMobileCallStatusChange(incomingCall, - notifyMobileCallChangeStatus, - mobileCallStatus, - expectedMobileCallStatus, - wantedStatus); - - incomingCall.NotifyMobileCallStatusChange(notifyMobileCallChangeStatus, mobileCallStatus); - expectedMobileCallStatus = RMobileCall::EStatusIdle; - iCallControlTestHelper.WaitForMobileCallNotifyMobileCallStatusChange(incomingCall, - notifyMobileCallChangeStatus, - mobileCallStatus, - expectedMobileCallStatus, - wantedStatus); - - // Check RMobileCall::GetMobileCallStatus returns status of EStatusIdle. - ASSERT_EQUALS(incomingCall.GetMobileCallStatus(mobileCallStatus), KErrNone, - _L("RMobileCall::GetMobileStatus returned an error")); - ASSERT_EQUALS(mobileCallStatus, RMobileCall::EStatusIdle, - _L("RMobileCall::GetMobileStatus did not return a status EStatusIdle")); - - // === Check call info === - - // Check RCall::GetInfo returns valid call name. - // Check RCall::GetInfo returns valid voice line name. - // Check RCall::GetInfo returns call status of EStatusIdle. - // Check RCall::GetInfo returns call duration of > 0. - ASSERT_EQUALS(incomingCall.GetInfo(callInfo), KErrNone, - _L("RCall::GetInfo returned an error")); - ASSERT_TRUE(callInfo.iCallName.Length() > 0, - _L("RCall::GetInfo returned an invalid name")); - ASSERT_TRUE(callInfo.iLineName.Length() > 0, - _L("RCall::GetInfo returned an invalid Line name")); - ASSERT_EQUALS(callInfo.iStatus, RCall::EStatusIdle, - _L("RCall::GetInfo wrong iStatus, should be EStatusIdle")); - ASSERT_TRUE(callInfo.iDuration.Int() > 0, - _L("RCall::GetInfo wrong iDuration, should be >0")); - - // Check RMobileCall::GetMobileCallInfo returns iValid > 0. - // Check RMobileCall::GetMobileCallInfo returns data for attributes makred as valid in iValid. - // Check RMobileCall::GetMobileCallInfo returns valid line name. - ASSERT_EQUALS(incomingCall.GetMobileCallInfo(mobileCallInfoPckg), KErrNone, - _L("RMobileCall::GetMobileCallInfo returned an error")); - ASSERT_TRUE(mobileCallInfo.iLineName.Length() >0, - _L("RMobileCall::GetMobileCallInfo returned an invalid line name")); - ASSERT_TRUE(mobileCallInfo.iValid > 0, - _L("RMobileCall::GetMobileCallInfo returned unexpected flags in iValid")); - - // Note: not using TCallControlTsyTestHelper::CheckForValidCallInfo() as some checks would fail at this point - if(mobileCallInfo.iValid & RMobileCall::KCallRemoteParty) - { - ASSERT_TRUE(mobileCallInfo.iRemoteParty.iRemoteNumber.iTelNumber.Length() > 0, - _L("RMobileCall::GetMobileCallInfo set bitmask for KCallRemoteParty to true, but iRemoteParty.iRemoteNumber.iTelNumber has invalid length")); - } - if(mobileCallInfo.iValid & RMobileCall::KCallDuration) - { - TTimeIntervalSeconds startTime = 0; - TTimeIntervalSeconds durationTime(mobileCallInfo.iDuration); - ASSERT_TRUE(durationTime > startTime, - _L("RMobileCall::GetMobileCallInfo set bitmask for KCallDuration to true, but set iDuration to an invalid number")); - } - - if(mobileCallInfo.iValid & RMobileCall::KCallId) - { - ASSERT_EQUALS( mobileCallInfo.iCallId, -1, - _L("RMobileCall::GetMobileCallInfo set bitmask for KCallId to true, but set iCallId to an invalid number")); - DEBUG_PRINTF2(_L("RMobileCall::GetMobileCallInfo returns callId of: %d"), mobileCallInfo.iCallId); - } - if(mobileCallInfo.iValid & RMobileCall::KCallExitCode) - { - ASSERT_EQUALS( mobileCallInfo.iExitCode, KErrNone, _L("RMobileCall::GetMobileCallInfo set bitmask for KCallExitCode to true, but did not set iExitCode to KErrNone")) - } - - //////////////////////////////////////////////////////////////// - // TEST END - //////////////////////////////////////////////////////////////// - - StartCleanup(); - - CleanupStack::PopAndDestroy(6,¬ifyIncomingCallStatus); - // notifyIncomingCallStatus - // notifyCapsChangeStatus - // notifyMobileCallCapsChangeStatus - // notifyCallStatusChangeStatus - // notifyMobileCallChangeStatus - // hangUpStatus - - return TestStepResult(); - } - -TPtrC CCTSYIntegrationTestCallControl0018::GetTestStepName() -/** - * @return The test step name. - */ - { - return _L("CCTSYIntegrationTestCallControl0018"); - } - - - -CCTSYIntegrationTestCallControl0019::CCTSYIntegrationTestCallControl0019(CEtelSessionMgr& aEtelSessionMgr) - : CCTSYIntegrationTestCallControlBase(aEtelSessionMgr) -/** - * Constructor. - */ - { - SetTestStepName(CCTSYIntegrationTestCallControl0019::GetTestStepName()); - } - -CCTSYIntegrationTestCallControl0019::~CCTSYIntegrationTestCallControl0019() -/** - * Destructor. - */ - { - } - -TVerdict CCTSYIntegrationTestCallControl0019::doTestStepL() -/** - * @SYMTestCaseID BA-CTSY-INT-CCON-0019 - * @SYMFssID BA/CTSY/CCON-0019 - * @SYMTestCaseDesc Answer incoming call then have remote party hang up. - * @SYMTestPriority High - * @SYMTestActions RCall::OpenExistingCall, RCall::AnswerIncomingCall, RCall::HangUp, RCall::NotifyStatusChange, RCall::GetStatus, RMobileCall::NotifyMobileCallStatusChange, RMobileCall::GetMobileCallStatus - * @SYMTestExpectedResults Pass - Call answered. Mobile call status correct. - * @SYMTestType CIT - * @SYMTestCaseDependencies live/automatic - * - * Reason for test: Verify call can be answered with specified params and call status, info and caps are correct. - * - * @return - TVerdict code - */ - { - - //////////////////////////////////////////////////////////////// - // SET UP - //////////////////////////////////////////////////////////////// - - - // Check phone supports KCapsVoice - - // Get Voice line 1 - RMobileLine& voiceLine = iEtelSessionMgr.GetLineL(KMainServer, KMainPhone, KVoiceLine); - - RLine::TCaps lineCaps; - CHECK_EQUALS_L(voiceLine.GetCaps(lineCaps), KErrNone, - _L("RMobileLine::GetCaps returned an error")); - CHECK_BITS_SET_L(lineCaps.iFlags, RLine::KCapsVoice, KNoUnwantedBits, - _L("RLine::GetCaps returned wrong caps")); - - // Call TNetworkTsyTestHelper::WaitForRegisteredOnHomeNetworkL - RMobilePhone& phone = iEtelSessionMgr.GetPhoneL(KMainServer,KMainPhone); - CHECK_EQUALS_L(iNetworkTestHelper.WaitForRegisteredOnHomeNetworkL(phone), KErrNone, - _L("TNetworkTsyTestHelper::WaitForRegisteredOnHomeNetworkL returned with an error")); - - //////////////////////////////////////////////////////////////// - // SET UP END - //////////////////////////////////////////////////////////////// - - StartTest(); - - //////////////////////////////////////////////////////////////// - // TEST START - //////////////////////////////////////////////////////////////// - - // post notifier for RLine::NotifyIncomingCall - TCoreEtelRequestStatus notifyIncomingCallStatus (voiceLine,&RLine::NotifyIncomingCallCancel); - CleanupStack::PushL(notifyIncomingCallStatus); - TName name; - voiceLine.NotifyIncomingCall(notifyIncomingCallStatus,name); - - // Request an incoming call from RPS. - RPSRequestIncomingCallL(EVoiceLine); - - // Check RLine::NotifyIncomingCall completes. - ASSERT_EQUALS(WaitForRequestWithTimeOut(notifyIncomingCallStatus,ETimeMedium),KErrNone, - _L("RLine::NotifyIncomingCall did not complete without error")); - ASSERT_EQUALS(notifyIncomingCallStatus.Int(), KErrNone, - _L("RLine::NotifyIncomingCall set requestStatus to an error")); - ASSERT_TRUE(name.Length() > 0, - _L("RLine::NotifyIncomingCall did not set the name")); - - TCallId incomingCallId; - RMobileCall& incomingCall = iEtelSessionMgr.GetIncomingCallL(KMainServer, KMainPhone, KVoiceLine, name, incomingCallId); - - // === Check call caps === - - // Check RCall::GetCaps supports caps in set of KCapsVoice | KCapsAnswer - // Check RCall::GetCaps supports NOT in set of KCapsDial - RCall::TCaps caps; - ASSERT_EQUALS(incomingCall.GetCaps(caps), KErrNone, - _L("RCall::GetCaps returned an Error")); - ASSERT_BITS_SET(caps.iFlags, RCall::KCapsVoice | RCall::KCapsAnswer, RCall::KCapsDial, - _L("RCall::GetCaps returned wrong caps")); - - // Check RMobileCall::GetMobileCallCaps includes iCallControlCaps in set of KCapsVoice | KCapsDeflect | KCapsAnswer - // Check RMobileCall::GetMobileCallCaps includes iCallControlCaps NOT in set of KCapsDial - RMobileCall::TMobileCallCapsV1 mobileCallCaps; - RMobileCall::TMobileCallCapsV1Pckg capsPckg(mobileCallCaps); - RMobileCall::TMobileCallCapsV1 wantedMobileCaps, unwantedMobileCaps; - ASSERT_EQUALS(incomingCall.GetMobileCallCaps(capsPckg), KErrNone, - _L("RMobileCall::GetMobileCallCaps returned an error")); - wantedMobileCaps.iCallControlCaps = RMobileCall::KCapsVoice | RMobileCall::KCapsDeflect | RMobileCall::KCapsAnswer; - unwantedMobileCaps.iCallControlCaps = RMobileCall::KCapsDial; - ASSERT_BITS_SET(mobileCallCaps.iCallControlCaps, wantedMobileCaps.iCallControlCaps,unwantedMobileCaps.iCallControlCaps, - _L("RMobileCall::GetMobileCallCaps returned unexpected iCallControlCaps")); - - // === Check call status === - - // Check RCall::GetStatus returns EStatusRinging - RCall::TStatus callStatus; - ASSERT_EQUALS(incomingCall.GetStatus(callStatus),KErrNone, - _L("RCall::GetStatus returned an error")); - ASSERT_EQUALS(callStatus, RCall::EStatusRinging, - _L("RCall::GetStatus returned an unexpected call status")); - - // Check RMobileCall::GetMobileCallStatus returns status of EStatusRinging - RMobileCall::TMobileCallStatus mobileCallStatus; - ASSERT_EQUALS(incomingCall.GetMobileCallStatus(mobileCallStatus), KErrNone, - _L("RMobileCall::GetMobileStatus returned an error")); - ASSERT_EQUALS(mobileCallStatus, RMobileCall::EStatusRinging, - _L("RMobileCall::GetMobileStatus did not return a status EStatusConnected")); - - // === Check call info === - - // Check RCall::GetInfo returns valid call name. - // Check RCall::GetInfo returns valid voice line name. - // Check RCall::GetInfo returns call status of EStatusRinging. - // Check RCall::GetInfo returns call duration of 0. - RCall::TCallInfo callInfo; - ASSERT_EQUALS(incomingCall.GetInfo(callInfo), KErrNone, - _L("RCall::GetInfo returned an error")); - ASSERT_TRUE(callInfo.iCallName.Length() >0, - _L("RCall::GetInfo returned an invalid name")); - ASSERT_TRUE(callInfo.iLineName.Length() >0, - _L("RCall::GetInfo returned an invalid Line name")); - ASSERT_EQUALS(callInfo.iStatus, RCall::EStatusRinging, - _L("RCall::GetInfo wrong iStatus, should be EStatusRinging")); - ASSERT_EQUALS(callInfo.iDuration.Int(), 0, - _L("RCall::GetInfo wrong iDuration, should be 0")); - - // Check RMobileCall::GetMobileCallInfo returns iValid > 0. - // Check RMobileCall::GetMobileCallInfo returns data for attributes makred as valid in iValid. - // Check RMobileCall::GetMobileCallInfo returns valid line name. - RMobileCall::TMobileCallInfoV1 mobileCallInfo; - RMobileCall::TMobileCallInfoV1Pckg mobileCallInfoPckg(mobileCallInfo); - User::After(KOneSecond*2); // Give timers enough time to increment - ASSERT_EQUALS(incomingCall.GetMobileCallInfo(mobileCallInfoPckg), KErrNone, - _L("RMobileCall::GetMobileCallInfo returned an error")); - ASSERT_TRUE(mobileCallInfo.iLineName.Length() > 0, - _L("RMobileCall::GetMobileCallInfo returned an invalid line name")); - ASSERT_TRUE(mobileCallInfo.iValid > 0, - _L("RMobileCall::GetMobileCallInfo returned unexpected flags in iValid")); - - // Check RMobileCall::GetMobileCallInfo returns valid remote number. - // Check RMobileCall::GetMobileCallInfo returns call duration=0 - // Check RMobileCall::GetMobileCallInfo returns valid callId - // Note: not using TCallControlTsyTestHelper::CheckForValidCallInfo() as some checks would fail at this point - if(mobileCallInfo.iValid & RMobileCall::KCallRemoteParty) - { - ASSERT_TRUE(mobileCallInfo.iRemoteParty.iRemoteNumber.iTelNumber.Length() > 0, - _L("RMobileCall::GetMobileCallInfo set bitmask for KCallRemoteParty to true, but iRemoteParty.iRemoteNumber.iTelNumber has invalid length")) - } - if(mobileCallInfo.iValid & RMobileCall::KCallDuration) - { - TTimeIntervalSeconds startTime = 0; - TTimeIntervalSeconds durationTime(mobileCallInfo.iDuration); - ASSERT_EQUALS(durationTime.Int(), startTime.Int(), - _L("RMobileCall::GetMobileCallInfo set bitmask for KCallDuration to true, but set iDuration to an invalid number")) - } - if(mobileCallInfo.iValid & RMobileCall::KCallId) - { - ASSERT_TRUE( mobileCallInfo.iCallId > -1, - _L("RMobileCall::GetMobileCallInfo set bitmask for KCallId to true, but set iCallId to an invalid number")) - } - - // Populate a RMobileCall::TMobileCallParamsV1 with: - RMobileCall::TMobileCallParamsV1 mobileCallParams; - // ?iSpeakerControl = EMonitorSpeakerControlAlwaysOff - mobileCallParams.iSpeakerControl = RCall::EMonitorSpeakerControlAlwaysOff; - // ?iSpeakerVolume = EMonitorSpeakerVolumeOff - mobileCallParams.iSpeakerVolume = RCall::EMonitorSpeakerVolumeOff; - // ?iInterval = 0x01 - mobileCallParams.iInterval = 0x01; - // ?iWaitForDialTone = EDialToneWait - mobileCallParams.iWaitForDialTone = RCall::EDialToneWait; - // ?iIdRestrict = EIdRestrictDefault - mobileCallParams.iIdRestrict = RMobileCall::EIdRestrictDefault; - // ?iExplicitInvoke = TRUE - mobileCallParams.iCug.iExplicitInvoke = TRUE ; - // ?iCugIndex = 0x0000 - mobileCallParams.iCug.iCugIndex = 0x0000; - // ?iSuppressOA = FALSE - mobileCallParams.iCug.iSuppressOA = FALSE; - // ?iSuppressPrefCug = FALSE - mobileCallParams.iCug.iSuppressPrefCug = FALSE; - // ?iAutoRedial = FALSE - mobileCallParams.iAutoRedial = FALSE; - - RMobileCall::TMobileCallParamsV1Pckg mobileCallParamsPkg(mobileCallParams); - - // ==== Post Notifiers ===== - - // post notifier for RCall::NotifyCapsChange - TCoreEtelRequestStatus notifyCapsChangeStatus (incomingCall,&RCall::NotifyCapsChangeCancel); - CleanupStack::PushL(notifyCapsChangeStatus); - incomingCall.NotifyCapsChange(notifyCapsChangeStatus,caps); - - // post notifier for RMobileCall::NotifyMobileCallCapsChange - TExtEtelRequestStatus notifyMobileCallCapsChangeStatus(incomingCall, EMobileCallNotifyMobileCallCapsChange); - CleanupStack::PushL(notifyMobileCallCapsChangeStatus); - incomingCall.NotifyMobileCallCapsChange(notifyMobileCallCapsChangeStatus, capsPckg); - - // post notifier for RCall::NotifyStatusChange - TCoreEtelRequestStatus notifyCallStatusChangeStatus (incomingCall,&RCall::NotifyStatusChangeCancel); - CleanupStack::PushL(notifyCallStatusChangeStatus); - incomingCall.NotifyStatusChange(notifyCallStatusChangeStatus,callStatus); - - // post notifier for RMobileCall::NotifyMobileCallStatusChange - TExtEtelRequestStatus notifyMobileCallChangeStatus(incomingCall, EMobileCallNotifyMobileCallStatusChange); - CleanupStack::PushL(notifyMobileCallChangeStatus); - incomingCall.NotifyMobileCallStatusChange(notifyMobileCallChangeStatus, mobileCallStatus); - - // Answer incoming call with call params defined above - ASSERT_EQUALS(incomingCall.AnswerIncomingCall(mobileCallParamsPkg),KErrNone, - _L("RCall::AnswerIncomingCall errored when answering with defined params")); - - // === Check call caps === - - // Check RCall::NotifyCapsChange completes with caps in set of KCapsVoice | KCapsHangUp. - RCall::TCaps wantedCaps, unwantedCaps; - wantedCaps.iFlags = RCall::KCapsVoice | RCall::KCapsHangUp; - unwantedCaps.iFlags = KNoUnwantedBits; - const TInt wantedStatus = KErrNone; - iCallControlTestHelper.WaitForCallNotifyCapsChange(incomingCall, - notifyCapsChangeStatus, - caps, - wantedCaps, - unwantedCaps, - wantedStatus); - - // Check RCall::GetCaps supports KCapsHangUp | KCapsVoice. - ASSERT_EQUALS(incomingCall.GetCaps(caps), KErrNone, - _L("RCall::GetCaps returned an Error")); - ASSERT_BITS_SET(caps.iFlags, RCall::KCapsHangUp | RCall::KCapsVoice, KNoUnwantedBits, - _L("RCall::GetCaps returned wrong caps")); - - // Check RMobileCall::NotifyMobileCallCapsChange completes with iCallControlCaps in set of KCapsVoice | KCapsHold | KCapsHangUp. - // Check RMobileCall::NotifyMobileCallCapsChange completes with iCallEventCaps in set of KCapsLocalHold | KCapsLocalTransfer | KCapsRemoteHold | KCapsRemoteTerminate | KCapsRemoteConferenceCreate. - wantedMobileCaps.iCallControlCaps = RMobileCall::KCapsVoice | RMobileCall::KCapsHold | RMobileCall::KCapsHangUp; - wantedMobileCaps.iCallEventCaps = RMobileCall::KCapsLocalHold | RMobileCall::KCapsLocalTransfer | RMobileCall::KCapsRemoteHold | RMobileCall::KCapsRemoteTerminate | RMobileCall::KCapsRemoteConferenceCreate; - TCmpRMobileCallTMobileCallCaps mobileCapsComp(wantedMobileCaps, mobileCallCaps, *this); - iCallControlTestHelper.WaitForMobileCallNotifyMobileCallCapsChange(incomingCall, - notifyMobileCallCapsChangeStatus, - mobileCapsComp, - wantedStatus); - - // Check RMobileCall::GetMobileCallCaps includes iCallControlCaps in set of KCapsVoice | KCapsHold | KCapsHangUp. - // Check RMobileCall::GetMobileCallCaps includes iCallEventCaps in set of KCapsLocalHold | KCapsLocalTransfer | KCapsRemoteHold | KCapsRemoteTerminate | KCapsRemoteConferenceCreate. - ASSERT_EQUALS(incomingCall.GetMobileCallCaps(capsPckg), KErrNone, - _L("RMobileCall::GetMobileCallCaps returned an error")); - wantedMobileCaps.iCallControlCaps = RMobileCall::KCapsVoice | RMobileCall::KCapsHold | RMobileCall::KCapsHangUp; - ASSERT_BITS_SET(mobileCallCaps.iCallControlCaps, wantedMobileCaps.iCallControlCaps, KNoUnwantedBits, - _L("RMobileCall::GetMobileCallCaps returned unexpected iCallControlCaps")); - wantedMobileCaps.iCallEventCaps = RMobileCall::KCapsLocalHold | RMobileCall::KCapsLocalTransfer |RMobileCall::KCapsRemoteHold | RMobileCall::KCapsRemoteTerminate | RMobileCall::KCapsRemoteConferenceCreate; - ASSERT_BITS_SET(mobileCallCaps.iCallEventCaps, wantedMobileCaps.iCallEventCaps, KNoUnwantedBits, - _L("RMobileCall::GetMobileCallCaps returned unexpected iCallEventCaps")); - - // === Check call status === - - // Check RCall::NotifyStatusChange completes with EStatusConnected - RCall::TStatus expectedCallStatus = RCall::EStatusConnected; - iCallControlTestHelper.WaitForCallNotifyStatusChange(incomingCall, - notifyCallStatusChangeStatus, - callStatus, - expectedCallStatus, - wantedStatus); - - // Check RCall::GetStatus returns EStatusConnected - ASSERT_EQUALS(incomingCall.GetStatus(callStatus),KErrNone, - _L("RCall::GetStatus returned an error")); - ASSERT_EQUALS(callStatus, RCall::EStatusConnected, - _L("RCall::GetStatus returned an unexpected call status")); - - // Check RMobileCall::NotifyMobileCallStatusChange completes with EStatusConnected. - RMobileCall::TMobileCallStatus expectedMobileCallStatus = RMobileCall::EStatusConnected; - iCallControlTestHelper.WaitForMobileCallNotifyMobileCallStatusChange(incomingCall, - notifyMobileCallChangeStatus, - mobileCallStatus, - expectedMobileCallStatus, - wantedStatus); - - // Check RMobileCall::GetMobileCallStatus returns status of EStatusConnected. - ASSERT_EQUALS(incomingCall.GetMobileCallStatus(mobileCallStatus), KErrNone, - _L("RMobileCall::GetMobileStatus returned an error")); - ASSERT_EQUALS(mobileCallStatus, RMobileCall::EStatusConnected, - _L("RMobileCall::GetMobileStatus did not return a status EStatusConnected")); - - // === Check call info === - - // Check RCall::GetInfo returns valid call name. - // Check RCall::GetInfo returns valid voice line name. - // Check RCall::GetInfo returns call status of EStatusConnected. - // Check RCall::GetInfo returns call duration of > 0. - User::After(KOneSecond*2); // Give timers enough time to increment - ASSERT_EQUALS(incomingCall.GetInfo(callInfo), KErrNone, - _L("RCall::GetInfo returned an error")); - ASSERT_TRUE(callInfo.iCallName.Length() > 0, - _L("RCall::GetInfo returned an invalid name")); - ASSERT_TRUE(callInfo.iLineName.Length() > 0, - _L("RCall::GetInfo returned an invalid Line name")); - ASSERT_EQUALS(callInfo.iStatus, RCall::EStatusConnected, - _L("RCall::GetInfo wrong iStatus, should be EStatusConnected")); - ASSERT_TRUE(callInfo.iDuration.Int() > 0, - _L("RCall::GetInfo wrong iDuration, should be > 0")); - - // Check RMobileCall::GetMobileCallInfo returns iValid > 0. - // Check RMobileCall::GetMobileCallInfo returns data for attributes makred as valid in iValid. - // Check RMobileCall::GetMobileCallInfo returns valid line name. - ASSERT_EQUALS(incomingCall.GetMobileCallInfo(mobileCallInfoPckg), KErrNone, - _L("RMobileCall::GetMobileCallInfo returned an error")); - ASSERT_TRUE(mobileCallInfo.iLineName.Length() > 0, - _L("RMobileCall::GetMobileCallInfo returned an invalid line name")); - ASSERT_TRUE(mobileCallInfo.iValid > 0, - _L("RMobileCall::GetMobileCallInfo returned unexpected flags in iValid")); - - iCallControlTestHelper.CheckForValidCallInfo(mobileCallInfo); - - //==== Post some notifiers ==== - incomingCall.NotifyCapsChange(notifyCapsChangeStatus,caps); - incomingCall.NotifyMobileCallCapsChange(notifyMobileCallCapsChangeStatus, capsPckg); - incomingCall.NotifyStatusChange(notifyCallStatusChangeStatus,callStatus); - incomingCall.NotifyMobileCallStatusChange(notifyMobileCallChangeStatus, mobileCallStatus); - - // Post notifier for line status to indicate when hangup completes - TExtEtelRequestStatus notifyMobileLineStatusChangeStatus(voiceLine, EMobileLineNotifyMobileLineStatusChange); - CleanupStack::PushL(notifyMobileLineStatusChangeStatus); - RMobileCall::TMobileCallStatus mobileLineStatus; - voiceLine.NotifyMobileLineStatusChange(notifyMobileLineStatusChangeStatus, mobileLineStatus); - - // RPS hangs up the call. - ASSERT_EQUALS(RPSHangupL(EVoiceLine,0), KErrNone, - _L("CCTSYIntegrationTestSuiteStepBase::RPSHangup returned an error")); - - // Wait for line status to be idle - iCallControlTestHelper.WaitForMobileLineNotifyMobileLineStatusChange(voiceLine, - notifyMobileLineStatusChangeStatus, - mobileLineStatus, - RMobileCall::EStatusDisconnecting, - KErrNone); - - // === Check call caps === - - // Check RCall::NotifyCapsChange completes with caps in set of KCapsVoice | KCapsDial. - wantedCaps.iFlags = RCall::KCapsVoice | RCall::KCapsDial; - ERR_PRINTF2(_L("$CTSYKnownFailure: defect id = %d"), 10023); - iCallControlTestHelper.WaitForCallNotifyCapsChange(incomingCall, - notifyCapsChangeStatus, - caps, - wantedCaps, - unwantedCaps, - wantedStatus); - - // Check RCall::GetCaps supports KCapsVoice | KCapsDial. - ASSERT_EQUALS(incomingCall.GetCaps(caps), KErrNone, - _L("RCall::GetCaps returned an Error")); - ASSERT_BITS_SET(caps.iFlags, RCall::KCapsVoice | RCall::KCapsDial, KNoUnwantedBits, - _L("RCall::GetCaps returned wrong caps")); - - // Check RMobileCall::NotifyMobileCallCapsChange completes with iCallControlCaps in set of KCapsVoice | KCapsDial. - // Check RMobileCall::NotifyMobileCallCapsChange completes with iCallEventCaps in set of 0. - wantedMobileCaps.iCallControlCaps = RMobileCall::KCapsVoice | RMobileCall::KCapsDial; - wantedMobileCaps.iCallEventCaps = 0; - TCmpRMobileCallTMobileCallCaps mobileCapsComp2(wantedMobileCaps, mobileCallCaps, *this); - iCallControlTestHelper.WaitForMobileCallNotifyMobileCallCapsChange(incomingCall, - notifyMobileCallCapsChangeStatus, - mobileCapsComp2, - wantedStatus); - - // Check RMobileCall::GetMobileCallCaps includes iCallControlCaps in set of KCapsVoice | KCapsDial. - // Check RMobileCall::GetMobileCallCaps includes iCallEventCaps in set of 0. - ASSERT_EQUALS(incomingCall.GetMobileCallCaps(capsPckg), KErrNone, - _L("RMobileCall::GetMobileCallCaps returned an error")); - wantedMobileCaps.iCallControlCaps = RMobileCall::KCapsVoice | RMobileCall::KCapsDial; - ASSERT_BITS_SET(mobileCallCaps.iCallControlCaps, wantedMobileCaps.iCallControlCaps,KNoUnwantedBits, - _L("RMobileCall::GetMobileCallCaps returned unexpected iCallControlCaps")); - wantedMobileCaps.iCallEventCaps = 0; - ASSERT_BITS_SET(mobileCallCaps.iCallEventCaps, wantedMobileCaps.iCallEventCaps,KNoUnwantedBits, - _L("RMobileCall::GetMobileCallCaps returned unexpected iCallEventCaps")); - - // === Check call status === - - // Check RCall::NotifyStatusChange completes with EStatusHangingUp -> EStatusIdle. - expectedCallStatus = RCall::EStatusHangingUp; - iCallControlTestHelper.WaitForCallNotifyStatusChange(incomingCall, - notifyCallStatusChangeStatus, - callStatus, - expectedCallStatus, - wantedStatus); - - incomingCall.NotifyStatusChange(notifyCallStatusChangeStatus,callStatus); - expectedCallStatus = RCall::EStatusIdle; - iCallControlTestHelper.WaitForCallNotifyStatusChange(incomingCall, - notifyCallStatusChangeStatus, - callStatus, - expectedCallStatus, - wantedStatus); - - // Check RCall::GetStatus returns EStatusIdle. - ASSERT_EQUALS(incomingCall.GetStatus(callStatus),KErrNone, - _L("RCall::GetStatus returned an error")); - ASSERT_EQUALS(callStatus, RCall::EStatusIdle, - _L("RCall::GetStatus returned an unexpected call status")); - - // Check RMobileCall::NotifyMobileCallStatusChange completes with EStatusDisconnecting -> EStatusIdle. - expectedMobileCallStatus = RMobileCall::EStatusDisconnecting; - iCallControlTestHelper.WaitForMobileCallNotifyMobileCallStatusChange(incomingCall, - notifyMobileCallChangeStatus, - mobileCallStatus, - expectedMobileCallStatus, - wantedStatus); - - incomingCall.NotifyMobileCallStatusChange(notifyMobileCallChangeStatus, mobileCallStatus); - expectedMobileCallStatus = RMobileCall::EStatusIdle; - iCallControlTestHelper.WaitForMobileCallNotifyMobileCallStatusChange(incomingCall, - notifyMobileCallChangeStatus, - mobileCallStatus, - expectedMobileCallStatus, - wantedStatus); - - // Check RMobileCall::GetMobileCallStatus returns status of EStatusIdle. - ASSERT_EQUALS(incomingCall.GetMobileCallStatus(mobileCallStatus), KErrNone, - _L("RMobileCall::GetMobileStatus returned an error")); - ASSERT_EQUALS(mobileCallStatus, RMobileCall::EStatusIdle, - _L("RMobileCall::GetMobileStatus did not return a status EStatusIdle")); - - // === Check call info === - - // Check RCall::GetInfo returns valid call name. - // Check RCall::GetInfo returns valid voice line name. - // Check RCall::GetInfo returns call status of EStatusIdle. - // Check RCall::GetInfo returns call duration of > 0. - ASSERT_EQUALS(incomingCall.GetInfo(callInfo), KErrNone, - _L("RCall::GetInfo returned an error")); - ASSERT_TRUE(callInfo.iCallName.Length() > 0, - _L("RCall::GetInfo returned an invalid name")); - ASSERT_TRUE(callInfo.iLineName.Length() > 0, - _L("RCall::GetInfo returned an invalid Line name")); - ASSERT_EQUALS(callInfo.iStatus, RCall::EStatusIdle, - _L("RCall::GetInfo wrong iStatus, should be EStatusIdle")); - ASSERT_TRUE(callInfo.iDuration.Int() > 0, - _L("RCall::GetInfo wrong iDuration, should be >0")); - - // Check RMobileCall::GetMobileCallInfo returns iValid > 0. - // Check RMobileCall::GetMobileCallInfo returns data for attributes makred as valid in iValid. - // Check RMobileCall::GetMobileCallInfo returns valid line name. - ASSERT_EQUALS(incomingCall.GetMobileCallInfo(mobileCallInfoPckg), KErrNone, - _L("RMobileCall::GetMobileCallInfo returned an error")); - ASSERT_TRUE(mobileCallInfo.iLineName.Length() > 0, - _L("RMobileCall::GetMobileCallInfo returned an invalid line name")); - ASSERT_TRUE(mobileCallInfo.iValid > 0, - _L("RMobileCall::GetMobileCallInfo returned unexpected flags in iValid")); - - // Note: not using TCallControlTsyTestHelper::CheckForValidCallInfo() as some checks would fail at this point - if(mobileCallInfo.iValid & RMobileCall::KCallRemoteParty) - { - ASSERT_TRUE(mobileCallInfo.iRemoteParty.iRemoteNumber.iTelNumber.Length() > 0, - _L("RMobileCall::GetMobileCallInfo set bitmask for KCallRemoteParty to true, but iRemoteParty.iRemoteNumber.iTelNumber has invalid length")); - } - if(mobileCallInfo.iValid & RMobileCall::KCallDuration) - { - TTimeIntervalSeconds startTime = 0; - TTimeIntervalSeconds durationTime(mobileCallInfo.iDuration); - ASSERT_TRUE(durationTime > startTime, - _L("RMobileCall::GetMobileCallInfo set bitmask for KCallDuration to true, but set iDuration to an invalid number")); - } - - ERR_PRINTF2(_L("$CTSYKnownFailure: defect id = %d"), 10017); - if(mobileCallInfo.iValid & RMobileCall::KCallId) - { - ASSERT_EQUALS( mobileCallInfo.iCallId, -1, - _L("RMobileCall::GetMobileCallInfo set bitmask for KCallId to true, but set iCallId to an invalid number")); - } - if(mobileCallInfo.iValid & RMobileCall::KCallExitCode) - { - ASSERT_EQUALS( mobileCallInfo.iExitCode, KErrNone, _L("RMobileCall::GetMobileCallInfo set bitmask for KCallExitCode to true, but did not set iExitCode to KErrNone")) - } - - //////////////////////////////////////////////////////////////// - // TEST END - //////////////////////////////////////////////////////////////// - - StartCleanup(); - - // PopAndDestroy - // notifyIncomingCallStatus - // notifyCapsChangeStatus - // notifyMobileCallCapsChangeStatus - // notifyCallStatusChangeStatus - // notifyMobileCallChangeStatus - // notifyMobileLineStatusChangeStatus - - CleanupStack::PopAndDestroy(6,¬ifyIncomingCallStatus); - - return TestStepResult(); - } - -TPtrC CCTSYIntegrationTestCallControl0019::GetTestStepName() -/** - * @return The test step name. - */ - { - return _L("CCTSYIntegrationTestCallControl0019"); - } - - - -CCTSYIntegrationTestCallControl0020::CCTSYIntegrationTestCallControl0020(CEtelSessionMgr& aEtelSessionMgr) - : CCTSYIntegrationTestCallControlBase(aEtelSessionMgr) -/** - * Constructor. - */ - { - SetTestStepName(CCTSYIntegrationTestCallControl0020::GetTestStepName()); - } - -CCTSYIntegrationTestCallControl0020::~CCTSYIntegrationTestCallControl0020() -/** - * Destructor. - */ - { - } - -TVerdict CCTSYIntegrationTestCallControl0020::doTestStepL() -/** - * @SYMTestCaseID BA-CTSY-INT-CCON-0020 - * @SYMFssID BA/CTSY/CCON-0020 - * @SYMTestCaseDesc Cancel dialling a call. - * @SYMTestPriority High - * @SYMTestActions RMobileCall::GetMobileCallStatus, RCall::Dial, RCall::NotifyStatusChange, RMobileCall::NotifyMobileCallStatusChange, RCall::GetStatus, RCall::DialCancel, RMobileCall::GetMobileCallCaps - * @SYMTestExpectedResults Pass - KErrCancel returned on cancellation of dial. - * @SYMTestType CIT - * @SYMTestCaseDependencies live/automatic - * - * Reason for test: Verify Dial can be cancelled at different periods of time into dialling and caps and status correct. - * - * @return - TVerdict code - */ - { - - //////////////////////////////////////////////////////////////// - // SET UP - //////////////////////////////////////////////////////////////// - - - // Check phone supports KCapsVoice - - // Get Voice line 1 - RMobileLine& voiceLine = iEtelSessionMgr.GetLineL(KMainServer, KMainPhone, KVoiceLine); - // Get call 1 - RMobileCall& call1 = iEtelSessionMgr.GetCallL(KMainServer, KMainPhone, KVoiceLine, KCall1); - - RLine::TCaps lineCaps; - CHECK_EQUALS_L(voiceLine.GetCaps(lineCaps), KErrNone, - _L("RMobileLine::GetCaps returned an error")); - CHECK_BITS_SET_L(lineCaps.iFlags, RLine::KCapsVoice, KNoUnwantedBits, - _L("RLine::GetCaps returned wrong caps")); - - // Call TNetworkTsyTestHelper::WaitForRegisteredOnHomeNetworkL - RMobilePhone& phone = iEtelSessionMgr.GetPhoneL(KMainServer,KMainPhone); - CHECK_EQUALS_L(iNetworkTestHelper.WaitForRegisteredOnHomeNetworkL(phone), KErrNone, - _L("TNetworkTsyTestHelper::WaitForRegisteredOnHomeNetworkL returned with an error")); - - //////////////////////////////////////////////////////////////// - // SET UP END - //////////////////////////////////////////////////////////////// - - StartTest(); - - //////////////////////////////////////////////////////////////// - // TEST START - //////////////////////////////////////////////////////////////// - - // post notifier for RCall::NotifyStatusChange - TCoreEtelRequestStatus notifyStatusChangeStatus (call1,&RCall::NotifyStatusChangeCancel); - CleanupStack::PushL(notifyStatusChangeStatus); - RCall::TStatus callStatus; - call1.NotifyStatusChange(notifyStatusChangeStatus,callStatus); - - // post notifier for RMobileCall::NotifyMobileCallStatusChange - TExtEtelRequestStatus notifyMobileCallStatusChangeStatus(call1, EMobileCallNotifyMobileCallStatusChange); - CleanupStack::PushL(notifyMobileCallStatusChangeStatus); - RMobileCall::TMobileCallStatus mobileCallStatus; - call1.NotifyMobileCallStatusChange(notifyMobileCallStatusChangeStatus, mobileCallStatus); - - // post notifier for RMobileCall::NotifyMobileCallCapsChange - TExtEtelRequestStatus notifyMobileCallCapsChangeStatus(call1, EMobileCallNotifyMobileCallCapsChange); - CleanupStack::PushL(notifyMobileCallCapsChangeStatus); - RMobileCall::TMobileCallCapsV1 mobileCallCaps; - RMobileCall::TMobileCallCapsV1Pckg capsPckg(mobileCallCaps); - call1.NotifyMobileCallCapsChange(notifyMobileCallCapsChangeStatus,capsPckg); - - // post notifier for RCall::NotifyCapsChange - TCoreEtelRequestStatus notifyCapsChangeStatus (call1,&RCall::NotifyCapsChangeCancel); - CleanupStack::PushL(notifyCapsChangeStatus); - RCall::TCaps callCaps; - call1.NotifyCapsChange(notifyCapsChangeStatus,callCaps); - - // === Dial then cancel after 3 seconds === - - DisplayUserInteractionPromptL( - _L("Ensure your own phone number has already been set in the ini file.\nAfter you press a key, the test will call this phone."), ETimeLong); - - // Dial RPS which won't answer. - TPtrC RPSnumber; - - // Dialling own phone instead of the RPS - /* - ASSERT_EQUALS(RPSIgnoreNextCallL(EVoiceLine), KErrNone, - _L("cctsyintegraiontestsuitebase::RPSIgnoreNextCallL returned an error")); - GetRPSNumber(EVoiceLine, RPSnumber); - */ - DEBUG_PRINTF1(_L("Voice mail must be switched off for this test to pass!")); - - ASSERT_TRUE(GetStringFromConfig(KIniOwnNumSection, KIniOwnVoiceNumber1, RPSnumber) != EFalse, - _L("CTestStep::GetStringFromConfig did not complete as expected")); - - DEBUG_PRINTF1(_L("Board Now Dialling (1)")); - TCoreEtelRequestStatus dialStatus(call1, &RCall::DialCancel); - CleanupStack::PushL(dialStatus); - call1.Dial(dialStatus, RPSnumber); - - // Wait for 3 seconds. - User::After(3*KOneSecond); - - // === Check call status and caps === - - // Check RCall::NotifyStatusChange completes with EStatusDialling - RCall::TStatus expectedCallStatus = RCall::EStatusDialling; - const TInt wantedStatus = KErrNone; - iCallControlTestHelper.WaitForCallNotifyStatusChange(call1, - notifyStatusChangeStatus, - callStatus, - expectedCallStatus, - wantedStatus); - - // Check RCall::GetStatus returns EStatusDialling. - ASSERT_EQUALS(call1.GetStatus(callStatus),KErrNone, - _L("RCall::GetStatus returned an error")); - ASSERT_EQUALS(callStatus, RCall::EStatusDialling, - _L("RCall::GetStatus returned an unexpected call status")); - - // Check RMobileCall::NotifyMobileCallStatusChange completes with EStatusDialling - RMobileCall::TMobileCallStatus expectedMobileCallStatus = RMobileCall::EStatusDialling; - iCallControlTestHelper.WaitForMobileCallNotifyMobileCallStatusChange(call1, - notifyMobileCallStatusChangeStatus, - mobileCallStatus, - expectedMobileCallStatus, - wantedStatus); - - // Check RMobileCall::GetMobileCallStatus returns status of EStatusDialling - ASSERT_EQUALS(call1.GetMobileCallStatus(mobileCallStatus), KErrNone, - _L("RMobileCall::GetMobileStatus returned an error")); - ASSERT_EQUALS(mobileCallStatus, RMobileCall::EStatusDialling, - _L("RMobileCall::GetMobileStatus did not return a status EStatusDialling")); - - // Check RMobileCall::NotifyMobileCallCapsChange completes with iCallControlCaps in set of KCapsVoice - // Check RMobileCall::NotifyMobileCallCapsChange completes with iCallControlCaps NOT in set of KCapsDial - - RMobileCall::TMobileCallCapsV1 wantedMobileCaps, unwantedMobileCaps; - wantedMobileCaps.iCallControlCaps = RMobileCall::KCapsVoice; - wantedMobileCaps.iCallEventCaps = KNoWantedBits; - TCmpRMobileCallTMobileCallCaps mobileCapsComp(wantedMobileCaps,mobileCallCaps, *this); - iCallControlTestHelper.WaitForMobileCallNotifyMobileCallCapsChange(call1, - notifyMobileCallCapsChangeStatus, - mobileCapsComp, - wantedStatus); - - unwantedMobileCaps.iCallControlCaps = RMobileCall::KCapsDial; - - ASSERT_BITS_SET(mobileCallCaps.iCallControlCaps, wantedMobileCaps.iCallControlCaps, unwantedMobileCaps.iCallControlCaps, - _L("RMobileCall::NotifyMobileCallCapsChange did not set expected iCallControlCaps")); - - // Check RMobileCall::GetMobileCallCaps includes iCallControlCaps in set of KCapsVoice - // Check RMobileCall::GetMobileCallCaps includes iCallControlCaps in NOT set of KCapsDial - ASSERT_EQUALS(call1.GetMobileCallCaps(capsPckg), KErrNone, - _L("RMobileCall::GetMobileCallCaps returned an error")); - wantedMobileCaps.iCallControlCaps = RMobileCall::KCapsVoice; - unwantedMobileCaps.iCallControlCaps = RMobileCall::KCapsDial; - ASSERT_BITS_SET(mobileCallCaps.iCallControlCaps, wantedMobileCaps.iCallControlCaps,unwantedMobileCaps.iCallControlCaps, - _L("RMobileCall::GetMobileCallCaps returned unexpected iCallControlCaps")); - - // === Post Notifiers ====== - call1.NotifyMobileCallCapsChange(notifyMobileCallCapsChangeStatus,capsPckg); - call1.NotifyStatusChange(notifyStatusChangeStatus,callStatus); - call1.NotifyMobileCallStatusChange(notifyMobileCallStatusChangeStatus, mobileCallStatus); - - // Cancel dialling with RCall::DialCancel - call1.DialCancel(); - - // Check RCall::Dial request completes with KErrCancel - ASSERT_EQUALS(WaitForRequestWithTimeOut(dialStatus, ETimeShort), KErrNone, - _L("RCall::DialCancel timed-out")); - ASSERT_EQUALS(dialStatus.Int(), KErrCancel, - _L("RCall::Dial Request status was not set to KErrCancel")); - - // === Check call status and caps === - - // Check RMobileCall::NotifyMobileCallCapsChange completes with iCallControlCaps in set of KCapsVoice | KCapsDial. - // Check RMobileCall::NotifyMobileCallCapsChange completes with iCallEventCaps in set of 0. - wantedMobileCaps.iCallControlCaps = RMobileCall::KCapsVoice | RMobileCall::KCapsDial; - wantedMobileCaps.iCallEventCaps = 0; - TCmpRMobileCallTMobileCallCaps mobileCapsComp2(wantedMobileCaps,mobileCallCaps, *this); - iCallControlTestHelper.WaitForMobileCallNotifyMobileCallCapsChange(call1, - notifyMobileCallCapsChangeStatus, - mobileCapsComp2, - wantedStatus); - - // Check RMobileCall::GetMobileCallCaps includes iCallControlCaps in set of KCapsVoice | KCapsDial. - ASSERT_EQUALS(call1.GetMobileCallCaps(capsPckg), KErrNone, - _L("RMobileCall::GetMobileCallCaps returned an error")); - wantedMobileCaps.iCallControlCaps = RMobileCall::KCapsVoice | RMobileCall::KCapsDial; - ASSERT_BITS_SET(mobileCallCaps.iCallControlCaps, wantedMobileCaps.iCallControlCaps,KNoUnwantedBits, - _L("RMobileCall::GetMobileCallCaps returned unexpected iCallControlCaps")); - - // Check RMobileCall::GetMobileCallCaps includes iCallEventCaps in set of 0. - wantedMobileCaps.iCallEventCaps = 0; - ASSERT_BITS_SET(mobileCallCaps.iCallEventCaps, wantedMobileCaps.iCallEventCaps,KNoUnwantedBits, - _L("RMobileCall::GetMobileCallCaps returned unexpected iCallEventCaps")); - - // Check RCall::NotifyStatusChange completes with EStatusIdle. - expectedCallStatus = RCall::EStatusIdle; - iCallControlTestHelper.WaitForCallNotifyStatusChange(call1, - notifyStatusChangeStatus, - callStatus, - expectedCallStatus, - wantedStatus); - // Check RCall::GetStatus returns EStatusIdle. - ASSERT_EQUALS(call1.GetStatus(callStatus),KErrNone, - _L("RCall::GetStatus returned an error")); - ASSERT_EQUALS(callStatus, RCall::EStatusIdle, - _L("RCall::GetStatus returned an unexpected call status")); - - // Check RMobileCall::NotifyMobileCallStatusChange completes with EStatusIdle. - expectedMobileCallStatus = RMobileCall::EStatusIdle; - iCallControlTestHelper.WaitForMobileCallNotifyMobileCallStatusChange(call1, - notifyMobileCallStatusChangeStatus, - mobileCallStatus, - expectedMobileCallStatus, - wantedStatus); - - // Check RMobileCall::GetMobileCallStatus returns status of EStatusIdle. - ASSERT_EQUALS(call1.GetMobileCallStatus(mobileCallStatus), KErrNone, - _L("RMobileCall::GetMobileStatus returned an error")); - ASSERT_EQUALS(mobileCallStatus, RMobileCall::EStatusIdle, - _L("RMobileCall::GetMobileStatus did not return a status EStatusIdle")); - - // Wait for 2 seconds - User::After(2*KOneSecond); - - // Release call 1. - iEtelSessionMgr.ReleaseCall(KMainServer,KMainPhone,KVoiceLine,KCall1); - - // Get call 1. - call1 = iEtelSessionMgr.GetCallL(KMainServer, KMainPhone, KVoiceLine, KCall1); - - // === Dial then cancel after 5 seconds === - - // -- Post Notifiers --- - call1.NotifyStatusChange(notifyStatusChangeStatus,callStatus); - call1.NotifyMobileCallStatusChange(notifyMobileCallStatusChangeStatus, mobileCallStatus); - call1.NotifyMobileCallCapsChange(notifyMobileCallCapsChangeStatus,capsPckg); - - // Dial RPS which won't answer. - // Dialling own phone instead of the RPS - /* - ASSERT_EQUALS(RPSIgnoreNextCallL(EVoiceLine), KErrNone, - _L("cctsyintegraiontestsuitebase::RPSIgnoreNextCallL returned an error")); - */ - DEBUG_PRINTF1(_L("Board Now Dialling: ")); - call1.Dial(dialStatus, RPSnumber); - - // Wait for 5 seconds. - User::After(5*KOneSecond); - - // === Check call status and caps === - - // Check RCall::NotifyStatusChange completes with EStatusDialling - expectedCallStatus = RCall::EStatusDialling; - iCallControlTestHelper.WaitForCallNotifyStatusChange(call1, - notifyStatusChangeStatus, - callStatus, - expectedCallStatus, - wantedStatus); - - // Check RCall::GetStatus returns EStatusDialling. - ASSERT_EQUALS(call1.GetStatus(callStatus),KErrNone, - _L("RCall::GetStatus returned an error")); - ASSERT_EQUALS(callStatus, RCall::EStatusDialling, - _L("RCall::GetStatus returned an unexpected call status")); - - // Check RMobileCall::NotifyMobileCallStatusChange completes with EStatusDialling - expectedMobileCallStatus = RMobileCall::EStatusDialling; - iCallControlTestHelper.WaitForMobileCallNotifyMobileCallStatusChange(call1, - notifyMobileCallStatusChangeStatus, - mobileCallStatus, - expectedMobileCallStatus, - wantedStatus); - - // Check RMobileCall::GetMobileCallStatus returns status of EStatusDialling - ASSERT_EQUALS(call1.GetMobileCallStatus(mobileCallStatus), KErrNone, - _L("RMobileCall::GetMobileStatus returned an error")); - ASSERT_EQUALS(mobileCallStatus, RMobileCall::EStatusDialling, - _L("RMobileCall::GetMobileStatus did not return a status EStatusDialling")); - - // Check RMobileCall::NotifyMobileCallCapsChange completes with iCallControlCaps in set of KCapsVoice - // Check RMobileCall::NotifyMobileCallCapsChange completes with iCallControlCaps NOT in set of KCapsDial - wantedMobileCaps.iCallControlCaps = RMobileCall::KCapsVoice; - wantedMobileCaps.iCallEventCaps = KNoWantedBits; - iCallControlTestHelper.WaitForMobileCallNotifyMobileCallCapsChange(call1, - notifyMobileCallCapsChangeStatus, - mobileCapsComp, - wantedStatus); - - unwantedMobileCaps.iCallControlCaps = RMobileCall::KCapsDial; - ASSERT_BITS_SET(mobileCallCaps.iCallControlCaps, wantedMobileCaps.iCallControlCaps, unwantedMobileCaps.iCallControlCaps, - _L("RMobileCall::NotifyMobileCallCapsChange did not set expected iCallControlCaps")); - - // Check RMobileCall::GetMobileCallCaps includes iCallControlCaps in set of KCapsVoice - // Check RMobileCall::GetMobileCallCaps includes iCallControlCaps in NOT set of KCapsDial - ASSERT_EQUALS(call1.GetMobileCallCaps(capsPckg), KErrNone, - _L("RMobileCall::GetMobileCallCaps returned an error")); - wantedMobileCaps.iCallControlCaps = RMobileCall::KCapsVoice; - unwantedMobileCaps.iCallControlCaps = RMobileCall::KCapsDial; - ASSERT_BITS_SET(mobileCallCaps.iCallControlCaps, wantedMobileCaps.iCallControlCaps,unwantedMobileCaps.iCallControlCaps, - _L("RMobileCall::GetMobileCallCaps returned unexpected iCallControlCaps")); - - // -- Post Notifiers --- - call1.NotifyMobileCallCapsChange(notifyMobileCallCapsChangeStatus,capsPckg); - call1.NotifyStatusChange(notifyStatusChangeStatus,callStatus); - call1.NotifyMobileCallStatusChange(notifyMobileCallStatusChangeStatus, mobileCallStatus); - - // Cancel dialling with RCall::DialCancel - call1.DialCancel(); - - // Check RCall::Dial request completes with KErrCancel - ASSERT_EQUALS(WaitForRequestWithTimeOut(dialStatus, ETimeShort), KErrNone, - _L("RCall::DialCancel timed-out")); - ASSERT_EQUALS(dialStatus.Int(), KErrCancel, - _L("RCall::Dial Request status was not set to KErrCancel")); - - // === Check call status and caps === - - // Check RMobileCall::NotifyMobileCallCapsChange completes with iCallControlCaps in set of KCapsVoice | KCapsDial. - // Check RMobileCall::NotifyMobileCallCapsChange completes with iCallEventCaps in set of 0. - wantedMobileCaps.iCallControlCaps = RMobileCall::KCapsVoice | RMobileCall::KCapsDial; - wantedMobileCaps.iCallEventCaps = 0; - TCmpRMobileCallTMobileCallCaps mobileCapsComp3(wantedMobileCaps,mobileCallCaps, *this); - iCallControlTestHelper.WaitForMobileCallNotifyMobileCallCapsChange(call1, - notifyMobileCallCapsChangeStatus, - mobileCapsComp3, - wantedStatus); - - ASSERT_BITS_SET(mobileCallCaps.iCallControlCaps, wantedMobileCaps.iCallControlCaps, KNoUnwantedBits, - _L("RMobileCall::NotifyMobileCallCapsChange did not set expected iCallControlCaps")); - ASSERT_BITS_SET(mobileCallCaps.iCallEventCaps, wantedMobileCaps.iCallEventCaps, KNoUnwantedBits, - _L("RMobileCall::NotifyMobileCallCapsChange did not set expected iCallEventCaps")); - - // Check RMobileCall::GetMobileCallCaps includes iCallControlCaps in set of KCapsVoice | KCapsDial. - // Check RMobileCall::GetMobileCallCaps includes iCallEventCaps in set of 0. - ASSERT_EQUALS(call1.GetMobileCallCaps(capsPckg), KErrNone, - _L("RMobileCall::GetMobileCallCaps returned an error")); - wantedMobileCaps.iCallControlCaps = RMobileCall::KCapsVoice| RMobileCall::KCapsDial; - ASSERT_BITS_SET(mobileCallCaps.iCallControlCaps, wantedMobileCaps.iCallControlCaps,KNoUnwantedBits, - _L("RMobileCall::GetMobileCallCaps returned unexpected iCallControlCaps")); - wantedMobileCaps.iCallEventCaps = 0; - ASSERT_BITS_SET(mobileCallCaps.iCallEventCaps, wantedMobileCaps.iCallEventCaps,KNoUnwantedBits, - _L("RMobileCall::GetMobileCallCaps returned unexpected iCallEventCaps")); - - // Check RCall::NotifyStatusChange completes with EStatusIdle. - expectedCallStatus = RCall::EStatusIdle; - iCallControlTestHelper.WaitForCallNotifyStatusChange(call1, - notifyStatusChangeStatus, - callStatus, - expectedCallStatus, - wantedStatus); - - // Check RCall::GetStatus returns EStatusIdle. - ASSERT_EQUALS(call1.GetStatus(callStatus),KErrNone, - _L("RCall::GetStatus returned an error")); - ASSERT_EQUALS(callStatus, RCall::EStatusIdle, - _L("RCall::GetStatus returned an unexpected call status")); - - // Check RMobileCall::NotifyMobileCallStatusChange completes with EStatusIdle. - expectedMobileCallStatus = RMobileCall::EStatusIdle; - iCallControlTestHelper.WaitForMobileCallNotifyMobileCallStatusChange(call1, - notifyMobileCallStatusChangeStatus, - mobileCallStatus, - expectedMobileCallStatus, - wantedStatus); - - // Check RMobileCall::GetMobileCallStatus returns status of EStatusIdle. - ASSERT_EQUALS(call1.GetMobileCallStatus(mobileCallStatus), KErrNone, - _L("RMobileCall::GetMobileStatus returned an error")); - ASSERT_EQUALS(mobileCallStatus, RMobileCall::EStatusIdle, - _L("RMobileCall::GetMobileStatus did not return a status EStatusIdle")); - - // Wait for 2 seconds - User::After(2*KOneSecond); - - // Release call 1. - iEtelSessionMgr.ReleaseCall(KMainServer,KMainPhone,KVoiceLine,KCall1); - - // Get call 1. - call1 = iEtelSessionMgr.GetCallL(KMainServer, KMainPhone, KVoiceLine, KCall1); - - // === Dial then cancel after 15 seconds === - - // -- Post Notifiers --- - call1.NotifyStatusChange(notifyStatusChangeStatus,callStatus); - call1.NotifyMobileCallStatusChange(notifyMobileCallStatusChangeStatus, mobileCallStatus); - call1.NotifyMobileCallCapsChange(notifyMobileCallCapsChangeStatus,capsPckg); - - // Dial RPS which won't answer. - // Dialling own phone instead of the RPS - /* - ASSERT_EQUALS(RPSIgnoreNextCallL(EVoiceLine), KErrNone, - _L("cctsyintegraiontestsuitebase::RPSIgnoreNextCallL returned an error")); - */ - DEBUG_PRINTF1(_L("Board Now Dialling")); - call1.Dial(dialStatus, RPSnumber); - - // Wait for 15 seconds. - User::After(15*KOneSecond); - - // === Check call status and caps === - - // Check RCall::NotifyStatusChange completes with EStatusDialling - expectedCallStatus = RCall::EStatusDialling; - iCallControlTestHelper.WaitForCallNotifyStatusChange(call1, - notifyStatusChangeStatus, - callStatus, - expectedCallStatus, - wantedStatus); - // Check RCall::GetStatus returns EStatusDialling. - ERR_PRINTF2(_L("$CTSYKnownFailure: defect id = %d"), 10025); - ASSERT_EQUALS(call1.GetStatus(callStatus),KErrNone, - _L("RCall::GetStatus returned an error")); - ASSERT_EQUALS(callStatus, RCall::EStatusDialling, - _L("RCall::GetStatus returned an unexpected call status")); - - // Check RMobileCall::NotifyMobileCallStatusChange completes with EStatusDialling - expectedMobileCallStatus = RMobileCall::EStatusDialling; - iCallControlTestHelper.WaitForMobileCallNotifyMobileCallStatusChange(call1, - notifyMobileCallStatusChangeStatus, - mobileCallStatus, - expectedMobileCallStatus, - wantedStatus); - - // Check RMobileCall::GetMobileCallStatus returns status of EStatusDialling - ERR_PRINTF2(_L("$CTSYKnownFailure: defect id = %d"), 10025); - ASSERT_EQUALS(call1.GetMobileCallStatus(mobileCallStatus), KErrNone, - _L("RMobileCall::GetMobileStatus returned an error")); - ASSERT_EQUALS(mobileCallStatus, RMobileCall::EStatusDialling, - _L("RMobileCall::GetMobileStatus did not return a status EStatusDialling")); - - // Check RMobileCall::NotifyMobileCallCapsChange completes with iCallControlCaps in set of KCapsVoice - // Check RMobileCall::NotifyMobileCallCapsChange completes with iCallControlCaps NOT in set of KCapsDial - wantedMobileCaps.iCallControlCaps = RMobileCall::KCapsVoice; - wantedMobileCaps.iCallEventCaps = KNoWantedBits; - TCmpRMobileCallTMobileCallCaps mobileCapsComp4(wantedMobileCaps,mobileCallCaps, *this); - iCallControlTestHelper.WaitForMobileCallNotifyMobileCallCapsChange(call1, - notifyMobileCallCapsChangeStatus, - mobileCapsComp4, - wantedStatus); - - unwantedMobileCaps.iCallControlCaps = RMobileCall::KCapsDial; - ASSERT_BITS_SET(mobileCallCaps.iCallControlCaps, wantedMobileCaps.iCallControlCaps, unwantedMobileCaps.iCallControlCaps, - _L("RMobileCall::NotifyMobileCallCapsChange did not set expected iCallControlCaps")); - - // Check RMobileCall::GetMobileCallCaps includes iCallControlCaps in set of KCapsVoice - // Check RMobileCall::GetMobileCallCaps includes iCallControlCaps in NOT set of KCapsDial - ASSERT_EQUALS(call1.GetMobileCallCaps(capsPckg), KErrNone, - _L("RMobileCall::GetMobileCallCaps returned an error")); - wantedMobileCaps.iCallControlCaps = RMobileCall::KCapsVoice; - unwantedMobileCaps.iCallControlCaps = RMobileCall::KCapsDial; - ASSERT_BITS_SET(mobileCallCaps.iCallControlCaps, wantedMobileCaps.iCallControlCaps,unwantedMobileCaps.iCallControlCaps, - _L("RMobileCall::GetMobileCallCaps returned unexpected iCallControlCaps")); - - // -- Post Notifiers --- - call1.NotifyMobileCallCapsChange(notifyMobileCallCapsChangeStatus,capsPckg); - call1.NotifyStatusChange(notifyStatusChangeStatus,callStatus); - call1.NotifyMobileCallStatusChange(notifyMobileCallStatusChangeStatus, mobileCallStatus); - - // Cancel dialling with RCall::DialCancel - call1.DialCancel(); - - // Check RCall::Dial request completes with KErrCancel - ASSERT_EQUALS(WaitForRequestWithTimeOut(dialStatus, ETimeShort), KErrNone, - _L("RCall::DialCancel timed-out")); - ASSERT_EQUALS(dialStatus.Int(), KErrCancel, - _L("RCall::Dial REequest status was not set to KErrCancel")); - - // === Check call status and caps === - - // Check RMobileCall::NotifyMobileCallCapsChange completes with iCallControlCaps in set of KCapsVoice | KCapsDial. - // Check RMobileCall::NotifyMobileCallCapsChange completes with iCallEventCaps in set of 0. - wantedMobileCaps.iCallControlCaps = RMobileCall::KCapsVoice | RMobileCall::KCapsDial; - wantedMobileCaps.iCallEventCaps = 0; - TCmpRMobileCallTMobileCallCaps mobileCapsComp5(wantedMobileCaps,mobileCallCaps, *this); - iCallControlTestHelper.WaitForMobileCallNotifyMobileCallCapsChange(call1, - notifyMobileCallCapsChangeStatus, - mobileCapsComp5, - wantedStatus); - - ASSERT_BITS_SET(mobileCallCaps.iCallControlCaps, wantedMobileCaps.iCallControlCaps, KNoUnwantedBits, - _L("RMobileCall::NotifyMobileCallCapsChange did not set expected iCallControlCaps")); - ASSERT_BITS_SET(mobileCallCaps.iCallEventCaps, wantedMobileCaps.iCallEventCaps, KNoUnwantedBits, - _L("RMobileCall::NotifyMobileCallCapsChange did not set expected iCallEventCaps")); - - // Check RMobileCall::GetMobileCallCaps includes iCallControlCaps in set of KCapsVoice | KCapsDial. - // Check RMobileCall::GetMobileCallCaps includes iCallEventCaps in set of 0. - ASSERT_EQUALS(call1.GetMobileCallCaps(capsPckg), KErrNone, - _L("RMobileCall::GetMobileCallCaps returned an error")); - wantedMobileCaps.iCallControlCaps = RMobileCall::KCapsVoice| RMobileCall::KCapsDial; - ASSERT_BITS_SET(mobileCallCaps.iCallControlCaps, wantedMobileCaps.iCallControlCaps,KNoUnwantedBits, - _L("RMobileCall::GetMobileCallCaps returned unexpected iCallControlCaps")); - wantedMobileCaps.iCallEventCaps = 0; - ASSERT_BITS_SET(mobileCallCaps.iCallEventCaps, wantedMobileCaps.iCallEventCaps,KNoUnwantedBits, - _L("RMobileCall::GetMobileCallCaps returned unexpected iCallEventCaps")); - - // Check RCall::NotifyStatusChange completes with EStatusIdle. - expectedCallStatus = RCall::EStatusIdle; - iCallControlTestHelper.WaitForCallNotifyStatusChange(call1, - notifyStatusChangeStatus, - callStatus, - expectedCallStatus, - wantedStatus); - - // Check RCall::GetStatus returns EStatusIdle. - ASSERT_EQUALS(call1.GetStatus(callStatus),KErrNone, - _L("RCall::GetStatus returned an error")); - ASSERT_EQUALS(callStatus, RCall::EStatusIdle, - _L("RCall::GetStatus returned an unexpected call status")); - - // Check RMobileCall::NotifyMobileCallStatusChange completes with EStatusIdle. - expectedMobileCallStatus = RMobileCall::EStatusIdle; - iCallControlTestHelper.WaitForMobileCallNotifyMobileCallStatusChange(call1, - notifyMobileCallStatusChangeStatus, - mobileCallStatus, - expectedMobileCallStatus, - wantedStatus); - - // Check RMobileCall::GetMobileCallStatus returns status of EStatusIdle. - ASSERT_EQUALS(call1.GetMobileCallStatus(mobileCallStatus), KErrNone, - _L("RMobileCall::GetMobileStatus returned an error")); - ASSERT_EQUALS(mobileCallStatus, RMobileCall::EStatusIdle, - _L("RMobileCall::GetMobileStatus did not return a status EStatusIdle")); - - - //////////////////////////////////////////////////////////////// - // TEST END - //////////////////////////////////////////////////////////////// - - StartCleanup(); - - // PopAndDestroy - // dialStatus - // notifyCapsChangeStatus - // notifyMobileCallCapsChangeStatus - // notifyMobileCallStatusChangeStatus - // notifyStatusChangeStatus - - CleanupStack::PopAndDestroy(5, ¬ifyStatusChangeStatus); - - return TestStepResult(); - } - -TPtrC CCTSYIntegrationTestCallControl0020::GetTestStepName() -/** - * @return The test step name. - */ - { - return _L("CCTSYIntegrationTestCallControl0020"); - } - - - -CCTSYIntegrationTestCallControl0021::CCTSYIntegrationTestCallControl0021(CEtelSessionMgr& aEtelSessionMgr) - : CCTSYIntegrationTestCallControlBase(aEtelSessionMgr) -/** - * Constructor. - */ - { - SetTestStepName(CCTSYIntegrationTestCallControl0021::GetTestStepName()); - } - -CCTSYIntegrationTestCallControl0021::~CCTSYIntegrationTestCallControl0021() -/** - * Destructor. - */ - { - } - -TVerdict CCTSYIntegrationTestCallControl0021::doTestStepL() -/** - * @SYMTestCaseID BA-CTSY-INT-CCON-0021 - * @SYMFssID BA/CTSY/CCON-0021 - * @SYMTestCaseDesc Hang up MO call before it gets connected. - * @SYMTestPriority High - * @SYMTestActions RCall::GetCaps, RMobileCall::NotifyMobileCallCapsChange, RMobileCall::GetMobileCallStatus, RMobileCall::GetMobileCallInfo, RLine::NotifyIncomingCall, RCall::GetInfo, RCall::NotifyStatusChange, RMobileCall::NotifyMobileCallStatusChange, RCall::OpenExistingCall, RCall::NotifyCapsChange, RCall::GetStatus, RMobileCall::GetMobileCallCaps - * @SYMTestExpectedResults Pass - Call is hung up and call status returns to idle. - * @SYMTestType CIT - * @SYMTestCaseDependencies live/automatic - * - * Reason for test: Verify call caps and call status correct and call is hung up. - * - * @return - TVerdict code - */ - { - - //////////////////////////////////////////////////////////////// - // SET UP - //////////////////////////////////////////////////////////////// - - // Check phone supports KCapsVoice - - // Get Voice line 1 - RMobileLine& voiceLine = iEtelSessionMgr.GetLineL(KMainServer, KMainPhone, KVoiceLine); - // Get call 1 - RMobileCall& call1 = iEtelSessionMgr.GetCallL(KMainServer, KMainPhone, KVoiceLine, KCall1); - - RLine::TCaps lineCaps; - CHECK_EQUALS_L(voiceLine.GetCaps(lineCaps), KErrNone, - _L("RMobileLine::GetCaps returned an error.")); - CHECK_BITS_SET_L(lineCaps.iFlags, RLine::KCapsVoice, KNoUnwantedBits, - _L("RLine::GetCaps did not return KCapsVoice.")); - - // Call TNetworkTsyTestHelper::WaitForRegisteredOnHomeNetworkL - RMobilePhone& phone = iEtelSessionMgr.GetPhoneL(KMainServer,KMainPhone); - CHECK_EQUALS_L(iNetworkTestHelper.WaitForRegisteredOnHomeNetworkL(phone), KErrNone, - _L("TNetworkTsyTestHelper::WaitForRegisteredOnHomeNetworkL returned with an error")); - - //////////////////////////////////////////////////////////////// - // SET UP END - //////////////////////////////////////////////////////////////// - - StartTest(); - - //////////////////////////////////////////////////////////////// - // TEST START - //////////////////////////////////////////////////////////////// - - // Post notification for RCall::NotifyStatusChange - TCoreEtelRequestStatus notifyStatusChangeStatus(call1, &RCall::NotifyStatusChangeCancel); - CleanupStack::PushL(notifyStatusChangeStatus); - RCall::TStatus callStatus; - call1.NotifyStatusChange(notifyStatusChangeStatus, callStatus); - - // Post notification for RMobileCall::NotifyMobileCallStatusChange - TExtEtelRequestStatus notifyMobileCallChangeStatus(call1, EMobileCallNotifyMobileCallStatusChange); - CleanupStack::PushL(notifyMobileCallChangeStatus); - RMobileCall::TMobileCallStatus mobileCallStatus; - call1.NotifyMobileCallStatusChange(notifyMobileCallChangeStatus, mobileCallStatus); - - // Post notifier for RMobileCall::NotifyMobileCallCapsChange - TExtEtelRequestStatus notifyMobileCallCapsChangeStatus(call1, EMobileCallNotifyMobileCallCapsChange); - CleanupStack::PushL(notifyMobileCallCapsChangeStatus); - RMobileCall::TMobileCallCapsV1 mobileCallCaps; - RMobileCall::TMobileCallCapsV1Pckg mobileCallCapsPckg(mobileCallCaps); - call1.NotifyMobileCallCapsChange(notifyMobileCallCapsChangeStatus, mobileCallCapsPckg); - - // Dial RPS which will not answer. - TPtrC rpsNumber; - - GetRPSNumber(EVoiceLine, rpsNumber); - - TCoreEtelRequestStatus dialStatus(call1, &RCall::DialCancel); - CleanupStack::PushL(dialStatus); - call1.Dial(dialStatus, rpsNumber); - - // Wait for 3000ms. NB: Using 3000 microSeconds - User::After(3000); - - // === Check call status and caps === - - // Check RCall::NotifyStatusChange completes with EStatusDialling - RCall::TStatus expectedCallStatus = RCall::EStatusDialling; - const TInt wantedStatus = KErrNone; - iCallControlTestHelper.WaitForCallNotifyStatusChange(call1, - notifyStatusChangeStatus, - callStatus, - expectedCallStatus, - wantedStatus); - - // Check RCall::GetStatus returns EStatusDialling. - ASSERT_EQUALS(call1.GetStatus(callStatus), KErrNone, - _L("RCall::GetStatus returned an error.")); - ASSERT_EQUALS(callStatus, RCall::EStatusDialling, - _L("RCall::GetStatus did not return EStatusDialling.")); - - // Check RMobileCall::NotifyMobileCallStatusChange completes with EStatusDialling - RMobileCall::TMobileCallStatus expectedMobileCallStatus = RMobileCall::EStatusDialling; - iCallControlTestHelper.WaitForMobileCallNotifyMobileCallStatusChange(call1, - notifyMobileCallChangeStatus, - mobileCallStatus, - expectedMobileCallStatus, - wantedStatus); - - // Check RMobileCall::GetMobileCallStatus returns status of EStatusDialling - ASSERT_EQUALS(call1.GetMobileCallStatus(mobileCallStatus), KErrNone, - _L("RMobileCall::GetMobileCallStatus returned error.")); - ASSERT_EQUALS(mobileCallStatus, RMobileCall::EStatusDialling, - _L("RMobileCall::GetMobileCallStatus's status did not return EStatusDialling.")); - - //*** NB: NotifyMobileCallCapsChange and GetMobileCallCaps not returning correct values on H2 - // Check RMobileCall::NotifyMobileCallCapsChange completes with iCallControlCaps in set of KCapsVoice - // Check RMobileCall::NotifyMobileCallCapsChange completes with iCallControlCaps NOT in set of KCapsDial - RMobileCall::TMobileCallCapsV1 wantedMobileCaps, unwantedMobileCaps; - wantedMobileCaps.iCallControlCaps = RMobileCall::KCapsVoice; - wantedMobileCaps.iCallEventCaps = KNoWantedBits; - TCmpRMobileCallTMobileCallCaps mobileCapsComp(wantedMobileCaps, mobileCallCaps, *this); - iCallControlTestHelper.WaitForMobileCallNotifyMobileCallCapsChange(call1, - notifyMobileCallCapsChangeStatus, - mobileCapsComp, - wantedStatus); - - unwantedMobileCaps.iCallControlCaps = RMobileCall::KCapsDial; - - ASSERT_BITS_SET(mobileCallCaps.iCallControlCaps, wantedMobileCaps.iCallControlCaps, unwantedMobileCaps.iCallControlCaps, - _L("RMobileCall::NotifyMobileCallCapsChange did not set expected iCallControlCaps")); - - // Check RMobileCall::GetMobileCallCaps includes iCallControlCaps in set of KCapsVoice | KCapsHangUp - // Check RMobileCall::GetMobileCallCaps includes iCallControlCaps in NOT set of KCapsDial - ASSERT_EQUALS(call1.GetMobileCallCaps(mobileCallCapsPckg), KErrNone, - _L("RMobileCall::GetMobileCallCaps returned error.")); - ASSERT_BITS_SET(mobileCallCaps.iCallControlCaps, RCall::KCapsVoice | RCall::KCapsHangUp, RCall::KCapsDial, - _L("RMobileCall::GetMobileCallCaps returned wrong caps.")); - - // Hang up call. - - // Post notifier for RMobileCall::NotifyMobileCallCapsChange - call1.NotifyMobileCallCapsChange(notifyMobileCallCapsChangeStatus, mobileCallCapsPckg); - - // Post notification for RCall::NotifyStatusChange - call1.NotifyStatusChange(notifyStatusChangeStatus, callStatus); - - // Post notification for RMobileCall::NotifyMobileCallStatusChange - call1.NotifyMobileCallStatusChange(notifyMobileCallChangeStatus, mobileCallStatus); - - ASSERT_EQUALS(call1.HangUp(), KErrNone, _L("RMobileCall::HangUp returned error.")); - -//******** DO WE NEED TO WAIT FOR dialStatus TO change at this point ?? ************// - - // === Check call status and caps === - - // Check RMobileCall::NotifyMobileCallCapsChange completes with iCallControlCaps in set of KCapsVoice | KCapsDial. - // Check RMobileCall::NotifyMobileCallCapsChange completes with iCallEventCaps in set of 0. - wantedMobileCaps.iCallControlCaps = RMobileCall::KCapsVoice | RMobileCall::KCapsDial; - wantedMobileCaps.iCallEventCaps = KNoUnwantedBits; - TCmpRMobileCallTMobileCallCaps mobileCapsComp2(wantedMobileCaps,mobileCallCaps, *this); - iCallControlTestHelper.WaitForMobileCallNotifyMobileCallCapsChange(call1, - notifyMobileCallCapsChangeStatus, - mobileCapsComp2, - wantedStatus); - - // Check RMobileCall::GetMobileCallCaps includes iCallControlCaps in set of KCapsVoice | KCapsDial. - // Check RMobileCall::GetMobileCallCaps includes iCallEventCaps in set of 0. - ASSERT_EQUALS(call1.GetMobileCallCaps(mobileCallCapsPckg), KErrNone, - _L("RMobileCall::GetMobileCallCaps returned error.")); - ASSERT_BITS_SET(mobileCallCaps.iCallControlCaps, RCall::KCapsVoice | RCall::KCapsDial, KNoUnwantedBits, - _L("RMobileCall::GetMobileCallCaps returned wrong caps.")); - - // Check RCall::NotifyStatusChange completes with EStatusIdle. - expectedCallStatus = RCall::EStatusIdle; - iCallControlTestHelper.WaitForCallNotifyStatusChange(call1, - notifyStatusChangeStatus, - callStatus, - expectedCallStatus, - wantedStatus); - - // Check RCall::GetStatus returns EStatusIdle. - ASSERT_EQUALS(call1.GetStatus(callStatus), KErrNone, - _L("RCall::GetStatus returned an error.")); - ASSERT_EQUALS(callStatus, RCall::EStatusIdle, - _L("RCall::GetStatus did not return EStatusIdle.")); - - // Check RMobileCall::NotifyMobileCallStatusChange completes with EStatusIdle. - expectedMobileCallStatus = RMobileCall::EStatusIdle; - iCallControlTestHelper.WaitForMobileCallNotifyMobileCallStatusChange(call1, - notifyMobileCallChangeStatus, - mobileCallStatus, - expectedMobileCallStatus, - wantedStatus); - - // Check RMobileCall::GetMobileCallStatus returns status of EStatusIdle. - ASSERT_EQUALS(call1.GetMobileCallStatus(mobileCallStatus), KErrNone, - _L("RMobileCall::GetMobileCallStatus returned error.")); - ASSERT_EQUALS(mobileCallStatus, RMobileCall::EStatusIdle, - _L("RMobileCall::GetMobileCallStatus's status did not return EStatusIdle.")); - - // Release call 1. - iEtelSessionMgr.ReleaseCall(KMainServer, KMainPhone, KVoiceLine, KCall1); - - // Get call 1. - call1 = iEtelSessionMgr.GetCallL(KMainServer, KMainPhone, KVoiceLine, KCall1); - - // Post notification for RCall::NotifyStatusChange - call1.NotifyStatusChange(notifyStatusChangeStatus, callStatus); - - // Post notification for RMobileCall::NotifyMobileCallStatusChange - call1.NotifyMobileCallStatusChange(notifyMobileCallChangeStatus, mobileCallStatus); - - // Post notifier for RMobileCall::NotifyMobileCallCapsChange - call1.NotifyMobileCallCapsChange(notifyMobileCallCapsChangeStatus, mobileCallCapsPckg); - - // Dial RPS which will not answer. - call1.Dial(dialStatus, rpsNumber); - - // Wait for 6000ms. - User::After(6000); - - // === Check call status and caps === - - // Check RCall::NotifyStatusChange completes with EStatusDialling - expectedCallStatus = RCall::EStatusDialling; - iCallControlTestHelper.WaitForCallNotifyStatusChange(call1, - notifyStatusChangeStatus, - callStatus, - expectedCallStatus, - wantedStatus); - - // Check RCall::GetStatus returns EStatusDialling. - ASSERT_EQUALS(call1.GetStatus(callStatus), KErrNone, - _L("RCall::GetStatus returned an error.")); - ASSERT_EQUALS(callStatus, RCall::EStatusDialling, - _L("RCall::GetStatus did not return EStatusDialling.")); - - // Check RMobileCall::NotifyMobileCallStatusChange completes with EStatusDialling - expectedMobileCallStatus = RMobileCall::EStatusDialling; - iCallControlTestHelper.WaitForMobileCallNotifyMobileCallStatusChange(call1, - notifyMobileCallChangeStatus, - mobileCallStatus, - expectedMobileCallStatus, - wantedStatus); - - // Check RMobileCall::GetMobileCallStatus returns status of EStatusDialling - ASSERT_EQUALS(call1.GetMobileCallStatus(mobileCallStatus), KErrNone, - _L("RMobileCall::GetMobileCallStatus returned error.")); - ASSERT_EQUALS(mobileCallStatus, RMobileCall::EStatusDialling, - _L("RMobileCall::GetMobileCallStatus's status did not return EStatusDialling.")); - - // Check RMobileCall::NotifyMobileCallCapsChange completes with iCallControlCaps in set of KCapsVoice - // Check RMobileCall::NotifyMobileCallCapsChange completes with iCallControlCaps NOT in set of KCapsDial - wantedMobileCaps.iCallControlCaps = RMobileCall::KCapsVoice; - wantedMobileCaps.iCallEventCaps = KNoWantedBits; - TCmpRMobileCallTMobileCallCaps mobileCapsComp1(wantedMobileCaps, mobileCallCaps, *this); - iCallControlTestHelper.WaitForMobileCallNotifyMobileCallCapsChange(call1, - notifyMobileCallCapsChangeStatus, - mobileCapsComp1, - wantedStatus); - - unwantedMobileCaps.iCallControlCaps = RMobileCall::KCapsDial; - - ASSERT_BITS_SET(mobileCallCaps.iCallControlCaps, wantedMobileCaps.iCallControlCaps, unwantedMobileCaps.iCallControlCaps, - _L("RMobileCall::NotifyMobileCallCapsChange did not set expected iCallControlCaps")); - - // Check RMobileCall::GetMobileCallCaps includes iCallControlCaps in set of KCapsVoice | KCapsHangUp - // Check RMobileCall::GetMobileCallCaps includes iCallControlCaps in NOT set of KCapsDial - ASSERT_EQUALS(call1.GetMobileCallCaps(mobileCallCapsPckg), KErrNone, - _L("RMobileCall::GetMobileCallCaps returned error.")); - ASSERT_BITS_SET(mobileCallCaps.iCallControlCaps, RCall::KCapsVoice | RCall::KCapsHangUp, RCall::KCapsDial, - _L("RMobileCall::GetMobileCallCaps returned wrong caps.")); - - // Hang up call. - - // Post notifier for RMobileCall::NotifyMobileCallCapsChange - call1.NotifyMobileCallCapsChange(notifyMobileCallCapsChangeStatus, mobileCallCapsPckg); - - // Post notification for RCall::NotifyStatusChange - call1.NotifyStatusChange(notifyStatusChangeStatus, callStatus); - - // Post notification for RMobileCall::NotifyMobileCallStatusChange - call1.NotifyMobileCallStatusChange(notifyMobileCallChangeStatus, mobileCallStatus); - - ASSERT_EQUALS(call1.HangUp(), KErrNone, _L("RMobileCall::HangUp returned error.")); - - // === Check call status and caps === - - // Check RMobileCall::NotifyMobileCallCapsChange completes with iCallControlCaps in set of KCapsVoice | KCapsDial. - // Check RMobileCall::NotifyMobileCallCapsChange completes with iCallEventCaps in set of 0. - wantedMobileCaps.iCallControlCaps = RMobileCall::KCapsVoice | RMobileCall::KCapsDial; - wantedMobileCaps.iCallEventCaps = KNoUnwantedBits; - TCmpRMobileCallTMobileCallCaps mobileCapsComp3(wantedMobileCaps,mobileCallCaps, *this); - iCallControlTestHelper.WaitForMobileCallNotifyMobileCallCapsChange(call1, - notifyMobileCallCapsChangeStatus, - mobileCapsComp3, - wantedStatus); - - // Check RMobileCall::GetMobileCallCaps includes iCallControlCaps in set of KCapsVoice | KCapsDial. - // Check RMobileCall::GetMobileCallCaps includes iCallEventCaps in set of 0. - ASSERT_EQUALS(call1.GetMobileCallCaps(mobileCallCapsPckg), KErrNone, - _L("RMobileCall::GetMobileCallCaps returned error.")); - ASSERT_BITS_SET(mobileCallCaps.iCallControlCaps, RCall::KCapsVoice | RCall::KCapsDial, KNoUnwantedBits, - _L("RMobileCall::GetMobileCallCaps returned wrong caps.")); - - // Check RCall::NotifyStatusChange completes with EStatusIdle. - expectedCallStatus = RCall::EStatusIdle; - iCallControlTestHelper.WaitForCallNotifyStatusChange(call1, - notifyStatusChangeStatus, - callStatus, - expectedCallStatus, - wantedStatus); - - // Check RCall::GetStatus returns EStatusIdle. - ASSERT_EQUALS(call1.GetStatus(callStatus), KErrNone, - _L("RCall::GetStatus returned an error.")); - ASSERT_EQUALS(callStatus, RCall::EStatusIdle, - _L("RCall::GetStatus did not return EStatusIdle.")); - - // Check RMobileCall::NotifyMobileCallStatusChange completes with EStatusIdle. - expectedMobileCallStatus = RMobileCall::EStatusIdle; - iCallControlTestHelper.WaitForMobileCallNotifyMobileCallStatusChange(call1, - notifyMobileCallChangeStatus, - mobileCallStatus, - expectedMobileCallStatus, - wantedStatus); - - // Check RMobileCall::GetMobileCallStatus returns status of EStatusIdle. - ASSERT_EQUALS(call1.GetMobileCallStatus(mobileCallStatus), KErrNone, - _L("RMobileCall::GetMobileCallStatus returned error.")); - ASSERT_EQUALS(mobileCallStatus, RMobileCall::EStatusIdle, - _L("RMobileCall::GetMobileCallStatus's status did not return EStatusIdle.")); - - // Release call 1. - iEtelSessionMgr.ReleaseCall(KMainServer, KMainPhone, KVoiceLine, KCall1); - - // Get call 1. - call1 = iEtelSessionMgr.GetCallL(KMainServer, KMainPhone, KVoiceLine, KCall1); - - // Post notification for RCall::NotifyStatusChange - call1.NotifyStatusChange(notifyStatusChangeStatus, callStatus); - - // Post notification for RMobileCall::NotifyMobileCallStatusChange - call1.NotifyMobileCallStatusChange(notifyMobileCallChangeStatus, mobileCallStatus); - - // Post notifier for RMobileCall::NotifyMobileCallCapsChange - call1.NotifyMobileCallCapsChange(notifyMobileCallCapsChangeStatus, mobileCallCapsPckg); - - // Dial RPS which will not answer. - call1.Dial(dialStatus, rpsNumber); - - // Wait for 15000ms. - User::After(15000); - - // === Check call status and caps === - - // Check RCall::NotifyStatusChange completes with EStatusDialling - expectedCallStatus = RCall::EStatusDialling; - iCallControlTestHelper.WaitForCallNotifyStatusChange(call1, - notifyStatusChangeStatus, - callStatus, - expectedCallStatus, - wantedStatus); - - // Check RCall::GetStatus returns EStatusDialling. - ASSERT_EQUALS(call1.GetStatus(callStatus), KErrNone, - _L("RCall::GetStatus returned an error.")); - ASSERT_EQUALS(callStatus, RCall::EStatusDialling, - _L("RCall::GetStatus did not return EStatusDialling.")); - - // Check RMobileCall::NotifyMobileCallStatusChange completes with EStatusDialling - expectedMobileCallStatus = RMobileCall::EStatusDialling; - iCallControlTestHelper.WaitForMobileCallNotifyMobileCallStatusChange(call1, - notifyMobileCallChangeStatus, - mobileCallStatus, - expectedMobileCallStatus, - wantedStatus); - - // Check RMobileCall::GetMobileCallStatus returns status of EStatusDialling - ASSERT_EQUALS(call1.GetMobileCallStatus(mobileCallStatus), KErrNone, - _L("RMobileCall::GetMobileCallStatus returned error.")); - ASSERT_EQUALS(mobileCallStatus, RMobileCall::EStatusDialling, - _L("RMobileCall::GetMobileCallStatus's status did not return EStatusDialling.")); - - // Check RMobileCall::NotifyMobileCallCapsChange completes with iCallControlCaps in set of KCapsVoice - // Check RMobileCall::NotifyMobileCallCapsChange completes with iCallControlCaps NOT in set of KCapsDial - wantedMobileCaps.iCallControlCaps = RMobileCall::KCapsVoice; - wantedMobileCaps.iCallEventCaps = KNoWantedBits; - TCmpRMobileCallTMobileCallCaps mobileCapsComp4(wantedMobileCaps, mobileCallCaps, *this); - iCallControlTestHelper.WaitForMobileCallNotifyMobileCallCapsChange(call1, - notifyMobileCallCapsChangeStatus, - mobileCapsComp4, - wantedStatus); - - unwantedMobileCaps.iCallControlCaps = RMobileCall::KCapsDial; - - ASSERT_BITS_SET(mobileCallCaps.iCallControlCaps, wantedMobileCaps.iCallControlCaps, unwantedMobileCaps.iCallControlCaps, - _L("RMobileCall::NotifyMobileCallCapsChange did not set expected iCallControlCaps")); - - // Check RMobileCall::GetMobileCallCaps includes iCallControlCaps in set of KCapsVoice | KCapsHangUp - // Check RMobileCall::GetMobileCallCaps includes iCallControlCaps in NOT set of KCapsDial - ASSERT_EQUALS(call1.GetMobileCallCaps(mobileCallCapsPckg), KErrNone, - _L("RMobileCall::GetMobileCallCaps returned error.")); - ASSERT_BITS_SET(mobileCallCaps.iCallControlCaps, RCall::KCapsVoice | RCall::KCapsHangUp, RCall::KCapsDial, - _L("RMobileCall::GetMobileCallCaps returned wrong caps.")); - - // Hang up call. - - // Post notifier for RMobileCall::NotifyMobileCallCapsChange - call1.NotifyMobileCallCapsChange(notifyMobileCallCapsChangeStatus, mobileCallCapsPckg); - - // Post notification for RCall::NotifyStatusChange - call1.NotifyStatusChange(notifyStatusChangeStatus, callStatus); - - // Post notification for RMobileCall::NotifyMobileCallStatusChange - call1.NotifyMobileCallStatusChange(notifyMobileCallChangeStatus, mobileCallStatus); - - ASSERT_EQUALS(call1.HangUp(), KErrNone, _L("RMobileCall::HangUp returned error.")); - - // === Check call status and caps === - - // Check RMobileCall::NotifyMobileCallCapsChange completes with iCallControlCaps in set of KCapsVoice | KCapsDial. - // Check RMobileCall::NotifyMobileCallCapsChange completes with iCallEventCaps in set of 0. - wantedMobileCaps.iCallControlCaps = RMobileCall::KCapsVoice | RMobileCall::KCapsDial; - wantedMobileCaps.iCallEventCaps = KNoUnwantedBits; - TCmpRMobileCallTMobileCallCaps mobileCapsComp5(wantedMobileCaps,mobileCallCaps, *this); - iCallControlTestHelper.WaitForMobileCallNotifyMobileCallCapsChange(call1, - notifyMobileCallCapsChangeStatus, - mobileCapsComp5, - wantedStatus); - - // Check RMobileCall::GetMobileCallCaps includes iCallControlCaps in set of KCapsVoice | KCapsDial. - // Check RMobileCall::GetMobileCallCaps includes iCallEventCaps in set of 0. - ASSERT_EQUALS(call1.GetMobileCallCaps(mobileCallCapsPckg), KErrNone, - _L("RMobileCall::GetMobileCallCaps returned error.")); - ASSERT_BITS_SET(mobileCallCaps.iCallControlCaps, RCall::KCapsVoice | RCall::KCapsDial, KNoUnwantedBits, - _L("RMobileCall::GetMobileCallCaps returned wrong caps.")); - - // Check RCall::NotifyStatusChange completes with EStatusIdle. - expectedCallStatus = RCall::EStatusIdle; - iCallControlTestHelper.WaitForCallNotifyStatusChange(call1, - notifyStatusChangeStatus, - callStatus, - expectedCallStatus, - wantedStatus); - - // Check RCall::GetStatus returns EStatusIdle. - ASSERT_EQUALS(call1.GetStatus(callStatus), KErrNone, - _L("RCall::GetStatus returned an error.")); - ASSERT_EQUALS(callStatus, RCall::EStatusIdle, - _L("RCall::GetStatus did not return EStatusIdle.")); - - // Check RMobileCall::NotifyMobileCallStatusChange completes with EStatusIdle. - expectedMobileCallStatus = RMobileCall::EStatusIdle; - iCallControlTestHelper.WaitForMobileCallNotifyMobileCallStatusChange(call1, - notifyMobileCallChangeStatus, - mobileCallStatus, - expectedMobileCallStatus, - wantedStatus); - - // Check RMobileCall::GetMobileCallStatus returns status of EStatusIdle. - ASSERT_EQUALS(call1.GetMobileCallStatus(mobileCallStatus), KErrNone, - _L("RMobileCall::GetMobileCallStatus returned error.")); - ASSERT_EQUALS(mobileCallStatus, RMobileCall::EStatusIdle, - _L("RMobileCall::GetMobileCallStatus's status did not return EStatusIdle.")); - - - //////////////////////////////////////////////////////////////// - // TEST END - //////////////////////////////////////////////////////////////// - - StartCleanup(); - - CleanupStack::PopAndDestroy(4); - // dialStatus - // notifyMobileCallCapsChangeStatus - // notifyMobileCallChangeStatus - // notifyStatusChangeStatus - - - return TestStepResult(); - } - -TPtrC CCTSYIntegrationTestCallControl0021::GetTestStepName() -/** - * @return The test step name. - */ - { - return _L("CCTSYIntegrationTestCallControl0021"); - } - - - -CCTSYIntegrationTestCallControl0022::CCTSYIntegrationTestCallControl0022(CEtelSessionMgr& aEtelSessionMgr) - : CCTSYIntegrationTestCallControlBase(aEtelSessionMgr) -/** - * Constructor. - */ - { - SetTestStepName(CCTSYIntegrationTestCallControl0022::GetTestStepName()); - } - -CCTSYIntegrationTestCallControl0022::~CCTSYIntegrationTestCallControl0022() -/** - * Destructor. - */ - { - } - -TVerdict CCTSYIntegrationTestCallControl0022::doTestStepL() -/** - * @SYMTestCaseID BA-CTSY-INT-CCON-0022 - * @SYMFssID BA/CTSY/CCON-0022 - * @SYMTestCaseDesc Hang up MT call before it gets connected. - * @SYMTestPriority High - * @SYMTestActions RCall::GetCaps, RMobileCall::NotifyMobileCallCapsChange, RMobileCall::GetMobileCallStatus, RMobileCall::GetMobileCallInfo, RLine::NotifyIncomingCall, RCall::GetInfo, RCall::NotifyStatusChange, RMobileCall::NotifyMobileCallStatusChange, RCall::OpenExistingCall, RCall::NotifyCapsChange, RCall::GetStatus, RMobileCall::GetMobileCallCaps - * @SYMTestExpectedResults Pass - Call hung up. - * @SYMTestType CIT - * @SYMTestCaseDependencies live/automatic - * - * Reason for test: Create a mobile terminated call and hang it up 3000 ms, 5000 ms, and 10000 ms after the mobile terminated call notification. - * - * @return - TVerdict code - */ - { - - //////////////////////////////////////////////////////////////// - // SET UP - //////////////////////////////////////////////////////////////// - - // Check phone supports KCapsVoice - - // Get Voice line 1 - RMobileLine& voiceLine = iEtelSessionMgr.GetLineL(KMainServer, KMainPhone, KVoiceLine); - - RLine::TCaps lineCaps; - CHECK_EQUALS_L(voiceLine.GetCaps(lineCaps), KErrNone, - _L("RMobileLine::GetCaps returned an error")); - CHECK_BITS_SET_L(lineCaps.iFlags, RLine::KCapsVoice, KNoUnwantedBits, - _L("RLine::GetCaps returned wrong caps")); - - // Call TNetworkTsyTestHelper::WaitForRegisteredOnHomeNetworkL - RMobilePhone& phone = iEtelSessionMgr.GetPhoneL(KMainServer,KMainPhone); - CHECK_EQUALS_L(iNetworkTestHelper.WaitForRegisteredOnHomeNetworkL(phone), KErrNone, - _L("TNetworkTsyTestHelper::WaitForRegisteredOnHomeNetworkL returned with an error")); - - //////////////////////////////////////////////////////////////// - // SET UP END - //////////////////////////////////////////////////////////////// - - StartTest(); - - //////////////////////////////////////////////////////////////// - // TEST START - //////////////////////////////////////////////////////////////// - - // Post notifier for RLine::NotifyIncomingCall - TCoreEtelRequestStatus notifyIncomingCallStatus(voiceLine, &RLine::NotifyIncomingCallCancel); - CleanupStack::PushL(notifyIncomingCallStatus); - TName name; - voiceLine.NotifyIncomingCall(notifyIncomingCallStatus, name); - - // Request for incoming call from RPS. - ASSERT_EQUALS(RPSRequestIncomingCallL(EVoiceLine), KErrNone, _L("RPSRequestIncomingCallL returned error.")); - - // Check RLine::NotifyIncomingCall completes with valid call name. - ASSERT_EQUALS(WaitForRequestWithTimeOut(notifyIncomingCallStatus, ETimeMedium), KErrNone, - _L("RLine::NotifyIncomingCall timed out.")); - ASSERT_EQUALS(notifyIncomingCallStatus.Int(), KErrNone, - _L("RLine::NotifyIncomingCall returned with error status.")); - ASSERT_TRUE(name.Length() > 0, - _L("RLine::NotifyIncomingCall did not set a line name")); - - // Get the incoming call - TCallId incomingCallId; - RMobileCall& incomingCall = iEtelSessionMgr.GetIncomingCallL(KMainServer, KMainPhone, KVoiceLine, name, incomingCallId); - - // === Check call caps === - - /************************* NOTE ************************ - The following notifications will not be checked, since you - can not post notifications on an unassigned call object. - - // Check RCall::NotifyCapsChange completes with caps in set of KCapsVoice | KCapsAnswer. - // Check RMobileCall::NotifyMobileCallCapsChange completes with iCallControlCaps in set of KCapsVoice | KCapsHold | KCapsAnswer | KCapsTransfer. - // Check RCall::NotifyStatusChange completes with EStatusRinging - // Check RMobileCall::NotifyMobileCallStatusChange completes with EStatusRinging - ********************************************************/ - - - // Check RCall::GetCaps supports KCapsAnswer | KCapsVoice. - //*** Note: H2 returns the KCapsHangUp bit as well as KCapsAnswer | KCapsVoice. - RCall::TCaps callCaps; - ASSERT_EQUALS(incomingCall.GetCaps(callCaps), KErrNone, - _L("RMobileCall::GetCaps returned error.")); - ASSERT_BITS_SET(callCaps.iFlags, RCall::KCapsAnswer | RCall::KCapsVoice, KNoUnwantedBits, - _L("RCall::GetCaps returned wrong caps")); - - // Check RMobileCall::GetMobileCallCaps includes iCallControlCaps in set of KCapsVoice | KCapsHold | KCapsAnswer | KCapsTransfer. - TUint32 wantedCallControlCaps = RMobileCall::KCapsVoice | - RMobileCall::KCapsHold | - RMobileCall::KCapsAnswer | - RMobileCall::KCapsTransfer; - TUint32 wantedCallEventCaps = 0; - RMobileCall::TMobileCallCapsV1 mobileCallCaps; - RMobileCall::TMobileCallCapsV1Pckg mobileCallCapsPckg(mobileCallCaps); - - ASSERT_EQUALS(incomingCall.GetMobileCallCaps(mobileCallCapsPckg), KErrNone, - _L("RMobileCall::GetMobileCallCaps returned an error")); - ASSERT_BITS_SET(mobileCallCaps.iCallControlCaps, wantedCallControlCaps, KNoUnwantedBits, - _L("RMobileCall::GetMobileCallCaps returned wrong caps")); - ASSERT_BITS_SET(mobileCallCaps.iCallEventCaps, wantedCallEventCaps, KNoUnwantedBits, - _L("RMobileCall::GetMobileCallCaps returned wrong caps")); - - // === Check call status === - - // Check RCall::GetStatus returns EStatusRinging - RCall::TStatus callStatus; - ASSERT_EQUALS(incomingCall.GetStatus(callStatus), KErrNone, - _L("RCall::GetStatus returned an error.")); - ASSERT_EQUALS(callStatus, RCall::EStatusRinging, - _L("RCall::GetStatus did not return EStatusRinging.")); - - // Check RMobileCall::GetMobileCallStatus returns status of EStatusRinging - RMobileCall::TMobileCallStatus mobileCallStatus; - ASSERT_EQUALS(incomingCall.GetMobileCallStatus(mobileCallStatus), KErrNone, _L("RMobileCall::GetMobileCallStatus returned error.")); - ASSERT_EQUALS(mobileCallStatus, RMobileCall::EStatusRinging, _L("RMobileCall::GetMobileCallStatus returned error.")); - - // === Check call info === - - // Check RCall::GetInfo returns valid call name. - // Check RCall::GetInfo returns valid voice line name. - // Check RCall::GetInfo returns call status of EStatusRinging. - // Check RCall::GetInfo returns call duration of 0. - RCall::TCallInfo callInfo; - ASSERT_EQUALS(incomingCall.GetInfo(callInfo), KErrNone, - _L("RCall::GetInfo returned an error.")); - ASSERT_TRUE(callInfo.iCallName.Length() >0, - _L("RCall::GetInfo returned an invalid Call name.")); - ASSERT_TRUE(callInfo.iLineName.Length() >0, - _L("RCall::GetInfo returned an invalid Line name.")); - ASSERT_EQUALS(callInfo.iStatus, RCall::EStatusRinging, - _L("RCall::GetInfo did not return iStatus of EStatusRinging.")); - ASSERT_EQUALS(callInfo.iDuration.Int(), 0, - _L("RCall::GetInfo did not return iDuration of 0.")); - - // Check RMobileCall::GetMobileCallInfo returns iValid > 0. - // Check RMobileCall::GetMobileCallInfo returns data for attributes makred as valid in iValid. ** How to do this? ** - // Check RMobileCall::GetMobileCallInfo returns valid line name. - RMobileCall::TMobileCallInfoV1 mobileCallInfo; - RMobileCall::TMobileCallInfoV1Pckg callInfoPckg(mobileCallInfo); - ASSERT_EQUALS(incomingCall.GetMobileCallInfo(callInfoPckg), KErrNone, - _L("RMobileCall::GetMobileCallInfo returned an error")); - ASSERT_TRUE(mobileCallInfo.iLineName.Length() > 0, - _L("RMobileCall::GetMobileCallInfo returned an invalid line name")); - ASSERT_TRUE(mobileCallInfo.iValid > 0, - _L("RMobileCall::GetMobileCallInfo returned unexpected flags in iValid")); - - iCallControlTestHelper.CheckForValidCallInfo(mobileCallInfo); - - // Wait for 3000ms. - User::After(3000); // Note assuming microseconds, not milliseconds - - // Hang up call. - - // Post notification for RCall::NotifyCapsChange - TCoreEtelRequestStatus notifyCapsChangeStatus(incomingCall, &RCall::NotifyCapsChangeCancel); - CleanupStack::PushL(notifyCapsChangeStatus); - RCall::TCaps caps; - incomingCall.NotifyCapsChange(notifyCapsChangeStatus, caps); - - // Post notification for RMobileCall::NotifyMobileCallCapsChange - TExtEtelRequestStatus notifyMobileCallCapsChangeStatus(incomingCall, EMobileCallNotifyMobileCallCapsChange); - CleanupStack::PushL(notifyMobileCallCapsChangeStatus); - incomingCall.NotifyMobileCallCapsChange(notifyMobileCallCapsChangeStatus, mobileCallCapsPckg); - - // Post notification for RCall::NotifyStatusChange - TCoreEtelRequestStatus notifyCallStatusChangeStatus(incomingCall, &RCall::NotifyStatusChangeCancel); - CleanupStack::PushL(notifyCallStatusChangeStatus); - incomingCall.NotifyStatusChange(notifyCallStatusChangeStatus, callStatus); - - // Post notification for RMobileCall::NotifyMobileCallStatusChange - TExtEtelRequestStatus notifyMobileCallChangeStatus(incomingCall, EMobileCallNotifyMobileCallStatusChange); - CleanupStack::PushL(notifyMobileCallChangeStatus); - incomingCall.NotifyMobileCallStatusChange(notifyMobileCallChangeStatus, mobileCallStatus); - - - //*************** NOTE ******************* - // As we have not answered the call, I seem to recall TRP TSY does not allow you to hang up locally. - // So (assuming the network hasn't answered the call yet) we need to request RPS to hang up. - // Note: The new CTSY & board combo *may* allow you to hang up locally. - // -/* ASSERT_EQUALS(RPSHangupL(EVoiceLine, 0), KErrNone, _L("RPSHangupL returned an error")); */ - - //*************** BUT ******************* - // Are WE supposed to hang-up the call? ie NOT Rps ?? If so have to see if CTSY allows us to use HangUp, or if we have to - // answer the call first before calling HangUp !!! - // - TCoreEtelRequestStatus hangUpStatus(incomingCall, &RCall::HangUpCancel); // If HangUp fails, try Answering the call first !! - CleanupStack::PushL(hangUpStatus); - incomingCall.HangUp(hangUpStatus); - ASSERT_EQUALS(WaitForRequestWithTimeOut(hangUpStatus, ETimeMedium), KErrNone, - _L("RCall::HangUp timed-out")); - ASSERT_EQUALS(hangUpStatus.Int(), KErrNone, - _L("RCall::HangUp returned and error")); - - - // === Check call caps === - - // Check RCall::NotifyCapsChange completes with caps in set of KCapsVoice | KCapsDial. - RCall::TCaps wantedCaps, unwantedCaps; - wantedCaps.iFlags = RCall::KCapsVoice | RCall::KCapsDial; - unwantedCaps.iFlags = 0; - const TInt wantedStatus = KErrNone; - - iCallControlTestHelper.WaitForCallNotifyCapsChange(incomingCall, - notifyCapsChangeStatus, - caps, - wantedCaps, - unwantedCaps, - wantedStatus); - - // Check RCall::GetCaps supports KCapsVoice | KCapsHangUp. - ASSERT_EQUALS(incomingCall.GetCaps(caps), KErrNone, - _L("RCall::GetCaps returned an Error")); - ASSERT_BITS_SET(caps.iFlags, RCall::KCapsHangUp | RCall::KCapsVoice, KNoUnwantedBits, - _L("RCall::GetCaps returned wrong caps")); - - // Check RMobileCall::NotifyMobileCallCapsChange completes with iCallControlCaps in set of KCapsVoice | KCapsDial. - // Check RMobileCall::NotifyMobileCallCapsChange completes with iCallEventCaps in set of 0. - RMobileCall::TMobileCallCapsV1 wantedMobileCaps; - wantedMobileCaps.iCallControlCaps = RMobileCall::KCapsVoice | RMobileCall::KCapsDial; - wantedMobileCaps.iCallEventCaps = 0; - - TCmpRMobileCallTMobileCallCaps mobileCapsComp(wantedMobileCaps, mobileCallCaps, *this); - iCallControlTestHelper.WaitForMobileCallNotifyMobileCallCapsChange(incomingCall, - notifyMobileCallCapsChangeStatus, - mobileCapsComp, - wantedStatus); - - // Check RMobileCall::GetMobileCallCaps includes iCallControlCaps in set of KCapsVoice | KCapsDial. - // Check RMobileCall::GetMobileCallCaps includes iCallEventCaps in set of 0. - ASSERT_EQUALS(incomingCall.GetMobileCallCaps(mobileCallCapsPckg), KErrNone, - _L("RMobileCall::GetMobileCallCaps returned an error")); - wantedMobileCaps.iCallControlCaps = RMobileCall::KCapsVoice | RMobileCall::KCapsDial; - - - // === Check call status === - - // Check RCall::NotifyStatusChange completes with EStatusHangingUp -> EStatusIdle. - RCall::TStatus expectedCallStatus = RCall::EStatusHangingUp; - iCallControlTestHelper.WaitForCallNotifyStatusChange(incomingCall, - notifyCallStatusChangeStatus, - callStatus, - expectedCallStatus, - wantedStatus); - - incomingCall.NotifyStatusChange(notifyCallStatusChangeStatus, callStatus); - expectedCallStatus = RCall::EStatusIdle; - iCallControlTestHelper.WaitForCallNotifyStatusChange(incomingCall, - notifyCallStatusChangeStatus, - callStatus, - expectedCallStatus, - wantedStatus); - - // Check RCall::GetStatus returns EStatusIdle. - ASSERT_EQUALS(incomingCall.GetStatus(callStatus),KErrNone, - _L("RCall::GetStatus returned an error.")); - ASSERT_EQUALS(callStatus, RCall::EStatusIdle, - _L("RCall::GetStatus did not return EStatusIdle.")); - - // Check RMobileCall::NotifyMobileCallStatusChange completes with EStatusDisconnecting -> EStatusIdle. - RMobileCall::TMobileCallStatus expectedMobileCallStatus = RMobileCall::EStatusDisconnecting; - iCallControlTestHelper.WaitForMobileCallNotifyMobileCallStatusChange(incomingCall, - notifyMobileCallChangeStatus, - mobileCallStatus, - expectedMobileCallStatus, - wantedStatus); - - incomingCall.NotifyMobileCallStatusChange(notifyMobileCallChangeStatus, mobileCallStatus); - expectedMobileCallStatus = RMobileCall::EStatusIdle; - iCallControlTestHelper.WaitForMobileCallNotifyMobileCallStatusChange(incomingCall, - notifyMobileCallChangeStatus, - mobileCallStatus, - expectedMobileCallStatus, - wantedStatus); - - // Check RMobileCall::GetMobileCallStatus returns status of EStatusIdle. - ASSERT_EQUALS(incomingCall.GetMobileCallStatus(mobileCallStatus), KErrNone, - _L("RMobileCall::GetMobileStatus returned an error.")); - ASSERT_EQUALS(mobileCallStatus, RMobileCall::EStatusIdle, - _L("RMobileCall::GetMobileStatus did not return a status EStatusIdle.")); - - // === Check call info === - - // Check RCall::GetInfo returns valid call name. - // Check RCall::GetInfo returns valid voice line name. - // Check RCall::GetInfo returns call status of EStatusConnected. *** Is this correct ? should be EStatusIdle *** - // Check RCall::GetInfo returns call duration of > 0. - ASSERT_EQUALS(incomingCall.GetInfo(callInfo), KErrNone, - _L("RCall::GetInfo returned an error")); - ASSERT_TRUE(callInfo.iCallName.Length() > 0, - _L("RCall::GetInfo returned an invalid name")); - ASSERT_TRUE(callInfo.iLineName.Length() > 0, - _L("RCall::GetInfo returned an invalid Line name")); - ASSERT_EQUALS(callInfo.iStatus, RCall::EStatusConnected, - _L("RCall::GetInfo wrong iStatus, should be EStatusConnected")); - ASSERT_TRUE(callInfo.iDuration.Int() > 0, - _L("RCall::GetInfo wrong iDuration, should be >0")); - - // Check RMobileCall::GetMobileCallInfo returns iValid > 0. - // Check RMobileCall::GetMobileCallInfo returns data for attributes makred as valid in iValid. - // Check RMobileCall::GetMobileCallInfo returns valid line name. - RMobileCall::TMobileCallInfoV1Pckg mobileCallInfoPckg(mobileCallInfo); - ASSERT_EQUALS(incomingCall.GetMobileCallInfo(mobileCallInfoPckg), KErrNone, - _L("RMobileCall::GetMobileCallInfo returned an error")); - ASSERT_TRUE(mobileCallInfo.iLineName.Length() > 0, - _L("RMobileCall::GetMobileCallInfo returned an invalid line name")); - ASSERT_TRUE(mobileCallInfo.iValid > 0, - _L("RMobileCall::GetMobileCallInfo returned unexpected flags in iValid")); - - iCallControlTestHelper.CheckForValidCallInfo(mobileCallInfo); - - // Release call 1. *** No *** - Release the incoming call - iEtelSessionMgr.ReleaseCall(KMainServer, KMainPhone, KVoiceLine, incomingCallId); - - // Get call 1. ** No need ** -// call1 = iEtelSessionMgr.GetCallL(KMainServer, KMainPhone, KVoiceLine, KCall1); - - // Repeat test pausing for 5000ms and 10000ms instead. - - // === Repeating test with 5000ms pause === - - // Post notifier for RLine::NotifyIncomingCall - voiceLine.NotifyIncomingCall(notifyIncomingCallStatus, name); - - // Request for incoming call from RPS. - ASSERT_EQUALS(RPSRequestIncomingCallL(EVoiceLine), KErrNone, _L("RPSRequestIncomingCallL returned error.")); - - // Check RLine::NotifyIncomingCall completes with valid call name. - ASSERT_EQUALS(WaitForRequestWithTimeOut(notifyIncomingCallStatus, ETimeMedium), KErrNone, - _L("RLine::NotifyIncomingCall timed out.")); - ASSERT_EQUALS(notifyIncomingCallStatus.Int(), KErrNone, - _L("RLine::NotifyIncomingCall returned with error status.")); - ASSERT_TRUE(name.Length() > 0, - _L("RLine::NotifyIncomingCall did not set a line name")); - - // Get the call - incomingCall = iEtelSessionMgr.GetIncomingCallL(KMainServer, KMainPhone, KVoiceLine, name, incomingCallId); - - // === Check call caps === - - /************************* NOTE ************************ - As commented above, notifications will not to checked. - ********************************************************/ - - // Check RCall::GetCaps supports KCapsAnswer | KCapsVoice. - //*** Note: H2 returns the KCapsHangUp bit as well as KCapsAnswer | KCapsVoice. - ASSERT_EQUALS(incomingCall.GetCaps(callCaps), KErrNone, - _L("RMobileCall::GetCaps returned error.")); - ASSERT_BITS_SET(callCaps.iFlags, RCall::KCapsAnswer | RCall::KCapsVoice, KNoUnwantedBits, - _L("RCall::GetCaps returned wrong caps")); - - // Check RMobileCall::GetMobileCallCaps includes iCallControlCaps in set of KCapsVoice | KCapsHold | KCapsAnswer | KCapsTransfer. - wantedCallControlCaps = RMobileCall::KCapsVoice | - RMobileCall::KCapsHold | - RMobileCall::KCapsAnswer | - RMobileCall::KCapsTransfer; - wantedCallEventCaps = 0; - ASSERT_EQUALS(incomingCall.GetMobileCallCaps(mobileCallCapsPckg), KErrNone, - _L("RMobileCall::GetMobileCallCaps returned an error")); - ASSERT_BITS_SET(mobileCallCaps.iCallControlCaps, wantedCallControlCaps, KNoUnwantedBits, - _L("RMobileCall::GetMobileCallCaps returned wrong caps")); - ASSERT_BITS_SET(mobileCallCaps.iCallEventCaps, wantedCallEventCaps, KNoUnwantedBits, - _L("RMobileCall::GetMobileCallCaps returned wrong caps")); - - // === Check call status === - - // Check RCall::GetStatus returns EStatusRinging - ASSERT_EQUALS(incomingCall.GetStatus(callStatus), KErrNone, - _L("RCall::GetStatus returned an error.")); - ASSERT_EQUALS(callStatus, RCall::EStatusRinging, - _L("RCall::GetStatus did not return EStatusRinging.")); - - // Check RMobileCall::GetMobileCallStatus returns status of EStatusRinging - ASSERT_EQUALS(incomingCall.GetMobileCallStatus(mobileCallStatus), KErrNone, _L("RMobileCall::GetMobileCallStatus returned error.")); - ASSERT_EQUALS(mobileCallStatus, RMobileCall::EStatusRinging, _L("RMobileCall::GetMobileCallStatus returned error.")); - - // === Check call info === - - // Check RCall::GetInfo returns valid call name. - // Check RCall::GetInfo returns valid voice line name. - // Check RCall::GetInfo returns call status of EStatusRinging. - // Check RCall::GetInfo returns call duration of 0. - ASSERT_EQUALS(incomingCall.GetInfo(callInfo), KErrNone, - _L("RCall::GetInfo returned an error.")); - ASSERT_TRUE(callInfo.iCallName.Length() >0, - _L("RCall::GetInfo returned an invalid Call name.")); - ASSERT_TRUE(callInfo.iLineName.Length() >0, - _L("RCall::GetInfo returned an invalid Line name.")); - ASSERT_EQUALS(callInfo.iStatus, RCall::EStatusRinging, - _L("RCall::GetInfo did not return iStatus of EStatusRinging.")); - ASSERT_EQUALS(callInfo.iDuration.Int(), 0, - _L("RCall::GetInfo did not return iDuration of 0.")); - - // Check RMobileCall::GetMobileCallInfo returns iValid > 0. - // Check RMobileCall::GetMobileCallInfo returns data for attributes makred as valid in iValid. ** How to do this? ** - // Check RMobileCall::GetMobileCallInfo returns valid line name. - ASSERT_EQUALS(incomingCall.GetMobileCallInfo(callInfoPckg), KErrNone, - _L("RMobileCall::GetMobileCallInfo returned an error")); - ASSERT_TRUE(mobileCallInfo.iLineName.Length() > 0, - _L("RMobileCall::GetMobileCallInfo returned an invalid line name")); - ASSERT_TRUE(mobileCallInfo.iValid > 0, - _L("RMobileCall::GetMobileCallInfo returned unexpected flags in iValid")); - - iCallControlTestHelper.CheckForValidCallInfo(mobileCallInfo); - - // Wait for 5000ms. - User::After(5000); // Note assuming microseconds, not milliseconds - - // Hang up call. - - // Post notification for RCall::NotifyCapsChange - incomingCall.NotifyCapsChange(notifyCapsChangeStatus, caps); - - // Post notification for RMobileCall::NotifyMobileCallCapsChange - incomingCall.NotifyMobileCallCapsChange(notifyMobileCallCapsChangeStatus, mobileCallCapsPckg); - - // Post notification for RCall::NotifyStatusChange - incomingCall.NotifyStatusChange(notifyCallStatusChangeStatus, callStatus); - - // Post notification for RMobileCall::NotifyMobileCallStatusChange - incomingCall.NotifyMobileCallStatusChange(notifyMobileCallChangeStatus, mobileCallStatus); - - - - //*************** NOTE ******************* - // As we have not answered the call, I seem to recall TRP TSY does not allow you to hang up locally. - // So (assuming the network hasn't answered the call yet) we need to request RPS to hang up. - // Note: The new CTSY board combo *may* allow you to hang up locally. - // -/* ASSERT_EQUALS(RPSHangupL(EVoiceLine, 0), KErrNone, _L("RPSHangupL returned an error")); */ - - //*************** BUT ******************* - // Are WE supposed to hang-up the call? ie NOT Rps ?? If so have to see if CTSY allows us to use HangUp, or if we have to - // answer the call first before calling HangUp !!! - // - incomingCall.HangUp(hangUpStatus); // If HangUp fails, try Answering the call first !! - ASSERT_EQUALS(WaitForRequestWithTimeOut(hangUpStatus, ETimeMedium), KErrNone, - _L("RCall::HangUp timed-out")); - ASSERT_EQUALS(hangUpStatus.Int(), KErrNone, - _L("RCall::HangUp returned and error")); - - - // === Check call caps === - - // Check RCall::NotifyCapsChange completes with caps in set of KCapsVoice | KCapsDial. - wantedCaps.iFlags = RCall::KCapsVoice | RCall::KCapsDial; - unwantedCaps.iFlags = 0; - - iCallControlTestHelper.WaitForCallNotifyCapsChange(incomingCall, - notifyCapsChangeStatus, - caps, - wantedCaps, - unwantedCaps, - wantedStatus); - - // Check RCall::GetCaps supports KCapsVoice | KCapsHangUp. - ASSERT_EQUALS(incomingCall.GetCaps(caps), KErrNone, - _L("RCall::GetCaps returned an Error")); - ASSERT_BITS_SET(caps.iFlags, RCall::KCapsHangUp | RCall::KCapsVoice, KNoUnwantedBits, - _L("RCall::GetCaps returned wrong caps")); - - // Check RMobileCall::NotifyMobileCallCapsChange completes with iCallControlCaps in set of KCapsVoice | KCapsDial. - // Check RMobileCall::NotifyMobileCallCapsChange completes with iCallEventCaps in set of 0. - wantedMobileCaps.iCallControlCaps = RMobileCall::KCapsVoice | RMobileCall::KCapsDial; - wantedMobileCaps.iCallEventCaps = 0; - - iCallControlTestHelper.WaitForMobileCallNotifyMobileCallCapsChange(incomingCall, - notifyMobileCallCapsChangeStatus, - mobileCapsComp, - wantedStatus); - - // Check RMobileCall::GetMobileCallCaps includes iCallControlCaps in set of KCapsVoice | KCapsDial. - // Check RMobileCall::GetMobileCallCaps includes iCallEventCaps in set of 0. - ASSERT_EQUALS(incomingCall.GetMobileCallCaps(mobileCallCapsPckg), KErrNone, - _L("RMobileCall::GetMobileCallCaps returned an error")); - wantedMobileCaps.iCallControlCaps = RMobileCall::KCapsVoice | RMobileCall::KCapsDial; - - // === Check call status === - - // Check RCall::NotifyStatusChange completes with EStatusHangingUp -> EStatusIdle. - expectedCallStatus = RCall::EStatusHangingUp; - iCallControlTestHelper.WaitForCallNotifyStatusChange(incomingCall, - notifyCallStatusChangeStatus, - callStatus, - expectedCallStatus, - wantedStatus); - - incomingCall.NotifyStatusChange(notifyCallStatusChangeStatus, callStatus); - expectedCallStatus = RCall::EStatusIdle; - iCallControlTestHelper.WaitForCallNotifyStatusChange(incomingCall, - notifyCallStatusChangeStatus, - callStatus, - expectedCallStatus, - wantedStatus); - - // Check RCall::GetStatus returns EStatusIdle. - ASSERT_EQUALS(incomingCall.GetStatus(callStatus),KErrNone, - _L("RCall::GetStatus returned an error.")); - ASSERT_EQUALS(callStatus, RCall::EStatusIdle, - _L("RCall::GetStatus did not return EStatusIdle.")); - - // Check RMobileCall::NotifyMobileCallStatusChange completes with EStatusDisconnecting -> EStatusIdle. - expectedMobileCallStatus = RMobileCall::EStatusDisconnecting; - iCallControlTestHelper.WaitForMobileCallNotifyMobileCallStatusChange(incomingCall, - notifyMobileCallChangeStatus, - mobileCallStatus, - expectedMobileCallStatus, - wantedStatus); - - incomingCall.NotifyMobileCallStatusChange(notifyMobileCallChangeStatus, mobileCallStatus); - expectedMobileCallStatus = RMobileCall::EStatusIdle; - iCallControlTestHelper.WaitForMobileCallNotifyMobileCallStatusChange(incomingCall, - notifyMobileCallChangeStatus, - mobileCallStatus, - expectedMobileCallStatus, - wantedStatus); - - // Check RMobileCall::GetMobileCallStatus returns status of EStatusIdle. - ASSERT_EQUALS(incomingCall.GetMobileCallStatus(mobileCallStatus), KErrNone, - _L("RMobileCall::GetMobileStatus returned an error.")); - ASSERT_EQUALS(mobileCallStatus, RMobileCall::EStatusIdle, - _L("RMobileCall::GetMobileStatus did not return a status EStatusIdle.")); - - // === Check call info === - - // Check RCall::GetInfo returns valid call name. - // Check RCall::GetInfo returns valid voice line name. - // Check RCall::GetInfo returns call status of EStatusConnected. *** Is this correct ? should be EStatusIdle *** - // Check RCall::GetInfo returns call duration of > 0. - ASSERT_EQUALS(incomingCall.GetInfo(callInfo), KErrNone, - _L("RCall::GetInfo returned an error")); - ASSERT_TRUE(callInfo.iCallName.Length() > 0, - _L("RCall::GetInfo returned an invalid name")); - ASSERT_TRUE(callInfo.iLineName.Length() > 0, - _L("RCall::GetInfo returned an invalid Line name")); - ASSERT_EQUALS(callInfo.iStatus, RCall::EStatusConnected, - _L("RCall::GetInfo wrong iStatus, should be EStatusConnected")); - ASSERT_TRUE(callInfo.iDuration.Int() > 0, - _L("RCall::GetInfo wrong iDuration, should be >0")); - - // Check RMobileCall::GetMobileCallInfo returns iValid > 0. - // Check RMobileCall::GetMobileCallInfo returns data for attributes makred as valid in iValid. - // Check RMobileCall::GetMobileCallInfo returns valid line name. - ASSERT_EQUALS(incomingCall.GetMobileCallInfo(mobileCallInfoPckg), KErrNone, - _L("RMobileCall::GetMobileCallInfo returned an error")); - ASSERT_TRUE(mobileCallInfo.iLineName.Length() > 0, - _L("RMobileCall::GetMobileCallInfo returned an invalid line name")); - ASSERT_TRUE(mobileCallInfo.iValid > 0, - _L("RMobileCall::GetMobileCallInfo returned unexpected flags in iValid")); - - iCallControlTestHelper.CheckForValidCallInfo(mobileCallInfo); - - // Release call 1. *** No *** - Release the incoming call - iEtelSessionMgr.ReleaseCall(KMainServer, KMainPhone, KVoiceLine, incomingCallId); - - // Get call 1. ** No need ** -// call1 = iEtelSessionMgr.GetCallL(KMainServer, KMainPhone, KVoiceLine, KCall1); - - // === Repeating test with 10000ms pause === - - // Post notifier for RLine::NotifyIncomingCall - voiceLine.NotifyIncomingCall(notifyIncomingCallStatus, name); - - // Request for incoming call from RPS. - ASSERT_EQUALS(RPSRequestIncomingCallL(EVoiceLine), KErrNone, _L("RPSRequestIncomingCallL returned error.")); - - // Check RLine::NotifyIncomingCall completes with valid call name. - ASSERT_EQUALS(WaitForRequestWithTimeOut(notifyIncomingCallStatus, ETimeMedium), KErrNone, - _L("RLine::NotifyIncomingCall timed out.")); - ASSERT_EQUALS(notifyIncomingCallStatus.Int(), KErrNone, - _L("RLine::NotifyIncomingCall returned with error status.")); - ASSERT_TRUE(name.Length() > 0, - _L("RLine::NotifyIncomingCall did not set a line name")); - - // Get the call - incomingCall = iEtelSessionMgr.GetIncomingCallL(KMainServer, KMainPhone, KVoiceLine, name, incomingCallId); - - // === Check call caps === - - /************************* NOTE ************************ - As commented above, notifications will not to checked. - ********************************************************/ - - // Check RCall::GetCaps supports KCapsAnswer | KCapsVoice. - //*** Note: H2 returns the KCapsHangUp bit as well as KCapsAnswer | KCapsVoice. - ASSERT_EQUALS(incomingCall.GetCaps(callCaps), KErrNone, - _L("RMobileCall::GetCaps returned error.")); - ASSERT_BITS_SET(callCaps.iFlags, RCall::KCapsAnswer | RCall::KCapsVoice, KNoUnwantedBits, - _L("RCall::GetCaps returned wrong caps")); - - // Check RMobileCall::GetMobileCallCaps includes iCallControlCaps in set of KCapsVoice | KCapsHold | KCapsAnswer | KCapsTransfer. - wantedCallControlCaps = RMobileCall::KCapsVoice | - RMobileCall::KCapsHold | - RMobileCall::KCapsAnswer | - RMobileCall::KCapsTransfer; - wantedCallEventCaps = 0; - ASSERT_EQUALS(incomingCall.GetMobileCallCaps(mobileCallCapsPckg), KErrNone, - _L("RMobileCall::GetMobileCallCaps returned an error")); - ASSERT_BITS_SET(mobileCallCaps.iCallControlCaps, wantedCallControlCaps, KNoUnwantedBits, - _L("RMobileCall::GetMobileCallCaps returned wrong caps")); - ASSERT_BITS_SET(mobileCallCaps.iCallEventCaps, wantedCallEventCaps, KNoUnwantedBits, - _L("RMobileCall::GetMobileCallCaps returned wrong caps")); - - // === Check call status === - - // Check RCall::GetStatus returns EStatusRinging - ASSERT_EQUALS(incomingCall.GetStatus(callStatus), KErrNone, - _L("RCall::GetStatus returned an error.")); - ASSERT_EQUALS(callStatus, RCall::EStatusRinging, - _L("RCall::GetStatus did not return EStatusRinging.")); - - // Check RMobileCall::GetMobileCallStatus returns status of EStatusRinging - ASSERT_EQUALS(incomingCall.GetMobileCallStatus(mobileCallStatus), KErrNone, _L("RMobileCall::GetMobileCallStatus returned error.")); - ASSERT_EQUALS(mobileCallStatus, RMobileCall::EStatusRinging, _L("RMobileCall::GetMobileCallStatus returned error.")); - - // === Check call info === - - // Check RCall::GetInfo returns valid call name. - // Check RCall::GetInfo returns valid voice line name. - // Check RCall::GetInfo returns call status of EStatusRinging. - // Check RCall::GetInfo returns call duration of 0. - ASSERT_EQUALS(incomingCall.GetInfo(callInfo), KErrNone, - _L("RCall::GetInfo returned an error.")); - ASSERT_TRUE(callInfo.iCallName.Length() >0, - _L("RCall::GetInfo returned an invalid Call name.")); - ASSERT_TRUE(callInfo.iLineName.Length() >0, - _L("RCall::GetInfo returned an invalid Line name.")); - ASSERT_EQUALS(callInfo.iStatus, RCall::EStatusRinging, - _L("RCall::GetInfo did not return iStatus of EStatusRinging.")); - ASSERT_EQUALS(callInfo.iDuration.Int(), 0, - _L("RCall::GetInfo did not return iDuration of 0.")); - - // Check RMobileCall::GetMobileCallInfo returns iValid > 0. - // Check RMobileCall::GetMobileCallInfo returns data for attributes makred as valid in iValid. ** How to do this? ** - // Check RMobileCall::GetMobileCallInfo returns valid line name. - ASSERT_EQUALS(incomingCall.GetMobileCallInfo(callInfoPckg), KErrNone, - _L("RMobileCall::GetMobileCallInfo returned an error")); - ASSERT_TRUE(mobileCallInfo.iLineName.Length() > 0, - _L("RMobileCall::GetMobileCallInfo returned an invalid line name")); - ASSERT_TRUE(mobileCallInfo.iValid > 0, - _L("RMobileCall::GetMobileCallInfo returned unexpected flags in iValid")); - - iCallControlTestHelper.CheckForValidCallInfo(mobileCallInfo); - - // Wait for 10000ms. - User::After(10000); // Note assuming microseconds, not milliseconds - - // Hang up call. - - // Post notification for RCall::NotifyCapsChange - incomingCall.NotifyCapsChange(notifyCapsChangeStatus, caps); - - // Post notification for RMobileCall::NotifyMobileCallCapsChange - incomingCall.NotifyMobileCallCapsChange(notifyMobileCallCapsChangeStatus, mobileCallCapsPckg); - - // Post notification for RCall::NotifyStatusChange - incomingCall.NotifyStatusChange(notifyCallStatusChangeStatus, callStatus); - - // Post notification for RMobileCall::NotifyMobileCallStatusChange - incomingCall.NotifyMobileCallStatusChange(notifyMobileCallChangeStatus, mobileCallStatus); - - //*************** NOTE ******************* - // As we have not answered the call, I seem to recall TRP TSY does not allow you to hang up locally. - // So (assuming the network hasn't answered the call yet) we need to request RPS to hang up. - // Note: The new CTSY & board combo *may* allow you to hang up locally. - // -/* ASSERT_EQUALS(RPSHangupL(EVoiceLine, 0), KErrNone, _L("RPSHangupL returned an error")); */ - - //*************** BUT ******************* - // Are WE supposed to hang-up the call? ie NOT Rps ?? If so have to see if CTSY allows us to use HangUp, or if we have to - // answer the call first before calling HangUp !!! - // - incomingCall.HangUp(hangUpStatus); // If HangUp fails, try Answering the call first !! - ASSERT_EQUALS(WaitForRequestWithTimeOut(hangUpStatus, ETimeMedium), KErrNone, - _L("RCall::HangUp timed-out")); - ASSERT_EQUALS(hangUpStatus.Int(), KErrNone, - _L("RCall::HangUp returned and error")); - - - // === Check call caps === - - // Check RCall::NotifyCapsChange completes with caps in set of KCapsVoice | KCapsDial. - wantedCaps.iFlags = RCall::KCapsVoice | RCall::KCapsDial; - unwantedCaps.iFlags = 0; - - iCallControlTestHelper.WaitForCallNotifyCapsChange(incomingCall, - notifyCapsChangeStatus, - caps, - wantedCaps, - unwantedCaps, - wantedStatus); - - // Check RCall::GetCaps supports KCapsVoice | KCapsHangUp. - ASSERT_EQUALS(incomingCall.GetCaps(caps), KErrNone, - _L("RCall::GetCaps returned an Error")); - ASSERT_BITS_SET(caps.iFlags, RCall::KCapsHangUp | RCall::KCapsVoice, KNoUnwantedBits, - _L("RCall::GetCaps returned wrong caps")); - - // Check RMobileCall::NotifyMobileCallCapsChange completes with iCallControlCaps in set of KCapsVoice | KCapsDial. - // Check RMobileCall::NotifyMobileCallCapsChange completes with iCallEventCaps in set of 0. - wantedMobileCaps.iCallControlCaps = RMobileCall::KCapsVoice | RMobileCall::KCapsDial; - wantedMobileCaps.iCallEventCaps = 0; - - iCallControlTestHelper.WaitForMobileCallNotifyMobileCallCapsChange(incomingCall, - notifyMobileCallCapsChangeStatus, - mobileCapsComp, - wantedStatus); - - // Check RMobileCall::GetMobileCallCaps includes iCallControlCaps in set of KCapsVoice | KCapsDial. - // Check RMobileCall::GetMobileCallCaps includes iCallEventCaps in set of 0. - ASSERT_EQUALS(incomingCall.GetMobileCallCaps(mobileCallCapsPckg), KErrNone, - _L("RMobileCall::GetMobileCallCaps returned an error")); - wantedMobileCaps.iCallControlCaps = RMobileCall::KCapsVoice | RMobileCall::KCapsDial; - - // === Check call status === - - // Check RCall::NotifyStatusChange completes with EStatusHangingUp -> EStatusIdle. - expectedCallStatus = RCall::EStatusHangingUp; - iCallControlTestHelper.WaitForCallNotifyStatusChange(incomingCall, - notifyCallStatusChangeStatus, - callStatus, - expectedCallStatus, - wantedStatus); - - incomingCall.NotifyStatusChange(notifyCallStatusChangeStatus, callStatus); - expectedCallStatus = RCall::EStatusIdle; - iCallControlTestHelper.WaitForCallNotifyStatusChange(incomingCall, - notifyCallStatusChangeStatus, - callStatus, - expectedCallStatus, - wantedStatus); - - // Check RCall::GetStatus returns EStatusIdle. - ASSERT_EQUALS(incomingCall.GetStatus(callStatus),KErrNone, - _L("RCall::GetStatus returned an error.")); - ASSERT_EQUALS(callStatus, RCall::EStatusIdle, - _L("RCall::GetStatus did not return EStatusIdle.")); - - // Check RMobileCall::NotifyMobileCallStatusChange completes with EStatusDisconnecting -> EStatusIdle. - expectedMobileCallStatus = RMobileCall::EStatusDisconnecting; - iCallControlTestHelper.WaitForMobileCallNotifyMobileCallStatusChange(incomingCall, - notifyMobileCallChangeStatus, - mobileCallStatus, - expectedMobileCallStatus, - wantedStatus); - - incomingCall.NotifyMobileCallStatusChange(notifyMobileCallChangeStatus, mobileCallStatus); - expectedMobileCallStatus = RMobileCall::EStatusIdle; - iCallControlTestHelper.WaitForMobileCallNotifyMobileCallStatusChange(incomingCall, - notifyMobileCallChangeStatus, - mobileCallStatus, - expectedMobileCallStatus, - wantedStatus); - - // Check RMobileCall::GetMobileCallStatus returns status of EStatusIdle. - ASSERT_EQUALS(incomingCall.GetMobileCallStatus(mobileCallStatus), KErrNone, - _L("RMobileCall::GetMobileStatus returned an error.")); - ASSERT_EQUALS(mobileCallStatus, RMobileCall::EStatusIdle, - _L("RMobileCall::GetMobileStatus did not return a status EStatusIdle.")); - - // === Check call info === - - // Check RCall::GetInfo returns valid call name. - // Check RCall::GetInfo returns valid voice line name. - // Check RCall::GetInfo returns call status of EStatusConnected. *** Is this correct ? should be EStatusIdle *** - // Check RCall::GetInfo returns call duration of > 0. - ASSERT_EQUALS(incomingCall.GetInfo(callInfo), KErrNone, - _L("RCall::GetInfo returned an error")); - ASSERT_TRUE(callInfo.iCallName.Length() > 0, - _L("RCall::GetInfo returned an invalid name")); - ASSERT_TRUE(callInfo.iLineName.Length() > 0, - _L("RCall::GetInfo returned an invalid Line name")); - ASSERT_EQUALS(callInfo.iStatus, RCall::EStatusConnected, - _L("RCall::GetInfo wrong iStatus, should be EStatusConnected")); - ASSERT_TRUE(callInfo.iDuration.Int() > 0, - _L("RCall::GetInfo wrong iDuration, should be >0")); - - // Check RMobileCall::GetMobileCallInfo returns iValid > 0. - // Check RMobileCall::GetMobileCallInfo returns data for attributes makred as valid in iValid. - // Check RMobileCall::GetMobileCallInfo returns valid line name. - ASSERT_EQUALS(incomingCall.GetMobileCallInfo(mobileCallInfoPckg), KErrNone, - _L("RMobileCall::GetMobileCallInfo returned an error")); - ASSERT_TRUE(mobileCallInfo.iLineName.Length() > 0, - _L("RMobileCall::GetMobileCallInfo returned an invalid line name")); - ASSERT_TRUE(mobileCallInfo.iValid > 0, - _L("RMobileCall::GetMobileCallInfo returned unexpected flags in iValid")); - - iCallControlTestHelper.CheckForValidCallInfo(mobileCallInfo); - - // Release call 1. *** No *** - Release the incoming call - iEtelSessionMgr.ReleaseCall(KMainServer, KMainPhone, KVoiceLine, incomingCallId); - - //////////////////////////////////////////////////////////////// - // TEST END - //////////////////////////////////////////////////////////////// - - StartCleanup(); - - CleanupStack::PopAndDestroy(6); - // hangUpStatus - // notifyMobileCallChangeStatus - // notifyCallStatusChangeStatus - // notifyMobileCallCapsChangeStatus - // notifyCapsChangeStatus - // notifyIncomingCallStatus - - return TestStepResult(); - } - -TPtrC CCTSYIntegrationTestCallControl0022::GetTestStepName() -/** - * @return The test step name. - */ - { - return _L("CCTSYIntegrationTestCallControl0022"); - } - - - -CCTSYIntegrationTestCallControl0023::CCTSYIntegrationTestCallControl0023(CEtelSessionMgr& aEtelSessionMgr) - : CCTSYIntegrationTestCallControlBase(aEtelSessionMgr) -/** - * Constructor. - */ - { - SetTestStepName(CCTSYIntegrationTestCallControl0023::GetTestStepName()); - } - -CCTSYIntegrationTestCallControl0023::~CCTSYIntegrationTestCallControl0023() -/** - * Destructor. - */ - { - } - -TVerdict CCTSYIntegrationTestCallControl0023::doTestStepL() -/** - * @SYMTestCaseID BA-CTSY-INT-CCON-0023 - * @SYMFssID BA/CTSY/CCON-0023 - * @SYMTestCaseDesc Hold a call then dial a second call. - * @SYMTestPriority High - * @SYMTestActions RMobileCall::NotifyMobileCallStatusChange, RMobileCall::GetMobileCallStatus, RMobileCall::Hold, RCall::HangUp, RMobileCall::NotifyCallEvent, RCall::NotifyStatusChange, RCall::GetStatus - * @SYMTestExpectedResults Pass - Call 2 is can be made when call 1 is held - * @SYMTestType CIT - * @SYMTestCaseDependencies live/automatic - * - * Reason for test: Verify second call can be made when first one is held and call statuses is correct. - * - * @return - TVerdict code - */ - { - - //////////////////////////////////////////////////////////////// - // SET UP - //////////////////////////////////////////////////////////////// - - - // Check phone supports KCapsVoice - - // Get Voice line 1 - RMobileLine& voiceLine = iEtelSessionMgr.GetLineL(KMainServer, KMainPhone, KVoiceLine); - // Get call 1 - RMobileCall& call1 = iEtelSessionMgr.GetCallL(KMainServer, KMainPhone, KVoiceLine, KCall1); - - RLine::TCaps lineCaps; - CHECK_EQUALS_L(voiceLine.GetCaps(lineCaps), KErrNone, - _L("RMobileLine::GetCaps returned an error.")); - CHECK_BITS_SET_L(lineCaps.iFlags, RLine::KCapsVoice, KNoUnwantedBits, - _L("RLine::GetCaps did not return KCapsVoice.")); - - // Get call 2 - RMobileCall& call2 = iEtelSessionMgr.GetCallL(KMainServer, KMainPhone, KVoiceLine, KCall2); - - // Call TNetworkTsyTestHelper::WaitForRegisteredOnHomeNetworkL - RMobilePhone& phone = iEtelSessionMgr.GetPhoneL(KMainServer,KMainPhone); - CHECK_EQUALS_L(iNetworkTestHelper.WaitForRegisteredOnHomeNetworkL(phone), KErrNone, - _L("TNetworkTsyTestHelper::WaitForRegisteredOnHomeNetworkL returned with an error")); - - //////////////////////////////////////////////////////////////// - // SET UP END - //////////////////////////////////////////////////////////////// - - StartTest(); - - //////////////////////////////////////////////////////////////// - // TEST START - //////////////////////////////////////////////////////////////// - - // Post Notifier for RCall::NotifyStatusChange - TCoreEtelRequestStatus notifyStatusChangeStatus(call1, &RCall::NotifyStatusChangeCancel); - CleanupStack::PushL(notifyStatusChangeStatus); - RCall::TStatus callStatus; - call1.NotifyStatusChange(notifyStatusChangeStatus, callStatus); - - // Post Notifier for RMobileCall::NotifyMobileCallStatusChange - TExtEtelRequestStatus notifyMobileCallStatusChangeStatus(call1, EMobileCallNotifyMobileCallStatusChange); - CleanupStack::PushL(notifyMobileCallStatusChangeStatus); - RMobileCall::TMobileCallStatus mobileCallStatus; - call1.NotifyMobileCallStatusChange(notifyMobileCallStatusChangeStatus, mobileCallStatus); - - // Dial a number that answers with call 1. - TPtrC number; - ASSERT_TRUE(GetStringFromConfig(KIniVoiceNumSection, KIniVoiceNumber1, number) != EFalse, - _L("GetStringFromConfig did not complete as expected")); - DEBUG_PRINTF1(_L("Board Now Dialling: ")); - TCoreEtelRequestStatus dialStatus(call1, &RCall::DialCancel); - CleanupStack::PushL(dialStatus); - call1.Dial(dialStatus, number); - ASSERT_EQUALS(WaitForRequestWithTimeOut(dialStatus, ETimeMedium), KErrNone, _L("RCall::Dial timed-out")); - ASSERT_EQUALS(dialStatus.Int(), KErrNone, _L("RCall::Dial returned with an error")); - - // Check RCall::NotifyStatusChange for call 1 completes with EStatusDialling -> EStatusConnecting -> EStatusConnected. - TInt expectedStatus = KErrNone; - RCall::TStatus expectedCallStatus = RCall::EStatusDialling; - iCallControlTestHelper.WaitForCallNotifyStatusChange(call1, - notifyStatusChangeStatus, - callStatus, - expectedCallStatus, - expectedStatus); - - call1.NotifyStatusChange(notifyStatusChangeStatus, callStatus); - expectedCallStatus = RCall::EStatusConnecting; - iCallControlTestHelper.WaitForCallNotifyStatusChange(call1, - notifyStatusChangeStatus, - callStatus, - expectedCallStatus, - expectedStatus); - - call1.NotifyStatusChange(notifyStatusChangeStatus, callStatus); - expectedCallStatus = RCall::EStatusConnected; - iCallControlTestHelper.WaitForCallNotifyStatusChange(call1, - notifyStatusChangeStatus, - callStatus, - expectedCallStatus, - expectedStatus); - - // Check RCall::GetStatus for call 1 returns EStatusConnected. - ASSERT_EQUALS(call1.GetStatus(callStatus), KErrNone, - _L("RCall::GetStatus returned an error.")); - ASSERT_EQUALS(callStatus, RCall::EStatusConnected, - _L("RCall::GetStatus did not return EStatusConnected.")); - - // Check RMobileCall::NotifyMobileCallStatusChange for call 1 completes with EStatusDialling->EStatusConnecting->EStatusConnected - const TInt wantedStatus = KErrNone; - RMobileCall::TMobileCallStatus expectedMobileCallStatus = RMobileCall::EStatusDialling; - iCallControlTestHelper.WaitForMobileCallNotifyMobileCallStatusChange(call1, - notifyMobileCallStatusChangeStatus, - mobileCallStatus, - expectedMobileCallStatus, - wantedStatus); - - call1.NotifyMobileCallStatusChange(notifyMobileCallStatusChangeStatus, mobileCallStatus); - expectedMobileCallStatus = RMobileCall::EStatusConnecting; - iCallControlTestHelper.WaitForMobileCallNotifyMobileCallStatusChange(call1, - notifyMobileCallStatusChangeStatus, - mobileCallStatus, - expectedMobileCallStatus, - wantedStatus); - - call1.NotifyMobileCallStatusChange(notifyMobileCallStatusChangeStatus, mobileCallStatus); - expectedMobileCallStatus = RMobileCall::EStatusConnected; - iCallControlTestHelper.WaitForMobileCallNotifyMobileCallStatusChange(call1, - notifyMobileCallStatusChangeStatus, - mobileCallStatus, - expectedMobileCallStatus, - wantedStatus); - - // Check RMobileCall::GetMobileCallStatus for call 1 returns EStatusConnected - ASSERT_EQUALS(call1.GetMobileCallStatus(mobileCallStatus), KErrNone, - _L("RMobileCall::GetMobileStatus returned an error.")); - ASSERT_EQUALS(mobileCallStatus, RMobileCall::EStatusConnected, - _L("RMobileCall::GetMobileStatus did not return a status EStatusConnected.")); - - - // Post notifier for RMobileCall::NotifyCallEvent - TExtEtelRequestStatus notifyCallEventStatus(call1, EMobileCallNotifyCallEvent); - CleanupStack::PushL(notifyCallEventStatus); - RMobileCall::TMobileCallEvent event; - call1.NotifyCallEvent(notifyCallEventStatus, event); - - // Post Notifier for RMobileCall::NotifyMobileCallStatusChange - call1.NotifyMobileCallStatusChange(notifyMobileCallStatusChangeStatus, mobileCallStatus); - - // Hold call 1. - TExtEtelRequestStatus holdStatus(call1, EMobileCallHold); - CleanupStack::PushL(holdStatus); - call1.Hold(holdStatus); - - // Wait for hold completion. - ASSERT_EQUALS(WaitForRequestWithTimeOut(holdStatus, ETimeShort), KErrNone, - _L("RMobileCall::Hold timed-out.")); - ASSERT_EQUALS(dialStatus.Int(), KErrNone, - _L("RMobileCall::Hold problem holding the call.")); - - // Check RMobileCall::NotifyCallEvent for call 1 completes with ELocalHold - iCallControlTestHelper.WaitForMobileCallNotifyCallEvent( - call1, - notifyCallEventStatus, - event, - RMobileCall::ELocalHold, - wantedStatus); - - // Check RMobileCall::NotifyMobileCallStatusChange for call 1 completes with EStatusHold - expectedMobileCallStatus = RMobileCall::EStatusHold; - iCallControlTestHelper.WaitForMobileCallNotifyMobileCallStatusChange(call1, - notifyMobileCallStatusChangeStatus, - mobileCallStatus, - expectedMobileCallStatus, - wantedStatus); - - // Check RMobileCall::GetMobileCallStatus for call 1 returns status of EStatusHold - ASSERT_EQUALS(call1.GetMobileCallStatus(mobileCallStatus), KErrNone, - _L("RMobileCall::GetMobileCallStatus returned an error")); - ASSERT_EQUALS(mobileCallStatus, RMobileCall::EStatusHold, - _L("RMobileCall::GetMobileCallStatus did not return EStatusHold")); - - - // Post Notifier for RCall::NotifyStatusChange for call2 - TCoreEtelRequestStatus notifyStatusChangeStatus2(call2, &RCall::NotifyStatusChangeCancel); - CleanupStack::PushL(notifyStatusChangeStatus2); - call2.NotifyStatusChange(notifyStatusChangeStatus2, callStatus); - - // Post Notifier for RMobileCall::NotifyMobileCallStatusChange for call2 - TExtEtelRequestStatus notifyMobileCallStatusChangeStatus2(call2, EMobileCallNotifyMobileCallStatusChange); - CleanupStack::PushL(notifyMobileCallStatusChangeStatus2); - call2.NotifyMobileCallStatusChange(notifyMobileCallStatusChangeStatus2, mobileCallStatus); - - // Dial a number that answers with call 2. - DEBUG_PRINTF1(_L("Board Now Dialling: ")); - call2.Dial(dialStatus, number); - ASSERT_EQUALS(WaitForRequestWithTimeOut(dialStatus, ETimeMedium), KErrNone, _L("RCall::Dial timed-out")); - ASSERT_EQUALS(dialStatus.Int(), KErrNone, _L("RCall::Dial returned with an error")); - - // Check RCall::NotifyStatusChange for call 2 completes with EStatusDialling -> EStatusConnecting -> EStatusConnected. - expectedCallStatus = RCall::EStatusDialling; - iCallControlTestHelper.WaitForCallNotifyStatusChange(call2, - notifyStatusChangeStatus2, - callStatus, - expectedCallStatus, - expectedStatus); - - call2.NotifyStatusChange(notifyStatusChangeStatus2, callStatus); - expectedCallStatus = RCall::EStatusConnecting; - iCallControlTestHelper.WaitForCallNotifyStatusChange(call2, - notifyStatusChangeStatus2, - callStatus, - expectedCallStatus, - expectedStatus); - - call2.NotifyStatusChange(notifyStatusChangeStatus2, callStatus); - expectedCallStatus = RCall::EStatusConnected; - iCallControlTestHelper.WaitForCallNotifyStatusChange(call2, - notifyStatusChangeStatus2, - callStatus, - expectedCallStatus, - expectedStatus); - - // Check RCall::GetStatus for call 2 returns EStatusConnected. - ASSERT_EQUALS(call2.GetStatus(callStatus), KErrNone, - _L("RCall::GetStatus returned an Error")); - ASSERT_EQUALS(callStatus, RCall::EStatusConnected, - _L("RCall::GetStatus did not return EStatusConnected")); - - // Check RMobileCall::NotifyMobileCallStatusChange for call 2 completes with EStatusDialling->EStatusConnecting->EStatusConnected - expectedMobileCallStatus = RMobileCall::EStatusDialling; - iCallControlTestHelper.WaitForMobileCallNotifyMobileCallStatusChange(call2, - notifyMobileCallStatusChangeStatus2, - mobileCallStatus, - expectedMobileCallStatus, - wantedStatus); - - call2.NotifyMobileCallStatusChange(notifyMobileCallStatusChangeStatus2, mobileCallStatus); - expectedMobileCallStatus = RMobileCall::EStatusConnecting; - iCallControlTestHelper.WaitForMobileCallNotifyMobileCallStatusChange(call2, - notifyMobileCallStatusChangeStatus2, - mobileCallStatus, - expectedMobileCallStatus, - wantedStatus); - - call2.NotifyMobileCallStatusChange(notifyMobileCallStatusChangeStatus2, mobileCallStatus); - expectedMobileCallStatus = RMobileCall::EStatusConnected; - iCallControlTestHelper.WaitForMobileCallNotifyMobileCallStatusChange(call2, - notifyMobileCallStatusChangeStatus2, - mobileCallStatus, - expectedMobileCallStatus, - wantedStatus); - - // Check RMobileCall::GetMobileCallStatus for call 2 returns EStatusConnected - ASSERT_EQUALS(call2.GetMobileCallStatus(mobileCallStatus), KErrNone, - _L("RMobileCall::GetMobileStatus returned an error.")); - ASSERT_EQUALS(mobileCallStatus, RMobileCall::EStatusConnected, - _L("RMobileCall::GetMobileStatus did not return a status EStatusConnected.")); - - // Check RMobileCall::GetMobileCallStatus for call 1 returns status of EStatusHold - ASSERT_EQUALS(call1.GetMobileCallStatus(mobileCallStatus), KErrNone, - _L("RMobileCall::GetMobileCallStatus returned an error")); - ASSERT_EQUALS(mobileCallStatus, RMobileCall::EStatusHold, - _L("RMobileCall::GetMobileCallStatus did not return EStatusHold")); - - - // Post Notifier for RMobileCall::NotifyMobileCallStatusChange - call1.NotifyMobileCallStatusChange(notifyMobileCallStatusChangeStatus, mobileCallStatus); - - // Hang up call 1. - ASSERT_EQUALS(call1.HangUp(), KErrNone, _L("RMobileCall::HangUp returned error.")); - - // Check RMobileCall::NotifyMobileCallStatusChange for call 1 completes with EStatusDisconnecting->EStatusIdle - expectedMobileCallStatus = RMobileCall::EStatusDisconnecting; - iCallControlTestHelper.WaitForMobileCallNotifyMobileCallStatusChange(call1, - notifyMobileCallStatusChangeStatus, - mobileCallStatus, - expectedMobileCallStatus, - wantedStatus); - - call1.NotifyMobileCallStatusChange(notifyMobileCallStatusChangeStatus, mobileCallStatus); - expectedMobileCallStatus = RMobileCall::EStatusIdle; - iCallControlTestHelper.WaitForMobileCallNotifyMobileCallStatusChange(call1, - notifyMobileCallStatusChangeStatus, - mobileCallStatus, - expectedMobileCallStatus, - wantedStatus); - - // Check RMobileCall::GetMobileCallStatus for call 1 returns EStatusIdle - ASSERT_EQUALS(call1.GetMobileCallStatus(mobileCallStatus), KErrNone, - _L("RMobileCall::GetMobileCallStatus returned an error")); - ASSERT_EQUALS(mobileCallStatus, RMobileCall::EStatusIdle, - _L("RMobileCall::GetMobileCallStatus did not return EStatusIdle")); - - // Check RMobileCall::GetMobileCallStatus for call 2 returns EStatusConnected - ASSERT_EQUALS(call2.GetMobileCallStatus(mobileCallStatus), KErrNone, - _L("RMobileCall::GetMobileCallStatus returned an error")); - ASSERT_EQUALS(mobileCallStatus, RMobileCall::EStatusConnected, - _L("RMobileCall::GetMobileCallStatus did not return EStatusConnected")); - - - // Post Notifier for RMobileCall::NotifyMobileCallStatusChange for call2 - call2.NotifyMobileCallStatusChange(notifyMobileCallStatusChangeStatus2, mobileCallStatus); - - // Hang up call 2. - ASSERT_EQUALS(call2.HangUp(), KErrNone, _L("RMobileCall::HangUp returned error.")); - - // Check RMobileCall::NotifyMobileCallStatusChange for call 2 completes with EStatusDisconnecting->EStatusIdle - expectedMobileCallStatus = RMobileCall::EStatusDisconnecting; - iCallControlTestHelper.WaitForMobileCallNotifyMobileCallStatusChange(call2, - notifyMobileCallStatusChangeStatus2, - mobileCallStatus, - expectedMobileCallStatus, - wantedStatus); - - call2.NotifyMobileCallStatusChange(notifyMobileCallStatusChangeStatus2, mobileCallStatus); - expectedMobileCallStatus = RMobileCall::EStatusIdle; - iCallControlTestHelper.WaitForMobileCallNotifyMobileCallStatusChange(call2, - notifyMobileCallStatusChangeStatus2, - mobileCallStatus, - expectedMobileCallStatus, - wantedStatus); - - // Check RMobileCall::GetMobileCallStatus for call 2 returns EStatusIdle - ASSERT_EQUALS(call2.GetMobileCallStatus(mobileCallStatus), KErrNone, - _L("RMobileCall::GetMobileStatus returned an error.")); - ASSERT_EQUALS(mobileCallStatus, RMobileCall::EStatusIdle, - _L("RMobileCall::GetMobileStatus did not return a status EStatusIdle.")); - - //////////////////////////////////////////////////////////////// - // TEST END - //////////////////////////////////////////////////////////////// - - StartCleanup(); - - CleanupStack::PopAndDestroy(7); - // notifyMobileCallStatusChangeStatus2 - // notifyStatusChangeStatus2 - // holdStatus - // notifyCallEventStatus - // dialStatus - // notifyMobileCallStatusChangeStatus - // notifyStatusChangeStatus - - return TestStepResult(); - } - -TPtrC CCTSYIntegrationTestCallControl0023::GetTestStepName() -/** - * @return The test step name. - */ - { - return _L("CCTSYIntegrationTestCallControl0023"); - } - - - -CCTSYIntegrationTestCallControl0024::CCTSYIntegrationTestCallControl0024(CEtelSessionMgr& aEtelSessionMgr) - : CCTSYIntegrationTestCallControlBase(aEtelSessionMgr) -/** - * Constructor. - */ - { - SetTestStepName(CCTSYIntegrationTestCallControl0024::GetTestStepName()); - } - -CCTSYIntegrationTestCallControl0024::~CCTSYIntegrationTestCallControl0024() -/** - * Destructor. - */ - { - } - -TVerdict CCTSYIntegrationTestCallControl0024::doTestStepL() -/** - * @SYMTestCaseID BA-CTSY-INT-CCON-0024 - * @SYMFssID BA/CTSY/CCON-0024 - * @SYMTestCaseDesc Hold a call then resume it. - * @SYMTestPriority High - * @SYMTestActions RMobileCall::NotifyMobileCallCapsChange, RMobileCall::NotifyCallEvent, RMobileCall::NotifyRemotePartyInfoChange, RCall::Dial, RMobileCall::GetMobileCallCaps, RMobileCall::Hold, RMobileCall::Resume, RMobileCall::GetMobileCallStatus, RMobilePhone::NotifyStopInDTMFString, RMobilePhone::NotifyDTMFCapsChange - * @SYMTestExpectedResults Pass - Call held and resumed. Call event, caps and status correct. - * @SYMTestType CIT - * @SYMTestCaseDependencies live/automatic - * - * Reason for test: Verify call status, call event, call caps, remote party info and DTMF caps correct. - * - * @return - TVerdict code - */ - { - - //////////////////////////////////////////////////////////////// - // SET UP - //////////////////////////////////////////////////////////////// - - // Check phone supports KCapsVoice - - // Get phone - RMobilePhone& mobilePhone = iEtelSessionMgr.GetPhoneL(KMainServer, KMainPhone); - - // Get Voice line 1 - RMobileLine& voiceLine = iEtelSessionMgr.GetLineL(KMainServer, KMainPhone, KVoiceLine); - // Get call 1 - RMobileCall& call1 = iEtelSessionMgr.GetCallL(KMainServer, KMainPhone, KVoiceLine, KCall1); - - RLine::TCaps lineCaps; - CHECK_EQUALS_L(voiceLine.GetCaps(lineCaps), KErrNone, - _L("RMobileLine::GetCaps returned an error.")); - CHECK_BITS_SET_L(lineCaps.iFlags, RLine::KCapsVoice, KNoUnwantedBits, - _L("RLine::GetCaps did not return KCapsVoice.")); - - // Call TNetworkTsyTestHelper::WaitForRegisteredOnHomeNetworkL - RMobilePhone& phone = iEtelSessionMgr.GetPhoneL(KMainServer,KMainPhone); - CHECK_EQUALS_L(iNetworkTestHelper.WaitForRegisteredOnHomeNetworkL(phone), KErrNone, - _L("TNetworkTsyTestHelper::WaitForRegisteredOnHomeNetworkL returned with an error")); - - //////////////////////////////////////////////////////////////// - // SET UP END - //////////////////////////////////////////////////////////////// - - StartTest(); - - //////////////////////////////////////////////////////////////// - // TEST START - //////////////////////////////////////////////////////////////// - - // Post Notifier for RCall::NotifyCapsChange - TCoreEtelRequestStatus notifyCapsChangeStatus(call1, &RCall::NotifyCapsChangeCancel); - CleanupStack::PushL(notifyCapsChangeStatus); - RCall::TCaps caps; - call1.NotifyCapsChange(notifyCapsChangeStatus, caps); - - // post a notifier for RMobileCall::NotifyMobileCallCapsChange - TExtEtelRequestStatus notifyMobileCallCapsChangeStatus(call1, EMobileCallNotifyMobileCallCapsChange); - CleanupStack::PushL(notifyMobileCallCapsChangeStatus); - RMobileCall::TMobileCallCapsV1 mobileCallCaps; - RMobileCall::TMobileCallCapsV1Pckg mobileCallCapsPckg(mobileCallCaps); - call1.NotifyMobileCallCapsChange(notifyMobileCallCapsChangeStatus, mobileCallCapsPckg); - - // Post notifier for RCall::NotifyStatusChange - TCoreEtelRequestStatus notifyCallStatusChangeStatus (call1, &RCall::NotifyStatusChangeCancel); - CleanupStack::PushL(notifyCallStatusChangeStatus); - RCall::TStatus callStatus; - call1.NotifyStatusChange(notifyCallStatusChangeStatus, callStatus); - - // post a notifier for RMobileCall::NotifyMobileCallStatusChange - TExtEtelRequestStatus notifyMobileCallChangeStatus(call1, EMobileCallNotifyMobileCallStatusChange); - CleanupStack::PushL(notifyMobileCallChangeStatus); - RMobileCall::TMobileCallStatus mobileCallStatus; - call1.NotifyMobileCallStatusChange(notifyMobileCallChangeStatus, mobileCallStatus); - - // Post a notifier for RMobileCall::NotifyRemotePartyInfoChange - TExtEtelRequestStatus notifyRemotePartyInfoChangeStatus(call1, EMobileCallNotifyRemotePartyInfoChange); - CleanupStack::PushL(notifyRemotePartyInfoChangeStatus); - RMobileCall::TMobileCallRemotePartyInfoV1 rpInfo; - - RMobileCall::TMobileCallRemotePartyInfoV1Pckg rpInfoPckg(rpInfo); - call1.NotifyRemotePartyInfoChange(notifyRemotePartyInfoChangeStatus, rpInfoPckg); - - // Dial a number that answers - TPtrC number; - ASSERT_TRUE(GetStringFromConfig(KIniVoiceNumSection, KIniVoiceNumber1, number) != EFalse, - _L("GetStringFromConfig did not complete as expected")); - DEBUG_PRINTF1(_L("Board Now Dialling: ")); - TCoreEtelRequestStatus dialStatus(call1, &RCall::DialCancel); - CleanupStack::PushL(dialStatus); - call1.Dial(dialStatus, number); - ASSERT_EQUALS(WaitForRequestWithTimeOut(dialStatus, ETimeMedium), KErrNone, _L("RCall::Dial timed-out")); - ASSERT_EQUALS(dialStatus.Int(), KErrNone, _L("RCall::Dial returned with an error")); - - // === Check call caps === - - // Check RCall::NotifyCapsChange completes with caps in set of KCapsVoice | KCapsHangUp. - RCall::TCaps wantedCaps, unwantedCaps; - wantedCaps.iFlags = RCall::KCapsVoice | RCall::KCapsHangUp; - unwantedCaps.iFlags = 0; - const TInt wantedStatus = KErrNone; - iCallControlTestHelper.WaitForCallNotifyCapsChange(call1, - notifyCapsChangeStatus, - caps, - wantedCaps, - unwantedCaps, - wantedStatus); - - // Check RCall::GetCaps supports KCapsHangUp | KCapsVoice. - ASSERT_EQUALS(call1.GetCaps(caps), KErrNone, - _L("RCall::GetCaps returned an Error")); - ASSERT_BITS_SET(caps.iFlags, RCall::KCapsHangUp | RCall::KCapsVoice, KNoUnwantedBits, - _L("RCall::GetCaps returned wrong caps")); - - // Check RMobileCall::NotifyMobileCallCapsChange completes with iCallControlCaps in set of KCapsVoice | KCapsHold | KCapsHangUp - // Check RMobileCall::NotifyMobileCallCapsChange completes with iCallEventCaps in set of KCapsLocalHold | KCapsRemoteHold | KCapsRemoteTerminate | KCapsRemoteConferenceCreate. - RMobileCall::TMobileCallCapsV1 wantedMobileCaps; - wantedMobileCaps.iCallControlCaps = RMobileCall::KCapsVoice | RMobileCall::KCapsHold | RMobileCall::KCapsHangUp; - wantedMobileCaps.iCallEventCaps = RMobileCall::KCapsLocalHold | RMobileCall::KCapsRemoteHold | RMobileCall::KCapsRemoteTerminate | RMobileCall::KCapsRemoteConferenceCreate; - - TCmpRMobileCallTMobileCallCaps mobileCapsComp(wantedMobileCaps, mobileCallCaps, *this); - iCallControlTestHelper.WaitForMobileCallNotifyMobileCallCapsChange(call1, - notifyMobileCallCapsChangeStatus, - mobileCapsComp, - wantedStatus); - - // Check RMobileCall::GetMobileCallCaps includes iCallControlCaps in set of KCapsVoice | KCapsHold | KCapsHangUp. - // Check RMobileCall::GetMobileCallCaps includes iCallEventCaps in set of KCapsLocalHold | KCapsRemoteHold | KCapsRemoteTerminate | KCapsRemoteConferenceCreate. - ASSERT_EQUALS(call1.GetMobileCallCaps(mobileCallCapsPckg), KErrNone, - _L("RMobileCall::GetMobileCallCaps returned an error")); - wantedMobileCaps.iCallControlCaps = RMobileCall::KCapsVoice | - RMobileCall::KCapsHold | - RMobileCall::KCapsHangUp; - - ASSERT_BITS_SET(mobileCallCaps.iCallControlCaps, wantedMobileCaps.iCallControlCaps, KNoUnwantedBits, - _L("RMobileCall::GetMobileCallCaps returned unexpected iCallControlCaps")); - - wantedMobileCaps.iCallEventCaps = RMobileCall::KCapsLocalHold | - RMobileCall::KCapsRemoteHold | - RMobileCall::KCapsRemoteTerminate | - RMobileCall::KCapsRemoteConferenceCreate; - - ASSERT_BITS_SET(mobileCallCaps.iCallEventCaps, wantedMobileCaps.iCallEventCaps, KNoUnwantedBits, - _L("RMobileCall::GetMobileCallCaps returned unexpected iCallEventCaps")); - - // === Check call status === - - // Check RCall::NotifyStatusChange completes with EStatusDialling -> EStatusConnecting -> EStatusConnected. - RCall::TStatus expectedCallStatus = RCall::EStatusDialling; - iCallControlTestHelper.WaitForCallNotifyStatusChange(call1, - notifyCallStatusChangeStatus, - callStatus, - expectedCallStatus, - wantedStatus); - - call1.NotifyStatusChange(notifyCallStatusChangeStatus, callStatus); - expectedCallStatus = RCall::EStatusConnecting; - iCallControlTestHelper.WaitForCallNotifyStatusChange(call1, - notifyCallStatusChangeStatus, - callStatus, - expectedCallStatus, - wantedStatus); - - call1.NotifyStatusChange(notifyCallStatusChangeStatus, callStatus); - expectedCallStatus = RCall::EStatusConnected; - iCallControlTestHelper.WaitForCallNotifyStatusChange(call1, - notifyCallStatusChangeStatus, - callStatus, - expectedCallStatus, - wantedStatus); - - // Check RCall::GetStatus returns EStatusConnected. - ASSERT_EQUALS(call1.GetStatus(callStatus), KErrNone, - _L("RCall::GetStatus returned an error")); - ASSERT_EQUALS(callStatus, RCall::EStatusConnected, - _L("RCall::GetStatus returned an unexpected call status")); - - // Check RMobileCall::NotifyMobileCallStatusChange completes with EStatusDialling -> EStatusConnecting -> EStatusConnected. - RMobileCall::TMobileCallStatus expectedMobileCallStatus = RMobileCall::EStatusDialling; - iCallControlTestHelper.WaitForMobileCallNotifyMobileCallStatusChange(call1, - notifyMobileCallChangeStatus, - mobileCallStatus, - expectedMobileCallStatus, - wantedStatus); - - call1.NotifyMobileCallStatusChange(notifyMobileCallChangeStatus, mobileCallStatus); - expectedMobileCallStatus = RMobileCall::EStatusConnecting; - iCallControlTestHelper.WaitForMobileCallNotifyMobileCallStatusChange(call1, - notifyMobileCallChangeStatus, - mobileCallStatus, - expectedMobileCallStatus, - wantedStatus); - - call1.NotifyMobileCallStatusChange(notifyMobileCallChangeStatus, mobileCallStatus); - expectedMobileCallStatus = RMobileCall::EStatusConnected; - iCallControlTestHelper.WaitForMobileCallNotifyMobileCallStatusChange(call1, - notifyMobileCallChangeStatus, - mobileCallStatus, - expectedMobileCallStatus, - wantedStatus); - - // Check RMobileCall::GetMobileCallStatus returns status of EStatusConnected. - ASSERT_EQUALS(call1.GetMobileCallStatus(mobileCallStatus), KErrNone, - _L("RMobileCall::GetMobileStatus returned an error")); - ASSERT_EQUALS(mobileCallStatus, RMobileCall::EStatusConnected, - _L("RMobileCall::GetMobileStatus did not return a status EStatusConnected")); - - // === Check remote party info === - - // Check RMobileCall::NotifyRemotePartyInfoChange completes with direction of EMobileOriginated - RMobileCall::TMobileCallRemotePartyInfoV1 wanted; - wanted.iDirection = RMobileCall::EMobileOriginated; - TCmpRMobileCallTMobileCallRemotePartyInfo rpInfoComp(wanted, rpInfo, *this); - iCallControlTestHelper.WaitForMobileCallNotifyRemotePartyInfoChange( - call1, - notifyRemotePartyInfoChangeStatus, - rpInfoComp, - wantedStatus); - - // post a notifier for RMobileCall::NotifyMobileCallCapsChange - call1.NotifyMobileCallCapsChange(notifyMobileCallCapsChangeStatus, mobileCallCapsPckg); - - // Post a notifier for RMobileCall::NotifyMobileCallStatusChange - call1.NotifyMobileCallStatusChange(notifyMobileCallChangeStatus, mobileCallStatus); - - // Post notifier for RMobileCall::NotifyCallEvent - TExtEtelRequestStatus notifyCallEventStatus(call1, EMobileCallNotifyCallEvent); - CleanupStack::PushL(notifyCallEventStatus); - RMobileCall::TMobileCallEvent event; - call1.NotifyCallEvent(notifyCallEventStatus, event); - - // Post notification RMobilePhone::NotifyDTMFCapsChange - TExtEtelRequestStatus notifyDTMFCapsChangeStatus(mobilePhone, EMobilePhoneNotifyDTMFCapsChange); - CleanupStack::PushL(notifyDTMFCapsChangeStatus); - TUint32 dTMFcaps; - mobilePhone.NotifyDTMFCapsChange(notifyDTMFCapsChangeStatus, dTMFcaps); - - // Hold the call - TExtEtelRequestStatus holdStatus(call1, EMobileCallHold); - CleanupStack::PushL(holdStatus); - call1.Hold(holdStatus); - ASSERT_EQUALS(WaitForRequestWithTimeOut(holdStatus, ETimeMedium), KErrNone, - _L("RMobileCall::Hold timed-out")); - ASSERT_EQUALS(holdStatus.Int(), KErrNone, - _L("RMobileCall::Hold did not set status to KErrNone")); - - // === Check call caps === - - // Check RMobileCall::NotifyMobileCallCapsChange completes with iCallControlCaps in set of KCapsVoice | KCapsResume | KCapsHangUp - // Check RMobileCall::NotifyMobileCallCapsChange completes with iCallControlCaps NOT in set of KCapsOneToOne | KCapsHold - // Check RMobileCall::NotifyMobileCallCapsChange completes with iCallEventCaps in set of KCapsLocalResume | KCapsRemoteHold | KCapsRemoteTerminate | KCapsRemoteConferenceCreate. - TUint32 wantedMobCallControlCaps = RMobileCall::KCapsVoice | RMobileCall::KCapsResume | RMobileCall::KCapsHangUp; - TUint32 unWantedMobCallControlCaps = RMobileCall::KCapsOneToOne | RMobileCall::KCapsHold; - TUint32 wantedMobCallEventCaps = RMobileCall::KCapsLocalResume | RMobileCall::KCapsRemoteHold | RMobileCall::KCapsRemoteTerminate | RMobileCall::KCapsRemoteConferenceCreate; - ASSERT_EQUALS(WaitForRequestWithTimeOut(notifyMobileCallCapsChangeStatus, ETimeShort), KErrNone, - _L("RMobileCall::NotifyMobileCallCapsChange timed out.")); - ASSERT_EQUALS(notifyMobileCallCapsChangeStatus.Int(), KErrNone, - _L("RMobileCall::NotifyMobileCallCapsChange returned with error status.")); - ASSERT_BITS_SET(mobileCallCaps.iCallControlCaps, wantedMobCallControlCaps, unWantedMobCallControlCaps, - _L("RMobileCall::NotifyMobileCallCapsChange returned wrong control caps.")); - ASSERT_BITS_SET(mobileCallCaps.iCallEventCaps, wantedMobCallEventCaps, KNoUnwantedBits, - _L("RMobileCall::NotifyMobileCallCapsChange returned wrong event caps.")); - - // Check RMobileCall::GetMobileCallCaps includes iCallControlCaps in set of KCapsVoice | KCapsResume | KCapsHangUp - // Check RMobileCall::GetMobileCallCaps includes iCallControlCaps NOT in set of KCapsOneToOne | KCapsHold - // Check RMobileCall::GetMobileCallCaps includes iCallEventCaps in set of KCapsLocalResume | KCapsRemoteHold | KCapsRemoteTerminate | KCapsRemoteConferenceCreate. - ASSERT_EQUALS(call1.GetMobileCallCaps(mobileCallCapsPckg), KErrNone, - _L("RMobileCall::GetMobileCallCaps returned an error")); - - wantedMobileCaps.iCallControlCaps = RMobileCall::KCapsVoice | - RMobileCall::KCapsResume | - RMobileCall::KCapsHangUp; - RMobileCall::TMobileCallCapsV1 unWantedMobileCaps; - unWantedMobileCaps.iCallControlCaps = RMobileCall::KCapsOneToOne | - RMobileCall::KCapsHold; - ASSERT_BITS_SET(mobileCallCaps.iCallControlCaps, wantedMobileCaps.iCallControlCaps, unWantedMobileCaps.iCallControlCaps, - _L("RMobileCall::GetMobileCallCaps returned unexpected iCallControlCaps")); - - wantedMobileCaps.iCallEventCaps = RMobileCall::KCapsLocalResume | - RMobileCall::KCapsRemoteHold | - RMobileCall::KCapsRemoteTerminate | - RMobileCall::KCapsRemoteConferenceCreate; - - ASSERT_BITS_SET(mobileCallCaps.iCallEventCaps, wantedMobileCaps.iCallEventCaps, KNoUnwantedBits, - _L("RMobileCall::GetMobileCallCaps returned unexpected iCallEventCaps")); - - - // === Check call status === - - // Check RMobileCall::NotifyMobileCallStatusChange completes with EStatusHold - expectedMobileCallStatus = RMobileCall::EStatusHold; - iCallControlTestHelper.WaitForMobileCallNotifyMobileCallStatusChange(call1, - notifyMobileCallChangeStatus, - mobileCallStatus, - expectedMobileCallStatus, - wantedStatus); - - // Check RMobileCall::GetMobileCallStatus returns status of EStatusHold - ASSERT_EQUALS(call1.GetMobileCallStatus(mobileCallStatus), KErrNone, - _L("RMobileCall::GetMobileStatus returned an error")); - ASSERT_EQUALS(mobileCallStatus, RMobileCall::EStatusHold, - _L("RMobileCall::GetMobileStatus did not return a status EStatusHold")); - - // === Check call event completes === - - // Check RMobileCall::NotifyCallEvent completes with ELocalHold - iCallControlTestHelper.WaitForMobileCallNotifyCallEvent( - call1, - notifyCallEventStatus, - event, - RMobileCall::ELocalHold, - wantedStatus); - - // === Check DTMF caps === - - // Check RMobilePhone::NotifyDTMFCapsChange completes with of 0 - iCallControlTestHelper.WaitForMobilePhoneNotifyDTMFCapsChange( - mobilePhone, - notifyDTMFCapsChangeStatus, - dTMFcaps, - KNoWantedBits, - KNoUnwantedBits, - wantedStatus); - - // Check RMobilePhone::GetDTMFCaps returns 0 - TUint32 dtmfCaps2; - ASSERT_EQUALS(mobilePhone.GetDTMFCaps(dtmfCaps2), KErrNone, _L("RMobilePhone::GetDTMFCaps returned with an error")); - ASSERT_BITS_SET(dtmfCaps2, KNoWantedBits, KNoUnwantedBits, _L("RMobilePhone::GetDTMFCaps returned wrong dynamic caps")); - - // post a notifier for RMobileCall::NotifyMobileCallCapsChange - call1.NotifyMobileCallCapsChange(notifyMobileCallCapsChangeStatus, mobileCallCapsPckg); - - // Post a notifier for RMobileCall::NotifyMobileCallStatusChange - call1.NotifyMobileCallStatusChange(notifyMobileCallChangeStatus, mobileCallStatus); - - // Post notifier for RMobileCall::NotifyCallEvent - call1.NotifyCallEvent(notifyCallEventStatus, event); - - // Post notification RMobilePhone::NotifyDTMFCapsChange - mobilePhone.NotifyDTMFCapsChange(notifyDTMFCapsChangeStatus, dTMFcaps); - - // Post notifier for RCall::NotifyStatusChange - call1.NotifyStatusChange(notifyCallStatusChangeStatus, callStatus); - - // Resume the call - TExtEtelRequestStatus resumeStatus(call1, EMobileCallResume); - CleanupStack::PushL(resumeStatus); - call1.Resume(resumeStatus); - ASSERT_EQUALS(WaitForRequestWithTimeOut(resumeStatus, ETimeMedium), KErrNone, - _L("RMobileCall::Resume timed-out")); - ASSERT_EQUALS(resumeStatus.Int(), KErrNone, - _L("RMobileCall::Resume did not set status to KErrNone")); - - // === Check call caps === - - // Check RMobileCall::NotifyMobileCallCapsChange completes with iCallControlCaps in set of KCapsVoice | KCapsHold | KCapsHangUp - // Check RMobileCall::NotifyMobileCallCapsChange completes with iCallEventCaps in set of KCapsLocalHold | KCapsRemoteHold | KCapsRemoteTerminate | KCapsRemoteConferenceCreate. - wantedMobCallControlCaps = RMobileCall::KCapsVoice | - RMobileCall::KCapsHold | - RMobileCall::KCapsHangUp; - wantedMobCallEventCaps = RMobileCall::KCapsLocalHold | - RMobileCall::KCapsRemoteHold | - RMobileCall::KCapsRemoteTerminate | - RMobileCall::KCapsRemoteConferenceCreate; - ASSERT_EQUALS(WaitForRequestWithTimeOut(notifyMobileCallCapsChangeStatus, ETimeShort), KErrNone, - _L("RMobileCall::NotifyMobileCallCapsChange timed out.")); - ASSERT_EQUALS(notifyMobileCallCapsChangeStatus.Int(), KErrNone, - _L("RMobileCall::NotifyMobileCallCapsChange returned with error status.")); - ASSERT_BITS_SET(mobileCallCaps.iCallControlCaps, wantedMobCallControlCaps, KNoUnwantedBits, - _L("RMobileCall::NotifyMobileCallCapsChange returned wrong control caps.")); - ASSERT_BITS_SET(mobileCallCaps.iCallEventCaps, wantedMobCallEventCaps, KNoUnwantedBits, - _L("RMobileCall::NotifyMobileCallCapsChange returned wrong event caps.")); - - // Check RMobileCall::GetMobileCallCaps includes iCallControlCaps in set of KCapsVoice | KCapsHold | KCapsHangUp. - // Check RMobileCall::GetMobileCallCaps includes iCallEventCaps in set of KCapsLocalHold | KCapsRemoteHold | KCapsRemoteTerminate | KCapsRemoteConferenceCreate. - ASSERT_EQUALS(call1.GetMobileCallCaps(mobileCallCapsPckg), KErrNone, - _L("RMobileCall::GetMobileCallCaps returned an error")); - wantedMobileCaps.iCallControlCaps = RMobileCall::KCapsVoice | - RMobileCall::KCapsHold | - RMobileCall::KCapsHangUp; - ASSERT_BITS_SET(mobileCallCaps.iCallControlCaps, wantedMobileCaps.iCallControlCaps, KNoUnwantedBits, - _L("RMobileCall::GetMobileCallCaps returned unexpected iCallControlCaps")); - - wantedMobileCaps.iCallEventCaps = RMobileCall::KCapsLocalHold | - RMobileCall::KCapsRemoteHold | - RMobileCall::KCapsRemoteTerminate | - RMobileCall::KCapsRemoteConferenceCreate; - ASSERT_BITS_SET(mobileCallCaps.iCallEventCaps, wantedMobileCaps.iCallEventCaps, KNoUnwantedBits, - _L("RMobileCall::GetMobileCallCaps returned unexpected iCallEventCaps")); - - // === Check call status === - - // Check RCall::NotifyStatusChange completes with EStatusConnected. - expectedCallStatus = RCall::EStatusConnected; - iCallControlTestHelper.WaitForCallNotifyStatusChange(call1, - notifyCallStatusChangeStatus, - callStatus, - expectedCallStatus, - wantedStatus); - - // Check RCall::GetStatus returns EStatusConnected. - ASSERT_EQUALS(call1.GetStatus(callStatus), KErrNone, - _L("RCall::GetStatus returned an error")); - ASSERT_EQUALS(callStatus, RCall::EStatusConnected, - _L("RCall::GetStatus returned an unexpected call status")); - - // Check RMobileCall::NotifyMobileCallStatusChange completes with EStatusConnected. - iCallControlTestHelper.WaitForMobileCallNotifyMobileCallStatusChange(call1, - notifyMobileCallChangeStatus, - mobileCallStatus, - RMobileCall::EStatusConnected, - wantedStatus); - - // Check RMobileCall::GetMobileCallStatus returns status of EStatusConnected. - ASSERT_EQUALS(call1.GetMobileCallStatus(mobileCallStatus), KErrNone, - _L("RMobileCall::GetMobileStatus returned an error")); - ASSERT_EQUALS(mobileCallStatus, RMobileCall::EStatusConnected, - _L("RMobileCall::GetMobileStatus did not return a status EStatusConnected")); - - // === Check call event completes === - - // Check RMobileCall::NotifyCallEvent completes with ELocalResume - iCallControlTestHelper.WaitForMobileCallNotifyCallEvent( - call1, - notifyCallEventStatus, - event, - RMobileCall::ELocalResume, - wantedStatus); - - // === Check DTMF caps === - - // Check RMobilePhone::NotifyDTMFCapsChange completes with caps in set of KCapsSendDTMFString | KCapsSendDTMFSingleTone - TUint32 wantedDtmfCaps = RMobilePhone::KCapsSendDTMFString | RMobilePhone::KCapsSendDTMFSingleTone; - iCallControlTestHelper.WaitForMobilePhoneNotifyDTMFCapsChange( - mobilePhone, - notifyDTMFCapsChangeStatus, - dTMFcaps, - wantedDtmfCaps, - KNoUnwantedBits, - wantedStatus); - - // Check RMobilePhone::GetDTMFCaps returns KCapsSendDTMFString | KCapsSendDTMFSingleTone - ASSERT_EQUALS(mobilePhone.GetDTMFCaps(dtmfCaps2), KErrNone, _L("RMobilePhone::GetDTMFCaps returned with an error")); - ASSERT_BITS_SET(dtmfCaps2, wantedDtmfCaps, KNoUnwantedBits, _L("RMobilePhone::GetDTMFCaps returned wrong dynamic caps")); - - - // Post Notifier for RCall::NotifyCapsChange - call1.NotifyCapsChange(notifyCapsChangeStatus, caps); - - // post a notifier for RMobileCall::NotifyMobileCallCapsChange - call1.NotifyMobileCallCapsChange(notifyMobileCallCapsChangeStatus, mobileCallCapsPckg); - - // Post notifier for RCall::NotifyStatusChange - call1.NotifyStatusChange(notifyCallStatusChangeStatus, callStatus); - - // Post a notifier for RMobileCall::NotifyMobileCallStatusChange - call1.NotifyMobileCallStatusChange(notifyMobileCallChangeStatus, mobileCallStatus); - - // Post notification RMobilePhone::NotifyDTMFCapsChange - mobilePhone.NotifyDTMFCapsChange(notifyDTMFCapsChangeStatus, dTMFcaps); - - // Hang up call - ASSERT_EQUALS(call1.HangUp(), KErrNone, _L("RMobileCall::HangUp returned error.")); - - // === Check call caps === - - // Check RCall::NotifyCapsChange completes with caps in set of KCapsVoice | KCapsDial. - wantedCaps.iFlags = RCall::KCapsVoice | RCall::KCapsDial; - unwantedCaps.iFlags = 0; - iCallControlTestHelper.WaitForCallNotifyCapsChange(call1, - notifyCapsChangeStatus, - caps, - wantedCaps, - unwantedCaps, - wantedStatus); - - // Check RCall::GetCaps supports KCapsVoice | KCapsDial. - ASSERT_EQUALS(call1.GetCaps(caps), KErrNone, - _L("RCall::GetCaps returned an Error")); - ASSERT_BITS_SET(caps.iFlags, RCall::KCapsVoice | RCall::KCapsDial, KNoUnwantedBits, - _L("RCall::GetCaps returned wrong caps")); - - // Check RMobileCall::NotifyMobileCallCapsChange completes with iCallControlCaps in set of KCapsVoice | KCapsDial. - wantedMobileCaps.iCallControlCaps = RMobileCall::KCapsVoice | RMobileCall::KCapsDial; - wantedMobileCaps.iCallEventCaps = 0; - TCmpRMobileCallTMobileCallCaps mobileCapsComp2(wantedMobileCaps, mobileCallCaps, *this); - iCallControlTestHelper.WaitForMobileCallNotifyMobileCallCapsChange(call1, - notifyMobileCallCapsChangeStatus, - mobileCapsComp2, - KErrNone); - - // Check RMobileCall::GetMobileCallCaps includes iCallControlCaps in set of KCapsVoice | KCapsDial. - ASSERT_EQUALS(call1.GetMobileCallCaps(mobileCallCapsPckg), KErrNone, - _L("RMobileCall::GetMobileCallCaps returned an error")); - wantedMobileCaps.iCallControlCaps = RMobileCall::KCapsVoice | RMobileCall::KCapsDial; - ASSERT_BITS_SET(mobileCallCaps.iCallControlCaps, wantedMobileCaps.iCallControlCaps, KNoUnwantedBits, - _L("RMobileCall::GetMobileCallCaps returned unexpected iCallControlCaps")); - - // === Check call status === - - // Check RCall::NotifyStatusChange completes with EStatusHangingUp -> EStatusIdle. - expectedCallStatus = RCall::EStatusHangingUp; - iCallControlTestHelper.WaitForCallNotifyStatusChange(call1, - notifyCallStatusChangeStatus, - callStatus, - expectedCallStatus, - wantedStatus); - - call1.NotifyStatusChange(notifyCallStatusChangeStatus, callStatus); - expectedCallStatus = RCall::EStatusIdle; - iCallControlTestHelper.WaitForCallNotifyStatusChange(call1, - notifyCallStatusChangeStatus, - callStatus, - expectedCallStatus, - wantedStatus); - - // Check RCall::GetStatus returns EStatusIdle. - ASSERT_EQUALS(call1.GetStatus(callStatus), KErrNone, - _L("RCall::GetStatus returned an error")); - ASSERT_EQUALS(callStatus, RCall::EStatusIdle, - _L("RCall::GetStatus returned an unexpected call status")); - - // Check RMobileCall::NotifyMobileCallStatusChange completes with EStatusDisconnecting -> EStatusIdle. - iCallControlTestHelper.WaitForMobileCallNotifyMobileCallStatusChange(call1, - notifyMobileCallChangeStatus, - mobileCallStatus, - RMobileCall::EStatusDisconnecting, - wantedStatus); - - call1.NotifyMobileCallStatusChange(notifyMobileCallChangeStatus, mobileCallStatus); - iCallControlTestHelper.WaitForMobileCallNotifyMobileCallStatusChange(call1, - notifyMobileCallChangeStatus, - mobileCallStatus, - RMobileCall::EStatusIdle, - wantedStatus); - - // Check RMobileCall::GetMobileCallStatus returns status of EStatusIdle. - ASSERT_EQUALS(call1.GetMobileCallStatus(mobileCallStatus), KErrNone, - _L("RMobileCall::GetMobileStatus returned an error")); - ASSERT_EQUALS(mobileCallStatus, RMobileCall::EStatusIdle, - _L("RMobileCall::GetMobileStatus did not return a status EStatusIdle")); - - // === Check DTMF caps === - - // Check RMobilePhone::NotifyDTMFCapsChange completes with caps equal to 0 - iCallControlTestHelper.WaitForMobilePhoneNotifyDTMFCapsChange( - mobilePhone, - notifyDTMFCapsChangeStatus, - dTMFcaps, - KNoWantedBits, - KNoUnwantedBits, - wantedStatus); - - // Check RMobilePhone::GetDTMFCaps returns caps of 0 - ASSERT_EQUALS(mobilePhone.GetDTMFCaps(dtmfCaps2), KErrNone, _L("RMobilePhone::GetDTMFCaps returned with an error")); - ASSERT_BITS_SET(dtmfCaps2, KNoWantedBits, KNoUnwantedBits, _L("RMobilePhone::GetDTMFCaps returned wrong dynamic caps")); - - //////////////////////////////////////////////////////////////// - // TEST END - //////////////////////////////////////////////////////////////// - - StartCleanup(); - - CleanupStack::PopAndDestroy(10); - // resumeStatus - // holdStatus - // notifyDTMFCapsChangeStatus - // notifyCallEventStatus - // dialStatus - // notifyRemotePartyInfoChangeStatus - // notifyMobileCallChangeStatus - // notifyCallStatusChangeStatus - // notifyMobileCallCapsChangeStatus - // notifyCapsChangeStatus - - return TestStepResult(); - } - -TPtrC CCTSYIntegrationTestCallControl0024::GetTestStepName() -/** - * @return The test step name. - */ - { - return _L("CCTSYIntegrationTestCallControl0024"); - } - - - -CCTSYIntegrationTestCallControl0025::CCTSYIntegrationTestCallControl0025(CEtelSessionMgr& aEtelSessionMgr) - : CCTSYIntegrationTestCallControlBase(aEtelSessionMgr) -/** - * Constructor. - */ - { - SetTestStepName(CCTSYIntegrationTestCallControl0025::GetTestStepName()); - } - -CCTSYIntegrationTestCallControl0025::~CCTSYIntegrationTestCallControl0025() -/** - * Destructor. - */ - { - } - -TVerdict CCTSYIntegrationTestCallControl0025::doTestStepL() -/** - * @SYMTestCaseID BA-CTSY-INT-CCON-0025 - * @SYMFssID BA/CTSY/CCON-0025 - * @SYMTestCaseDesc Swap between an active call and a held call - * @SYMTestPriority High - * @SYMTestActions RMobileCall::NotifyMobileCallCapsChange, RMobileCall::GetMobileCallStatus, RMobileCall::NotifyCallEvent, RCall::NotifyStatusChange, RMobileCall::NotifyMobileCallStatusChange, RCall::NotifyCapsChange, RMobileCall::NotifyRemotePartyInfoChange, RCall::GetStatus,RMobileCall::GetMobileCallCaps, RCall::Dial, RCall::HangUp, RCall::GetCallDuration, RMobileCall::Swap - * @SYMTestExpectedResults Pass - Active call goes on hold and held call becomes active. - * @SYMTestType CIT - * @SYMTestCaseDependencies live/automatic - * - * Reason for test: Verify call status, call event, call caps, remote party info , call duration and DTMF caps correct. - * - * @return - TVerdict code - */ - { - - //////////////////////////////////////////////////////////////// - // SET UP - //////////////////////////////////////////////////////////////// - - RMobilePhone& phone = iEtelSessionMgr.GetPhoneL(KMainServer, KMainPhone); - // Call TNetworkTsyTestHelper::WaitForRegisteredOnHomeNetworkL - CHECK_EQUALS_L(iNetworkTestHelper.WaitForRegisteredOnHomeNetworkL(phone), KErrNone, - _L("TNetworkTsyTestHelper::WaitForRegisteredOnHomeNetworkL returned with an error")); - - // Get Voice line 1 - RMobileLine& voiceLine1 = iEtelSessionMgr.GetLineL(KMainServer, KMainPhone, KVoiceLine); - - // Get call 1 - RMobileCall& call1 = iEtelSessionMgr.GetCallL(KMainServer, KMainPhone, KVoiceLine, KCall1); - - // Check phone supports KCapsVoice - RLine::TCaps lineCaps; - CHECK_EQUALS_L(voiceLine1.GetCaps(lineCaps), KErrNone, _L("RMobileLine::GetCaps returned with an error")); - CHECK_BITS_SET_L(lineCaps.iFlags, RLine::KCapsVoice, 0, _L("RLine::GetCaps returned wrong caps")); - - // Get call 2 - RMobileCall& call2 = iEtelSessionMgr.GetCallL(KMainServer, KMainPhone, KVoiceLine, KCall2); - - // Dial a number that answers on call 1 - TPtrC number1; - CHECK_TRUE_L(GetStringFromConfig(KIniVoiceNumSection, KIniVoiceNumber1, number1) != EFalse, _L("GetStringFromConfig did not complete as expected")); - DEBUG_PRINTF1(_L("Board Now Dialling: ")); - TCoreEtelRequestStatus dialStatus(call1, &RCall::DialCancel); - CleanupStack::PushL(dialStatus); - call1.Dial(dialStatus, number1); - CHECK_EQUALS_L(WaitForRequestWithTimeOut(dialStatus, ETimeMedium), KErrNone, _L("RCall::Dial timed-out")); - CHECK_EQUALS_L(dialStatus.Int(), KErrNone, _L("RCall::Dial returned with an error")); - - // Hold call 1 - TExtEtelRequestStatus holdStatus(call1, EMobileCallHold); - CleanupStack::PushL(holdStatus); - call1.Hold(holdStatus); - CHECK_EQUALS_L(WaitForRequestWithTimeOut(holdStatus, ETimeMedium),KErrNone, _L("RMobileCall::Hold timed out")); - CHECK_EQUALS_L(holdStatus.Int(), KErrNone, _L("RMobileCall::Hold returned with an error")); - - // Ensure RMobileCall::GetMobileCallStatus for call 1 is EStatusHold - RMobileCall::TMobileCallStatus status; - CHECK_EQUALS_L(call1.GetMobileCallStatus(status), KErrNone, _L("RMobileCall::GetMobileCallStatus returned with an error")); - CHECK_EQUALS_L(status, RMobileCall::EStatusHold, _L("RMobileCall::GetMobileCallStatus did not return EStatusHold as expected")); - - //////////////////////////////////////////////////////////////// - // SET UP END - //////////////////////////////////////////////////////////////// - - StartTest(); - - //////////////////////////////////////////////////////////////// - // TEST START - //////////////////////////////////////////////////////////////// - - // Post notifier for RCall::NotifyCapsChange - RCall::TCaps callCaps; - TCoreEtelRequestStatus notifyCapsChangeStatus (call2,&RCall::NotifyCapsChangeCancel); - CleanupStack::PushL(notifyCapsChangeStatus); - call2.NotifyCapsChange(notifyCapsChangeStatus,callCaps); - - // Post notifier for RMobileCall::NotifyMobileCallCapsChange - RMobileCall::TMobileCallCapsV1 mobileCallCaps; - RMobileCall::TMobileCallCapsV1Pckg mobileCallCapsPckg(mobileCallCaps); - TExtEtelRequestStatus notifyMobileCallCapsChangeStatus(call2, EMobileCallNotifyMobileCallCapsChange); - CleanupStack::PushL(notifyMobileCallCapsChangeStatus); - call2.NotifyMobileCallCapsChange(notifyMobileCallCapsChangeStatus,mobileCallCapsPckg); - - // Post notifier for RCall::NotifyStatusChange - RCall::TStatus callStatus; - TCoreEtelRequestStatus notifyStatusChangeStatus (call2,&RCall::NotifyStatusChangeCancel); - CleanupStack::PushL(notifyStatusChangeStatus); - call2.NotifyStatusChange(notifyStatusChangeStatus,callStatus); - - // Post notifier for RMobileCall::NotifyMobileCallStatusChange - RMobileCall::TMobileCallStatus mobileCallStatus2; - TExtEtelRequestStatus notifyMobileCallStatusChangeStatus2(call2, EMobileCallNotifyMobileCallStatusChange); - CleanupStack::PushL(notifyMobileCallStatusChangeStatus2); - call2.NotifyMobileCallStatusChange(notifyMobileCallStatusChangeStatus2, mobileCallStatus2); - - // Post notifier for RMobileCall::NotifyRemotePartyInfoChange - RMobileCall:: TMobileCallRemotePartyInfoV1 rpInfo; - RMobileCall:: TMobileCallRemotePartyInfoV1Pckg rpInfoPkg(rpInfo); - TExtEtelRequestStatus notifyRemotePartyInfoChangeStatus(call2, EMobileCallNotifyRemotePartyInfoChange); - CleanupStack::PushL(notifyRemotePartyInfoChangeStatus); - call2.NotifyRemotePartyInfoChange(notifyRemotePartyInfoChangeStatus, rpInfoPkg); - - // Dial a number that answers on call 2 - TPtrC number2; - ASSERT_TRUE(GetStringFromConfig(KIniVoiceNumSection, KIniVoiceNumber1, number2) != EFalse, _L("GetStringFromConfig did not complete as expected")); - DEBUG_PRINTF1(_L("Board Now Dialling Call 2: ")); - TCoreEtelRequestStatus dialStatus2(call2, &RCall::DialCancel); - CleanupStack::PushL(dialStatus2); - call2.Dial(dialStatus2, number2); - ASSERT_EQUALS(WaitForRequestWithTimeOut(dialStatus2, ETimeMedium), KErrNone, _L("RCall::Dial timed-out")); - ASSERT_EQUALS(dialStatus2.Int(), KErrNone, _L("RCall::Dial returned with an error")); - - // === Check call caps === - - // Check RCall::NotifyCapsChange on call 2 completes with caps in set of KCapsVoice | KCapsHangUp. - RCall::TCaps wantedCallCaps, unwantedCallCaps; - wantedCallCaps.iFlags = RCall::KCapsVoice | RCall::KCapsHangUp; - unwantedCallCaps.iFlags = 0; - const TInt wantedStatus = KErrNone; - iCallControlTestHelper.WaitForCallNotifyCapsChange(call2, - notifyCapsChangeStatus, - callCaps, - wantedCallCaps, - unwantedCallCaps, - wantedStatus); - - // Check RCall::GetCaps on call 2 supports KCapsHangUp | KCapsVoice. - ASSERT_EQUALS(call2.GetCaps(callCaps), KErrNone, _L("RCall::GetCaps returned an error")); - ASSERT_BITS_SET(callCaps.iFlags, wantedCallCaps.iFlags, KNoUnwantedBits, _L("RCall::GetCaps returned wrong caps")); - - // Check RMobileCall::NotifyMobileCallCapsChange on call 2 completes with iCallControlCaps in set of KCapsVoice | KCapsSwap | KCapsHangUp | KCapsTransfer | KCapsJoin. - // Check RMobileCall::NotifyMobileCallCapsChange on call 2 completes with iCallEventCaps in set of KCapsLocalHold | KCapsLocalTransfer | KCapsRemoteHold | KCapsRemoteTerminate | KCapsRemoteConferenceCreate. - RMobileCall::TMobileCallCapsV1 wantedMobileCaps; - wantedMobileCaps.iCallControlCaps = RMobileCall::KCapsVoice | - RMobileCall::KCapsSwap | - RMobileCall::KCapsHangUp | - RMobileCall::KCapsTransfer | - RMobileCall::KCapsJoin; - wantedMobileCaps.iCallEventCaps = RMobileCall::KCapsLocalHold | - RMobileCall::KCapsLocalTransfer | - RMobileCall::KCapsRemoteHold | - RMobileCall::KCapsRemoteTerminate | - RMobileCall::KCapsRemoteConferenceCreate; - TCmpRMobileCallTMobileCallCaps mobileCapsComp(wantedMobileCaps,mobileCallCaps, *this); - iCallControlTestHelper.WaitForMobileCallNotifyMobileCallCapsChange(call2, - notifyMobileCallCapsChangeStatus, - mobileCapsComp, - wantedStatus); - - - // Check RMobileCall::GetMobileCallCaps on call 2 includes iCallControlCaps in set of KCapsVoice | KCapsSwap | KCapsHangUp | KCapsTransfer | KCapsJoin. - // Check RMobileCall::GetMobileCallCaps on call 2 includes iCallEventCaps in set of KCapsLocalHold | KCapsLocalTransfer | KCapsRemoteHold | KCapsRemoteTerminate | KCapsRemoteConferenceCreate. - ASSERT_EQUALS(call2.GetMobileCallCaps(mobileCallCapsPckg), KErrNone, _L("RMobileCall::GetMobileCallCaps returned with an error")) - wantedMobileCaps.iCallControlCaps = RMobileCall::KCapsVoice | - RMobileCall::KCapsSwap | - RMobileCall::KCapsHangUp | - RMobileCall::KCapsTransfer| - RMobileCall::KCapsJoin; - ASSERT_BITS_SET(mobileCallCaps.iCallControlCaps, wantedMobileCaps.iCallControlCaps,KNoUnwantedBits, - _L("RMobileCall::GetMobileCallCaps returned unexpected iCallControlCaps")); - - wantedMobileCaps.iCallEventCaps = RMobileCall::KCapsLocalHold | - RMobileCall::KCapsLocalTransfer | - RMobileCall::KCapsRemoteHold | - RMobileCall::KCapsRemoteTerminate | - RMobileCall::KCapsRemoteConferenceCreate; - ASSERT_BITS_SET(mobileCallCaps.iCallEventCaps, wantedMobileCaps.iCallEventCaps,KNoUnwantedBits, - _L("RMobileCall::GetMobileCallCaps returned unexpected iCallEventCaps")) - - // === Check call status === - - // Check RCall::NotifyStatusChange on call 2 completes with EStatusDialling -> EStatusConnecting -> EStatusConnected. - RCall::TStatus expectedCallStatus = RCall::EStatusDialling; - iCallControlTestHelper.WaitForCallNotifyStatusChange(call2, - notifyStatusChangeStatus, - callStatus, - expectedCallStatus, - wantedStatus); - - call2.NotifyStatusChange(notifyStatusChangeStatus,callStatus); - expectedCallStatus = RCall::EStatusConnecting; - iCallControlTestHelper.WaitForCallNotifyStatusChange(call2, - notifyStatusChangeStatus, - callStatus, - expectedCallStatus, - wantedStatus); - - call2.NotifyStatusChange(notifyStatusChangeStatus,callStatus); - expectedCallStatus = RCall::EStatusConnected; - iCallControlTestHelper.WaitForCallNotifyStatusChange(call2, - notifyStatusChangeStatus, - callStatus, - expectedCallStatus, - wantedStatus); - - // Check RCall::GetStatus on call 2 returns EStatusConnected. - ASSERT_EQUALS(call2.GetStatus(callStatus),KErrNone, _L("RCall::GetStatus returned an error")); - ASSERT_EQUALS(callStatus, RCall::EStatusConnected, _L("RCall::GetStatus returned an unexpected call status")); - - - // Check RMobileCall::NotifyMobileCallStatusChange on call 2 completes with EStatusDialling -> EStatusConnecting -> EStatusConnected. - RMobileCall::TMobileCallStatus expectedMobileCallStatus = RMobileCall::EStatusDialling; - iCallControlTestHelper.WaitForMobileCallNotifyMobileCallStatusChange(call2, - notifyMobileCallStatusChangeStatus2, - mobileCallStatus2, - expectedMobileCallStatus, - wantedStatus); - - call2.NotifyMobileCallStatusChange(notifyMobileCallStatusChangeStatus2, mobileCallStatus2); - expectedMobileCallStatus = RMobileCall::EStatusConnecting; - iCallControlTestHelper.WaitForMobileCallNotifyMobileCallStatusChange(call2, - notifyMobileCallStatusChangeStatus2, - mobileCallStatus2, - expectedMobileCallStatus, - wantedStatus); - - call2.NotifyMobileCallStatusChange(notifyMobileCallStatusChangeStatus2, mobileCallStatus2); - expectedMobileCallStatus = RMobileCall::EStatusConnected; - iCallControlTestHelper.WaitForMobileCallNotifyMobileCallStatusChange(call2, - notifyMobileCallStatusChangeStatus2, - mobileCallStatus2, - expectedMobileCallStatus, - wantedStatus); - - // Check RMobileCall::GetMobileCallStatus on call 2 returns status of EStatusConnected. - ASSERT_EQUALS(call2.GetMobileCallStatus(mobileCallStatus2), KErrNone, _L("RMobileCall::GetMobileStatus returned an error")); - ASSERT_EQUALS(mobileCallStatus2, RMobileCall::EStatusConnected, _L("RMobileCall::GetMobileStatus did not return a status EStatusConnected")); - - // === Check remote party info === - - // Check RMobileCall::NotifyRemotePartyInfoChange on call 2 completes with direction of EMobileOriginated - TPtrC remoteNumber; - RMobileCall:: TMobileCallRemotePartyInfoV1 wantedRpInfo; - wantedRpInfo.iDirection= RMobileCall::EMobileOriginated ; - TCmpRMobileCallTMobileCallRemotePartyInfo rpInfoComp(wantedRpInfo,rpInfo, *this); - iCallControlTestHelper.WaitForMobileCallNotifyRemotePartyInfoChange(call2, - notifyRemotePartyInfoChangeStatus, - rpInfoComp, - wantedStatus); - - // Post notifier for Call2 RMobileCall::NotifyMobileCallStatusChange - call2.NotifyMobileCallStatusChange(notifyMobileCallStatusChangeStatus2, mobileCallStatus2); - - // Post notifier for Call1 RMobileCall::NotifyMobileCallStatusChange - RMobileCall::TMobileCallStatus mobileCallStatus; - TExtEtelRequestStatus notifyMobileCallStatusChangeStatus(call1, EMobileCallNotifyMobileCallStatusChange); - CleanupStack::PushL(notifyMobileCallStatusChangeStatus); - call1.NotifyMobileCallStatusChange(notifyMobileCallStatusChangeStatus, mobileCallStatus); - - // Post notifier for event2 RMobileCall::NotifyCallEvent - RMobileCall::TMobileCallEvent event2; - TExtEtelRequestStatus notifyCallEventStatus2(call2, EMobileCallNotifyCallEvent); - CleanupStack::PushL(notifyCallEventStatus2); - call2.NotifyCallEvent(notifyCallEventStatus2,event2); - - // Post notifier for event1 RMobileCall::NotifyCallEvent - RMobileCall::TMobileCallEvent event; - TExtEtelRequestStatus notifyCallEventStatus(call1, EMobileCallNotifyCallEvent); - CleanupStack::PushL(notifyCallEventStatus); - call1.NotifyCallEvent(notifyCallEventStatus,event); - - // Swap call 2 - TExtEtelRequestStatus swapStatus(call2, EMobileCallSwap); - CleanupStack::PushL(swapStatus); - call2.Swap(swapStatus); - ASSERT_EQUALS(WaitForRequestWithTimeOut(swapStatus, ETimeMedium),KErrNone, _L("RMobileCall::Swap timed out")); - ASSERT_EQUALS(swapStatus.Int(), KErrNone, _L("RMobileCall::Swap returned with an error")); - - // === Check call status for calls 1 and 2 === - - // Check RMobileCall::NotifyMobileCallStatusChange on call 2 completes with EStatusHold - expectedMobileCallStatus = RMobileCall::EStatusHold; - iCallControlTestHelper.WaitForMobileCallNotifyMobileCallStatusChange(call2, - notifyMobileCallStatusChangeStatus2, - mobileCallStatus2, - expectedMobileCallStatus, - wantedStatus); - - // Check RMobileCall::GetMobileCallStatus on call 2 returns status of EStatusHold - ASSERT_EQUALS(call2.GetMobileCallStatus(mobileCallStatus2), KErrNone, _L("RMobileCall::GetMobileStatus returned an error")); - ASSERT_EQUALS(mobileCallStatus2, RMobileCall::EStatusHold, _L("RMobileCall::GetMobileStatus did not return a status EStatusHold")); - - // Check RMobileCall::NotifyMobileCallStatusChange on call 1 completes with EStatusResume - expectedMobileCallStatus = RMobileCall::EStatusConnected; - iCallControlTestHelper.WaitForMobileCallNotifyMobileCallStatusChange(call1, - notifyMobileCallStatusChangeStatus, - mobileCallStatus, - expectedMobileCallStatus, - wantedStatus); - - // Check RMobileCall::GetMobileCallStatus on call 1 returns status of EStatusResume - ASSERT_EQUALS(call1.GetMobileCallStatus(mobileCallStatus), KErrNone, _L("RMobileCall::GetMobileStatus returned an error")) - ASSERT_EQUALS(mobileCallStatus, RMobileCall::EStatusConnected, _L("RMobileCall::GetMobileStatus did not return a status EStatusResume")) - - // === Check call event completes === - - // Check RMobileCall::NotifyCallEvent on call 2 completes with ELocalHold - RMobileCall::TMobileCallEvent expectedEvent= RMobileCall::ELocalHold; - iCallControlTestHelper.WaitForMobileCallNotifyCallEvent(call2, - notifyCallEventStatus2, - event2, - expectedEvent, - wantedStatus); - - // Check RMobileCall::NotifyCallEvent on call 1 completes with ELocalResume - expectedEvent= RMobileCall::ELocalResume; - iCallControlTestHelper.WaitForMobileCallNotifyCallEvent(call1, - notifyCallEventStatus, - event, - expectedEvent, - wantedStatus); - // Pause so that the call durations have time to increase from 0 - User::After(KOneSecond*2); - - // Get call duration of call 1 - TTimeIntervalSeconds duration1; - ASSERT_EQUALS(call1.GetCallDuration(duration1), KErrNone, _L("RCall::GetCallDuration returned with an error")); - - // Get call duration of call 2 - TTimeIntervalSeconds duration2; - ASSERT_EQUALS(call2.GetCallDuration(duration2), KErrNone, _L("RCall::GetCallDuration returned with an error")); - - // Check call duration of call 1 > duration of call 2 - ASSERT_TRUE(duration1.Int()>duration2.Int(), _L("RCall::GetCallDuration duration of call1 is not greater than the duration of call2")); - - // Hang up call 1 - ASSERT_EQUALS(call1.HangUp(), KErrNone,_L("RMobileCall::HangUp returned with an error")); - - // Hang up call 2 - ASSERT_EQUALS(call2.HangUp(), KErrNone,_L("RMobileCall::HangUp returned with an error")); - - //////////////////////////////////////////////////////////////// - // TEST END - //////////////////////////////////////////////////////////////// - - StartCleanup(); - // Pop: - // dialStatus - // holdStatus - // notifyCapsChangeStatus - // notifyMobileCallCapsChangeStatus - // notifyStatusChangeStatus - // notifyMobileCallStatusChangeStatus2 - // notifyRemotePartyInfoChangeStatus - // dialStatus2 - // notifyMobileCallStatusChangeStatus - // notifyCallEventStatus2 - // notifyCallEventStatus - // swapStatus - CleanupStack::PopAndDestroy(12, &dialStatus); - - - return TestStepResult(); - } - -TPtrC CCTSYIntegrationTestCallControl0025::GetTestStepName() -/** - * @return The test step name. - */ - { - return _L("CCTSYIntegrationTestCallControl0025"); - } - - - -CCTSYIntegrationTestCallControl0026::CCTSYIntegrationTestCallControl0026(CEtelSessionMgr& aEtelSessionMgr) - : CCTSYIntegrationTestCallControlBase(aEtelSessionMgr) -/** - * Constructor. - */ - { - SetTestStepName(CCTSYIntegrationTestCallControl0026::GetTestStepName()); - } - -CCTSYIntegrationTestCallControl0026::~CCTSYIntegrationTestCallControl0026() -/** - * Destructor. - */ - { - } - -TVerdict CCTSYIntegrationTestCallControl0026::doTestStepL() -/** - * @SYMTestCaseID BA-CTSY-INT-CCON-0026 - * @SYMFssID BA/CTSY/CCON-0026 - * @SYMTestCaseDesc Swap between a held call and an ongoing call - * @SYMTestPriority High - * @SYMTestActions RMobileCall::NotifyMobileCallCapsChange, RMobileCall::GetMobileCallStatus, RMobileCall::NotifyCallEvent, RCall::NotifyStatusChange, RMobileCall::NotifyMobileCallStatusChange,RCall::NotifyCapsChange, RMobileCall::NotifyRemotePartyInfoChange, RCall::GetStatus,RMobileCall::GetMobileCallCaps, RCall::Dial, RCall::HangUp, RCall::GetCallDuration, RMobileCall::Swap - * @SYMTestExpectedResults Pass - Active call goes on hold and held call becomes active. - * @SYMTestType CIT - * @SYMTestCaseDependencies live/automatic - * - * Reason for test: Verify call status, call event, call caps, remote party info , call duration and DTMF caps correct. - * - * @return - TVerdict code - */ - { - - //////////////////////////////////////////////////////////////// - // SET UP - //////////////////////////////////////////////////////////////// - RMobilePhone& phone = iEtelSessionMgr.GetPhoneL(KMainServer, KMainPhone); - // Call TNetworkTsyTestHelper::WaitForRegisteredOnHomeNetworkL - CHECK_EQUALS_L(iNetworkTestHelper.WaitForRegisteredOnHomeNetworkL(phone), KErrNone, _L("TNetworkTsyTestHelper::WaitForRegisteredOnHomeNetworkL returned with an error")); - - // Get Voice line 1 - RMobileLine& voiceLine1 = iEtelSessionMgr.GetLineL(KMainServer, KMainPhone, KVoiceLine); - - // Get call 1 - RMobileCall& call1 = iEtelSessionMgr.GetCallL(KMainServer, KMainPhone, KVoiceLine, KCall1); - - // Check phone supports KCapsVoice - RLine::TCaps lineCaps; - CHECK_EQUALS_L(voiceLine1.GetCaps(lineCaps) , KErrNone, _L("RMobileLine::GetCaps returned with an error")); - CHECK_BITS_SET_L(lineCaps.iFlags, RLine::KCapsVoice, 0, _L("RLine::GetCaps returned wrong caps")); - - // Get Voice line 2 - RMobileLine& voiceLine2 = iEtelSessionMgr.GetLineL(KMainServer, KMainPhone, KVoiceLine); - - // Get call 2 - RMobileCall& call2 = iEtelSessionMgr.GetCallL(KMainServer, KMainPhone, KVoiceLine, KCall2); - - // Dial a number that answers on call 1 - TPtrC number1; - CHECK_TRUE_L(GetStringFromConfig(KIniVoiceNumSection, KIniVoiceNumber1, number1) != EFalse, _L("GetStringFromConfig did not complete as expected")); - DEBUG_PRINTF1(_L("Board Now Dialling: ")); - TCoreEtelRequestStatus dialStatus(call1, &RCall::DialCancel); - CleanupStack::PushL(dialStatus); - call1.Dial(dialStatus, number1); - CHECK_EQUALS_L(WaitForRequestWithTimeOut(dialStatus, ETimeMedium), KErrNone, _L("RCall::Dial timed-out")); - CHECK_EQUALS_L(dialStatus.Int(), KErrNone, _L("RCall::Dial returned with an error")); - - // Hold call 1 - TExtEtelRequestStatus holdStatus(call1, EMobileCallHold); - CleanupStack::PushL(holdStatus); - call1.Hold(holdStatus); - CHECK_EQUALS_L(WaitForRequestWithTimeOut(holdStatus, ETimeMedium),KErrNone, _L("RMobileCall::Hold timed out")); - CHECK_EQUALS_L(holdStatus.Int(), KErrNone, _L("RMobileCall::Hold returned with an error")); - - // Ensure RMobileCall::GetMobileCallStatus for call 1 is EStatusHold - RMobileCall::TMobileCallStatus status; - CHECK_EQUALS_L(call1.GetMobileCallStatus(status), KErrNone, _L("RMobileCall::GetMobileCallStatus returned with an error")); - CHECK_EQUALS_L(status, RMobileCall::EStatusHold, _L("RMobileCall::GetMobileCallStatus did not return EStatusHold as expected")); - - //////////////////////////////////////////////////////////////// - // SET UP END - //////////////////////////////////////////////////////////////// - - StartTest(); - - //////////////////////////////////////////////////////////////// - // TEST START - //////////////////////////////////////////////////////////////// - - - // Post notifier for RCall::NotifyCapsChange - RCall::TCaps callCaps; - TCoreEtelRequestStatus notifyCapsChangeStatus (call2,&RCall::NotifyCapsChangeCancel); - CleanupStack::PushL(notifyCapsChangeStatus); - call2.NotifyCapsChange(notifyCapsChangeStatus,callCaps); - - // Post notifier for RMobileCall::NotifyMobileCallCapsChange - RMobileCall::TMobileCallCapsV1 mobileCallCaps; - RMobileCall::TMobileCallCapsV1Pckg mobileCallCapsPckg(mobileCallCaps); - TExtEtelRequestStatus notifyMobileCallCapsChangeStatus(call2, EMobileCallNotifyMobileCallCapsChange); - CleanupStack::PushL(notifyMobileCallCapsChangeStatus); - call2.NotifyMobileCallCapsChange(notifyMobileCallCapsChangeStatus,mobileCallCapsPckg); - - // Post notifier for RCall::NotifyStatusChange - RCall::TStatus callStatus; - TCoreEtelRequestStatus notifyStatusChangeStatus (call2,&RCall::NotifyStatusChangeCancel); - CleanupStack::PushL(notifyStatusChangeStatus); - call2.NotifyStatusChange(notifyStatusChangeStatus,callStatus); - - // Post notifier for RMobileCall::NotifyMobileCallStatusChange - RMobileCall::TMobileCallStatus mobileCallStatus2; - TExtEtelRequestStatus notifyMobileCallStatusChangeStatus2(call2, EMobileCallNotifyMobileCallStatusChange); - CleanupStack::PushL(notifyMobileCallStatusChangeStatus2); - call2.NotifyMobileCallStatusChange(notifyMobileCallStatusChangeStatus2, mobileCallStatus2); - - // Post notifier for RMobileCall::NotifyRemotePartyInfoChange - RMobileCall:: TMobileCallRemotePartyInfoV1 rpInfo; - RMobileCall:: TMobileCallRemotePartyInfoV1Pckg rpInfoPkg(rpInfo); - TExtEtelRequestStatus notifyRemotePartyInfoChangeStatus(call2, EMobileCallNotifyRemotePartyInfoChange); - CleanupStack::PushL(notifyRemotePartyInfoChangeStatus); - call2.NotifyRemotePartyInfoChange(notifyRemotePartyInfoChangeStatus, rpInfoPkg); - - // Dial a number that answers on call 2 - TPtrC number2; - ASSERT_TRUE(GetStringFromConfig(KIniVoiceNumSection, KIniVoiceNumber1, number2) != EFalse, _L("GetStringFromConfig did not complete as expected")); - DEBUG_PRINTF1(_L("Board Now Dialling: ")); - TCoreEtelRequestStatus dialStatus2(call2, &RCall::DialCancel); - CleanupStack::PushL(dialStatus2); - call2.Dial(dialStatus2, number2); - ASSERT_EQUALS(WaitForRequestWithTimeOut(dialStatus2, ETimeMedium), KErrNone, _L("RCall::Dial timed-out")); - ASSERT_EQUALS(dialStatus2.Int(), KErrNone, _L("RCall::Dial returned with an error")); - - // === Check call caps === - - // Check RCall::NotifyCapsChange on call 2 completes with caps in set of KCapsVoice | KCapsHangUp. - RCall::TCaps wantedCallCaps, unwantedCallCaps; - wantedCallCaps.iFlags = RCall::KCapsVoice | RCall::KCapsHangUp; - unwantedCallCaps.iFlags = 0; - const TInt wantedStatus = KErrNone; - iCallControlTestHelper.WaitForCallNotifyCapsChange(call2, - notifyCapsChangeStatus, - callCaps, - wantedCallCaps, - unwantedCallCaps, - wantedStatus); - - // Check RCall::GetCaps on call 2 supports KCapsHangUp | KCapsVoice. - ASSERT_EQUALS(call2.GetCaps(callCaps), KErrNone, _L("RCall::GetCaps returned an error")); - ASSERT_BITS_SET(callCaps.iFlags, wantedCallCaps.iFlags, KNoUnwantedBits, _L("RCall::GetCaps returned wrong caps")) - - // Check RMobileCall::NotifyMobileCallCapsChange on call 2 completes with iCallControlCaps in set of KCapsVoice | KCapsSwap | KCapsHangUp | KCapsTransfer | KCapsJoin. - // Check RMobileCall::NotifyMobileCallCapsChange on call 2 completes with iCallEventCaps in set of KCapsLocalHold | KCapsLocalTransfer | KCapsRemoteHold | KCapsRemoteTerminate | KCapsRemoteConferenceCreate. - RMobileCall::TMobileCallCapsV1 wantedMobileCaps; - wantedMobileCaps.iCallControlCaps = RMobileCall::KCapsVoice | - RMobileCall::KCapsSwap | - RMobileCall::KCapsHangUp | - RMobileCall::KCapsTransfer | - RMobileCall::KCapsJoin; - wantedMobileCaps.iCallEventCaps = RMobileCall::KCapsLocalHold | - RMobileCall::KCapsLocalTransfer | - RMobileCall::KCapsRemoteHold | - RMobileCall::KCapsRemoteTerminate | - RMobileCall::KCapsRemoteConferenceCreate; - TCmpRMobileCallTMobileCallCaps mobileCapsComp(wantedMobileCaps,mobileCallCaps, *this); - iCallControlTestHelper.WaitForMobileCallNotifyMobileCallCapsChange(call2, - notifyMobileCallCapsChangeStatus, - mobileCapsComp, - wantedStatus); - - // Check RMobileCall::GetMobileCallCaps on call 2 includes iCallControlCaps in set of KCapsVoice | KCapsSwap | KCapsHangUp | KCapsTransfer | KCapsJoin. - // Check RMobileCall::GetMobileCallCaps on call 2 includes iCallEventCaps in set of KCapsLocalHold | KCapsLocalTransfer | KCapsRemoteHold | KCapsRemoteTerminate | KCapsRemoteConferenceCreate. - ASSERT_EQUALS(call2.GetMobileCallCaps(mobileCallCapsPckg), KErrNone, _L("RMobileCall::GetMobileCallCaps returned with an error")) - wantedMobileCaps.iCallControlCaps = RMobileCall::KCapsVoice | - RMobileCall::KCapsSwap | - RMobileCall::KCapsHangUp | - RMobileCall::KCapsTransfer| - RMobileCall::KCapsJoin; - ASSERT_BITS_SET(mobileCallCaps.iCallControlCaps, wantedMobileCaps.iCallControlCaps,KNoUnwantedBits, - _L("RMobileCall::GetMobileCallCaps returned unexpected iCallControlCaps")) - - wantedMobileCaps.iCallEventCaps = RMobileCall::KCapsLocalHold | - RMobileCall::KCapsLocalTransfer | - RMobileCall::KCapsRemoteHold | - RMobileCall::KCapsRemoteTerminate | - RMobileCall::KCapsRemoteConferenceCreate; - ASSERT_BITS_SET(mobileCallCaps.iCallEventCaps, wantedMobileCaps.iCallEventCaps,KNoUnwantedBits, - _L("RMobileCall::GetMobileCallCaps returned unexpected iCallEventCaps")) - - - - // === Check call status === - - // Check RCall::NotifyStatusChange on call 2 completes with EStatusDialling -> EStatusConnecting -> EStatusConnected. - RCall::TStatus expectedCallStatus = RCall::EStatusDialling; - iCallControlTestHelper.WaitForCallNotifyStatusChange(call2, - notifyStatusChangeStatus, - callStatus, - expectedCallStatus, - wantedStatus); - - call2.NotifyStatusChange(notifyStatusChangeStatus,callStatus); - expectedCallStatus = RCall::EStatusConnecting; - iCallControlTestHelper.WaitForCallNotifyStatusChange(call2, - notifyStatusChangeStatus, - callStatus, - expectedCallStatus, - wantedStatus); - - call2.NotifyStatusChange(notifyStatusChangeStatus,callStatus); - expectedCallStatus = RCall::EStatusConnected; - iCallControlTestHelper.WaitForCallNotifyStatusChange(call2, - notifyStatusChangeStatus, - callStatus, - expectedCallStatus, - wantedStatus); - - // Check RCall::GetStatus on call 2 returns EStatusConnected. - ASSERT_EQUALS(call2.GetStatus(callStatus),KErrNone, _L("RCall::GetStatus returned an error")); - ASSERT_EQUALS(callStatus, RCall::EStatusConnected, _L("RCall::GetStatus did not return RCall::EStatusConnected")); - - // Check RMobileCall::NotifyMobileCallStatusChange on call 2 completes with EStatusDialling -> EStatusConnecting -> EStatusConnected. - RMobileCall::TMobileCallStatus expectedMobileCallStatus = RMobileCall::EStatusDialling; - iCallControlTestHelper.WaitForMobileCallNotifyMobileCallStatusChange(call2, - notifyMobileCallStatusChangeStatus2, - mobileCallStatus2, - expectedMobileCallStatus, - wantedStatus); - - call2.NotifyMobileCallStatusChange(notifyMobileCallStatusChangeStatus2, mobileCallStatus2); - expectedMobileCallStatus = RMobileCall::EStatusConnecting; - iCallControlTestHelper.WaitForMobileCallNotifyMobileCallStatusChange(call2, - notifyMobileCallStatusChangeStatus2, - mobileCallStatus2, - expectedMobileCallStatus, - wantedStatus); - - call2.NotifyMobileCallStatusChange(notifyMobileCallStatusChangeStatus2, mobileCallStatus2); - expectedMobileCallStatus = RMobileCall::EStatusConnected; - iCallControlTestHelper.WaitForMobileCallNotifyMobileCallStatusChange(call2, - notifyMobileCallStatusChangeStatus2, - mobileCallStatus2, - expectedMobileCallStatus, - wantedStatus); - - // Check RMobileCall::GetMobileCallStatus on call 2 returns status of EStatusConnected. - ASSERT_EQUALS(call2.GetMobileCallStatus(mobileCallStatus2), KErrNone, _L("RMobileCall::GetMobileStatus returned an error")) - ASSERT_EQUALS(mobileCallStatus2, RMobileCall::EStatusConnected, _L("RMobileCall::GetMobileStatus did not return a status EStatusConnected")) - - // === Check remote party info === - - // Check RMobilePhone::NotifyRemotePartyInfoChange on call 2 completes with direction of EMobileOriginated - TPtrC remoteNumber; - RMobileCall:: TMobileCallRemotePartyInfoV1 wantedRpInfo; - wantedRpInfo.iDirection= RMobileCall::EMobileOriginated; - TCmpRMobileCallTMobileCallRemotePartyInfo rpInfoComp(wantedRpInfo,rpInfo, *this); - iCallControlTestHelper.WaitForMobileCallNotifyRemotePartyInfoChange(call2, - notifyRemotePartyInfoChangeStatus, - rpInfoComp, - wantedStatus); - - // Post notifier for Call2 RMobileCall::NotifyMobileCallStatusChange - call2.NotifyMobileCallStatusChange(notifyMobileCallStatusChangeStatus2, mobileCallStatus2); - - // Post notifier for Call1 RMobileCall::NotifyMobileCallStatusChange - RMobileCall::TMobileCallStatus mobileCallStatus; - TExtEtelRequestStatus notifyMobileCallStatusChangeStatus(call1, EMobileCallNotifyMobileCallStatusChange); - CleanupStack::PushL(notifyMobileCallStatusChangeStatus); - call1.NotifyMobileCallStatusChange(notifyMobileCallStatusChangeStatus, mobileCallStatus); - - // Post notifier for event2 RMobileCall::NotifyCallEvent - RMobileCall::TMobileCallEvent event2; - TExtEtelRequestStatus notifyCallEventStatus2(call2, EMobileCallNotifyCallEvent); - CleanupStack::PushL(notifyCallEventStatus2); - call2.NotifyCallEvent(notifyCallEventStatus2,event2); - - // Post notifier for event1 RMobileCall::NotifyCallEvent - RMobileCall::TMobileCallEvent event; - TExtEtelRequestStatus notifyCallEventStatus(call1, EMobileCallNotifyCallEvent); - CleanupStack::PushL(notifyCallEventStatus); - call1.NotifyCallEvent(notifyCallEventStatus,event); - - // Swap call 1 - TExtEtelRequestStatus swapStatus(call1, EMobileCallSwap); - CleanupStack::PushL(swapStatus); - call1.Swap(swapStatus); - ASSERT_EQUALS(WaitForRequestWithTimeOut(swapStatus, ETimeMedium),KErrNone, _L("RMobileCall::Swap timed out")); - ASSERT_EQUALS(swapStatus.Int(), KErrNone, _L("RMobileCall::Swap returned with an error")); - - // === Check call status for calls 1 and 2 === - - // Check RMobileCall::NotifyMobileCallStatusChange on call 2 completes with EStatusHold - expectedMobileCallStatus = RMobileCall::EStatusHold; - iCallControlTestHelper.WaitForMobileCallNotifyMobileCallStatusChange(call2, - notifyMobileCallStatusChangeStatus2, - mobileCallStatus2, - expectedMobileCallStatus, - wantedStatus); - - // Check RMobileCall::GetMobileCallStatus on call 2 returns status of EStatusHold - ASSERT_EQUALS(call2.GetMobileCallStatus(mobileCallStatus2), KErrNone, _L("RMobileCall::GetMobileStatus returned an error")); - ASSERT_EQUALS(mobileCallStatus2, RMobileCall::EStatusHold, _L("RMobileCall::GetMobileStatus did not return a status EStatusHold")); - - // Check RMobileCall::NotifyMobileCallStatusChange on call 1 completes with EStatusResume - expectedMobileCallStatus = RMobileCall::EStatusConnected; - iCallControlTestHelper.WaitForMobileCallNotifyMobileCallStatusChange(call1, - notifyMobileCallStatusChangeStatus, - mobileCallStatus, - expectedMobileCallStatus, - wantedStatus); - - // Check RMobileCall::GetMobileCallStatus on call 1 returns status of EStatusResume - ASSERT_EQUALS(call1.GetMobileCallStatus(mobileCallStatus), KErrNone, _L("RMobileCall::GetMobileStatus returned an error")); - ASSERT_EQUALS(mobileCallStatus, RMobileCall::EStatusConnected, _L("RMobileCall::GetMobileStatus did not return a status EStatusResume")); - - // === Check call event completes === - - // Check RMobileCall::NotifyCallEvent on call 2 completes with ELocalHold - RMobileCall::TMobileCallEvent expectedEvent= RMobileCall::ELocalHold; - iCallControlTestHelper.WaitForMobileCallNotifyCallEvent(call2, - notifyCallEventStatus2, - event2, - expectedEvent, - wantedStatus); - - // Check RMobileCall::NotifyCallEvent on call 1 completes with ELocalResume - expectedEvent= RMobileCall::ELocalResume; - iCallControlTestHelper.WaitForMobileCallNotifyCallEvent(call1, - notifyCallEventStatus, - event, - expectedEvent, - wantedStatus); - - // Wait so that call duration increases - User::After(KOneSecond * 2); - - // Get call duration of call 1 - TTimeIntervalSeconds duration1; - ASSERT_EQUALS(call1.GetCallDuration(duration1), KErrNone, _L("RCall::GetCallDuration returned with an error")); - - // Get call duration of call 2 - TTimeIntervalSeconds duration2; - ASSERT_EQUALS(call2.GetCallDuration(duration2), KErrNone, _L("RCall::GetCallDuration returned with an error")); - - // Check call duration of call 1 > duration of call 2 - ASSERT_TRUE(duration1.Int()>duration2.Int(), _L("RCall::GetCallDuration duration of call1 is not greater than the duration of call2")); - - // Hang up call 1 - ASSERT_EQUALS(call1.HangUp(), KErrNone,_L("RMobileCall::HangUp returned with an error")); - - // Hang up call 2 - ASSERT_EQUALS(call2.HangUp(), KErrNone,_L("RMobileCall::HangUp returned with an error")); - - //////////////////////////////////////////////////////////////// - // TEST END - //////////////////////////////////////////////////////////////// - - StartCleanup(); - - // Pop: - // dialStatus - // holdStatus - // notifyCapsChangeStatus - // notifyMobileCallCapsChangeStatus - // notifyStatusChangeStatus - // notifyMobileCallStatusChangeStatus2 - // notifyRemotePartyInfoChangeStatus - // dialStatus2 - // notifyMobileCallStatusChangeStatus - // notifyCallEventStatus2 - // notifyCallEventStatus - // swapStatus - CleanupStack::PopAndDestroy(12, &dialStatus); - - return TestStepResult(); - } - -TPtrC CCTSYIntegrationTestCallControl0026::GetTestStepName() -/** - * @return The test step name. - */ - { - return _L("CCTSYIntegrationTestCallControl0026"); - } - - - -CCTSYIntegrationTestCallControl0027::CCTSYIntegrationTestCallControl0027(CEtelSessionMgr& aEtelSessionMgr) - : CCTSYIntegrationTestCallControlBase(aEtelSessionMgr) -/** - * Constructor. - */ - { - SetTestStepName(CCTSYIntegrationTestCallControl0027::GetTestStepName()); - } - -CCTSYIntegrationTestCallControl0027::~CCTSYIntegrationTestCallControl0027() -/** - * Destructor. - */ - { - } - -TVerdict CCTSYIntegrationTestCallControl0027::doTestStepL() -/** - * @SYMTestCaseID BA-CTSY-INT-CCON-0027 - * @SYMFssID BA/CTSY/CCON-0027 - * @SYMTestCaseDesc Hold an MO call then answer an MT call. - * @SYMTestPriority High - * @SYMTestActions RMobileCall::NotifyMobileCallCapsChange, - * RMobileCall::GetMobileCallStatus, - * RMobileCall::NotifyCallEvent, RCall::GetInfo, - * RCall::NotifyStatusChange, - * RCall::NotifyCapsChange, - * RMobilePhone::NotifyDTMFCapsChange, - * RMobileCall::GetMobileCallCaps, - * RLine::NotifyStatusChange, - * RMobileCall::GetMobileCallInfo, - * RMobileCall::NotifyMobileCallStatusChange, - * RMobilePhone::GetDTMFCaps - * @SYMTestExpectedResults Pass - Second call is answered without affecting held call. - * @SYMTestType CIT - * @SYMTestCaseDependencies live/manual - * - * Reason for test: Verify call status, call caps, line status are correct. - * - * @return - TVerdict code - */ - { - //////////////////////////////////////////////////////////////// - // SET UP - //////////////////////////////////////////////////////////////// - - // Call TNetworkTsyTestHelper::WaitForRegisteredOnHomeNetworkL - RMobilePhone& phone = iEtelSessionMgr.GetPhoneL(KMainServer,KMainPhone); - CHECK_EQUALS_L(iNetworkTestHelper.WaitForRegisteredOnHomeNetworkL(phone), KErrNone, - _L("TNetworkTsyTestHelper::WaitForRegisteredOnHomeNetworkL returned with an error")); - - // Check phone supports KCapsVoice - RMobilePhone& mobilePhone=iEtelSessionMgr.GetPhoneL(KMainServer, KMainPhone); - RMobilePhone::TCaps caps; - CHECK_EQUALS_L(mobilePhone.GetCaps(caps), KErrNone, _L("RMobilePhone::GetCaps return value is not KErrNone")); - TUint32 expectedServiceCaps=RMobilePhone::KCapsVoice; - CHECK_BITS_SET_L(caps.iFlags, expectedServiceCaps, KNoUnwantedBits, _L("RMobilePhone::GetCaps returned wrong caps")); - - // Get Voice line 1 - RMobileLine& mobileLine1=iEtelSessionMgr.GetLineL(KMainServer, KMainPhone, KVoiceLine); - - // Get call 1 - RMobileCall& mobileCall1=iEtelSessionMgr.GetCallL(KMainServer, KMainPhone, KVoiceLine, KCall1); - - // Dial a number that answers on call 1 - TPtrC number; - CHECK_TRUE_L(GetStringFromConfig(KIniVoiceNumSection, KIniVoiceNumber1, number) != EFalse, _L("GetStringFromConfig did not complete as expected")); - DEBUG_PRINTF2(_L("Board Now Dialling: %S"), &number); - TCoreEtelRequestStatus dialStatus(mobileCall1, &RCall::DialCancel); - CleanupStack::PushL(dialStatus); - mobileCall1.Dial(dialStatus, number); - CHECK_EQUALS_L(WaitForRequestWithTimeOut(dialStatus, ETimeMedium), KErrNone, _L("RCall::Dial timed-out")); - CHECK_EQUALS_L(dialStatus.Int(), KErrNone, _L("RCall::Dial problem dialling")); - - // Hold call 1 - TExtEtelRequestStatus holdStatus(mobileCall1, EMobileCallHold); - CleanupStack::PushL(holdStatus); - mobileCall1.Hold(holdStatus); - CHECK_EQUALS_L(WaitForRequestWithTimeOut(holdStatus, ETimeMedium), KErrNone, _L("RMobileCall::Hold timed-out")); - CHECK_EQUALS_L(holdStatus.Int(), KErrNone, _L("RMobileCall::Hold problem holding call")); - - // Ensure RMobileCall::GetMobileCallStatus for call 1 is EStatusHold - RMobileCall::TMobileCallStatus getMobileCallStatus; - CHECK_EQUALS_L(mobileCall1.GetMobileCallStatus(getMobileCallStatus), KErrNone, _L("RMobileCall::GetMobileCallStatus return code is not KErrNone")); - CHECK_EQUALS_L(getMobileCallStatus, RMobileCall::EStatusHold, _L("RMobileCall::GetMobileCallStatus getMobileCallStatus incorrect error")); - - //////////////////////////////////////////////////////////////// - // SET UP END - //////////////////////////////////////////////////////////////// - - StartTest(); - - //////////////////////////////////////////////////////////////// - // TEST START - //////////////////////////////////////////////////////////////// - - // Post notifier for RLine::NotifyIncomingCall - TCoreEtelRequestStatus notifyIncomingCallStatus (mobileLine1,&RLine::NotifyIncomingCallCancel); - CleanupStack::PushL(notifyIncomingCallStatus); - TName name; - mobileLine1.NotifyIncomingCall(notifyIncomingCallStatus,name); - - // Request incoming call from RPS. - RPSRequestIncomingCallL(EVoiceLine); - - // Check RLine::NotifyIncomingCall completes with call name. - ASSERT_EQUALS(WaitForRequestWithTimeOut(notifyIncomingCallStatus,ETimeMedium),KErrNone, - _L("RLine::NotifyIncomingCall did not complete without error")); - ASSERT_EQUALS(notifyIncomingCallStatus.Int(), KErrNone, - _L("RLine::NotifyIncomingCall set requestStatus to an error")); - ASSERT_TRUE(name.Length() > 0, - _L("RLine::NotifyIncomingCall did not set a line name")); - - // === Check call caps === - - // Get the incoming call - TCallId incomingCallId; - RMobileCall& incomingCall = iEtelSessionMgr.GetIncomingCallL(KMainServer, KMainPhone, KVoiceLine, name, incomingCallId); - - // Post notification RMobileCall::NotifyCapsChange for call 2 - TCoreEtelRequestStatus notifyCapsChangeStatus2(incomingCall, &RMobileCall::NotifyCapsChangeCancel); - CleanupStack::PushL(notifyCapsChangeStatus2); - RMobileCall::TCaps notifyCapsChangeCaps2; - incomingCall.NotifyCapsChange(notifyCapsChangeStatus2, notifyCapsChangeCaps2); - - // Post notification RMobileCall::NotifyMobileCallCapsChange for call 2 - TExtEtelRequestStatus notifyMobileCallCapsChangeStatus2(incomingCall, EMobileCallNotifyMobileCallCapsChange); - CleanupStack::PushL(notifyMobileCallCapsChangeStatus2); - RMobileCall::TMobileCallCapsV1 pkgType2; - RMobileCall::TMobileCallCapsV1Pckg pkgArg2(pkgType2); - incomingCall.NotifyMobileCallCapsChange(notifyMobileCallCapsChangeStatus2, pkgArg2); - - // Post notification RMobileCall::NotifyStatusChange for call 2 - TCoreEtelRequestStatus notifyStatusChangeStatus2(incomingCall, &RMobileCall::NotifyStatusChangeCancel); - CleanupStack::PushL(notifyStatusChangeStatus2); - RCall::TStatus callStatus2; - incomingCall.NotifyStatusChange(notifyStatusChangeStatus2, callStatus2); - - // Post notification RMobileCall::NotifyMobileCallStatusChange for call 2 - TExtEtelRequestStatus notifyMobileCallStatusChangeStatus2(incomingCall, EMobileCallNotifyMobileCallStatusChange); - CleanupStack::PushL(notifyMobileCallStatusChangeStatus2); - RMobileCall::TMobileCallStatus mobileCallState2; - incomingCall.NotifyMobileCallStatusChange(notifyMobileCallStatusChangeStatus2, mobileCallState2); - - // Answer incoming call on call 2. - TCoreEtelRequestStatus answerIncomingStatus(incomingCall, &RCall::AnswerIncomingCallCancel); - CleanupStack::PushL(answerIncomingStatus); - incomingCall.AnswerIncomingCall(answerIncomingStatus); - ASSERT_EQUALS(WaitForRequestWithTimeOut(answerIncomingStatus, ETimeLong), KErrNone, _L("RCall::AnswerIncomingCall timed out")); - ASSERT_EQUALS(answerIncomingStatus.Int(), KErrNone, _L("RCall::AnswerIncomingCall returned an error")); - - // === Check call caps === - - // Check RCall::NotifyCapsChange on call 2 completes with caps in set of KCapsVoice | KCapsHangUp. - // Check RCall::NotifyCapsChange on call 2 completes with caps NOT in set of KCapsAnswer | KCapsDial. - RCall::TCaps wantedCaps; - RCall::TCaps unwantedCaps; - wantedCaps.iFlags=RCall::KCapsVoice | RCall::KCapsHangUp; - unwantedCaps.iFlags=RCall::KCapsAnswer | RCall::KCapsDial; - iCallControlTestHelper.WaitForCallNotifyCapsChange(incomingCall, - notifyCapsChangeStatus2, - notifyCapsChangeCaps2, - wantedCaps, - unwantedCaps, - KErrNone); - - // Check RCall::GetCaps on call 2 supports caps in set of KCapsHangUp | KCapsVoice. - // Check RCall::GetCaps on call 2 supports caps NOT in set of KCapsAnswer | KCapsDial. - RCall::TCaps getcaps; - TUint32 expectedGetCaps=RCall::KCapsHangUp | RCall::KCapsVoice; - TUint32 unexpectedGetCaps=RCall::KCapsAnswer | RCall::KCapsDial; - ASSERT_EQUALS(incomingCall.GetCaps(getcaps), KErrNone, _L("RCall::GetCaps did not return KErrNone")); - ASSERT_BITS_SET(getcaps.iFlags, expectedGetCaps, unexpectedGetCaps, _L("RMobilePhone::GetCaps returned wrong caps")); - - // Check RMobileCall::NotifyMobileCallCapsChange on call 2 completes with iCallControlCaps in set of KCapsVoice | KCapsHangUp | KCapsJoin. - // Check RMobileCall::NotifyMobileCallCapsChange on call 2 completes with iCallEventCaps in set of KCapsLocalHold | KCapsRemoteHold | KCapsRemoteTerminate | KCapsRemoteConferenceCreate. - RMobileCall::TMobileCallCapsV1 expected; - expected.iCallControlCaps=RMobileCall::KCapsVoice | RMobileCall::KCapsHangUp | RMobileCall::KCapsJoin; - expected.iCallEventCaps=RMobileCall::KCapsLocalHold | RMobileCall::KCapsRemoteHold | RMobileCall::KCapsRemoteTerminate | RMobileCall::KCapsRemoteConferenceCreate; - TCmpRMobileCallTMobileCallCaps aMobileCallCapsV1Call2(expected, pkgType2, *this); - iCallControlTestHelper.WaitForMobileCallNotifyMobileCallCapsChange(incomingCall, - notifyMobileCallCapsChangeStatus2, - aMobileCallCapsV1Call2, - KErrNone); - - // Check RMobileCall::GetMobileCallCaps on call 2 includes iCallControlCaps in set of KCapsVoice | KCapsHangUp | KCapsJoin. - RMobileCall::TMobileCallCapsV1 getMobileCallCapsPkgType; - RMobileCall::TMobileCallCapsV1Pckg getMobileCallCapsPkgArg(getMobileCallCapsPkgType); - ASSERT_EQUALS(incomingCall.GetMobileCallCaps(getMobileCallCapsPkgArg), KErrNone, _L("RMobileCall::GetMobileCallCaps return code is not KErrNone")); - TUint32 expectedCallCaps=RMobileCall::KCapsVoice | RMobileCall::KCapsJoin | RMobileCall::KCapsHangUp; - ASSERT_BITS_SET(getMobileCallCapsPkgType.iCallControlCaps, expectedCallCaps, KNoUnwantedBits, _L("RMobilePhone::GetMobileCallCaps returned wrong caps")); - - // Check RMobileCall::GetMobileCallCaps on call 2 includes iCallEventCaps in set of KCapsRemoteHold | KCapsRemoteTerminate | KCapsRemoteConferenceCreate. - expectedCallCaps=RMobileCall::KCapsRemoteHold | RMobileCall::KCapsRemoteTerminate | RMobileCall::KCapsRemoteConferenceCreate; - ASSERT_BITS_SET(getMobileCallCapsPkgType.iCallEventCaps, expectedCallCaps, KNoUnwantedBits, _L("RMobilePhone::GetMobileCallCaps returned wrong caps")); - - // === Check call status === - - // Check RCall::NotifyStatusChange on call 2 completes with EStatusAnswering -> EStatusConnected. - RCall::TStatus expectedCallStatus; - expectedCallStatus=RCall::EStatusAnswering; - iCallControlTestHelper.WaitForCallNotifyStatusChange(incomingCall, - notifyStatusChangeStatus2, - callStatus2, - expectedCallStatus, - KErrNone); - - incomingCall.NotifyStatusChange(notifyStatusChangeStatus2, callStatus2); - - expectedCallStatus=RCall::EStatusConnected; - iCallControlTestHelper.WaitForCallNotifyStatusChange(incomingCall, - notifyStatusChangeStatus2, - callStatus2, - expectedCallStatus, - KErrNone); - - incomingCall.NotifyStatusChange(notifyStatusChangeStatus2, callStatus2); - - // Check RCall::GetStatus on call 2 returns EStatusConnected. - RCall::TStatus getStatus; - ASSERT_EQUALS(incomingCall.GetStatus(getStatus), KErrNone, _L("RMobileCall::GetStatus return code is not KErrNone")); - ASSERT_EQUALS(getStatus, RCall::EStatusConnected, _L("RMobileCall::GetStatus getStatus incorrect error")); - - // Check RMobileCall::NotifyMobileCallStatusChange on call 2 completes with EStatusAnswering -> EStatusConnected. - RMobileCall::TMobileCallStatus expectedMobileCallState; - expectedMobileCallState=RMobileCall::EStatusAnswering; - iCallControlTestHelper.WaitForMobileCallNotifyMobileCallStatusChange(incomingCall, - notifyMobileCallStatusChangeStatus2, - mobileCallState2, - expectedMobileCallState, - KErrNone); - - incomingCall.NotifyMobileCallStatusChange(notifyMobileCallStatusChangeStatus2, mobileCallState2); - - expectedMobileCallState=RMobileCall::EStatusConnected; - iCallControlTestHelper.WaitForMobileCallNotifyMobileCallStatusChange(incomingCall, - notifyMobileCallStatusChangeStatus2, - mobileCallState2, - expectedMobileCallState, - KErrNone); - - // Check RMobileCall::GetMobileCallStatus on call 2 returns status of EStatusConnected. - ASSERT_EQUALS(incomingCall.GetMobileCallStatus(getMobileCallStatus), KErrNone, _L("RMobileCall::GetMobileCallStatus return code is not KErrNone")); - ASSERT_EQUALS(getMobileCallStatus,RMobileCall::EStatusConnected, _L("RMobileCall::GetMobileCallStatus getMobileCallStatus incorrect error")); - - // Check RMobileCall::GetMobileCallStatus on call 1 returns status of EStatusHold. - ASSERT_EQUALS(mobileCall1.GetMobileCallStatus(getMobileCallStatus), KErrNone, _L("RMobileCall::GetMobileCallStatus return code is not KErrNone")); - ASSERT_EQUALS(getMobileCallStatus, RMobileCall::EStatusHold, _L("RMobileCall::GetMobileCallStatus getMobileCallStatus incorrect error")); - - // === Check call info === - - // Check RCall::GetInfo on call 2 returns valid call name. - User::After(KOneSecond*2); // So that the call duration is not 0, check later that it has a value > 0 - RCall::TCallInfo callInfo; - ASSERT_EQUALS(incomingCall.GetInfo(callInfo), KErrNone, _L("RMobileCall::GetInfo return code is not KErrNone")); - ASSERT_TRUE(callInfo.iCallName.Length()>0, _L("RMobileCall::GetInfo iCallName.Length() not greater than 0")); - - // Check RCall::GetInfo on call 2 returns valid voice line name. - ASSERT_TRUE(callInfo.iLineName.Length()>0, _L("RMobileCall::GetInfo iLineName.Length() not greater than 0")); - - // Check RCall::GetInfo on call 2 returns call status of EStatusConnected. - ASSERT_EQUALS(callInfo.iStatus, RCall::EStatusConnected, _L("RMobileCall::GetInfo iStatus incorrect error")); - - // Check RCall::GetInfo on call 2 returns call duration of > 0. - TTimeIntervalSeconds time = 0; - ASSERT_TRUE(callInfo.iDuration>time, _L("RMobileCall::GetInfo iDuration incorrect error")); - - // Check RMobileCall::GetMobileCallInfo on call 2 returns iValid > 0. - RMobileCall::TMobileCallInfoV1 getMobileCallInfoPkgType; - RMobileCall::TMobileCallInfoV1Pckg getMobileCallInfoPkgArg(getMobileCallInfoPkgType); - ASSERT_EQUALS(incomingCall.GetMobileCallInfo(getMobileCallInfoPkgArg), KErrNone, _L("RMobileCall::GetMobileCallInfo return code is not KErrNone")); - - // Check RMobileCall::GetMobileCallInfo on call 2 returns data for attributes makred as valid in iValid. - ASSERT_TRUE(getMobileCallInfoPkgType.iValid>0, _L("RMobileCall::GetMobileCallInfo iValid is not > 0")); - - // Check RMobileCall::GetMobileCallInfo on call 2 returns valid line name. - ASSERT_TRUE(getMobileCallInfoPkgType.iLineName.Length()>0, _L("RMobileCall::GetMobileCallInfo iLineName.Length() is not > 0")); - - // Hang up call 2. - ASSERT_EQUALS(incomingCall.HangUp(), KErrNone, _L("RMobileCall::HangUp return code is not KErrNone")); - - // Post notification RMobileCall::NotifyStatusChange - TCoreEtelRequestStatus notifyStatusChangeStatus(mobileCall1, &RMobileCall::NotifyStatusChangeCancel); - CleanupStack::PushL(notifyStatusChangeStatus); - RCall::TStatus callStatus; - mobileCall1.NotifyStatusChange(notifyStatusChangeStatus, callStatus); - - // Post notification RMobileCall::NotifyMobileCallStatusChange - TExtEtelRequestStatus notifyMobileCallStatusChangeStatus(mobileCall1, EMobileCallNotifyMobileCallStatusChange); - CleanupStack::PushL(notifyMobileCallStatusChangeStatus); - RMobileCall::TMobileCallStatus mobileCallState; - mobileCall1.NotifyMobileCallStatusChange(notifyMobileCallStatusChangeStatus, mobileCallState); - - // Post notification RMobileCall::NotifyCallEvent - TExtEtelRequestStatus notifyCallEventStatus(mobileCall1, EMobileCallNotifyCallEvent); - CleanupStack::PushL(notifyCallEventStatus); - RMobileCall::TMobileCallEvent mobileCallEvent; - mobileCall1.NotifyCallEvent(notifyCallEventStatus, mobileCallEvent); - - // Post notification RMobilePhone::NotifyDTMFCapsChange - TExtEtelRequestStatus notifyDTMFCapsChangeStatus(mobilePhone, EMobilePhoneNotifyDTMFCapsChange); - CleanupStack::PushL(notifyDTMFCapsChangeStatus); - TUint32 notifyDTMFCapsChangeCaps; - mobilePhone.NotifyDTMFCapsChange(notifyDTMFCapsChangeStatus, notifyDTMFCapsChangeCaps); - - // Resume call 1. - TExtEtelRequestStatus resumeStatus(mobileCall1, EMobileCallResume); - CleanupStack::PushL(resumeStatus); - - mobileCall1.Resume(resumeStatus); - - ASSERT_EQUALS(WaitForRequestWithTimeOut(resumeStatus, ETimeMedium), KErrNone, _L("RMobileCall::Resume timed-out")); - ASSERT_EQUALS(resumeStatus.Int(), KErrNone, _L("RMobileCall::Resume resumeStatus completed with incorrect error")); - - // === Check call status === - - // Check RCall::NotifyStatusChange on call 1 completes with EStatusConnected. - expectedCallStatus=RCall::EStatusConnected; - iCallControlTestHelper.WaitForCallNotifyStatusChange(mobileCall1, - notifyStatusChangeStatus, - callStatus, - expectedCallStatus, - KErrNone); - - // Check RCall::GetStatus on call 1 returns EStatusConnected. - ASSERT_EQUALS(mobileCall1.GetStatus(getStatus), KErrNone, _L("RMobileCall::GetStatus return code is not KErrNone")); - ASSERT_EQUALS(getStatus, RCall::EStatusConnected, _L("RMobileCall::GetStatus getStatus incorrect error")); - - // Check RMobileCall::NotifyMobileCallStatusChange on call 1 completes with EStatusConnected. - expectedMobileCallState=RMobileCall::EStatusConnected; - iCallControlTestHelper.WaitForMobileCallNotifyMobileCallStatusChange(mobileCall1, - notifyMobileCallStatusChangeStatus, - mobileCallState, - expectedMobileCallState, - KErrNone); - - // Check RMobileCall::GetMobileCallStatus on call 1 returns status of EStatusConnected. - ASSERT_EQUALS(mobileCall1.GetMobileCallStatus(getMobileCallStatus), KErrNone, _L("RMobileCall::GetMobileCallStatus return code is not KErrNone")); - ASSERT_EQUALS(getMobileCallStatus, RMobileCall::EStatusConnected, _L("RMobileCall::GetMobileCallStatus getMobileCallStatus incorrect error")); - - // === Check call event and DTMF caps === - - // Check RMobileCall::NotifyCallEvent on call 1 completes with ELocalResume - RMobileCall::TMobileCallEvent expectedMobileCallEvent=RMobileCall::ELocalResume; - iCallControlTestHelper.WaitForMobileCallNotifyCallEvent(mobileCall1, - notifyCallEventStatus, - mobileCallEvent, - expectedMobileCallEvent, - KErrNone); - - // Check RMobilePhone::NotifyDTMFCapsChange on call 1 completes with caps in set of KCapsSendDTMFString | KCapsSendDTMFSingleTone - TUint32 notifyDTMFCapsChangeWantedCaps=RMobilePhone::KCapsSendDTMFString | RMobilePhone::KCapsSendDTMFSingleTone; - iCallControlTestHelper.WaitForMobilePhoneNotifyDTMFCapsChange(mobilePhone, - notifyDTMFCapsChangeStatus, - notifyDTMFCapsChangeCaps, - notifyDTMFCapsChangeWantedCaps, - KNoUnwantedBits, - KErrNone); - - // Check RMobilePhone::GetDTMFCaps on call 1 returns caps in set of KCapsSendDTMFString | KCapsSendDTMFSingleTone - TUint32 getDTMFCaps; - ASSERT_EQUALS(mobilePhone.GetDTMFCaps(getDTMFCaps), KErrNone, _L("RMobilePhone::GetDTMFCaps return code is not KErrNone")); - ASSERT_BITS_SET(getDTMFCaps, notifyDTMFCapsChangeWantedCaps, KNoUnwantedBits, _L("RMobilePhone::GetDTMFCaps returned wrong caps")); - - // Hang up call 1 - ASSERT_EQUALS(mobileCall1.HangUp(), KErrNone, _L("RMobileCall::HangUp return code is not KErrNone")); - - //////////////////////////////////////////////////////////////// - // TEST END - //////////////////////////////////////////////////////////////// - - StartCleanup(); - - // dialStatus - // holdStatus - // notifyIncomingCallStatus - // notifyCapsChangeStatus2 - // notifyMobileCallCapsChangeStatus2 - // notifyStatusChangeStatus2 - // notifyMobileCallStatusChangeStatus2 - // answerIncomingStatus - // notifyStatusChangeStatus - // notifyMobileCallStatusChangeStatus - // notifyCallEventStatus - // notifyDTMFCapsChangeStatus - // resumeStatus - CleanupStack::PopAndDestroy(13, &dialStatus); - - - return TestStepResult(); - } - -TPtrC CCTSYIntegrationTestCallControl0027::GetTestStepName() -/** - * @return The test step name. - */ - { - return _L("CCTSYIntegrationTestCallControl0027"); - } - - - -CCTSYIntegrationTestCallControl0028::CCTSYIntegrationTestCallControl0028(CEtelSessionMgr& aEtelSessionMgr) - : CCTSYIntegrationTestCallControlBase(aEtelSessionMgr) -/** - * Constructor. - */ - { - SetTestStepName(CCTSYIntegrationTestCallControl0028::GetTestStepName()); - } - -CCTSYIntegrationTestCallControl0028::~CCTSYIntegrationTestCallControl0028() -/** - * Destructor. - */ - { - } - -TVerdict CCTSYIntegrationTestCallControl0028::doTestStepL() -/** - * @SYMTestCaseID BA-CTSY-INT-CCON-0028 - * @SYMFssID BA/CTSY/CCON-0028 - * @SYMTestCaseDesc Hold call which remote party then hangs up. - * @SYMTestPriority High - * @SYMTestActions RCall::NotifyStatusChange, RMobileCall::NotifyMobileCallStatusChange, RLine::NotifyStatusChange, RMobileLine::GetMobileLineStatus, RMobileLine::NotifyMobileLineStatusChange, RLine::GetStatus, RMobileCall::GetMobileCallStatus, RMobileCall::NotifyCallEvent, RCall::GetStatus - * @SYMTestExpectedResults Pass - Calls can be held and resumed. - * @SYMTestType CIT - * @SYMTestCaseDependencies live/automatic - * - * Reason for test: Verify call and line status are correct and call event completes. - * - * @return - TVerdict code - */ - { - - //////////////////////////////////////////////////////////////// - // SET UP - //////////////////////////////////////////////////////////////// - - - // Call TNetworkTsyTestHelper::WaitForRegisteredOnHomeNetworkL - RMobilePhone& phone = iEtelSessionMgr.GetPhoneL(KMainServer, KMainPhone); - CHECK_EQUALS_L(iNetworkTestHelper.WaitForRegisteredOnHomeNetworkL(phone), KErrNone, - _L("TNetworkTsyTestHelper::WaitForRegisteredOnHomeNetworkL returned with an error")); - - // Check phone supports KCapsVoice. - RMobilePhone::TCaps caps; - CHECK_EQUALS_L(phone.GetCaps(caps), KErrNone, _L("RMobilePhone::GetCaps returned with an error.")); - CHECK_BITS_SET_L(caps.iFlags, RMobilePhone::KCapsVoice, KNoUnwantedBits, _L("RMobilePhone::GetCaps returned wrong caps.")); - - // Get Voice line 1. - RMobileLine& mobileLine1=iEtelSessionMgr.GetLineL(KMainServer, KMainPhone, KVoiceLine); - - // Get call 1. - RMobileCall& mobileCall1=iEtelSessionMgr.GetCallL(KMainServer, KMainPhone, KVoiceLine, KCall1); - - // Dial RPS which answers. - TCoreEtelRequestStatus dialStatus(mobileCall1, &RCall::DialCancel); - CleanupStack::PushL(dialStatus); - TPtrC rpsNumber; - GetRPSNumber(EVoiceLine, rpsNumber); - CHECK_EQUALS_L(RPSAnswerNextCallL(EVoiceLine), KErrNone, _L("CCTSYIntegrationTestSuiteStepBase::RPSAnswerNextCallL returned with an error")); - mobileCall1.Dial(dialStatus, rpsNumber); - CHECK_EQUALS_L(WaitForRequestWithTimeOut(dialStatus, ETimeMedium), KErrNone, _L("RCall::Dial timed-out")); - CHECK_EQUALS_L(dialStatus.Int(), KErrNone, _L("RCall::Dial returned an error")); - - - //////////////////////////////////////////////////////////////// - // SET UP END - //////////////////////////////////////////////////////////////// - - StartTest(); - - //////////////////////////////////////////////////////////////// - // TEST START - //////////////////////////////////////////////////////////////// - - - // Post notifier for RMobileCall::NotifyCallEvent - TExtEtelRequestStatus notifyCallEventStatus(mobileCall1, EMobileCallNotifyCallEvent); - CleanupStack::PushL(notifyCallEventStatus); - RMobileCall::TMobileCallEvent mobileCallEvent; - mobileCall1.NotifyCallEvent(notifyCallEventStatus, mobileCallEvent); - - // Post notifier for RMobileCall::NotifyMobileCallStatusChange - TExtEtelRequestStatus notifyMobileCallStatusChangeStatus(mobileCall1, EMobileCallNotifyMobileCallStatusChange); - CleanupStack::PushL(notifyMobileCallStatusChangeStatus); - RMobileCall::TMobileCallStatus mobileCallStatus; - mobileCall1.NotifyMobileCallStatusChange(notifyMobileCallStatusChangeStatus, mobileCallStatus); - - // Hold call 1. - TExtEtelRequestStatus holdStatus(mobileCall1, EMobileCallHold); - CleanupStack::PushL(holdStatus); - mobileCall1.Hold(holdStatus); - ASSERT_EQUALS(WaitForRequestWithTimeOut(holdStatus, ETimeMedium),KErrNone, _L("RMobileCall::Hold timed out")); - ASSERT_EQUALS(holdStatus.Int(), KErrNone, _L("RMobileCall::Hold returned with an error")); - - // Check RMobileCall::NotifyCallEvent completes with ELocalHold - TInt wantedStatus = KErrNone; - RMobileCall::TMobileCallEvent expectedMobileCallEvent = RMobileCall::ELocalHold; - iCallControlTestHelper.WaitForMobileCallNotifyCallEvent( - mobileCall1, - notifyCallEventStatus, - mobileCallEvent, - expectedMobileCallEvent, - wantedStatus); - - // Check RMobileCall::NotifyMobileCallStatusChange completes with EStatusHold - RMobileCall::TMobileCallStatus expectedMobileCallStatus = RMobileCall::EStatusHold; - iCallControlTestHelper.WaitForMobileCallNotifyMobileCallStatusChange(mobileCall1, - notifyMobileCallStatusChangeStatus, - mobileCallStatus, - expectedMobileCallStatus, - wantedStatus); - - // Check RMobileCall::GetMobileCallStatus completes with EStatusHold - ASSERT_EQUALS(mobileCall1.GetMobileCallStatus(mobileCallStatus), KErrNone, _L("RMobileCall::GetMobileCallStatus returned an error")); - ASSERT_EQUALS(mobileCallStatus, RMobileCall::EStatusHold, _L("RMobileCall::GetMobileCallStatus did not return EStatusHold as expected")); - - // Post notifier for RCall::NotifyStatusChange - RCall::TStatus callStatus; - TCoreEtelRequestStatus notifyCallStatusChangeStatus(mobileCall1, &RCall::NotifyStatusChangeCancel); - CleanupStack::PushL(notifyCallStatusChangeStatus); - mobileCall1.NotifyStatusChange(notifyCallStatusChangeStatus, callStatus); - - // Post notifier for RLine::NotifyStatusChange - TCoreEtelRequestStatus notifyStatusChangeStatus(mobileLine1, &RLine::NotifyStatusChangeCancel); - CleanupStack::PushL(notifyStatusChangeStatus); - RCall::TStatus lineStatus; - mobileLine1.NotifyStatusChange(notifyStatusChangeStatus, lineStatus); - - // Post notifier for RLine::NotifyMobileLineStatusChange - TExtEtelRequestStatus notifyMobileLineChangeStatus(mobileLine1, EMobileLineNotifyMobileLineStatusChange); - CleanupStack::PushL(notifyMobileLineChangeStatus); - RMobileCall::TMobileCallStatus mobileLineStatus; - mobileLine1.NotifyMobileLineStatusChange(notifyMobileLineChangeStatus, mobileLineStatus); - - // repost notifier for RMobileCall::NotifyCallEvent - mobileCall1.NotifyCallEvent(notifyCallEventStatus, mobileCallEvent); - - // repost a notifier for RMobileCall::NotifyMobileCallStatusChange - mobileCall1.NotifyMobileCallStatusChange(notifyMobileCallStatusChangeStatus, mobileCallStatus); - - // RPS hangs up the call. - ASSERT_EQUALS(RPSHangupL(EVoiceLine, ETimeShort), KErrNone, _L("CCTSYIntegrationTestSuiteStepBase::RPSHangup returned an error")); - - // Check RMobileCall::NotifyCallEvent completes with ERemoteTerminated - expectedMobileCallEvent = RMobileCall::ERemoteTerminated; - iCallControlTestHelper.WaitForMobileCallNotifyCallEvent( - mobileCall1, - notifyCallEventStatus, - mobileCallEvent, - expectedMobileCallEvent, - wantedStatus); - - // Check RCall::NotifyStatusChange completes with EStatusIdle. - RCall::TStatus expectedCallStatus = RCall::EStatusIdle; - iCallControlTestHelper.WaitForCallNotifyStatusChange(mobileCall1, - notifyCallStatusChangeStatus, - callStatus, - expectedCallStatus, - wantedStatus); - - // Check RCall::GetStatus returns EStatusIdle. - ASSERT_EQUALS(mobileCall1.GetStatus(callStatus),KErrNone, _L("RCall::GetStatus returned an error")); - ASSERT_EQUALS(callStatus, RCall::EStatusIdle, _L("RCall::GetStatus did not return EStatusIdle as expected")); - - // Check RMobileCall::NotifyMobileCallStatusChange completes with EStatusIdle - expectedMobileCallStatus = RMobileCall::EStatusIdle; - iCallControlTestHelper.WaitForMobileCallNotifyMobileCallStatusChange(mobileCall1, - notifyMobileCallStatusChangeStatus, - mobileCallStatus, - expectedMobileCallStatus, - wantedStatus); - - // Check RMobileCall::GetMobileCallStatus completes with EStatusIdle - ASSERT_EQUALS(mobileCall1.GetMobileCallStatus(mobileCallStatus), KErrNone, _L("RMobileCall::GetMobileStatus returned an error")); - ASSERT_EQUALS(mobileCallStatus, RMobileCall::EStatusIdle, _L("RMobileCall::GetMobileStatus did not return EStatusIdle as expected")); - - // Check RLine::NotifyStatusChange completes with EStatusIdle - RCall::TStatus expectedLineStatus = RCall::EStatusIdle; - iCallControlTestHelper.WaitForLineNotifyStatusChange(mobileLine1, - notifyStatusChangeStatus, - lineStatus, - expectedLineStatus, - wantedStatus); - - // Check RLine::GetStatus returns EStatusIdle - ASSERT_EQUALS(mobileLine1.GetStatus(callStatus), KErrNone, _L("RLine::GetStatus returned with an error")); - ASSERT_EQUALS(callStatus, RCall::EStatusIdle, _L("RLine::GetStatus did not return EStatusIdle as expected")); - - // Check RMobileLine::NotifyMobileLineStatusChange completes with EStatusIdle; - RMobileCall::TMobileCallStatus expectedMobileLineStatus = RMobileCall::EStatusIdle; - iCallControlTestHelper.WaitForMobileLineNotifyMobileLineStatusChange(mobileLine1, - notifyMobileLineChangeStatus, - mobileLineStatus, - expectedMobileLineStatus, - wantedStatus); - - // Check RMobileLine::GetMobileLineStatus returns EStatusIdle - ASSERT_EQUALS(mobileLine1.GetMobileLineStatus(mobileLineStatus), KErrNone, _L("RMobileLine::GetMobileLineStatus returned with an error")); - ASSERT_EQUALS(mobileLineStatus, RMobileCall::EStatusIdle, _L("RMobileLine::GetMobileLineStatus did not return EStatusIdle as expected")); - - - //////////////////////////////////////////////////////////////// - // TEST END - //////////////////////////////////////////////////////////////// - - StartCleanup(); - - // Pop - // dialStatus - // notifyCallEventStatus - // notifyMobileCallStatusChangeStatus - // holdStatus - // notifyCallStatusChangeStatus - // notifyStatusChangeStatus - // notifyMobileLineChangeStatus - CleanupStack::PopAndDestroy(7, &dialStatus); - - return TestStepResult(); - } - -TPtrC CCTSYIntegrationTestCallControl0028::GetTestStepName() -/** - * @return The test step name. - */ - { - return _L("CCTSYIntegrationTestCallControl0028"); - } - - - -CCTSYIntegrationTestCallControl0029::CCTSYIntegrationTestCallControl0029(CEtelSessionMgr& aEtelSessionMgr) - : CCTSYIntegrationTestCallControlBase(aEtelSessionMgr) -/** - * Constructor. - */ - { - SetTestStepName(CCTSYIntegrationTestCallControl0029::GetTestStepName()); - } - -CCTSYIntegrationTestCallControl0029::~CCTSYIntegrationTestCallControl0029() -/** - * Destructor. - */ - { - } - -TVerdict CCTSYIntegrationTestCallControl0029::doTestStepL() -/** - * @SYMTestCaseID BA-CTSY-INT-CCON-0029 - * @SYMFssID BA/CTSY/CCON-0029 - * @SYMTestCaseDesc Resume held call but remote party hangs up before resume complete. - * @SYMTestPriority High - * @SYMTestActions RMobileCall::NotifyMobileCallStatusChange, RLine::NotifyStatusChange, RMobileLine::GetMobileLineStatus, RMobileLine::NotifyMobileLineStatusChange, RLine::GetStatus, RMobileCall::GetMobileCallStatus, RMobileCall::NotifyCallEvent, RCall::GetStatus, RMobileCall::Hold, RMobileCall::Resume - * @SYMTestExpectedResults Pass - Call ends when remote party hangs up. - * @SYMTestType CIT - * @SYMTestCaseDependencies live/manual - * - * Reason for test: Verify call and line status are correct and call event completes. - * - * @return - TVerdict code - */ - { - - //////////////////////////////////////////////////////////////// - // SET UP - //////////////////////////////////////////////////////////////// - - // Call TNetworkTsyTestHelper::WaitForRegisteredOnHomeNetworkL - RMobilePhone& phone = iEtelSessionMgr.GetPhoneL(KMainServer,KMainPhone); - CHECK_EQUALS_L(iNetworkTestHelper.WaitForRegisteredOnHomeNetworkL(phone), KErrNone, - _L("TNetworkTsyTestHelper::WaitForRegisteredOnHomeNetworkL returned with an error")); - - // Check phone supports KCapsVoice. - RMobilePhone::TCaps caps; - CHECK_EQUALS_L(phone.GetCaps(caps), KErrNone, _L("RMobilePhone::GetCaps return value is not KErrNone")); - CHECK_BITS_SET_L(caps.iFlags, RMobilePhone::KCapsVoice, KNoUnwantedBits, _L("RMobilePhone::GetCaps returned wrong caps")); - - // Get Voice line 1. - RMobileLine& voiceLine = iEtelSessionMgr.GetLineL(KMainServer, KMainPhone, KVoiceLine); - - // Get call 1. - RMobileCall& call1 = iEtelSessionMgr.GetCallL(KMainServer, KMainPhone, KVoiceLine, KCall1); - - //////////////////////////////////////////////////////////////// - // SET UP END - //////////////////////////////////////////////////////////////// - - StartTest(); - - //////////////////////////////////////////////////////////////// - // TEST START - //////////////////////////////////////////////////////////////// - - // Dial a number. Tester should answer the call. - TPtrC number; - ASSERT_TRUE(GetStringFromConfig(KIniVoiceNumSection, KIniVoiceNumber1, number) != EFalse, - _L("GetStringFromConfig did not complete as expected")); - TCoreEtelRequestStatus dialStatus(call1, &RCall::DialCancel); - CleanupStack::PushL(dialStatus); - DEBUG_PRINTF1(_L("Board Now Dialling...")); - call1.Dial(dialStatus, number); - ASSERT_EQUALS(WaitForRequestWithTimeOut(dialStatus, ETimeMedium), KErrNone, _L("RCall::Dial timed-out")); - ASSERT_EQUALS(dialStatus.Int(), KErrNone, _L("RCall::Dial returned with an error")); - - // Post notifier for RMobileCall::NotifyCallEvent - TExtEtelRequestStatus notifyCallEventStatus(call1, EMobileCallNotifyCallEvent); - CleanupStack::PushL(notifyCallEventStatus); - RMobileCall::TMobileCallEvent mobileCallEvent; - call1.NotifyCallEvent(notifyCallEventStatus, mobileCallEvent); - - // post a notifier for RMobileCall::NotifyMobileCallStatusChange - RMobileCall::TMobileCallStatus mobileCallStatus; - TExtEtelRequestStatus notifyMobileCallChangeStatus(call1, EMobileCallNotifyMobileCallStatusChange); - CleanupStack::PushL(notifyMobileCallChangeStatus); - call1.NotifyMobileCallStatusChange(notifyMobileCallChangeStatus, mobileCallStatus); - - // Hold call 1 - TExtEtelRequestStatus holdStatus (call1,EMobileCallHold); - CleanupStack::PushL(holdStatus); - call1.Hold(holdStatus); - ASSERT_EQUALS(WaitForRequestWithTimeOut(holdStatus, ETimeMedium), KErrNone, _L("RMobileCall::Hold timed-out")); - ASSERT_EQUALS(dialStatus.Int(), KErrNone, _L("RMobileCall::Hold returned an error")); - - // Check RMobileCall::NotifyCallEvent completes with ELocalHold - RMobileCall::TMobileCallEvent expectedMobileCallEvent = RMobileCall::ELocalHold; - iCallControlTestHelper.WaitForMobileCallNotifyCallEvent( - call1, - notifyCallEventStatus, - mobileCallEvent, - expectedMobileCallEvent, - KErrNone); - - // Check RMobileCall::NotifyMobileCallStatusChange completes with EStatusHold - RMobileCall::TMobileCallStatus expectedMobileCallStatus = RMobileCall::EStatusHold; - iCallControlTestHelper.WaitForMobileCallNotifyMobileCallStatusChange( - call1, - notifyMobileCallChangeStatus, - mobileCallStatus, - expectedMobileCallStatus, - KErrNone); - - // Check RMobileCall::GetMobileCallStatus completes with EStatusHold - ASSERT_EQUALS(call1.GetMobileCallStatus(mobileCallStatus), KErrNone, _L("RMobileCall::GetMobileCallStatus returned an error")); - ASSERT_EQUALS(mobileCallStatus, RMobileCall::EStatusHold, _L("RMobileCall::GetMobileCallStatus did not return EStatusHold")); - - // post notifier for RLine::NotifyStatusChange - TCoreEtelRequestStatus notifyStatusChangeStatus (voiceLine,&RLine::NotifyStatusChangeCancel); - CleanupStack::PushL(notifyStatusChangeStatus); - RCall::TStatus lineStatus; - voiceLine.NotifyStatusChange(notifyStatusChangeStatus,lineStatus); - - // post a notifier for RMobileLine::NotifyMobileLineStatusChange - TExtEtelRequestStatus notifyMobileLineChangeStatus(voiceLine, EMobileLineNotifyMobileLineStatusChange); - CleanupStack::PushL(notifyMobileLineChangeStatus); - RMobileCall::TMobileCallStatus mobileLineStatus; - voiceLine.NotifyMobileLineStatusChange(notifyMobileLineChangeStatus, mobileLineStatus); - - // post notifier for RCall::NotifyStatusChange - RCall::TStatus callStatus; - TCoreEtelRequestStatus notifyCallStatusChangeStatus (call1,&RCall::NotifyStatusChangeCancel); - CleanupStack::PushL(notifyCallStatusChangeStatus); - call1.NotifyStatusChange(notifyCallStatusChangeStatus,callStatus); - - // repost notifier for RMobileCall::NotifyCallEvent - call1.NotifyCallEvent(notifyCallEventStatus, mobileCallEvent); - - // repost a notifier for RMobileCall::NotifyMobileCallStatusChange - call1.NotifyMobileCallStatusChange(notifyMobileCallChangeStatus, mobileCallStatus); - - // Resume call 1. Tester should hang up the call before Resume completes. - DisplayUserInteractionPromptL(_L("Remote party should hang up the call now."), ETimeLong); - TExtEtelRequestStatus resumeStatus(call1, EMobileCallResume); - CleanupStack::PushL(resumeStatus); - call1.Resume(resumeStatus); - ASSERT_EQUALS(WaitForRequestWithTimeOut(resumeStatus, ETimeMedium), KErrNone, _L("RMobileCall::Resume timed-out")); - ASSERT_TRUE(resumeStatus.Int() != KErrNone, _L("RMobileCall::Resume did not return error code as expected.")); - - // Check RMobileCall::NotifyCallEvent completes with ERemoteTerminated - expectedMobileCallEvent = RMobileCall::ERemoteTerminated; - iCallControlTestHelper.WaitForMobileCallNotifyCallEvent( - call1, - notifyCallEventStatus, - mobileCallEvent, - expectedMobileCallEvent, - KErrNone); - - // Check RCall::NotifyStatusChange completes with EStatusIdle. - RCall::TStatus expectedCallStatus = RCall::EStatusIdle; - iCallControlTestHelper.WaitForCallNotifyStatusChange(call1, - notifyCallStatusChangeStatus, - callStatus, - expectedCallStatus, - KErrNone); - - // Check RCall::GetStatus returns EStatusIdle. - ASSERT_EQUALS(call1.GetStatus(callStatus), KErrNone, _L("RCall::GetStatus returned an Error")); - ASSERT_EQUALS(callStatus, RCall::EStatusIdle, _L("RCall::GetStatus did not return EStatusIdle")); - - // Check RMobileCall::NotifyMobileCallStatusChange completes with EStatusIdle - expectedMobileCallStatus = RMobileCall::EStatusIdle; - iCallControlTestHelper.WaitForMobileCallNotifyMobileCallStatusChange(call1, - notifyMobileCallChangeStatus, - mobileCallStatus, - expectedMobileCallStatus, - KErrNone); - - // Check RMobileCall::GetMobileCallStatus completes with EStatusIdle - ASSERT_EQUALS(call1.GetMobileCallStatus(mobileCallStatus), KErrNone, _L("RMobileCall::GetMobileCallStatus returned an error")); - ASSERT_EQUALS(mobileCallStatus, RMobileCall::EStatusIdle, _L("RMobileCall::GetMobileCallStatus did not return EStatusIdle")); - - // Check RLine::NotifyStatusChange completes with EStatusIdle - RCall::TStatus expectedLineStatus = RCall::EStatusIdle; - iCallControlTestHelper.WaitForLineNotifyStatusChange(voiceLine, - notifyStatusChangeStatus, - lineStatus, - expectedLineStatus, - KErrNone); - - // Check RLine::GetStatus returns EStatusIdle - ASSERT_EQUALS(voiceLine.GetStatus(lineStatus), KErrNone, _L("RLine::GetStatus returned an error")); - ASSERT_EQUALS(lineStatus, RCall::EStatusIdle, _L("RLine::GetStatus did not return EStatusConnected as expected")); - - // Check RMobileLine::NotifyMobileLineStatusChange completes with EStatusIdle - RMobileCall::TMobileCallStatus expectedMobileLineStatus = RMobileCall::EStatusIdle; - iCallControlTestHelper.WaitForMobileLineNotifyMobileLineStatusChange(voiceLine, - notifyMobileLineChangeStatus, - mobileLineStatus, - expectedMobileLineStatus, - KErrNone); - - // Check RMobileLine::GetMobileLineStatus returns EStatusIdle - ASSERT_EQUALS(voiceLine.GetMobileLineStatus(mobileLineStatus), KErrNone, _L("RMobileLine::GetMobileLineStatus returned an error")); - ASSERT_EQUALS(mobileLineStatus, RMobileCall::EStatusIdle, _L("RMobileLine::GetMobileLineStatus did not set line status to EStatusIdle")); - - //////////////////////////////////////////////////////////////// - // TEST END - //////////////////////////////////////////////////////////////// - - StartCleanup(); - - // dialStatus - // notifyCallEventStatus - // notifyCallStatusChangeStatus - // notifyMobileCallChangeStatus - // notifyStatusChangeStatus - // notifyMobileLineChangeStatus - // holdStatus - // resumeStatus - CleanupStack::PopAndDestroy(8, &dialStatus); - - return TestStepResult(); - } - -TPtrC CCTSYIntegrationTestCallControl0029::GetTestStepName() -/** - * @return The test step name. - */ - { - return _L("CCTSYIntegrationTestCallControl0029"); - } - - - -CCTSYIntegrationTestCallControl0030::CCTSYIntegrationTestCallControl0030(CEtelSessionMgr& aEtelSessionMgr) - : CCTSYIntegrationTestCallControlBase(aEtelSessionMgr) -/** - * Constructor. - */ - { - SetTestStepName(CCTSYIntegrationTestCallControl0030::GetTestStepName()); - } - -CCTSYIntegrationTestCallControl0030::~CCTSYIntegrationTestCallControl0030() -/** - * Destructor. - */ - { - } - -TVerdict CCTSYIntegrationTestCallControl0030::doTestStepL() -/** - * @SYMTestCaseID BA-CTSY-INT-CCON-0030 - * @SYMFssID BA/CTSY/CCON-0030 - * @SYMTestCaseDesc Hold a call then make and hang up another call. - * @SYMTestPriority High - * @SYMTestActions RCall::NotifyStatusChange, RMobileCall::GetMobileCallStatus, RMobileCall::NotifyCallEvent, RCall::GetStatus, RCall::Dial, RCall::HangUp, RMobileCall::Resume - * @SYMTestExpectedResults Pass - Call 1 resumed successfully. - * @SYMTestType CIT - * @SYMTestCaseDependencies live/automatic - * - * Reason for test: Verify call status and call event is correct. - * - * @return - TVerdict code - */ - { - - //////////////////////////////////////////////////////////////// - // SET UP - //////////////////////////////////////////////////////////////// - - - // Call TNetworkTsyTestHelper::WaitForRegisteredOnHomeNetworkL - RMobilePhone& phone = iEtelSessionMgr.GetPhoneL(KMainServer,KMainPhone); - CHECK_EQUALS_L(iNetworkTestHelper.WaitForRegisteredOnHomeNetworkL(phone), KErrNone, - _L("TNetworkTsyTestHelper::WaitForRegisteredOnHomeNetworkL returned with an error")); - - // Check phone supports KCapsVoice. - RMobilePhone::TCaps caps; - CHECK_EQUALS_L(phone.GetCaps(caps), KErrNone, _L("RMobilePhone::GetCaps return value is not KErrNone")); - CHECK_BITS_SET_L(caps.iFlags, RMobilePhone::KCapsVoice, KNoUnwantedBits, _L("RMobilePhone::GetCaps returned wrong caps")); - - // Get Voice line 1. - RMobileLine& voiceLine=iEtelSessionMgr.GetLineL(KMainServer, KMainPhone, KVoiceLine); - - // Get call 1. - RMobileCall& call1=iEtelSessionMgr.GetCallL(KMainServer, KMainPhone, KVoiceLine, KCall1); - - // Dial a number that answers on call 1. - TPtrC number; - CHECK_TRUE_L(GetStringFromConfig(KIniVoiceNumSection, KIniVoiceNumber1, number) != EFalse, _L("GetStringFromConfig did not complete as expected")); - DEBUG_PRINTF1(_L("Board Now Dialling: ")); - TCoreEtelRequestStatus dialStatus(call1, &RCall::DialCancel); - CleanupStack::PushL(dialStatus); - call1.Dial(dialStatus, number); - CHECK_EQUALS_L(WaitForRequestWithTimeOut(dialStatus, ETimeLong), KErrNone, _L("RCall::Dial timed-out")); - CHECK_EQUALS_L(dialStatus.Int(), KErrNone, _L("RCall::Dial returned with an error")); - - // Hold call 1. - TExtEtelRequestStatus holdStatus(call1, EMobileCallHold); - CleanupStack::PushL(holdStatus); - call1.Hold(holdStatus); - CHECK_EQUALS_L(WaitForRequestWithTimeOut(holdStatus, ETimeMedium),KErrNone, _L("RMobileCall::Hold timed out")); - CHECK_EQUALS_L(holdStatus.Int(), KErrNone, _L("RMobileCall::Hold returned with an error")); - - // Get call 2. - RMobileCall& call2 = iEtelSessionMgr.GetCallL(KMainServer, KMainPhone, KVoiceLine, KCall2); - - - //////////////////////////////////////////////////////////////// - // SET UP END - //////////////////////////////////////////////////////////////// - - StartTest(); - - //////////////////////////////////////////////////////////////// - // TEST START - //////////////////////////////////////////////////////////////// - - - // Post notifier for RCall::NotifyStatusChange for call 2 - RCall::TStatus callStatus2; - TCoreEtelRequestStatus notifyStatusChangeStatus2(call2, &RCall::NotifyStatusChangeCancel); - CleanupStack::PushL(notifyStatusChangeStatus2); - call2.NotifyStatusChange(notifyStatusChangeStatus2, callStatus2); - - // Post notification RMobileCall::NotifyMobileCallStatusChange for call 2 - TExtEtelRequestStatus notifyMobileCallStatusChangeStatus2(call2, EMobileCallNotifyMobileCallStatusChange); - CleanupStack::PushL(notifyMobileCallStatusChangeStatus2); - RMobileCall::TMobileCallStatus mobileCallStatus2; - call2.NotifyMobileCallStatusChange(notifyMobileCallStatusChangeStatus2, mobileCallStatus2); - - // Dial a RPS on call 2. - TCoreEtelRequestStatus dialStatus2(call2, &RCall::DialCancel); - CleanupStack::PushL(dialStatus2); - TPtrC rpsNumber; - GetRPSNumber(EVoiceLine, rpsNumber); - ASSERT_EQUALS(RPSAnswerNextCallL(EVoiceLine), KErrNone, _L("CCTSYIntegrationTestSuiteStepBase::RPSAnswerNextCallL")); - call2.Dial(dialStatus2, rpsNumber); - ASSERT_EQUALS(WaitForRequestWithTimeOut(dialStatus2, ETimeMedium), KErrNone, _L("RCall::Dial timed-out")); - ASSERT_EQUALS(dialStatus2.Int(), KErrNone, _L("RCall::Dial returned an error")); - - // === Check call status === - - // Check RCall::NotifyStatusChange for call 2 completes with EStatusDialling -> EStatusConnecting -> EStatusConnected. - const TInt wantedStatus = KErrNone; - RCall::TStatus expectedCallStatus2 = RCall::EStatusDialling; - iCallControlTestHelper.WaitForCallNotifyStatusChange(call2, - notifyStatusChangeStatus2, - callStatus2, - expectedCallStatus2, - wantedStatus); - - call2.NotifyStatusChange(notifyStatusChangeStatus2, callStatus2); - expectedCallStatus2 = RCall::EStatusConnecting; - iCallControlTestHelper.WaitForCallNotifyStatusChange(call2, - notifyStatusChangeStatus2, - callStatus2, - expectedCallStatus2, - wantedStatus); - - call2.NotifyStatusChange(notifyStatusChangeStatus2, callStatus2); - expectedCallStatus2 = RCall::EStatusConnected; - iCallControlTestHelper.WaitForCallNotifyStatusChange(call2, - notifyStatusChangeStatus2, - callStatus2, - expectedCallStatus2, - wantedStatus); - - // Check RCall::GetStatus for call 2 returns EStatusConnected. - ASSERT_EQUALS(call2.GetStatus(callStatus2), KErrNone, _L("RCall::GetStatus returned an Error")); - ASSERT_EQUALS(callStatus2, RCall::EStatusConnected, _L("RCall::GetStatus did not return EStatusConnected")); - - // Check RMobileCall::NotifyMobileCallStatusChange for call 2 completes with EStatusDialling->EStatusConnecting->EStatusConnected - RMobileCall::TMobileCallStatus expectedMobileCallStatus2 = RMobileCall::EStatusDialling; - iCallControlTestHelper.WaitForMobileCallNotifyMobileCallStatusChange(call2, - notifyMobileCallStatusChangeStatus2, - mobileCallStatus2, - expectedMobileCallStatus2, - wantedStatus); - - call2.NotifyMobileCallStatusChange(notifyMobileCallStatusChangeStatus2, mobileCallStatus2); - expectedMobileCallStatus2 = RMobileCall::EStatusConnecting; - iCallControlTestHelper.WaitForMobileCallNotifyMobileCallStatusChange(call2, - notifyMobileCallStatusChangeStatus2, - mobileCallStatus2, - expectedMobileCallStatus2, - wantedStatus); - - call2.NotifyMobileCallStatusChange(notifyMobileCallStatusChangeStatus2, mobileCallStatus2); - expectedMobileCallStatus2 = RMobileCall::EStatusConnected; - iCallControlTestHelper.WaitForMobileCallNotifyMobileCallStatusChange(call2, - notifyMobileCallStatusChangeStatus2, - mobileCallStatus2, - expectedMobileCallStatus2, - wantedStatus); - - // Check RMobileCall::GetMobileCallStatus for call 2 returns EStatusConnected - ASSERT_EQUALS(call2.GetMobileCallStatus(mobileCallStatus2), KErrNone, _L("RMobileCall::GetMobileCallStatus returned an error")); - ASSERT_EQUALS(mobileCallStatus2, RMobileCall::EStatusConnected, _L("RMobileCall::GetMobileCallStatus did not return a status EStatusConnected")); - - // Post notifier for RMobileCall::NotifyCallEvent for call 2 - TExtEtelRequestStatus notifyCallEventStatus2(call2, EMobileCallNotifyCallEvent); - CleanupStack::PushL(notifyCallEventStatus2); - RMobileCall::TMobileCallEvent mobileCallEvent2; - call2.NotifyCallEvent(notifyCallEventStatus2, mobileCallEvent2); - - // RPS hangs up call 2. - ASSERT_EQUALS(RPSHangupL(EVoiceLine,0), KErrNone, _L("CCTSYIntegrationTestSuiteStepBase::RPSHangup returned an error")); - - // Check RMobileCall::NotifyCallEvent for call 2 completes with ERemoteTerminated - RMobileCall::TMobileCallEvent expectedMobileCallEvent2 = RMobileCall::ERemoteTerminated; - iCallControlTestHelper.WaitForMobileCallNotifyCallEvent( - call2, - notifyCallEventStatus2, - mobileCallEvent2, - expectedMobileCallEvent2, - wantedStatus); - - // === Check call statuses === - - // Check RCall::NotifyStatusChange for call 2 completes with EStatusIdle - expectedCallStatus2 = RCall::EStatusIdle; - call2.NotifyStatusChange(notifyStatusChangeStatus2, callStatus2); - iCallControlTestHelper.WaitForCallNotifyStatusChange(call2, - notifyStatusChangeStatus2, - callStatus2, - expectedCallStatus2, - wantedStatus); - - // Check RCall::GetStatus for call 2 returns EStatusIdle - ASSERT_EQUALS(call2.GetStatus(callStatus2), KErrNone, _L("RCall::GetStatus returned an Error")); - ASSERT_EQUALS(callStatus2, RCall::EStatusIdle, _L("RCall::GetStatus did not return EStatusIdle")); - - // Check RMobileCall::NotifyMobileCallStatusChange for call 2 completes with EStatusIdle - call2.NotifyMobileCallStatusChange(notifyMobileCallStatusChangeStatus2, mobileCallStatus2); - expectedMobileCallStatus2 = RMobileCall::EStatusIdle; - iCallControlTestHelper.WaitForMobileCallNotifyMobileCallStatusChange(call2, - notifyMobileCallStatusChangeStatus2, - mobileCallStatus2, - expectedMobileCallStatus2, - wantedStatus); - - // Check RMobileCall::GetMobileCallStatus for call 2 returns EStatusIdle - ASSERT_EQUALS(call2.GetMobileCallStatus(mobileCallStatus2), KErrNone, _L("RMobileCall::GetMobileCallStatus returned an error")); - ASSERT_EQUALS(mobileCallStatus2, RMobileCall::EStatusIdle, _L("RMobileCall::GetMobileCallStatus did not return a status EStatusIdle")); - - - // Check RMobileCall::GetMobileCallStatus for call 1 returns EStatusHold - RMobileCall::TMobileCallStatus mobileCallStatus; - ASSERT_EQUALS(call1.GetMobileCallStatus(mobileCallStatus), KErrNone, _L("RMobileCall::GetMobileCallStatus returned an error")); - ASSERT_EQUALS(mobileCallStatus, RMobileCall::EStatusHold, _L("RMobileCall::GetMobileCallStatus did not return a status EStatusHold")); - - // Post notifier for RMobileCall::NotifyCallEvent for call 1 - TExtEtelRequestStatus notifyCallEventStatus(call1, EMobileCallNotifyCallEvent); - CleanupStack::PushL(notifyCallEventStatus); - RMobileCall::TMobileCallEvent mobileCallEvent; - call1.NotifyCallEvent(notifyCallEventStatus, mobileCallEvent); - - - // Post notification RMobileCall::NotifyMobileCallStatusChange for call 1 - TExtEtelRequestStatus notifyMobileCallStatusChangeStatus(call1, EMobileCallNotifyMobileCallStatusChange); - CleanupStack::PushL(notifyMobileCallStatusChangeStatus); - call1.NotifyMobileCallStatusChange(notifyMobileCallStatusChangeStatus, mobileCallStatus); - - // Resume call 1. - TExtEtelRequestStatus resumeStatus(call1, EMobileCallResume); - CleanupStack::PushL(resumeStatus); - call1.Resume(resumeStatus); - ASSERT_EQUALS(WaitForRequestWithTimeOut(resumeStatus, ETimeMedium), KErrNone, _L("RMobileCall::Resume timed-out")); - ASSERT_EQUALS(resumeStatus.Int(), KErrNone, _L("RMobileCall::Resume returned an error")); - - // Check RCall::NotifyCallEvent for call 1 completes with ELocalResume - RMobileCall::TMobileCallEvent expectedMobileCallEvent = RMobileCall::ELocalResume; - iCallControlTestHelper.WaitForMobileCallNotifyCallEvent( - call1, - notifyCallEventStatus, - mobileCallEvent, - expectedMobileCallEvent, - wantedStatus); - // === Check call status === - - // Check RMobileCall::NotifyMobileCallStatusChange for call 1 completes with EStatusConnected - RMobileCall::TMobileCallStatus expectedMobileCallStatus = RMobileCall::EStatusConnected; - iCallControlTestHelper.WaitForMobileCallNotifyMobileCallStatusChange(call1, - notifyMobileCallStatusChangeStatus, - mobileCallStatus, - expectedMobileCallStatus, - wantedStatus); - - // Check RMobileCall::GetMobileCallStatus for call 1 returns EStatusConnected - ASSERT_EQUALS(call1.GetMobileCallStatus(mobileCallStatus), KErrNone, _L("RMobileCall::GetMobileCallStatus returned an error")); - ASSERT_EQUALS(mobileCallStatus, RMobileCall::EStatusConnected, _L("RMobileCall::GetMobileCallStatus did not return a status EStatusConnected")); - - // Hangup call 1. - TCoreEtelRequestStatus hangUpStatus (call1,&RCall::HangUpCancel); - CleanupStack::PushL(hangUpStatus); - call1.HangUp(hangUpStatus); - ASSERT_EQUALS(WaitForRequestWithTimeOut(hangUpStatus, ETimeMedium), KErrNone, _L("RCall::HangUp timed-out")); - ASSERT_EQUALS(hangUpStatus.Int(), KErrNone, _L("RCall::HangUp returned an error")); - - - //////////////////////////////////////////////////////////////// - // TEST END - //////////////////////////////////////////////////////////////// - - StartCleanup(); - - // Pop - // dialStatus - // holdStatus - // notifyStatusChangeStatus2 - // notifyMobileCallStatusChangeStatus2 - // dialStatus2 - // notifyCallEventStatus2 - // notifyCallEventStatus - // notifyMobileCallStatusChangeStatus - // resumeStatus - // hangUpStatus - CleanupStack::PopAndDestroy(10, &dialStatus); - - return TestStepResult(); - } - -TPtrC CCTSYIntegrationTestCallControl0030::GetTestStepName() -/** - * @return The test step name. - */ - { - return _L("CCTSYIntegrationTestCallControl0030"); - } - - - -CCTSYIntegrationTestCallControl0031::CCTSYIntegrationTestCallControl0031(CEtelSessionMgr& aEtelSessionMgr) - : CCTSYIntegrationTestCallControlBase(aEtelSessionMgr) -/** - * Constructor. - */ - { - SetTestStepName(CCTSYIntegrationTestCallControl0031::GetTestStepName()); - } - -CCTSYIntegrationTestCallControl0031::~CCTSYIntegrationTestCallControl0031() -/** - * Destructor. - */ - { - } - -TVerdict CCTSYIntegrationTestCallControl0031::doTestStepL() -/** - * @SYMTestCaseID BA-CTSY-INT-CCON-0031 - * @SYMFssID BA/CTSY/CCON-0031 - * @SYMTestCaseDesc Attempt to hold a call when there is already one on hold. - * @SYMTestPriority High - * @SYMTestActions RMobileCall::NotifyMobileCallCapsChange, RMobileCall::GetMobileCallStatus, RCall::NotifyStatusChange, RMobileCall::NotifyMobileCallStatusChange, RCall::NotifyCapsChange, RCall::GetStatus, RMobileCall::GetMobileCallCaps, RCall::Dial, RMobileCall::Hold - * @SYMTestExpectedResults Pass - Error returned on attempt to hold a second call. - * @SYMTestType CIT - * @SYMTestCaseDependencies live/automatic - * - * Reason for test: Verify error is returned on attempt to hold and call stays connected. - * - * @return - TVerdict code - */ - { - - //////////////////////////////////////////////////////////////// - // SET UP - //////////////////////////////////////////////////////////////// - - // Call TNetworkTsyTestHelper::WaitForRegisteredOnHomeNetworkL - RMobilePhone& phone = iEtelSessionMgr.GetPhoneL(KMainServer,KMainPhone); - CHECK_EQUALS_L(iNetworkTestHelper.WaitForRegisteredOnHomeNetworkL(phone), KErrNone, - _L("TNetworkTsyTestHelper::WaitForRegisteredOnHomeNetworkL returned with an error")); - - // Check phone supports KCapsVoice. - RPhone::TCaps phoneCaps; - CHECK_EQUALS_L(phone.GetCaps(phoneCaps), KErrNone, _L("RPhone::GetCaps returned an error")); - CHECK_BITS_SET_L(phoneCaps.iFlags, RPhone::KCapsVoice, KNoUnwantedBits, _L("RPhone::GetCaps returned wrong caps")); - - // Get Voice line 1. - RMobileLine& voiceLine = iEtelSessionMgr.GetLineL(KMainServer, KMainPhone, KVoiceLine); - - // Get call 1 - RMobileCall& call1 = iEtelSessionMgr.GetCallL(KMainServer, KMainPhone, KVoiceLine, KCall1); - - // Dial a number that answers on call 1. - TPtrC number; - CHECK_TRUE_L(GetStringFromConfig(KIniVoiceNumSection, KIniVoiceNumber1, number) != EFalse, _L("GetStringFromConfig did not complete as expected")); - DEBUG_PRINTF1(_L("Board Now Dialling: ")); - TCoreEtelRequestStatus dialStatus(call1, &RCall::DialCancel); - CleanupStack::PushL(dialStatus); - - call1.Dial(dialStatus, number); - CHECK_EQUALS_L(WaitForRequestWithTimeOut(dialStatus, ETimeLong), KErrNone, _L("RCall::Dial timed-out")); - CHECK_EQUALS_L(dialStatus.Int(), KErrNone, _L("RCall::Dial returned with an error")); - - // Hold call 1. - TExtEtelRequestStatus holdStatus(call1, EMobileCallHold); - CleanupStack::PushL(holdStatus); - call1.Hold(holdStatus); - CHECK_EQUALS_L(WaitForRequestWithTimeOut(holdStatus, ETimeMedium),KErrNone, _L("RMobileCall::Hold timed out")); - CHECK_EQUALS_L(holdStatus.Int(), KErrNone, _L("RMobileCall::Hold returned with an error")); - - // Ensure mobile call status of call 1 is EStatusHold - RMobileCall::TMobileCallStatus mobileCallStatus; - CHECK_EQUALS_L(call1.GetMobileCallStatus(mobileCallStatus), KErrNone, _L("RMobileCall::GetMobileCallStatus returned with an error")); - CHECK_EQUALS_L(mobileCallStatus, RMobileCall::EStatusHold, _L("RMobileCall::GetMobileCallStatus did not return EStatusHold as expected")); - - // Get call 2. - RMobileCall& call2 = iEtelSessionMgr.GetCallL(KMainServer, KMainPhone, KVoiceLine, KCall2); - - - //////////////////////////////////////////////////////////////// - // SET UP END - //////////////////////////////////////////////////////////////// - - StartTest(); - - //////////////////////////////////////////////////////////////// - // TEST START - //////////////////////////////////////////////////////////////// - - // post notifier RCall::NotifyCapsChange for call 2 - RCall::TCaps callCaps; - TCoreEtelRequestStatus notifyCapsChangeStatus (call2, &RCall::NotifyCapsChangeCancel); - CleanupStack::PushL(notifyCapsChangeStatus); - call2.NotifyCapsChange(notifyCapsChangeStatus,callCaps); - - // post a notifier RMobileCall::NotifyMobileCallCapsChange for call 2 - TExtEtelRequestStatus notifyMobileCallCapsChangeStatus(call2, EMobileCallNotifyMobileCallCapsChange); - CleanupStack::PushL(notifyMobileCallCapsChangeStatus); - RMobileCall::TMobileCallCapsV1 mobileCallCaps; - RMobileCall::TMobileCallCapsV1Pckg mobileCallCapsPckg(mobileCallCaps); - call2.NotifyMobileCallCapsChange(notifyMobileCallCapsChangeStatus, mobileCallCapsPckg); - - // post notifier for RCall::NotifyStatusChange for call 2 - RCall::TStatus callStatus; - TCoreEtelRequestStatus notifyStatusChangeStatus(call2, &RCall::NotifyStatusChangeCancel); - CleanupStack::PushL(notifyStatusChangeStatus); - call2.NotifyStatusChange(notifyStatusChangeStatus, callStatus); - - // post notifier for RMobileCall::NotifyMobileCallStatusChange - RMobileCall::TMobileCallStatus notifyMobileCallStatus; - TExtEtelRequestStatus notifyMobileCallStatusChangeStatus(call2, EMobileCallNotifyMobileCallStatusChange); - CleanupStack::PushL(notifyMobileCallStatusChangeStatus); - call2.NotifyMobileCallStatusChange(notifyMobileCallStatusChangeStatus, notifyMobileCallStatus); - - // Dial a number that answers on call 2. - ASSERT_TRUE(GetStringFromConfig(KIniVoiceNumSection, KIniVoiceNumber2, number) != EFalse, _L("GetStringFromConfig did not complete as expected")); - DEBUG_PRINTF1(_L("Board Now Dialling: ")); - TCoreEtelRequestStatus dialStatus2(call2, &RCall::DialCancel); - CleanupStack::PushL(dialStatus2); - call2.Dial(dialStatus2, number); - ASSERT_EQUALS(WaitForRequestWithTimeOut(dialStatus2, ETimeLong), KErrNone, _L("RCall::Dial timed-out")); - ASSERT_EQUALS(dialStatus2.Int(), KErrNone, _L("RCall::Dial returned with an error")); - - // === Check call caps === - - // Check RCall::NotifyCapsChange for call 2 completes with caps in set of KCapsVoice | KCapsHangUp. - RCall::TCaps wantedCaps; - RCall::TCaps unwantedCaps; - wantedCaps.iFlags = RCall::KCapsVoice | RCall::KCapsHangUp; - unwantedCaps.iFlags = 0; - const TInt wantedStatus = KErrNone; - iCallControlTestHelper.WaitForCallNotifyCapsChange(call2, - notifyCapsChangeStatus, - callCaps, - wantedCaps, - unwantedCaps, - wantedStatus); - - // Check RCall::GetCaps for call 2 supports KCapsHangUp | KCapsVoice. - TUint32 wantedCaps2 = RCall::KCapsHangUp | RCall::KCapsVoice; - ASSERT_EQUALS(call2.GetCaps(callCaps), KErrNone, _L("RCall::GetCaps returned an Error")); - ASSERT_BITS_SET(callCaps.iFlags, wantedCaps2, KNoUnwantedBits, _L("RCall::GetCaps returned unexpected Caps")); - - // Check RMobileCall::NotifyMobileCallCapsChange for call 2 completes with iCallControlCaps in set of KCapsVoice | KCapsSwap | KCapsHangUp | KCapsJoin | KCapsTransfer - // Check RMobileCall::NotifyMobileCallCapsChange for call 2 completes with iCallControlCaps NOT in set of KCapsHold - // Check RMobileCall::NotifyMobileCallCapsChange for call 2 completes with iCallEventCaps in set of KCapsRemoteHold | KCapsRemoteTerminate | KCapsRemoteConferenceCreate - RMobileCall::TMobileCallCapsV1 wantedMobileCaps; - RMobileCall::TMobileCallCapsV1 unWantedMobileCaps; - wantedMobileCaps.iCallControlCaps = RMobileCall::KCapsVoice | - RMobileCall::KCapsSwap | - RMobileCall::KCapsHangUp | - RMobileCall::KCapsJoin| - RMobileCall::KCapsTransfer; - - wantedMobileCaps.iCallEventCaps = RMobileCall::KCapsRemoteHold | - RMobileCall::KCapsRemoteTerminate | - RMobileCall::KCapsRemoteConferenceCreate; - TCmpRMobileCallTMobileCallCaps mobileCapsComp(wantedMobileCaps,mobileCallCaps, *this); - iCallControlTestHelper.WaitForMobileCallNotifyMobileCallCapsChange(call2, - notifyMobileCallCapsChangeStatus, - mobileCapsComp, - wantedStatus); - unWantedMobileCaps.iCallControlCaps = RMobileCall::KCapsHold; - ASSERT_BITS_SET(wantedMobileCaps.iCallControlCaps, wantedMobileCaps.iCallControlCaps, unWantedMobileCaps.iCallControlCaps, - _L("RMobileCall::NotifyMobileCallCapsChange returned unexpected iCallControlCaps")); - - // Check RMobileCall::GetMobileCallCaps for call 2 includes iCallControlCaps in set of KCapsVoice | KCapsSwap | KCapsHangUp | KCapsJoin | KCapsTransfer - // Check RMobileCall::GetMobileCallCaps for call 2 includes iCallControlCaps NOT in set of KCapsHold - // Check RMobileCall::GetMobileCallCaps for call 2 includes iCallEventCaps in set of KCapsRemoteHold | KCapsRemoteTerminate | KCapsRemoteConferenceCreate. - ASSERT_EQUALS(call2.GetMobileCallCaps(mobileCallCapsPckg), KErrNone, - _L("RMobileCall::GetMobileCallCaps returned an error")); - wantedMobileCaps.iCallControlCaps = RMobileCall::KCapsVoice | - RMobileCall::KCapsSwap | - RMobileCall::KCapsHangUp | - RMobileCall::KCapsJoin| - RMobileCall::KCapsTransfer; - - unWantedMobileCaps.iCallControlCaps = RMobileCall::KCapsHold; - ASSERT_BITS_SET(mobileCallCaps.iCallControlCaps, wantedMobileCaps.iCallControlCaps,unWantedMobileCaps.iCallControlCaps, - _L("RMobileCall::GetMobileCallCaps returned unexpected iCallControlCaps")); - - wantedMobileCaps.iCallEventCaps = RMobileCall::KCapsRemoteHold | - RMobileCall::KCapsRemoteTerminate | - RMobileCall::KCapsRemoteConferenceCreate; - ASSERT_BITS_SET(mobileCallCaps.iCallEventCaps, wantedMobileCaps.iCallEventCaps, KNoUnwantedBits, - _L("RMobileCall::GetMobileCallCaps returned unexpected iCallEventCaps")); - - // === Check call status === - - // Check RCall::NotifyStatusChange for call 2 completes with EStatusDialling -> EStatusConnecting -> EStatusConnected. - RCall::TStatus expectedCallStatus = RCall::EStatusDialling; - iCallControlTestHelper.WaitForCallNotifyStatusChange(call2, - notifyStatusChangeStatus, - callStatus, - expectedCallStatus, - wantedStatus); - - call2.NotifyStatusChange(notifyStatusChangeStatus, callStatus); - expectedCallStatus = RCall::EStatusConnecting; - iCallControlTestHelper.WaitForCallNotifyStatusChange(call2, - notifyStatusChangeStatus, - callStatus, - expectedCallStatus, - wantedStatus); - - call2.NotifyStatusChange(notifyStatusChangeStatus, callStatus); - expectedCallStatus = RCall::EStatusConnected; - iCallControlTestHelper.WaitForCallNotifyStatusChange(call2, - notifyStatusChangeStatus, - callStatus, - expectedCallStatus, - wantedStatus); - // Check RCall::GetStatus for call 2 returns EStatusConnected. - ASSERT_EQUALS(call2.GetStatus(callStatus),KErrNone, _L("RCall::GetStatus returned an error")); - ASSERT_EQUALS(callStatus, RCall::EStatusConnected, _L("RCall::GetStatus returned an unexpected call status")); - - - // Check RMobileCall::NotifyMobileCallStatusChange for call 2 completes with EStatusDialling -> EStatusConnecting -> EStatusConnected. - RMobileCall::TMobileCallStatus expectedMobileCallStatus = RMobileCall::EStatusDialling; - iCallControlTestHelper.WaitForMobileCallNotifyMobileCallStatusChange(call2, - notifyMobileCallStatusChangeStatus, - notifyMobileCallStatus, - expectedMobileCallStatus, - wantedStatus); - call2.NotifyMobileCallStatusChange(notifyMobileCallStatusChangeStatus, notifyMobileCallStatus); - expectedMobileCallStatus = RMobileCall::EStatusConnecting; - iCallControlTestHelper.WaitForMobileCallNotifyMobileCallStatusChange(call2, - notifyMobileCallStatusChangeStatus, - notifyMobileCallStatus, - expectedMobileCallStatus, - wantedStatus); - call2.NotifyMobileCallStatusChange(notifyMobileCallStatusChangeStatus, notifyMobileCallStatus); - expectedMobileCallStatus = RMobileCall::EStatusConnected; - iCallControlTestHelper.WaitForMobileCallNotifyMobileCallStatusChange(call2, - notifyMobileCallStatusChangeStatus, - notifyMobileCallStatus, - expectedMobileCallStatus, - wantedStatus); - // Check RMobileCall::GetMobileCallStatus for call 2 returns status of EStatusConnected. - ASSERT_EQUALS(call2.GetMobileCallStatus(mobileCallStatus), KErrNone, _L("RMobileCall::GetMobileStatus returned an error")); - ASSERT_EQUALS(mobileCallStatus, RMobileCall::EStatusConnected, _L("RMobileCall::GetMobileStatus did not return a status EStatusConnected")); - - // === Attempt to hold call 2 when call 1 is already on hold === - - // Hold call 2. - TExtEtelRequestStatus holdStatus2(call2, EMobileCallHold); - CleanupStack::PushL(holdStatus2); - call2.Hold(holdStatus2); - ASSERT_EQUALS(WaitForRequestWithTimeOut(holdStatus2, ETimeMedium),KErrNone, _L("RMobileCall::Hold timed out")); - - // Check error is returned. - ASSERT_TRUE(holdStatus2.Int() != KErrNone, _L("RMobileCall::Hold returned KErrNone, should have returned an error")); - - // === Check call 2 is still active and call 1 is still on hold === - - // Check RMobileCall::GetMobileCallStatus for call 2 returns status of EStatusConnected. - ASSERT_EQUALS(call2.GetMobileCallStatus(mobileCallStatus), KErrNone, _L("RMobileCall::GetMobileCallStatus returned with an error")); - ASSERT_EQUALS(mobileCallStatus, RMobileCall::EStatusConnected, _L("RMobileCall::GetMobileCallStatus did not return EStatusConnected as expected")); - - // Check RMobileCall::GetMobileCallStatus for call 1 returns status of EStatusHold. - ASSERT_EQUALS(call1.GetMobileCallStatus(mobileCallStatus), KErrNone, _L("RMobileCall::GetMobileCallStatus returned with an error")); - ASSERT_EQUALS(mobileCallStatus, RMobileCall::EStatusHold, _L("RMobileCall::GetMobileCallStatus did not return EStatusHold as expected")); - - // Terminate both calls - ASSERT_EQUALS(call1.HangUp(), KErrNone, _L("RMobileCall::HangUp returned with an error")); - ASSERT_EQUALS(call2.HangUp(), KErrNone, _L("RMobileCall::HangUp returned with an error")); - - //////////////////////////////////////////////////////////////// - // TEST END - //////////////////////////////////////////////////////////////// - - StartCleanup(); - - - // Pop - // dialStatus - // holdStatus - // notifyCapsChangeStatus - // notifyMobileCallCapsChangeStatus - // notifyStatusChangeStatus - // notifyMobileCallStatusChangeStatus - // dialStatus2 - // holdStatus2 - CleanupStack::PopAndDestroy(8, &dialStatus); - - return TestStepResult(); - } - -TPtrC CCTSYIntegrationTestCallControl0031::GetTestStepName() -/** - * @return The test step name. - */ - { - return _L("CCTSYIntegrationTestCallControl0031"); - } - - - -CCTSYIntegrationTestCallControl0032::CCTSYIntegrationTestCallControl0032(CEtelSessionMgr& aEtelSessionMgr) - : CCTSYIntegrationTestCallControlBase(aEtelSessionMgr) -/** - * Constructor. - */ - { - SetTestStepName(CCTSYIntegrationTestCallControl0032::GetTestStepName()); - } - -CCTSYIntegrationTestCallControl0032::~CCTSYIntegrationTestCallControl0032() -/** - * Destructor. - */ - { - } - -TVerdict CCTSYIntegrationTestCallControl0032::doTestStepL() -/** - * @SYMTestCaseID BA-CTSY-INT-CCON-0032 - * @SYMFssID BA/CTSY/CCON-0032 - * @SYMTestCaseDesc Resume a call that is not on hold. - * @SYMTestPriority High - * @SYMTestActions RMobileCall::NotifyMobileCallCapsChange, RMobileCall::GetMobileCallStatus, RCall::NotifyStatusChange, RMobileCall::NotifyMobileCallStatusChange, RCall::NotifyCapsChange, RCall::GetStatus, RMobileCall::GetMobileCallCaps, RMobileCall::Resume, RCall::Dial - * @SYMTestExpectedResults Pass - Error returned on attempt to resume a call that is not on hold. - * @SYMTestType CIT - * @SYMTestCaseDependencies live/automatic - * - * Reason for test: Verify error is returned on attempt to resume and call stays connected. - * - * @return - TVerdict code - */ - { - - //////////////////////////////////////////////////////////////// - // SET UP - //////////////////////////////////////////////////////////////// - - - // Call TNetworkTsyTestHelper::WaitForRegisteredOnHomeNetworkL - RMobilePhone& phone = iEtelSessionMgr.GetPhoneL(KMainServer,KMainPhone); - CHECK_EQUALS_L(iNetworkTestHelper.WaitForRegisteredOnHomeNetworkL(phone), KErrNone, - _L("TNetworkTsyTestHelper::WaitForRegisteredOnHomeNetworkL returned with an error")); - - // Check phone supports KCapsVoice. - RPhone::TCaps phoneCaps; - CHECK_EQUALS_L(phone.GetCaps(phoneCaps), KErrNone, _L("RPhone::GetCaps returned an error")); - CHECK_BITS_SET_L(phoneCaps.iFlags, RPhone::KCapsVoice, KNoUnwantedBits, _L("RPhone::GetCaps returned wrong caps")); - - // Get Voice line 1. - RMobileLine& voiceLine = iEtelSessionMgr.GetLineL(KMainServer, KMainPhone, KVoiceLine); - - // Get call 1 - RMobileCall& call1 = iEtelSessionMgr.GetCallL(KMainServer, KMainPhone, KVoiceLine, KCall1); - - - //////////////////////////////////////////////////////////////// - // SET UP END - //////////////////////////////////////////////////////////////// - - StartTest(); - - //////////////////////////////////////////////////////////////// - // TEST START - //////////////////////////////////////////////////////////////// - - - // Post notifier for RCall::NotifyCapsChange - TCoreEtelRequestStatus notifyCapsChangeStatus (call1, &RCall::NotifyCapsChangeCancel); - CleanupStack::PushL(notifyCapsChangeStatus); - RCall::TCaps callCaps; - call1.NotifyCapsChange(notifyCapsChangeStatus, callCaps); - - // Post notifier for RMobileCall::NotifyMobileCallCapsChange - TExtEtelRequestStatus notifyMobileCallCapsChangeStatus(call1, EMobileCallNotifyMobileCallCapsChange); - CleanupStack::PushL(notifyMobileCallCapsChangeStatus); - RMobileCall::TMobileCallCapsV1 mobileCallCaps; - RMobileCall::TMobileCallCapsV1Pckg mobileCallCapsPckg(mobileCallCaps); - call1.NotifyMobileCallCapsChange(notifyMobileCallCapsChangeStatus,mobileCallCapsPckg); - - // Post notifier for RCall::NotifyStatusChange for call 1 - RCall::TStatus callStatus; - TCoreEtelRequestStatus notifyStatusChangeStatus(call1,&RCall::NotifyStatusChangeCancel); - CleanupStack::PushL(notifyStatusChangeStatus); - call1.NotifyStatusChange(notifyStatusChangeStatus, callStatus); - - // Post notifier for RMobileCall::NotifyMobileCallStatusChange for call 1 - RMobileCall::TMobileCallStatus mobileCallStatus; - TExtEtelRequestStatus notifyMobileCallStatusChangeStatus(call1, EMobileCallNotifyMobileCallStatusChange); - CleanupStack::PushL(notifyMobileCallStatusChangeStatus); - call1.NotifyMobileCallStatusChange(notifyMobileCallStatusChangeStatus, mobileCallStatus); - - // Dial a number that answers. - TPtrC number; - ASSERT_TRUE(GetStringFromConfig(KIniVoiceNumSection, KIniVoiceNumber1, number) != EFalse, _L("GetStringFromConfig did not complete as expected")); - DEBUG_PRINTF1(_L("Board Now Dialling: ")); - TCoreEtelRequestStatus dialStatus(call1, &RCall::DialCancel); - CleanupStack::PushL(dialStatus); - call1.Dial(dialStatus, number); - ASSERT_EQUALS(WaitForRequestWithTimeOut(dialStatus, ETimeLong), KErrNone, _L("RCall::Dial timed-out")); - ASSERT_EQUALS(dialStatus.Int(), KErrNone, _L("RCall::Dial returned with an error")); - - // === Check call caps === - - // Check RCall::NotifyCapsChange completes with caps in set of KCapsVoice | KCapsHangUp. - RCall::TCaps wantedCaps, unwantedCaps; - wantedCaps.iFlags = RCall::KCapsVoice | RCall::KCapsHangUp; - unwantedCaps.iFlags = 0; - const TInt wantedStatus = KErrNone; - iCallControlTestHelper.WaitForCallNotifyCapsChange(call1, - notifyCapsChangeStatus, - callCaps, - wantedCaps, - unwantedCaps, - wantedStatus); - - // Check RCall::GetCaps supports KCapsHangUp | KCapsVoice. - ASSERT_EQUALS(call1.GetCaps(callCaps), KErrNone, _L("RCall::GetCaps returned an error")); - ASSERT_BITS_SET(callCaps.iFlags, wantedCaps.iFlags, KNoUnwantedBits, _L("RCall::GetCaps returned wrong caps")); - - // Check RMobileCall::NotifyMobileCallCapsChange completes with iCallControlCaps in set of KCapsVoice | KCapsHold | KCapsHangUp. - // Check RMobileCall::NotifyMobileCallCapsChange completes with iCallControlCaps NOT in set of KCapsResume - // Check RMobileCall::NotifyMobileCallCapsChange completes with iCallEventCaps in set of KCapsLocalHold | KCapsLocalTransfer | KCapsRemoteHold | KCapsRemoteTerminate | KCapsRemoteConferenceCreate. - RMobileCall::TMobileCallCapsV1 wantedMobileCaps; - TUint32 unWantedControlCaps = RMobileCall::KCapsResume; - - wantedMobileCaps.iCallControlCaps = RMobileCall::KCapsVoice | - RMobileCall::KCapsHold | - RMobileCall::KCapsHangUp; - - wantedMobileCaps.iCallEventCaps = RMobileCall::KCapsLocalHold | - RMobileCall::KCapsLocalTransfer | - RMobileCall::KCapsRemoteHold | - RMobileCall::KCapsRemoteTerminate | - RMobileCall::KCapsRemoteConferenceCreate; - - TCmpRMobileCallTMobileCallCaps mobileCapsComp(wantedMobileCaps, mobileCallCaps, *this); - iCallControlTestHelper.WaitForMobileCallNotifyMobileCallCapsChange(call1, - notifyMobileCallCapsChangeStatus, - mobileCapsComp, - wantedStatus); - - ASSERT_BITS_SET(mobileCallCaps.iCallControlCaps, wantedMobileCaps.iCallControlCaps, unWantedControlCaps, _L("RMobileCall::NotifyMobileCallCapsChange did not set expected iCallControlCaps")); - ASSERT_BITS_SET(mobileCallCaps.iCallEventCaps, wantedMobileCaps.iCallEventCaps, KNoUnwantedBits, _L("RMobileCall::NotifyMobileCallCapsChange did not set expected iCallControlCaps")); - - // Check RMobileCall::GetMobileCallCaps includes iCallControlCaps in set of KCapsVoice | KCapsHold | KCapsHangUp. - // Check RMobileCall::GetMobileCallCaps includes iCallControlCaps NOT in set of KCapsResume - ASSERT_EQUALS(call1.GetMobileCallCaps(mobileCallCapsPckg), KErrNone, _L("RMobileCall::GetMobileCallCaps returned an error")); - ASSERT_BITS_SET(mobileCallCaps.iCallControlCaps, wantedMobileCaps.iCallControlCaps, unWantedControlCaps, _L("RMobileCall::GetMobileCallCaps returned wrong caps")); - - // Check RMobileCall::GetMobileCallCaps includes iCallEventCaps in set of KCapsLocalHold | KCapsLocalTransfer | KCapsRemoteHold | KCapsRemoteTerminate | KCapsRemoteConferenceCreate. - ASSERT_BITS_SET(mobileCallCaps.iCallEventCaps, wantedMobileCaps.iCallEventCaps, KNoUnwantedBits, _L("RMobileCall::GetMobileCallCaps returned wrong caps")); - - // === Check call status === - - // Check RCall::NotifyStatusChange completes with EStatusDialling -> EStatusConnecting -> EStatusConnected. - RCall::TStatus expectedCallStatus = RCall::EStatusDialling; - iCallControlTestHelper.WaitForCallNotifyStatusChange(call1, - notifyStatusChangeStatus, - callStatus, - expectedCallStatus, - wantedStatus); - - // Check RCall::NotifyStatusChange completes with EStatusConnecting - call1.NotifyStatusChange(notifyStatusChangeStatus, callStatus); - expectedCallStatus = RCall::EStatusConnecting; - iCallControlTestHelper.WaitForCallNotifyStatusChange(call1, - notifyStatusChangeStatus, - callStatus, - expectedCallStatus, - wantedStatus); - - // Check RCall::NotifyStatusChange completes with EStatusConnected. - call1.NotifyStatusChange(notifyStatusChangeStatus, callStatus); - expectedCallStatus = RCall::EStatusConnected; - iCallControlTestHelper.WaitForCallNotifyStatusChange(call1, - notifyStatusChangeStatus, - callStatus, - expectedCallStatus, - wantedStatus); - - // Check RCall::GetStatus returns EStatusConnected. - ASSERT_EQUALS(call1.GetStatus(callStatus),KErrNone, _L("RCall::GetStatus returned an error")); - ASSERT_EQUALS(callStatus, RCall::EStatusConnected, _L("RCall::GetStatus returned an unexpected call status")); - - // Check RMobileCall::NotifyMobileCallStatusChange completes with EStatusDialling -> EStatusConnecting -> EStatusConnected. - RMobileCall::TMobileCallStatus expectedMobileCallStatus = RMobileCall::EStatusDialling; - iCallControlTestHelper.WaitForMobileCallNotifyMobileCallStatusChange(call1, - notifyMobileCallStatusChangeStatus, - mobileCallStatus, - expectedMobileCallStatus, - wantedStatus); - - // Check RMobileCall::NotifyMobileCallStatusChange completes with EStatusConnecting -> - call1.NotifyMobileCallStatusChange(notifyMobileCallStatusChangeStatus, mobileCallStatus); - expectedMobileCallStatus = RMobileCall::EStatusConnecting; - iCallControlTestHelper.WaitForMobileCallNotifyMobileCallStatusChange(call1, - notifyMobileCallStatusChangeStatus, - mobileCallStatus, - expectedMobileCallStatus, - wantedStatus); - - // Check RMobileCall::NotifyMobileCallStatusChange completes with EStatusConnected. - call1.NotifyMobileCallStatusChange(notifyMobileCallStatusChangeStatus, mobileCallStatus); - expectedMobileCallStatus = RMobileCall::EStatusConnected; - iCallControlTestHelper.WaitForMobileCallNotifyMobileCallStatusChange(call1, - notifyMobileCallStatusChangeStatus, - mobileCallStatus, - expectedMobileCallStatus, - wantedStatus); - - // Check RMobileCall::GetMobileCallStatus returns status of EStatusConnected. - ASSERT_EQUALS(call1.GetMobileCallStatus(mobileCallStatus), KErrNone, - _L("RMobileCall::GetMobileCallStatus returned an error")); - ASSERT_EQUALS(mobileCallStatus, RMobileCall::EStatusConnected, - _L("RMobileCall::GetMobileCallStatus did not return a status EStatusConnected")); - - // Resume call. - TExtEtelRequestStatus resumeStatus(call1, EMobileCallResume); - CleanupStack::PushL(resumeStatus); - call1.Resume(resumeStatus); - ASSERT_EQUALS(WaitForRequestWithTimeOut(resumeStatus, ETimeMedium), KErrNone, _L("RMobileCall::Resume timed-out")); - - // Check error is returned. - ASSERT_TRUE(resumeStatus.Int() != KErrNone, _L("RMobileCall::Resume did not return error as expected")); - - // === Check call is still connected === - - // Check RCall::GetStatus returns EStatusConnected. - ASSERT_EQUALS(call1.GetStatus(callStatus),KErrNone, _L("RCall::GetStatus returned an error")); - ASSERT_EQUALS(callStatus, RCall::EStatusConnected, _L("RCall::GetStatus returned an unexpected call status")); - - // Check RMobileCall::GetMobileCallStatus returns status of EStatusConnected. - ASSERT_EQUALS(call1.GetMobileCallStatus(mobileCallStatus), KErrNone, _L("RMobileCall::GetMobileCallStatus returned an error")); - ASSERT_EQUALS(mobileCallStatus, RMobileCall::EStatusConnected, _L("RMobileCall::GetMobileCallStatus did not return a status EStatusConnected")); - - // Hangup call 1. - TCoreEtelRequestStatus hangUpStatus (call1,&RCall::HangUpCancel); - CleanupStack::PushL(hangUpStatus); - call1.HangUp(hangUpStatus); - ASSERT_EQUALS(WaitForRequestWithTimeOut(hangUpStatus, ETimeMedium), KErrNone, _L("RCall::HangUp timed-out")); - ASSERT_EQUALS(hangUpStatus.Int(), KErrNone, _L("RCall::HangUp returned an error")); - - - //////////////////////////////////////////////////////////////// - // TEST END - //////////////////////////////////////////////////////////////// - - StartCleanup(); - - // Pop - // notifyCapsChangeStatus - // notifyMobileCallCapsChangeStatus - // notifyStatusChangeStatus - // notifyMobileCallStatusChangeStatus - // dialStatus - // resumeStatus - // hangUpStatus - CleanupStack::PopAndDestroy(7, ¬ifyCapsChangeStatus); - - - return TestStepResult(); - } - -TPtrC CCTSYIntegrationTestCallControl0032::GetTestStepName() -/** - * @return The test step name. - */ - { - return _L("CCTSYIntegrationTestCallControl0032"); - } - - - -CCTSYIntegrationTestCallControl0033::CCTSYIntegrationTestCallControl0033(CEtelSessionMgr& aEtelSessionMgr) - : CCTSYIntegrationTestCallControlBase(aEtelSessionMgr) -/** - * Constructor. - */ - { - SetTestStepName(CCTSYIntegrationTestCallControl0033::GetTestStepName()); - } - -CCTSYIntegrationTestCallControl0033::~CCTSYIntegrationTestCallControl0033() -/** - * Destructor. - */ - { - } - -TVerdict CCTSYIntegrationTestCallControl0033::doTestStepL() -/** - * @SYMTestCaseID BA-CTSY-INT-CCON-0033 - * @SYMFssID BA/CTSY/CCON-0033 - * @SYMTestCaseDesc Check that any client can hold or resume calls, not just owner - * @SYMTestPriority High - * @SYMTestActions RCall::OpenExistingCall, RMobileCall::Hold, RMobileCall::Resume, RCall::HangUp, RMobileCall::NotifyMobileCallStatusChange, RCall::NotifyStatusChange, RMobileCall::GetMobileCallStatus, RMobileCall::NotifyCallEvent, RCall::GetStatus - * @SYMTestExpectedResults Pass - Call held and resumed by any client. - * @SYMTestType CIT - * @SYMTestCaseDependencies live/automatic - * - * Reason for test: Verify call status is correct. - * - * @return - TVerdict code - */ - { - - //////////////////////////////////////////////////////////////// - // SET UP - //////////////////////////////////////////////////////////////// - - // Call TNetworkTsyTestHelper::WaitForRegisteredOnHomeNetworkL - RMobilePhone& phone = iEtelSessionMgr.GetPhoneL(KMainServer,KMainPhone); - CHECK_EQUALS_L(iNetworkTestHelper.WaitForRegisteredOnHomeNetworkL(phone), KErrNone, - _L("TNetworkTsyTestHelper::WaitForRegisteredOnHomeNetworkL returned with an error")); - - // Check phone supports KCapsVoice. - RPhone::TCaps phoneCaps; - CHECK_EQUALS_L(phone.GetCaps(phoneCaps), KErrNone, _L("RPhone::GetCaps returned an error")); - CHECK_BITS_SET_L(phoneCaps.iFlags, RPhone::KCapsVoice, KNoUnwantedBits, _L("RPhone::GetCaps returned wrong caps")); - - //////////////////////////////////////////////////////////////// - // SET UP END - //////////////////////////////////////////////////////////////// - - StartTest(); - - //////////////////////////////////////////////////////////////// - // TEST START - //////////////////////////////////////////////////////////////// - - // Get server 1. - RTelServer& srv1 = iEtelSessionMgr.GetServerL(KMainServer); - - // Get line 1 from server 1. - RMobileLine& line1 = iEtelSessionMgr.GetLineL(KMainServer, KMainPhone, KVoiceLine); - - // Get call 1 from line 1 and server 1. - RMobileCall& call1 = iEtelSessionMgr.GetCallL(KMainServer, KMainPhone, KVoiceLine, KCall1); - - // Get server 2. - RTelServer& srv2 = iEtelSessionMgr.GetServerL(KAltServer); - - // Get line 2 from server 2. - RMobileLine& line2 = iEtelSessionMgr.GetLineL(KAltServer, KMainPhone, KVoiceLine); - - // Get call 1 from line 2 and server 2 (this call is now referred to as call 2 in the procedure below). - RMobileCall& call2 = iEtelSessionMgr.GetCallL(KAltServer, KMainPhone, KVoiceLine, KCall1); - - // Post notify for call 1 RCall::NotifyStatusChange - TCoreEtelRequestStatus notifyStatusChangeCall1(call1, &RCall::NotifyStatusChangeCancel); - CleanupStack::PushL(notifyStatusChangeCall1); - RCall::TStatus callStatusCall1; - call1.NotifyStatusChange(notifyStatusChangeCall1, callStatusCall1); - - // Post notify for call 1 RMobileCall::NotifyMobileCallStatusChange - TExtEtelRequestStatus notifyMobileCallStatusChangeCall1(call1, EMobileCallNotifyMobileCallStatusChange); - CleanupStack::PushL(notifyMobileCallStatusChangeCall1); - RMobileCall::TMobileCallStatus mobileCallStatusCall1; - call1.NotifyMobileCallStatusChange(notifyMobileCallStatusChangeCall1, mobileCallStatusCall1); - - // Dial a number that answers on call 1. - TPtrC number; - ASSERT_TRUE(GetStringFromConfig(KIniVoiceNumSection, KIniVoiceNumber1, number) != EFalse,_L("GetStringFromConfig did not complete as expected")); - TCoreEtelRequestStatus dialStatus(call1, &RCall::DialCancel); - CleanupStack::PushL(dialStatus); - call1.Dial(dialStatus, number); - ASSERT_EQUALS(WaitForRequestWithTimeOut(dialStatus, ETimeMedium), KErrNone, _L("RCall::Dial timed-out")); - ASSERT_EQUALS(dialStatus.Int(), KErrNone, _L("RCall::Dial returned with an error")); - - // === Check status for call 1 and call 2 === - - // Check RMobilCall::NotifyStatusChange for call 1 completes with EStatusDialling -> EStatusConnecting -> EStatusConnected. - RCall::TStatus expectedCallStatusCall1 = RCall::EStatusDialling; - iCallControlTestHelper.WaitForCallNotifyStatusChange(call1, - notifyStatusChangeCall1, - callStatusCall1, - expectedCallStatusCall1, - KErrNone); - - call1.NotifyStatusChange(notifyStatusChangeCall1, callStatusCall1); - expectedCallStatusCall1 = RCall::EStatusConnecting; - iCallControlTestHelper.WaitForCallNotifyStatusChange(call1, - notifyStatusChangeCall1, - callStatusCall1, - expectedCallStatusCall1, - KErrNone); - - call1.NotifyStatusChange(notifyStatusChangeCall1, callStatusCall1); - expectedCallStatusCall1 = RCall::EStatusConnected; - iCallControlTestHelper.WaitForCallNotifyStatusChange(call1, - notifyStatusChangeCall1, - callStatusCall1, - expectedCallStatusCall1, - KErrNone); - - // Check RCall::GetStatus for call 1 returns EStatusConnected. - RCall::TStatus getStatusCall1; - ASSERT_EQUALS(call1.GetStatus(getStatusCall1), KErrNone,_L("RCall::GetStatus returned an error")); - ASSERT_EQUALS(getStatusCall1, expectedCallStatusCall1, _L("RCall::GetStatus did not return EStatusConnected")); - - // Check RMobileCall::NotifyMobileCallStatusChange for call 1 completes with EStatusDialling -> EStatusConnecting -> EStatusConnected. - RMobileCall::TMobileCallStatus expectedMobileCallStatusCall1 = RMobileCall::EStatusDialling; - iCallControlTestHelper.WaitForMobileCallNotifyMobileCallStatusChange( - call1, - notifyMobileCallStatusChangeCall1, - mobileCallStatusCall1, - expectedMobileCallStatusCall1, - KErrNone); - - call1.NotifyMobileCallStatusChange(notifyMobileCallStatusChangeCall1, mobileCallStatusCall1); - expectedMobileCallStatusCall1 = RMobileCall::EStatusConnecting; - iCallControlTestHelper.WaitForMobileCallNotifyMobileCallStatusChange( - call1, - notifyMobileCallStatusChangeCall1, - mobileCallStatusCall1, - expectedMobileCallStatusCall1, - KErrNone); - - call1.NotifyMobileCallStatusChange(notifyMobileCallStatusChangeCall1, mobileCallStatusCall1); - expectedMobileCallStatusCall1 = RMobileCall::EStatusConnected; - iCallControlTestHelper.WaitForMobileCallNotifyMobileCallStatusChange( - call1, - notifyMobileCallStatusChangeCall1, - mobileCallStatusCall1, - expectedMobileCallStatusCall1, - KErrNone); - - // Check RMobileCall::GetMobileCallStatus for call 1 returns status of EStatusConnected. - RMobileCall::TMobileCallStatus getMobileCallStatusCall1; - ASSERT_EQUALS(call1.GetMobileCallStatus(getMobileCallStatusCall1), KErrNone,_L("RMobileCall::GetMobileCallStatus returned an error")); - ASSERT_EQUALS(getMobileCallStatusCall1, expectedMobileCallStatusCall1, _L("RMobileCall::GetMobileCallStatus did not return EStatusConnected")); - - // Post notifier for call 2 RMobileCall::NotifyCallEvent - TExtEtelRequestStatus notifyCallEventCall2(call2, EMobileCallNotifyCallEvent); - CleanupStack::PushL(notifyCallEventCall2); - RMobileCall::TMobileCallEvent callEventCall2; - call2.NotifyCallEvent(notifyCallEventCall2,callEventCall2); - - // Post notifier for call 2 RMobileCall::NotifyMobileCallStatusChange - TExtEtelRequestStatus notifyMobileCallStatusChangeCall2(call2, EMobileCallNotifyMobileCallStatusChange); - CleanupStack::PushL(notifyMobileCallStatusChangeCall2); - RMobileCall::TMobileCallStatus mobileCallStatusCall2; - call2.NotifyMobileCallStatusChange(notifyMobileCallStatusChangeCall2, mobileCallStatusCall2); - - // Repost notifier for call 1 RMobileCall::NotifyMobileCallStatusChange - call1.NotifyMobileCallStatusChange(notifyMobileCallStatusChangeCall1, mobileCallStatusCall1); - - // Hold call using call 2 - TExtEtelRequestStatus holdRequestStatusCall2(call2, EMobileCallHold); - CleanupStack::PushL(holdRequestStatusCall2); - call2.Hold(holdRequestStatusCall2); - ASSERT_EQUALS(WaitForRequestWithTimeOut(holdRequestStatusCall2, ETimeMedium), KErrNone, _L("RMobileCall::Hold timed-out")); - ASSERT_EQUALS(holdRequestStatusCall2.Int(), KErrNone, _L("RMobileCall::Hold returned error")); - - // === Check status for call 1 and call 2 === - - // Check RMobileCall::NotifyCallEvent for call 2 completes with ELocalHold - RMobileCall::TMobileCallEvent expectedCallEventCall2 = RMobileCall::ELocalHold; - iCallControlTestHelper.WaitForMobileCallNotifyCallEvent( - call2, - notifyCallEventCall2, - callEventCall2, - expectedCallEventCall2, - KErrNone); - - // Check RMobileCall::NotifyMobileCallStatusChange for call 2 completes with EStatusHold - RMobileCall::TMobileCallStatus expectedMobileCallStatusCall2 = RMobileCall::EStatusHold; - iCallControlTestHelper.WaitForMobileCallNotifyMobileCallStatusChange( - call2, - notifyMobileCallStatusChangeCall2, - mobileCallStatusCall2, - expectedMobileCallStatusCall2, - KErrNone); - - // Check RMobileCall::GetMobileCallStatus for call 2 returns status of EStatusHold - RMobileCall::TMobileCallStatus getMobileCallStatusCall2; - ASSERT_EQUALS(call2.GetMobileCallStatus(getMobileCallStatusCall2), KErrNone, _L("RMobileCall::GetMobileCallStatus returned an error")); - ASSERT_EQUALS(getMobileCallStatusCall2, expectedMobileCallStatusCall2, _L("RMobileCall::GetMobileCallStatus did not return EStatusHold")); - - // Check RMobileCall::NotifyMobileCallStatusChange for call 1 completes with EStatusHold - expectedMobileCallStatusCall1 = RMobileCall::EStatusHold; - iCallControlTestHelper.WaitForMobileCallNotifyMobileCallStatusChange( - call1, - notifyMobileCallStatusChangeCall1, - mobileCallStatusCall1, - expectedMobileCallStatusCall1, - KErrNone); - - // Check RMobileCall::GetMobileCallStatus for call 1 returns status of EStatusHold - ASSERT_EQUALS(call1.GetMobileCallStatus(getMobileCallStatusCall1), KErrNone, _L("RMobileCall::GetMobileCallStatus returned an error")); - ASSERT_EQUALS(getMobileCallStatusCall1, expectedMobileCallStatusCall1, _L("RMobileCall::GetMobileCallStatus did not return EStatusHold")); - - // Repost notifier for call 2 RMobileCall::NotifyCallEvent - call2.NotifyCallEvent(notifyCallEventCall2,callEventCall2); - - // Repost notifier for call 2 RMobileCall::NotifyMobileCallStatusChange - call2.NotifyMobileCallStatusChange(notifyMobileCallStatusChangeCall2, mobileCallStatusCall2); - - // Repost notifier for call 1 RMobileCall::NotifyMobileCallStatusChange - call1.NotifyMobileCallStatusChange(notifyMobileCallStatusChangeCall1, mobileCallStatusCall1); - - // Resume call using call 2 - TExtEtelRequestStatus requestResumeCallStatus(call2,EMobileCallResume); - CleanupStack::PushL(requestResumeCallStatus); - call2.Resume(requestResumeCallStatus); - ASSERT_EQUALS(WaitForRequestWithTimeOut(requestResumeCallStatus, ETimeMedium), KErrNone, _L("RMobileCall::Resume timed-out")); - ASSERT_EQUALS(requestResumeCallStatus.Int(), KErrNone, _L("RMobileCall::Resume returned error")); - - // === Check status for call 1 and call 2 === - - // Check RMobileCall::NotifyCallEvent for call 2 completes with ELocalResume - expectedCallEventCall2 = RMobileCall::ELocalResume; - iCallControlTestHelper.WaitForMobileCallNotifyCallEvent(call2, - notifyCallEventCall2, - callEventCall2, - expectedCallEventCall2, - KErrNone); - - // Check RMobileCall::NotifyMobileCallStatusChange for call 2 completes with EStatusConnected - expectedMobileCallStatusCall2 = RMobileCall::EStatusConnected; - iCallControlTestHelper.WaitForMobileCallNotifyMobileCallStatusChange( - call2, - notifyMobileCallStatusChangeCall2, - mobileCallStatusCall2, - expectedMobileCallStatusCall2, - KErrNone); - - // Check RMobileCall::GetMobileCallStatus for call 2 returns status of EStatusConnected - ASSERT_EQUALS(call2.GetMobileCallStatus(getMobileCallStatusCall2), KErrNone, _L("RMobileCall::GetMobileCallStatus returned an error")); - ASSERT_EQUALS(getMobileCallStatusCall2, expectedMobileCallStatusCall2, _L("RMobileCall::GetMobileCallStatus did not return EStatusConnected")); - - // Check RMobileCall::NotifyMobileCallStatusChange for call 1 completes with EStatusConnected - expectedMobileCallStatusCall1 = RMobileCall::EStatusConnected; - iCallControlTestHelper.WaitForMobileCallNotifyMobileCallStatusChange( - call1, - notifyMobileCallStatusChangeCall1, - mobileCallStatusCall1, - expectedMobileCallStatusCall1, - KErrNone); - - // Check RMobileCall::GetMobileCallStatus for call 1 returns status of EStatusConnected - ASSERT_EQUALS(call1.GetMobileCallStatus(getMobileCallStatusCall1), KErrNone, _L("RMobileCall::GetMobileCallStatus returned an error")); - ASSERT_EQUALS(getMobileCallStatusCall1, expectedMobileCallStatusCall1, _L("RMobileCall::GetMobileCallStatus did not return EStatusConnected")); - - // Repost notifier for call 1 RCall::NotifyStatusChange - call1.NotifyStatusChange(notifyStatusChangeCall1, callStatusCall1); - - // Repost notifier for call 1 RMobileCall::NotifyMobileCallStatusChange - call1.NotifyMobileCallStatusChange(notifyMobileCallStatusChangeCall1, mobileCallStatusCall1); - - // Post notifier for call 2 RCall::NotifyStatusChange - TCoreEtelRequestStatus notifyStatusChangeCall2(call2, &RCall::NotifyStatusChangeCancel); - CleanupStack::PushL(notifyStatusChangeCall2); - RCall::TStatus callStatusCall2; - call2.NotifyStatusChange(notifyStatusChangeCall2, callStatusCall2); - - // Repost notifier for call 2 RMobileCall::NotifyMobileCallStatusChange - call2.NotifyMobileCallStatusChange(notifyMobileCallStatusChangeCall2, mobileCallStatusCall2); - - // Hang up call using call 1 - TCoreEtelRequestStatusrequestStatusHangUp(call1, &RCall::HangUpCancel); - CleanupStack::PushL(requestStatusHangUp); - call1.HangUp(requestStatusHangUp); - ASSERT_EQUALS(WaitForRequestWithTimeOut(requestStatusHangUp, ETimeMedium), KErrNone, _L("RMobileCall::HangUp timed-out")); - ASSERT_EQUALS(requestStatusHangUp.Int(), KErrNone, _L("RMobileCall::HangUp returned error")); - - // === Check status for call 1 and call 2 === - - // Check RCall::NotifyStatusChange for call 1 completes with EStatusHangingUp -> EStatusIdle. - expectedCallStatusCall1 = RCall::EStatusHangingUp; - iCallControlTestHelper.WaitForCallNotifyStatusChange(call1, - notifyStatusChangeCall1, - callStatusCall1, - expectedCallStatusCall1, - KErrNone); - - call1.NotifyStatusChange(notifyStatusChangeCall1, callStatusCall1); - expectedCallStatusCall1 = RCall::EStatusIdle; - iCallControlTestHelper.WaitForCallNotifyStatusChange(call1, - notifyStatusChangeCall1, - callStatusCall1, - expectedCallStatusCall1, - KErrNone); - - // Check RCall::GetStatus for call 1 returns EStatusIdle. - ASSERT_EQUALS(call1.GetStatus(getStatusCall1), KErrNone,_L("RCall::GetStatus returned an error")); - ASSERT_EQUALS(getStatusCall1, RCall::EStatusIdle, _L("RCall::GetStatus did not return EStatusIdle")); - - // Check RMobileCall::NotifyMobileCallStatusChange for call 1 completes with EStatusDisconnecting -> EStatusIdle. - expectedMobileCallStatusCall1 = RMobileCall::EStatusDisconnecting; - iCallControlTestHelper.WaitForMobileCallNotifyMobileCallStatusChange( - call1, - notifyMobileCallStatusChangeCall1, - mobileCallStatusCall1, - expectedMobileCallStatusCall1, - KErrNone); - - - call1.NotifyMobileCallStatusChange(notifyMobileCallStatusChangeCall1, mobileCallStatusCall1); - expectedMobileCallStatusCall1 = RMobileCall::EStatusIdle; - iCallControlTestHelper.WaitForMobileCallNotifyMobileCallStatusChange( - call1, - notifyMobileCallStatusChangeCall1, - mobileCallStatusCall1, - expectedMobileCallStatusCall1, - KErrNone); - - // Check RMobileCall::GetMobileCallStatus for call 1 returns status of EStatusIdle. - ASSERT_EQUALS(call1.GetMobileCallStatus(getMobileCallStatusCall1), KErrNone, _L("RMobileCall::GetMobileCallStatus returned an error")); - ASSERT_EQUALS(getMobileCallStatusCall1, expectedMobileCallStatusCall1, _L("RMobileCall::GetMobileCallStatus did not return EStatusIdle")); - - // Check RCall::NotifyStatusChange for call 2 completes with EStatusHangingUp ->EStatusIdle.. - RCall::TStatus expectedCallStatusCall2 = RCall::EStatusHangingUp; - iCallControlTestHelper.WaitForCallNotifyStatusChange(call2, - notifyStatusChangeCall2, - callStatusCall2, - expectedCallStatusCall2, - KErrNone); - - call2.NotifyStatusChange(notifyStatusChangeCall2, callStatusCall2); - expectedCallStatusCall2 = RCall::EStatusIdle; - iCallControlTestHelper.WaitForCallNotifyStatusChange(call2, - notifyStatusChangeCall2, - callStatusCall2, - expectedCallStatusCall2, - KErrNone); - - // Check RCall::GetStatus for call 2 returns EStatusIdle. - RCall::TStatus getStatusCall2; - ASSERT_EQUALS(call2.GetStatus(getStatusCall2), KErrNone,_L("RCall::GetStatus returned an error")); - ASSERT_EQUALS(getStatusCall2, RCall::EStatusIdle, _L("RCall::GetStatus did not return EStatusIdle")); - - // Check RMobileCall::NotifyMobileCallStatusChange for call 2 completes with EStatusDisconnecting -> EStatusIdle. - expectedMobileCallStatusCall2 = RMobileCall::EStatusDisconnecting; - iCallControlTestHelper.WaitForMobileCallNotifyMobileCallStatusChange( - call2, - notifyMobileCallStatusChangeCall2, - mobileCallStatusCall2, - expectedMobileCallStatusCall2, - KErrNone); - - call2.NotifyMobileCallStatusChange(notifyMobileCallStatusChangeCall2, mobileCallStatusCall2); - expectedMobileCallStatusCall2 = RMobileCall::EStatusIdle; - iCallControlTestHelper.WaitForMobileCallNotifyMobileCallStatusChange( - call2, - notifyMobileCallStatusChangeCall2, - mobileCallStatusCall2, - expectedMobileCallStatusCall2, - KErrNone); - - // Check RMobileCall::GetMobileCallStatus for call 2 returns status of EStatusIdle. - ASSERT_EQUALS(call2.GetMobileCallStatus(getMobileCallStatusCall2), KErrNone, _L("RMobileCall::GetMobileCallStatus returned an error")); - ASSERT_EQUALS(getMobileCallStatusCall2, expectedMobileCallStatusCall2, _L("RMobileCall::GetMobileCallStatus did not return EStatusIdle")); - - //////////////////////////////////////////////////////////////// - // TEST END - //////////////////////////////////////////////////////////////// - - StartCleanup(); - - // Pop - // notifyStatusChangeCall1 - // notifyMobileCallStatusChangeCall1 - // dialStatus - // notifyCallEventCall2 - // notifyMobileCallStatusChangeCall2 - // holdRequestStatusCall2 - // requestResumeCallStatus - // notifyStatusChangeCall2 - // requestStatusHangUp - - CleanupStack::PopAndDestroy(9, ¬ifyStatusChangeCall1); - - return TestStepResult(); - } - -TPtrC CCTSYIntegrationTestCallControl0033::GetTestStepName() -/** - * @return The test step name. - */ - { - return _L("CCTSYIntegrationTestCallControl0033"); - } - - - -CCTSYIntegrationTestCallControl0034::CCTSYIntegrationTestCallControl0034(CEtelSessionMgr& aEtelSessionMgr) - : CCTSYIntegrationTestCallControlBase(aEtelSessionMgr) -/** - * Constructor. - */ - { - SetTestStepName(CCTSYIntegrationTestCallControl0034::GetTestStepName()); - } - -CCTSYIntegrationTestCallControl0034::~CCTSYIntegrationTestCallControl0034() -/** - * Destructor. - */ - { - } - -TVerdict CCTSYIntegrationTestCallControl0034::doTestStepL() -/** - * @SYMTestCaseID BA-CTSY-INT-CCON-0034 - * @SYMFssID BA/CTSY/CCON-0034 - * @SYMTestCaseDesc Attempt to transfer a connected call when no other call is on hold - * @SYMTestPriority High - * @SYMTestActions RMobileCall::Transfer, RCall::GetCaps, RMobileCall::NotifyMobileCallCapsChange, RMobileCall::GetMobileCallStatus, RCall::NotifyStatusChange, RMobileCall::NotifyMobileCallStatusChange, RCall::NotifyCapsChange, RCall::GetStatus, RMobileCall::GetMobileCallCaps - * @SYMTestExpectedResults Pass - KErrNotReady? On attempt to transfer call when no other call is on hold. - * @SYMTestType CIT - * @SYMTestCaseDependencies live/automatic - * - * Reason for test: Verify KErrNotReady returned on attempt to transfer and call stays connected. - * - * @return - TVerdict code - */ - { - - //////////////////////////////////////////////////////////////// - // SET UP - //////////////////////////////////////////////////////////////// - - // Call TNetworkTsyTestHelper::WaitForRegisteredOnHomeNetworkL - RMobilePhone& phone = iEtelSessionMgr.GetPhoneL(KMainServer,KMainPhone); - CHECK_EQUALS_L(iNetworkTestHelper.WaitForRegisteredOnHomeNetworkL(phone), KErrNone, - _L("TNetworkTsyTestHelper::WaitForRegisteredOnHomeNetworkL returned with an error")); - - // Check phone supports KCapsVoice. - RPhone::TCaps phoneCaps; - CHECK_EQUALS_L(phone.GetCaps(phoneCaps), KErrNone, _L("RMobilePhone::GetCaps returned an error")); - CHECK_BITS_SET_L(phoneCaps.iFlags, RMobilePhone::KCapsVoice, KNoUnwantedBits, _L("RMobilePhone::GetCaps did not return KCapsVoice as expected")); - - // Get call. - RMobileCall& mobileCall = iEtelSessionMgr.GetCallL(KMainServer, KMainPhone, KVoiceLine, KCall1); - - // Get phone number - TPtrC phoneNumber; - CHECK_TRUE_L(GetStringFromConfig(KIniVoiceNumSection, KIniVoiceNumber1, phoneNumber) != EFalse, _L("GetStringFromConfig did not complete as expected")); - - //////////////////////////////////////////////////////////////// - // SET UP END - //////////////////////////////////////////////////////////////// - - StartTest(); - - //////////////////////////////////////////////////////////////// - // TEST START - //////////////////////////////////////////////////////////////// - - // Post notifier for RCall::NotifyCapsChange - RCall::TCaps callCaps; - TCoreEtelRequestStatus notifyCapsChangeStatus (mobileCall, &RCall::NotifyCapsChangeCancel); - CleanupStack::PushL(notifyCapsChangeStatus); - mobileCall.NotifyCapsChange(notifyCapsChangeStatus, callCaps); - - // Post notifier for RMobileCall::NotifyMobileCallCapsChange - RMobileCall::TMobileCallCapsV1 mobileCallCaps; - RMobileCall::TMobileCallCapsV1Pckg mobileCallCapsPckg(mobileCallCaps); - TExtEtelRequestStatus notifyMobileCapsChangeStatus(mobileCall, EMobileCallNotifyMobileCallCapsChange); - CleanupStack::PushL(notifyMobileCapsChangeStatus); - mobileCall.NotifyMobileCallCapsChange(notifyMobileCapsChangeStatus, mobileCallCapsPckg); - - // Post notifier RMobileCall::NotifyMobileCallStatusChange - TExtEtelRequestStatus notifyMobileCallStatusChangeStatus (mobileCall, EMobileCallNotifyMobileCallStatusChange); - CleanupStack::PushL(notifyMobileCallStatusChangeStatus); - RMobileCall::TMobileCallStatus mobileCallStatus; - mobileCall.NotifyMobileCallStatusChange(notifyMobileCallStatusChangeStatus, mobileCallStatus); - - // Post notifier for RCall::NotifyStatusChange - TCoreEtelRequestStatus notifyCallStatusChangeStatus (mobileCall, &RCall::NotifyStatusChangeCancel); - CleanupStack::PushL(notifyCallStatusChangeStatus); - RCall::TStatus callStatus; - mobileCall.NotifyStatusChange(notifyCallStatusChangeStatus,callStatus); - - // Dial a number that answers. - TCoreEtelRequestStatus getDialStatus(mobileCall, &RMobileCall::DialCancel); - CleanupStack::PushL(getDialStatus); - DEBUG_PRINTF2(_L("Board Now Dialling: %S"), &phoneNumber); - mobileCall.Dial(getDialStatus, phoneNumber); - ASSERT_EQUALS(WaitForRequestWithTimeOut(getDialStatus, ETimeLong), KErrNone, _L("RMobileCall::Dial timed-out")); - ASSERT_EQUALS(getDialStatus.Int(), KErrNone, _L("RMobileCall::Dial returned error")); - - // === Check call status === - - // Check RCall::NotifyStatusChange completes with EStatusDialling -> EStatusConnecting -> EStatusConnected. - RCall::TStatus expectedCallStatus = RCall::EStatusDialling; - const TInt expectedStatus = KErrNone; - iCallControlTestHelper.WaitForCallNotifyStatusChange(mobileCall, - notifyCallStatusChangeStatus, - callStatus, - expectedCallStatus, - expectedStatus); - - mobileCall.NotifyStatusChange(notifyCallStatusChangeStatus, callStatus); - expectedCallStatus = RCall::EStatusConnecting; - iCallControlTestHelper.WaitForCallNotifyStatusChange(mobileCall, - notifyCallStatusChangeStatus, - callStatus, - expectedCallStatus, - expectedStatus); - - mobileCall.NotifyStatusChange(notifyCallStatusChangeStatus, callStatus); - expectedCallStatus = RCall::EStatusConnected; - iCallControlTestHelper.WaitForCallNotifyStatusChange(mobileCall, - notifyCallStatusChangeStatus, - callStatus, - expectedCallStatus, - expectedStatus); - - // Check RCall::GetStatus returns EStatusConnected. - ASSERT_EQUALS(mobileCall.GetStatus(callStatus), KErrNone, _L("RCall::GetStatus returned an error")); - ASSERT_EQUALS(callStatus, RCall::EStatusConnected, _L("RCall::GetStatus did not return correct status.")); - - // Check RMobileCall::NotifyMobileCallStatusChange completes with EStatusDialling -> EStatusConnecting -> EStatusConnected. - RMobileCall::TMobileCallStatus expectedMobileCallStatus = RMobileCall::EStatusDialling; - iCallControlTestHelper.WaitForMobileCallNotifyMobileCallStatusChange(mobileCall, - notifyMobileCallStatusChangeStatus, - mobileCallStatus, - expectedMobileCallStatus, - expectedStatus); - - mobileCall.NotifyMobileCallStatusChange(notifyMobileCallStatusChangeStatus, mobileCallStatus); - expectedMobileCallStatus = RMobileCall::EStatusConnecting; - iCallControlTestHelper.WaitForMobileCallNotifyMobileCallStatusChange(mobileCall, - notifyMobileCallStatusChangeStatus, - mobileCallStatus, - expectedMobileCallStatus, - expectedStatus); - - mobileCall.NotifyMobileCallStatusChange(notifyMobileCallStatusChangeStatus, mobileCallStatus); - expectedMobileCallStatus = RMobileCall::EStatusConnected; - iCallControlTestHelper.WaitForMobileCallNotifyMobileCallStatusChange(mobileCall, - notifyMobileCallStatusChangeStatus, - mobileCallStatus, - expectedMobileCallStatus, - expectedStatus); - - // Check RMobileCall::GetMobileCallStatus returns status of EStatusConnected. - ASSERT_EQUALS(mobileCall.GetMobileCallStatus(mobileCallStatus), KErrNone, _L("RMobileCall::GetMobileCallStatus returned an error")); - ASSERT_EQUALS(mobileCallStatus, RMobileCall::EStatusConnected, _L("RMobileCall::GetMobileCallStatus did not return EStatusConnected as expected.")); - - // === Check call caps === - - // Check RCall::NotifyCapsChange completes with caps in set of KCapsVoice | KCapsHangUp. - RCall::TCaps wantedCaps; - RCall::TCaps unwantedCaps; - const TInt wantedStatus = KErrNone; - wantedCaps.iFlags = RCall::KCapsVoice | RCall::KCapsHangUp; - unwantedCaps.iFlags = 0; - iCallControlTestHelper.WaitForCallNotifyCapsChange(mobileCall, notifyCapsChangeStatus, callCaps, wantedCaps, unwantedCaps, wantedStatus); - - // Check RCall::GetCaps supports KCapsHangUp | KCapsVoice. - ASSERT_EQUALS(mobileCall.GetCaps(callCaps),KErrNone, _L("RCall::GetCaps returned an error")); - ASSERT_BITS_SET(callCaps.iFlags, wantedCaps.iFlags, KNoUnwantedBits, _L("RCall::GetCaps returned wrong caps")); - - // Check RMobileCall::NotifyMobileCallCapsChange completes with iCallControlCaps in set of KCapsVoice | KCapsHold | KCapsHangUp - RMobileCall::TMobileCallCapsV1 wantedMobileCaps; - wantedMobileCaps.iCallControlCaps = RMobileCall::KCapsVoice | RMobileCall::KCapsHold | RMobileCall::KCapsHangUp; - TCmpRMobileCallTMobileCallCaps mobileCapsComp(wantedMobileCaps,mobileCallCaps, *this); - iCallControlTestHelper.WaitForMobileCallNotifyMobileCallCapsChange(mobileCall, notifyMobileCapsChangeStatus, mobileCapsComp, wantedStatus); - - // Check RMobileCall::NotifyMobileCallCapsChange completes with iCallControlCaps NOT in set of KCapsTransfer - RMobileCall::TMobileCallCapsV1 unwantedMobileCaps; - unwantedMobileCaps.iCallControlCaps = RMobileCall::KCapsTransfer; - ASSERT_BITS_SET(mobileCallCaps.iCallControlCaps, KNoWantedBits, unwantedMobileCaps.iCallControlCaps, _L("RMobileCall::NotifyMobileCallCapsChange contains unwanted caps KCapsTransfer")); - - // Check RMobileCall::NotifyMobileCallCapsChange completes with iCallEventCaps in set of KCapsLocalHold | KCapsLocalTransfer | KCapsRemoteHold | KCapsRemoteTerminate | KCapsRemoteConferenceCreate. - wantedMobileCaps.iCallEventCaps = RMobileCall::KCapsLocalHold | RMobileCall::KCapsLocalTransfer | - RMobileCall::KCapsRemoteHold | RMobileCall::KCapsRemoteTerminate | - RMobileCall::KCapsRemoteConferenceCreate; - ASSERT_BITS_SET(mobileCallCaps.iCallEventCaps, wantedMobileCaps.iCallEventCaps, KNoUnwantedBits, _L("RMobileCall::NotifyMobileCallCapsChange returned unexpected iCallEventCaps")); - - // Check RMobileCall::GetMobileCallCaps includes iCallControlCaps in set of KCapsVoice | KCapsHold | KCapsHangUp - // Check RMobileCall::GetMobileCallCaps includes iCallControlCaps NOT in set of KCapsTransfer - ASSERT_EQUALS(mobileCall.GetMobileCallCaps(mobileCallCapsPckg), KErrNone, _L("RMobileCall::GetMobileCallCaps returned an error")) - ASSERT_BITS_SET(mobileCallCaps.iCallControlCaps, wantedMobileCaps.iCallControlCaps, unwantedMobileCaps.iCallControlCaps, _L("RMobileCall::GetMobileCallCaps returned unexpected iCallControlCaps")); - - // Check RMobileCall::GetMobileCallCaps includes iCallEventCaps in set of KCapsLocalHold | KCapsLocalTransfer | KCapsRemoteHold | KCapsRemoteTerminate | KCapsRemoteConferenceCreate. - ASSERT_BITS_SET(mobileCallCaps.iCallEventCaps, wantedMobileCaps.iCallEventCaps, KNoUnwantedBits, _L("RMobileCall::GetMobileCallCaps returned unexpected iCallEventCaps")); - - // Transfer call. - TExtEtelRequestStatus getTransferStatus(mobileCall, EMobileCallTransfer); - CleanupStack::PushL(getTransferStatus); - mobileCall.Transfer(getTransferStatus); - ASSERT_EQUALS(WaitForRequestWithTimeOut(getTransferStatus, ETimeLong), KErrNone, _L("RMobileCall::Transfer timed-out")); - - // Check KErrNotReady is returned. - ASSERT_EQUALS(getTransferStatus.Int(), KErrNotReady, _L("RMobileCall::Transfer did not return KErrNotReady as expected")); - - // Check RCall::GetStatus returns EStatusConnected. - ASSERT_EQUALS(mobileCall.GetStatus(callStatus), KErrNone, _L("RCall::GetStatus returned an error")); - ASSERT_EQUALS(callStatus, RCall::EStatusConnected, _L("RCall::GetStatus did not return EStatusConnected as expected")); - - // Check RMobileCall::GetMobileCallStatus returns status of EStatusConnected. - ASSERT_EQUALS(mobileCall.GetMobileCallStatus(mobileCallStatus), KErrNone, _L("RMobileCall::GetMobileCallStatus returned an error")); - ASSERT_EQUALS(mobileCallStatus, RMobileCall::EStatusConnected, _L("RMobileCall::GetMobileCallStatus did not return EStatusConnected as expected")); - - // Hangup call 1. - TCoreEtelRequestStatus hangUpStatus (mobileCall, &RCall::HangUpCancel); - CleanupStack::PushL(hangUpStatus); - mobileCall.HangUp(hangUpStatus); - ASSERT_EQUALS(WaitForRequestWithTimeOut(hangUpStatus, ETimeMedium), KErrNone, _L("RCall::HangUp timed-out")); - ASSERT_EQUALS(hangUpStatus.Int(), KErrNone, _L("RCall::HangUp returned an error")); - - //////////////////////////////////////////////////////////////// - // TEST END - //////////////////////////////////////////////////////////////// - - StartCleanup(); - - // Pop - // notifyCapsChangeStatus - // notifyMobileCapsChangeStatus - // notifyMobileCallStatusChangeStatus - // notifyCallStatusChangeStatus - // getDialStatus - // setTransferStatus - // hangUpStatus - CleanupStack::PopAndDestroy(7, ¬ifyCapsChangeStatus); - - return TestStepResult(); - } - -TPtrC CCTSYIntegrationTestCallControl0034::GetTestStepName() -/** - * @return The test step name. - */ - { - return _L("CCTSYIntegrationTestCallControl0034"); - } - - - -CCTSYIntegrationTestCallControl0035::CCTSYIntegrationTestCallControl0035(CEtelSessionMgr& aEtelSessionMgr) - : CCTSYIntegrationTestCallControlBase(aEtelSessionMgr) -/** - * Constructor. - */ - { - SetTestStepName(CCTSYIntegrationTestCallControl0035::GetTestStepName()); - } - -CCTSYIntegrationTestCallControl0035::~CCTSYIntegrationTestCallControl0035() -/** - * Destructor. - */ - { - } - -TVerdict CCTSYIntegrationTestCallControl0035::doTestStepL() -/** - * @SYMTestCaseID BA-CTSY-INT-CCON-0035 - * @SYMFssID BA/CTSY/CCON-0035 - * @SYMTestCaseDesc Attempt to transfer a held call when no other call is connected - * @SYMTestPriority High - * @SYMTestActions RMobileCall::Transfer, RMobileCall::GetMobileCallStatus, RCall::GetStatus, RMobileCall::GetMobileCallCaps - * @SYMTestExpectedResults Pass - KErrNotReady? On attempt to transfer call when no other call is active. - * @SYMTestType CIT - * @SYMTestCaseDependencies live/automatic - * - * Reason for test: Verify KErrNotReady returned on attempt to transfer and call stays held. - * - * @return - TVerdict code - */ - { - - //////////////////////////////////////////////////////////////// - // SET UP - //////////////////////////////////////////////////////////////// - - - // Call TNetworkTsyTestHelper::WaitForRegisteredOnHomeNetworkL - RMobilePhone& phone = iEtelSessionMgr.GetPhoneL(KMainServer,KMainPhone); - CHECK_EQUALS_L(iNetworkTestHelper.WaitForRegisteredOnHomeNetworkL(phone), KErrNone, - _L("TNetworkTsyTestHelper::WaitForRegisteredOnHomeNetworkL returned with an error")); - - // Check phone supports KCapsVoice. - RPhone::TCaps phoneCaps; - CHECK_EQUALS_L(phone.GetCaps(phoneCaps), KErrNone, _L("RMobilePhone::GetCaps returned an error")); - CHECK_BITS_SET_L(phoneCaps.iFlags, RMobilePhone::KCapsVoice, KNoUnwantedBits, _L("RMobilePhone::GetCaps did not return KCapsVoice as expected")); - - // Get Voice line 1. - RMobileLine& mobileVoiceLine1 = iEtelSessionMgr.GetLineL(KMainServer, KMainPhone, KVoiceLine); - - // Get call 1. - RMobileCall& mobileCall1 = iEtelSessionMgr.GetCallL(KMainServer, KMainPhone, KVoiceLine, KCall1); - - // Dial a number that answers on call 1. - TPtrC phoneNumber; - CHECK_TRUE_L(GetStringFromConfig(KIniVoiceNumSection, KIniVoiceNumber1, phoneNumber) != EFalse, _L("GetStringFromConfig did not complete as expected")); - TCoreEtelRequestStatus getDialStatus(mobileCall1, &RMobileCall::DialCancel); - CleanupStack::PushL(getDialStatus); - DEBUG_PRINTF2(_L("Board Now Dialling: %S"), &phoneNumber); - mobileCall1.Dial(getDialStatus, phoneNumber); - CHECK_EQUALS_L(WaitForRequestWithTimeOut(getDialStatus, ETimeLong), KErrNone, _L("RMobileCall::Dial timed-out")); - CHECK_EQUALS_L(getDialStatus.Int(), KErrNone, _L("RMobileCall::Dial returned error")); - - // Hold call 1. - TExtEtelRequestStatus getHoldStatus(mobileCall1, EMobileCallHold); - CleanupStack::PushL(getHoldStatus); - mobileCall1.Hold(getHoldStatus); - CHECK_EQUALS_L(WaitForRequestWithTimeOut(getHoldStatus, ETimeLong), KErrNone, _L("RMobileCall::Hold timed-out")); - CHECK_EQUALS_L(getHoldStatus.Int(), KErrNone, _L("RMobileCall::Hold returned error")); - - // Ensure mobile call status of call 1 is EStatusHold - RMobileCall::TMobileCallStatus mobileCallStatus; - CHECK_EQUALS_L(mobileCall1.GetMobileCallStatus(mobileCallStatus), KErrNone, _L("RMobileCall::GetMobileCallStatus returned an error")); - CHECK_EQUALS_L(mobileCallStatus, RMobileCall::EStatusHold, _L("RMobileCall::GetMobileCallStatus did not return EStatusHold as expected")); - - - //////////////////////////////////////////////////////////////// - // SET UP END - //////////////////////////////////////////////////////////////// - - StartTest(); - - //////////////////////////////////////////////////////////////// - // TEST START - //////////////////////////////////////////////////////////////// - - - // === Check mobile call caps === - - // Check RMobileCall::GetMobileCallCaps includes iCallControlCaps in set of KCapsVoice | KCapsResume | KCapsHangUp - // Check RMobileCall::GetMobileCallCaps includes iCallControlCaps NOT in set of KCapsTransfer - RMobileCall::TMobileCallCapsV1 mobileCallCaps; - RMobileCall::TMobileCallCapsV1Pckg mobileCallCapsPckg(mobileCallCaps); - RMobileCall::TMobileCallCapsV1 wantedMobileCaps; - wantedMobileCaps.iCallControlCaps = RMobileCall::KCapsVoice | RMobileCall::KCapsResume | RMobileCall::KCapsHangUp; - RMobileCall::TMobileCallCapsV1 unwantedMobileCaps; - unwantedMobileCaps.iCallControlCaps = RMobileCall::KCapsTransfer; - - ASSERT_EQUALS(mobileCall1.GetMobileCallCaps(mobileCallCapsPckg), KErrNone, _L("RMobileCall::GetMobileCallCaps returned an error")); - ASSERT_BITS_SET(mobileCallCaps.iCallControlCaps, wantedMobileCaps.iCallControlCaps, unwantedMobileCaps.iCallControlCaps , _L("RMobileCall::GetMobileCallCaps returned unexpected iCallControlCaps")); - - // Check RMobileCall::GetMobileCallCaps includes iCallEventCaps in set of KCapsLocalHold | KCapsLocalTransfer | KCapsRemoteHold | KCapsRemoteTerminate | KCapsRemoteConferenceCreate. - wantedMobileCaps.iCallEventCaps = RMobileCall::KCapsLocalHold | RMobileCall::KCapsLocalTransfer | RMobileCall::KCapsRemoteHold | RMobileCall::KCapsRemoteTerminate | RMobileCall::KCapsRemoteConferenceCreate; - ASSERT_BITS_SET(mobileCallCaps.iCallEventCaps, wantedMobileCaps.iCallEventCaps, KNoUnwantedBits, _L("RMobileCall::GetMobileCallCaps returned unexpected iCallEventCaps")); - - // Transfer call. - TExtEtelRequestStatus getTransferStatus(mobileCall1, EMobileCallTransfer); - CleanupStack::PushL(getTransferStatus); - mobileCall1.Transfer(getTransferStatus); - ASSERT_EQUALS(WaitForRequestWithTimeOut(getTransferStatus, ETimeLong), KErrNone, _L("RMobileCall::Transfer timed-out")); - - // Check KErrNotReady is returned. - ASSERT_EQUALS(getTransferStatus.Int(), KErrNotReady, _L("RMobileCall::Transfer did not return KErrNotReady as expected")); - - // Check RCall::GetStatus returns EStatusConnected. - RCall::TStatus callStatus; - ASSERT_EQUALS(mobileCall1.GetStatus(callStatus), KErrNone, _L("RCall::GetStatus returned an error")); - ASSERT_EQUALS(callStatus, RCall::EStatusConnected, _L("RCall::GetStatus did not return EStatusConnected as expected")); - - // Check RMobileCall::GetMobileCallStatus returns status of EStatusHold. - ASSERT_EQUALS(mobileCall1.GetMobileCallStatus(mobileCallStatus), KErrNone, _L("RMobileCall::GetMobileCallStatus returned an error")); - ASSERT_EQUALS(mobileCallStatus, RMobileCall::EStatusHold, _L("RMobileCall::GetStatus did not return EStatusHold as expected")); - - // Hangup call 1. - TCoreEtelRequestStatus hangUpStatus (mobileCall1, &RCall::HangUpCancel); - CleanupStack::PushL(hangUpStatus); - mobileCall1.HangUp(hangUpStatus); - ASSERT_EQUALS(WaitForRequestWithTimeOut(hangUpStatus, ETimeMedium), KErrNone, _L("RCall::HangUp timed-out")); - ASSERT_EQUALS(hangUpStatus.Int(), KErrNone, _L("RCall::HangUp returned an error")); - - - //////////////////////////////////////////////////////////////// - // TEST END - //////////////////////////////////////////////////////////////// - - StartCleanup(); - - // Pop: - // getDialStatus - // getHoldStatus - // getTransferStatus - // hangUpStatus - CleanupStack::PopAndDestroy(4, &getDialStatus); - - return TestStepResult(); - } - -TPtrC CCTSYIntegrationTestCallControl0035::GetTestStepName() -/** - * @return The test step name. - */ - { - return _L("CCTSYIntegrationTestCallControl0035"); - } - - - -CCTSYIntegrationTestCallControl0036::CCTSYIntegrationTestCallControl0036(CEtelSessionMgr& aEtelSessionMgr) - : CCTSYIntegrationTestCallControlBase(aEtelSessionMgr) -/** - * Constructor. - */ - { - SetTestStepName(CCTSYIntegrationTestCallControl0036::GetTestStepName()); - } - -CCTSYIntegrationTestCallControl0036::~CCTSYIntegrationTestCallControl0036() -/** - * Destructor. - */ - { - } - -TVerdict CCTSYIntegrationTestCallControl0036::doTestStepL() -/** - * @SYMTestCaseID BA-CTSY-INT-CCON-0036 - * @SYMFssID BA/CTSY/CCON-0036 - * @SYMTestCaseDesc Transfer a connected call and held call. - * @SYMTestPriority High - * @SYMTestActions RMobileCall::Transfer, RMobileCall::NotifyMobileCallStatusChange, RCall::NotifyStatusChange, RMobileCall::GetMobileCallStatus, RCall::GetStatus, RMobileCall::GetMobileCallCaps - * @SYMTestExpectedResults Pass - Call transferred successfully. - * @SYMTestType CIT - * @SYMTestCaseDependencies live/automatic - * - * Reason for test: Verify transfer succeeds and calls 1 and 2 are idle after transfer. - * - * @return - TVerdict code - */ - { - - //////////////////////////////////////////////////////////////// - // SET UP - //////////////////////////////////////////////////////////////// - - // Call TNetworkTsyTestHelper::WaitForRegisteredOnHomeNetworkL - RMobilePhone& phone = iEtelSessionMgr.GetPhoneL(KMainServer,KMainPhone); - CHECK_EQUALS_L(iNetworkTestHelper.WaitForRegisteredOnHomeNetworkL(phone), KErrNone, - _L("TNetworkTsyTestHelper::WaitForRegisteredOnHomeNetworkL returned with an error")); - - // Check phone supports KCapsVoice. - RPhone::TCaps phoneCaps; - CHECK_EQUALS_L(phone.GetCaps(phoneCaps), KErrNone, _L("RPhone::GetCaps returned an error")); - CHECK_BITS_SET_L(phoneCaps.iFlags, RPhone::KCapsVoice, KNoUnwantedBits, - _L("RPhone::GetCaps returned wrong caps")); - - //////////////////////////////////////////////////////////////// - // SET UP END - //////////////////////////////////////////////////////////////// - - StartTest(); - - //////////////////////////////////////////////////////////////// - // TEST START - //////////////////////////////////////////////////////////////// - - TPtrC number1, number2; - ASSERT_TRUE(GetStringFromConfig(KIniVoiceNumSection, KIniVoiceNumber1, number1) != EFalse, - _L("GetStringFromConfig did not complete as expected")); - ASSERT_TRUE(GetStringFromConfig(KIniVoiceNumSection, KIniVoiceNumber2, number2) != EFalse, - _L("GetStringFromConfig did not complete as expected")); - - // Loop for the two variations in this test. - for(TInt i=0; i < 2; ++i) - { - // Get calls. - RMobileCall& call1 = iEtelSessionMgr.GetCallL(KMainServer, KMainPhone, KVoiceLine, KCall3); - RMobileCall& call2 = iEtelSessionMgr.GetCallL(KMainServer, KMainPhone, KVoiceLine, KCall4); - - // Dial a number that answers on call 1. - DEBUG_PRINTF1(_L("Board Now Dialling: ")); - TCoreEtelRequestStatus dialStatus(call1, &RCall::DialCancel); - CleanupStack::PushL(dialStatus); - call1.Dial(dialStatus, number1); - CHECK_EQUALS_L(WaitForRequestWithTimeOut(dialStatus, ETimeLong), KErrNone, _L("RCall::Dial timed-out")); - CHECK_EQUALS_L(dialStatus.Int(), KErrNone, _L("RCall::Dial returned with an error")); - - // Hold call 1. - TExtEtelRequestStatus holdStatus(call1, EMobileCallHold); - CleanupStack::PushL(holdStatus); - call1.Hold(holdStatus); - CHECK_EQUALS_L(WaitForRequestWithTimeOut(holdStatus, ETimeMedium),KErrNone, _L("RMobileCall::Hold timed out")); - CHECK_EQUALS_L(holdStatus.Int(), KErrNone, _L("RMobileCall::Hold returned with an error")); - - // Ensure mobile call status of call 1 is EStatusHold - RMobileCall::TMobileCallStatus mobileCallStatus; - CHECK_EQUALS_L(call1.GetMobileCallStatus(mobileCallStatus), KErrNone, _L("RMobileCall::GetMobileCallStatus returned with an error")); - CHECK_EQUALS_L(mobileCallStatus, RMobileCall::EStatusHold, _L("RMobileCall::GetMobileCallStatus did not return EStatusHold as expected")); - - // === Check that it is not possible to transfer call 1 yet === - - // Check RMobileCall::GetMobileCallCaps for call 1 includes iCallControlCaps NOT in set of KCapsTransfer - RMobileCall::TMobileCallCapsV1 unWantedMobileCaps; - unWantedMobileCaps.iCallControlCaps = RMobileCall::KCapsTransfer; - RMobileCall::TMobileCallCapsV1 mobileCallCaps; - RMobileCall::TMobileCallCapsV1Pckg mobileCallCapsPckg(mobileCallCaps); - ASSERT_EQUALS(call1.GetMobileCallCaps(mobileCallCapsPckg), KErrNone, - _L("RMobileCall::GetMobileCallCaps returned an error")); - ASSERT_BITS_SET(mobileCallCaps.iCallControlCaps, mobileCallCaps.iCallControlCaps, unWantedMobileCaps.iCallControlCaps, - _L("RMobileCall::GetMobileCallCaps returned unexpected iCallControlCaps")); - - // Dial a number that answers on call 2. - DEBUG_PRINTF1(_L("Board Now Dialling 2nd call: ")); - TCoreEtelRequestStatus dialStatus2(call2, &RCall::DialCancel); - CleanupStack::PushL(dialStatus2); - call2.Dial(dialStatus2, number2); - ASSERT_EQUALS(WaitForRequestWithTimeOut(dialStatus2, ETimeLong), KErrNone, _L("RCall::Dial timed-out")); - ASSERT_EQUALS(dialStatus2.Int(), KErrNone, _L("RCall::Dial returned with an error")); - - // === Check that it is possible to transfer call 1 and 2 now === - - // Check RMobileCall::GetMobileCallCaps for call 1 includes iCallControlCaps in set of KCapsTransfer - ASSERT_EQUALS(call1.GetMobileCallCaps(mobileCallCapsPckg), KErrNone, _L("RMobileCall::GetMobileCallCaps returned an error")); - ASSERT_BITS_SET(mobileCallCaps.iCallControlCaps, RMobileCall::KCapsTransfer, KNoUnwantedBits, - _L("RMobileCall::GetMobileCallCaps returned unexpected iCallControlCaps")); - - // Check RMobileCall::GetMobileCallCaps for call 2 includes iCallControlCaps in set of KCapsTransfer - // Note: In light of the defect found in CTSY, defect Id 10052: CTSY not able to transfer the unheld call; - // it is not clear whether the unheld call (call2) should or should not have KCapsTransfer capability. - // The current implementation of CTSY DOES give the unheld call KCapsTransfer capability, so this test remains for now. - ASSERT_EQUALS(call2.GetMobileCallCaps(mobileCallCapsPckg), KErrNone, _L("RMobileCall::GetMobileCallCaps returned an error")); - ASSERT_BITS_SET(mobileCallCaps.iCallControlCaps, RMobileCall::KCapsTransfer, KNoUnwantedBits, - _L("RMobileCall::GetMobileCallCaps returned unexpected iCallControlCaps")); - - RMobileCall* callToTransfer; - if(i==0) - { - // Transfer call 1 - // $CTSYProblem LTSY propagating error -4285(KErrGsmCCFacilityRejected) to CTSY, which is correclty returning it back to client - // therefore error code does not indicate an error in the CTSY but rather that the LTSY/network is not supporting the requested operation. - callToTransfer = &call1; - } - else - { - // Transfer call 2 - callToTransfer = &call2; - } - - TExtEtelRequestStatus transferStatus(*callToTransfer, EMobileCallTransfer); - CleanupStack::PushL(transferStatus); - callToTransfer->Transfer(transferStatus); - ASSERT_EQUALS(WaitForRequestWithTimeOut(transferStatus, ETimeLong), KErrNone, _L("RCall::Transfer timed-out")); - - if(callToTransfer == &call2) - { - ASSERT_EQUALS(transferStatus.Int(), KErrNone, _L("RCall::Transfer of call2 returned with an error")); - } - else - { - ASSERT_EQUALS(transferStatus.Int(), KErrNone, _L("RCall::Transfer returned an unexpected status")); - } - - iEtelSessionMgr.ReleaseCall(KMainServer,KMainPhone,KVoiceLine,KCall3); - iEtelSessionMgr.ReleaseCall(KMainServer,KMainPhone,KVoiceLine,KCall4); - - User::After(3000000); - - // PopAndDestroy - // dialStatus - // holdStatus - // dialStatus2 - // transferStatus - CleanupStack::PopAndDestroy(4, &dialStatus); - } - - - //////////////////////////////////////////////////////////////// - // TEST END - //////////////////////////////////////////////////////////////// - - StartCleanup(); - - return TestStepResult(); - } - -TPtrC CCTSYIntegrationTestCallControl0036::GetTestStepName() -/** - * @return The test step name. - */ - { - return _L("CCTSYIntegrationTestCallControl0036"); - } - - -CCTSYIntegrationTestCallControl0037::CCTSYIntegrationTestCallControl0037(CEtelSessionMgr& aEtelSessionMgr) - : CCTSYIntegrationTestCallControlBase(aEtelSessionMgr) -/** - * Constructor. - */ - { - SetTestStepName(CCTSYIntegrationTestCallControl0037::GetTestStepName()); - } - -CCTSYIntegrationTestCallControl0037::~CCTSYIntegrationTestCallControl0037() -/** - * Destructor. - */ - { - } - -TVerdict CCTSYIntegrationTestCallControl0037::doTestStepL() -/** - * @SYMTestCaseID BA-CTSY-INT-CCON-0037 - * @SYMFssID BA/CTSY/CCON-0037 - * @SYMTestCaseDesc Close the phone when incoming call is coming. - * @SYMTestPriority High - * @SYMTestActions RLine::Open, RPhone::Close, RLine::NotifyIncomingCall, RPhone::Open, RLine::Close, RPhone::GetLineInfo - * @SYMTestExpectedResults Pass - Phone subsession closed cleanly. - * @SYMTestType CIT - * @SYMTestCaseDependencies live/automatic - * - * Reason for test: Verify incoming call notification completes and phone and line can be closed. - * - * @return - TVerdict code - */ - { - - //////////////////////////////////////////////////////////////// - // SET UP - //////////////////////////////////////////////////////////////// - - // Call TNetworkTsyTestHelper::WaitForRegisteredOnHomeNetworkL - RMobilePhone& phone = iEtelSessionMgr.GetPhoneL(KMainServer,KMainPhone); - CHECK_EQUALS_L(iNetworkTestHelper.WaitForRegisteredOnHomeNetworkL(phone), KErrNone, - _L("TNetworkTsyTestHelper::WaitForRegisteredOnHomeNetworkL returned with an error")); - - // Get line 1 - RMobileLine& mobileLine= iEtelSessionMgr.GetLineL(KMainServer, KMainPhone, KVoiceLine); - //////////////////////////////////////////////////////////////// - // SET UP END - //////////////////////////////////////////////////////////////// - - StartTest(); - - //////////////////////////////////////////////////////////////// - // TEST START - //////////////////////////////////////////////////////////////// - - - // Register for notification of incoming call with RLine::NotifyIncomingCall - TName name; - TCoreEtelRequestStatus notifyIncomingCallStatus (mobileLine,&RLine::NotifyIncomingCallCancel); - CleanupStack::PushL(notifyIncomingCallStatus); - mobileLine.NotifyIncomingCall(notifyIncomingCallStatus,name); - - // Request for incoming call from RPS. - ASSERT_EQUALS (RPSRequestIncomingCallL(EVoiceLine), KErrNone, _L("CCTSYIntegrationTestSuiteStepBase::RPSRequestIncomingCallL returned with an error")); - - // Cancel notification of incoming call with RLine::NotifyIncomingCallCancel - notifyIncomingCallStatus.Cancel(); - - // release phone. - iEtelSessionMgr.ReleaseLine(KMainServer, KMainPhone, KVoiceLine); - - //////////////////////////////////////////////////////////////// - // TEST END - //////////////////////////////////////////////////////////////// - - StartCleanup(); - - CleanupStack::PopAndDestroy(¬ifyIncomingCallStatus); - - return TestStepResult(); - } - -TPtrC CCTSYIntegrationTestCallControl0037::GetTestStepName() -/** - * @return The test step name. - */ - { - return _L("CCTSYIntegrationTestCallControl0037"); - } - - - -CCTSYIntegrationTestCallControl0038::CCTSYIntegrationTestCallControl0038(CEtelSessionMgr& aEtelSessionMgr) - : CCTSYIntegrationTestCallControlBase(aEtelSessionMgr) -/** - * Constructor. - */ - { - SetTestStepName(CCTSYIntegrationTestCallControl0038::GetTestStepName()); - } - -CCTSYIntegrationTestCallControl0038::~CCTSYIntegrationTestCallControl0038() -/** - * Destructor. - */ - { - } - -TVerdict CCTSYIntegrationTestCallControl0038::doTestStepL() -/** - * @SYMTestCaseID BA-CTSY-INT-CCON-0038 - * @SYMFssID BA/CTSY/CCON-0038 - * @SYMTestCaseDesc Cancel transfer - * @SYMTestPriority High - * @SYMTestActions RMobileCall::Transfer, RMobileCall::Transfer - * @SYMTestExpectedResults Pass - Transfer cancelled. - * @SYMTestType CIT - * @SYMTestCaseDependencies live/automatic - * - * Reason for test: Verify transfer can be cancelled. - * - * @return - TVerdict code - */ - { - - //////////////////////////////////////////////////////////////// - // SET UP - //////////////////////////////////////////////////////////////// - - // Call TNetworkTsyTestHelper::WaitForRegisteredOnHomeNetworkL - RMobilePhone& phone = iEtelSessionMgr.GetPhoneL(KMainServer,KMainPhone); - CHECK_EQUALS_L(iNetworkTestHelper.WaitForRegisteredOnHomeNetworkL(phone), KErrNone, _L("TNetworkTsyTestHelper::WaitForRegisteredOnHomeNetworkL returned with an error")); - - // Get Voice line 1. - RMobileLine& voiceLine = iEtelSessionMgr.GetLineL(KMainServer, KMainPhone, KVoiceLine); - - // Check phone supports KCapsVoice. - RLine::TCaps lineCaps; - CHECK_EQUALS_L(voiceLine.GetCaps(lineCaps), KErrNone, _L("RMobileLine::GetCaps returned an error")); - CHECK_BITS_SET_L(lineCaps.iFlags, RLine::KCapsVoice, KNoUnwantedBits, _L("RLine::GetCaps returned wrong caps")); - - // Get call 1. - RMobileCall& call1 = iEtelSessionMgr.GetCallL(KMainServer, KMainPhone, KVoiceLine, KCall1); - - // Get call 2. - RMobileCall& call2 = iEtelSessionMgr.GetCallL(KMainServer, KMainPhone, KVoiceLine, KCall2); - - //////////////////////////////////////////////////////////////// - // SET UP END - //////////////////////////////////////////////////////////////// - - StartTest(); - - //////////////////////////////////////////////////////////////// - // TEST START - //////////////////////////////////////////////////////////////// - - // Post notifier - const TInt expectedStatus = KErrNone; - TExtEtelRequestStatus notifyMobileCallStatusChangeStatus (call1, EMobileCallNotifyMobileCallStatusChange); - CleanupStack::PushL(notifyMobileCallStatusChangeStatus); - RMobileCall::TMobileCallStatus mobileCallStatus; - RMobileCall::TMobileCallStatus mobileCallStatus2; - call1.NotifyMobileCallStatusChange(notifyMobileCallStatusChangeStatus, mobileCallStatus); - - // Dial a number that answers. - TPtrC number; - ASSERT_TRUE(GetStringFromConfig(KIniVoiceNumSection, KIniVoiceNumber1, number) != EFalse, _L("CTestStep::GetStringFromConfig did not complete as expected")); - TCoreEtelRequestStatus dialStatus(call1, &RCall::DialCancel); - CleanupStack::PushL(dialStatus); - call1.Dial(dialStatus, number); - ASSERT_EQUALS(WaitForRequestWithTimeOut(dialStatus, ETimeMedium), KErrNone, _L("RCall::Dial timed-out")); - ASSERT_EQUALS(dialStatus.Int(), KErrNone, _L("RCall::Dial returned with an error")); - - // Wait for call to be connected. - RMobileCall::TMobileCallStatus expectedMobileCallStatus = RMobileCall::EStatusConnected; - iCallControlTestHelper.WaitForMobileCallNotifyMobileCallStatusChange(call1, - notifyMobileCallStatusChangeStatus, - mobileCallStatus, - expectedMobileCallStatus , - expectedStatus); - - // Check RMobileCall::GetMobileCallStatus returns status of EStatusConnected. - ASSERT_EQUALS(call1.GetMobileCallStatus(mobileCallStatus), KErrNone, _L("RMobileCall::GetMobileCallStatus returned an error")); - ASSERT_EQUALS(mobileCallStatus, RMobileCall::EStatusConnected, _L("RMobileCall::GetMobileCallStatus did not set call status EStatusConnected as expected")); - - // Hold call 1. - TExtEtelRequestStatus getHoldStatus(call1, EMobileCallHold); - CleanupStack::PushL(getHoldStatus); - call1.Hold(getHoldStatus); - ASSERT_EQUALS(WaitForRequestWithTimeOut(getHoldStatus, ETimeMedium), KErrNone, _L("RMobileCall::Hold timed-out.")); - ASSERT_EQUALS(getHoldStatus.Int(), KErrNone, _L("RMobileCall::Hold returned error.")); - - // Post notifier - TExtEtelRequestStatus notifyMobileCallStatusChangeStatus2 (call2, EMobileCallNotifyMobileCallStatusChange); - CleanupStack::PushL(notifyMobileCallStatusChangeStatus2); - call2.NotifyMobileCallStatusChange(notifyMobileCallStatusChangeStatus2, mobileCallStatus2); - - // Dial another number that answers. - ASSERT_TRUE(GetStringFromConfig(KIniVoiceNumSection, KIniVoiceNumber2, number) != EFalse, _L("CTestStep::GetStringFromConfig did not complete as expected")); - TCoreEtelRequestStatus dialStatus2(call2, &RCall::DialCancel); - CleanupStack::PushL(dialStatus2); - call2.Dial(dialStatus2, number); - ASSERT_EQUALS(WaitForRequestWithTimeOut(dialStatus2, ETimeMedium), KErrNone, _L("RCall::Dial timed-out")); - ASSERT_EQUALS(dialStatus2.Int(), KErrNone, _L("RCall::Dial returned with an error")); - - // Wait for call to be connected. - expectedMobileCallStatus = RMobileCall::EStatusConnected; - iCallControlTestHelper.WaitForMobileCallNotifyMobileCallStatusChange(call2, - notifyMobileCallStatusChangeStatus2, - mobileCallStatus2, - expectedMobileCallStatus , - expectedStatus); - - // Post notifier - call1.NotifyMobileCallStatusChange(notifyMobileCallStatusChangeStatus, mobileCallStatus); - call2.NotifyMobileCallStatusChange(notifyMobileCallStatusChangeStatus2, mobileCallStatus2); - - // Transfer call 1. - TExtEtelRequestStatus getTransferStatus(call1, EMobileCallTransfer); - CleanupStack::PushL(getTransferStatus); - call1.Transfer(getTransferStatus); - - // Cancel transfer. - phone.CancelAsyncRequest(EMobileCallTransfer); - - ASSERT_EQUALS(WaitForRequestWithTimeOut(getTransferStatus, ETimeMedium), KErrNone, _L("RTelSubSessionBase::CancelAsyncRequest timed-out")); - ASSERT_TRUE((getTransferStatus.Int() == KErrNone) || (getTransferStatus.Int() == KErrCancel), _L("RMobileCall::Transfer did not return KErrNone or KErrCancel")); - - if(getTransferStatus.Int() == KErrNone) - { // call transfering has not been canceled - ERR_PRINTF1(_L("TransferCancel didn't succeed")); - expectedMobileCallStatus = RMobileCall::EStatusDisconnecting; - iCallControlTestHelper.WaitForMobileCallNotifyMobileCallStatusChange(call1, - notifyMobileCallStatusChangeStatus, - mobileCallStatus, - expectedMobileCallStatus , - expectedStatus); - - call1.NotifyMobileCallStatusChange(notifyMobileCallStatusChangeStatus, mobileCallStatus); - - iCallControlTestHelper.WaitForMobileCallNotifyMobileCallStatusChange(call2, - notifyMobileCallStatusChangeStatus2, - mobileCallStatus2, - expectedMobileCallStatus , - expectedStatus); - - call2.NotifyMobileCallStatusChange(notifyMobileCallStatusChangeStatus2, mobileCallStatus2); - expectedMobileCallStatus = RMobileCall::EStatusIdle; - iCallControlTestHelper.WaitForMobileCallNotifyMobileCallStatusChange(call1, - notifyMobileCallStatusChangeStatus, - mobileCallStatus, - expectedMobileCallStatus , - expectedStatus); - - iCallControlTestHelper.WaitForMobileCallNotifyMobileCallStatusChange(call2, - notifyMobileCallStatusChangeStatus2, - mobileCallStatus2, - expectedMobileCallStatus , - expectedStatus); - - // Check RMobileCall::GetMobileCallStatus returns status of EStatusIdle. - ASSERT_EQUALS(call1.GetMobileCallStatus(mobileCallStatus), KErrNone, _L("RMobileCall::GetMobileCallStatus returned an error")); - ASSERT_EQUALS(mobileCallStatus, RMobileCall::EStatusIdle, _L("RMobileCall::GetMobileCallStatus did not set call status EStatusIdle as expected")); - - ASSERT_EQUALS(call2.GetMobileCallStatus(mobileCallStatus2), KErrNone, _L("RMobileCall::GetMobileCallStatus returned an error")); - ASSERT_EQUALS(mobileCallStatus2, RMobileCall::EStatusIdle, _L("RMobileCall::GetMobileCallStatus did not set call status EStatusIdle as expected")); - - } - else - { // call transfering has been canceled. - // Hang up call1. - TCoreEtelRequestStatus hangUpStatus (call1,&RCall::HangUpCancel); - CleanupStack::PushL(hangUpStatus); - call1.HangUp(hangUpStatus); - ASSERT_EQUALS(WaitForRequestWithTimeOut(hangUpStatus, ETimeMedium), KErrNone, _L("RCall::HangUp timed-out")); - ASSERT_EQUALS(hangUpStatus.Int(), KErrNone, _L("RCall::HangUp returned with an error")); - - // Hang up call2. - TCoreEtelRequestStatus hangUpStatus2 (call2,&RCall::HangUpCancel); - CleanupStack::PushL(hangUpStatus2); - call2.HangUp(hangUpStatus2); - ASSERT_EQUALS(WaitForRequestWithTimeOut(hangUpStatus2, ETimeMedium), KErrNone, _L("RCall::HangUp timed-out")); - ASSERT_EQUALS(hangUpStatus2.Int(), KErrNone, _L("RCall::HangUp returned with an error")); - - // hangUpStatus - // hangUpStatus2 - CleanupStack::PopAndDestroy(2, &hangUpStatus); - } - - - - //////////////////////////////////////////////////////////////// - // TEST END - //////////////////////////////////////////////////////////////// - - StartCleanup(); - - // Pop - // notifyMobileCallStatusChangeStatus - // dialStatus - // getHoldStatus - // notifyMobileCallStatusChangeStatus2 - // dialStatus2 - // getTransferStatus - - CleanupStack::PopAndDestroy(6, ¬ifyMobileCallStatusChangeStatus); - - return TestStepResult(); - } - -TPtrC CCTSYIntegrationTestCallControl0038::GetTestStepName() -/** - * @return The test step name. - */ - { - return _L("CCTSYIntegrationTestCallControl0038"); - } - - - -CCTSYIntegrationTestCallControl0039::CCTSYIntegrationTestCallControl0039(CEtelSessionMgr& aEtelSessionMgr) - : CCTSYIntegrationTestCallControlBase(aEtelSessionMgr) -/** - * Constructor. - */ - { - SetTestStepName(CCTSYIntegrationTestCallControl0039::GetTestStepName()); - } - -CCTSYIntegrationTestCallControl0039::~CCTSYIntegrationTestCallControl0039() -/** - * Destructor. - */ - { - } - -TVerdict CCTSYIntegrationTestCallControl0039::doTestStepL() -/** - * @SYMTestCaseID BA-CTSY-INT-CCON-0039 - * @SYMFssID BA/CTSY/CCON-0039 - * @SYMTestCaseDesc Deflect incoming call - * @SYMTestPriority High - * @SYMTestActions RMobileCall::Deflect, RMobileCall::NotifyMobileCallStatusChange, RCall::NotifyStatusChange, RLine::NotifyStatusChange, RMobileLine::GetMobileLineStatus, RMobileLine::NotifyMobileLineStatusChange, RLine::GetStatus, RMobileCall::GetMobileCallStatus, RCall::GetStatus, RLine::NotifyIncomingCall - * @SYMTestExpectedResults Pass - Call deflected. - * @SYMTestType CIT - * @SYMTestCaseDependencies live/manual - * - * Reason for test: Verify incoming call can be deflected and call and line return to idle. - * - * @return - TVerdict code - */ - { - - //////////////////////////////////////////////////////////////// - // SET UP - //////////////////////////////////////////////////////////////// - - // Call TNetworkTsyTestHelper::WaitForRegisteredOnHomeNetworkL - RMobilePhone& phone = iEtelSessionMgr.GetPhoneL(KMainServer,KMainPhone); - CHECK_EQUALS_L(iNetworkTestHelper.WaitForRegisteredOnHomeNetworkL(phone), KErrNone, _L("TNetworkTsyTestHelper::WaitForRegisteredOnHomeNetworkL returned with an error")); - - // Check phone supports KCapsVoice. - RPhone::TCaps phoneCaps; - CHECK_EQUALS_L(phone.GetCaps(phoneCaps), KErrNone, _L("RPhone::GetCaps returned an error")); - CHECK_BITS_SET_L(phoneCaps.iFlags, RPhone::KCapsVoice, KNoUnwantedBits, _L("RPhone::GetCaps returned wrong caps")); - - // Get Voice line 1. - RMobileLine& mobileLine = iEtelSessionMgr.GetLineL(KMainServer, KMainPhone, KVoiceLine); - - - //////////////////////////////////////////////////////////////// - // SET UP END - //////////////////////////////////////////////////////////////// - - StartTest(); - - //////////////////////////////////////////////////////////////// - // TEST START - //////////////////////////////////////////////////////////////// - - for (TInt callDeflectType = RMobileCall::EDeflectVoicemail; callDeflectType <= RMobileCall::EDeflectSuppliedNumber; ++callDeflectType ) - { - // Get call 1. - //RMobileCall& mobileCall = iEtelSessionMgr.GetCallL(KMainServer, KMainPhone, KVoiceLine, KCall1); - - // Post RLine::NotifyIncomingCall - TName callName; - TCoreEtelRequestStatus notifyIncomingCallStatus(mobileLine, &RLine::NotifyIncomingCallCancel); - CleanupStack::PushL(notifyIncomingCallStatus); - mobileLine.NotifyIncomingCall(notifyIncomingCallStatus, callName); - - // Request incoming call from RPS. - RPSRequestIncomingCallL(EVoiceLine); - - // Check RLine::NotifyIncomingCall completes with KErrNone - ASSERT_EQUALS(WaitForRequestWithTimeOut(notifyIncomingCallStatus, ETimeLong), KErrNone, _L("RLine::NotifyIncomingCall timed out")); - ASSERT_EQUALS(notifyIncomingCallStatus.Int(), KErrNone, _L("RLine::NotifyIncomingCall returned with an error")); - - TCallId incomingCallId; - RMobileCall& mobileCall = iEtelSessionMgr.GetIncomingCallL(KMainServer, KMainPhone, KVoiceLine, callName, incomingCallId); - - // Post notifications - RCall::TStatus callStatus; - TCoreEtelRequestStatus notifyStatusChangeMCallStatus (mobileCall, &RMobileCall::NotifyStatusChangeCancel); - CleanupStack::PushL(notifyStatusChangeMCallStatus); - mobileCall.NotifyStatusChange(notifyStatusChangeMCallStatus, callStatus); - - // Post notify RLine::NotifyStatusChange - RCall::TStatus lineStatus; - TCoreEtelRequestStatus notifyStatusChangeMLineStatus (mobileLine, &RLine::NotifyStatusChangeCancel); - CleanupStack::PushL(notifyStatusChangeMLineStatus); - mobileLine.NotifyStatusChange(notifyStatusChangeMLineStatus, lineStatus); - - // Post notifier RMobileCall::NotifyMobileCallStatusChange - RMobileCall::TMobileCallStatus mobileCallStatus; - TExtEtelRequestStatus notifyMobileCallStatusChangeStatus(mobileCall, EMobileCallNotifyMobileCallStatusChange); - CleanupStack::PushL(notifyMobileCallStatusChangeStatus); - mobileCall.NotifyMobileCallStatusChange(notifyMobileCallStatusChangeStatus, mobileCallStatus); - - // Post RMobileLine::NotifyMobileLineStatusChange - RMobileCall::TMobileCallStatus mobileLineStatus; - TExtEtelRequestStatus notifyMobileLineChangeStatus(mobileLine, EMobileLineNotifyMobileLineStatusChange); - CleanupStack::PushL(notifyMobileLineChangeStatus); - mobileLine.NotifyMobileLineStatusChange(notifyMobileLineChangeStatus, mobileLineStatus); - - // Deflect call to a voice mail number using RMobileCall::Deflect and aDeflectType = EDeflectVoicemail. - // $CTSYProblem CTSY is not supporting deflect type of RMobileCall::EDeflectVoicemail, and is returning KErrNotsupported - TExtEtelRequestStatus setDeflectStatus(mobileCall, EMobileCallDeflect); - CleanupStack::PushL(setDeflectStatus); - RMobilePhone::TMobileAddress destination; - TPtrC phoneNumber; - ASSERT_TRUE(GetStringFromConfig(KIniVoiceNumSection, KIniVoiceNumber2, phoneNumber) != EFalse, _L("GetStringFromConfig did not complete as expected")); - destination.iTelNumber = phoneNumber; - destination.iTypeOfNumber = RMobilePhone::ENationalNumber; - destination.iNumberPlan = RMobilePhone::ENationalNumberPlan; - - mobileCall.Deflect(setDeflectStatus, (RMobileCall::TMobileCallDeflect)callDeflectType, destination); - ASSERT_EQUALS(WaitForRequestWithTimeOut(setDeflectStatus, ETimeLong), KErrNone, _L("RMobileCall::Deflect timed-out")); - ASSERT_EQUALS(setDeflectStatus.Int(), KErrNone, _L("RMobileCall::Deflect returned with an error")); - // ******** HERE - put eror code. Assign new code from xls ******* // - - // === Check call status === - - // Check RCall::NotifyStatusChange completes with EStatusIdle. - RCall::TStatus expectedCallStatus = RCall::EStatusIdle; - TInt wantedStatus = KErrNone; - iCallControlTestHelper.WaitForCallNotifyStatusChange(mobileCall, - notifyStatusChangeMCallStatus, - callStatus, - expectedCallStatus, - wantedStatus); - - // Check RCall::GetStatus returns EStatusIdle. - ASSERT_EQUALS(mobileCall.GetStatus(callStatus), KErrNone, _L("RCall::GetStatus returned error")); - ASSERT_EQUALS(callStatus, RCall::EStatusIdle, _L("RCall::GetStatus did not return call status EStatusIdle as expected")); - - // Check RMobileCall::NotifyMobileCallStatusChange completes with EStatusIdle. - RMobileCall::TMobileCallStatus expectedMobileCallStatus = RMobileCall::EStatusIdle; - iCallControlTestHelper.WaitForMobileCallNotifyMobileCallStatusChange(mobileCall, - notifyMobileCallStatusChangeStatus, - mobileCallStatus, - expectedMobileCallStatus, - wantedStatus); - - // Check RMobileCall::GetMobileCallStatus returns status of EStatusIdle. - ASSERT_EQUALS(mobileCall.GetStatus(callStatus), KErrNone, _L("RMobileCall::GetStatus returned error")); - ASSERT_EQUALS(callStatus, RCall::EStatusIdle, _L("RMobileCall::GetStatus did not return call status EStatusIdle as expected")); - - // === Check line status === - - // Check RLine::NotifyStatusChange completes with EStatusIdle - iCallControlTestHelper.WaitForLineNotifyStatusChange(mobileLine, - notifyStatusChangeMLineStatus, - lineStatus, - expectedCallStatus, - wantedStatus); - - // Check RLine::GetStatus returns EStatusIdle - ASSERT_EQUALS(mobileLine.GetStatus(callStatus), KErrNone, _L("RLine::GetStatus returned error")); - ASSERT_EQUALS(callStatus, RCall::EStatusIdle, _L("RLine::GetStatus did not return call status EStatusIdle as expected")); - - // Check RMobileLine::NotifyMobileLineStatusChange completes with EStatusIdle - RMobileCall::TMobileCallStatus expectedLineStatus = RMobileCall::EStatusIdle; - iCallControlTestHelper.WaitForMobileLineNotifyMobileLineStatusChange(mobileLine, - notifyMobileLineChangeStatus, - mobileLineStatus, - expectedLineStatus, - wantedStatus); - - // Check RMobileLine::GetMobileLineStatus returns EStatusIdle - ASSERT_EQUALS(mobileLine.GetStatus(callStatus), KErrNone, _L("RMobileLine::GetStatus returned error")); - ASSERT_EQUALS(callStatus, RCall::EStatusIdle, _L("RMobileLine::GetStatus did not return call status EStatusIdle as expected")); - - iEtelSessionMgr.ReleaseCall(KMainServer,KMainPhone,KVoiceLine, KCall1); - - // Pop - // notifyIncomingCallStatus - // notifyStatusChangeMCallStatus - // notifyStatusChangeMLineStatus - // notifyMobileCallStatusChangeStatus - // notifyMobileLineChangeStatus - // setDeflectStatus - CleanupStack::PopAndDestroy(6, ¬ifyIncomingCallStatus); - } - - - //////////////////////////////////////////////////////////////// - // TEST END - //////////////////////////////////////////////////////////////// - - StartCleanup(); - - return TestStepResult(); - } - -TPtrC CCTSYIntegrationTestCallControl0039::GetTestStepName() -/** - * @return The test step name. - */ - { - return _L("CCTSYIntegrationTestCallControl0039"); - } - - -CCTSYIntegrationTestCallControl0040::CCTSYIntegrationTestCallControl0040(CEtelSessionMgr& aEtelSessionMgr) - : CCTSYIntegrationTestCallControlBase(aEtelSessionMgr) -/** - * Constructor. - */ - { - SetTestStepName(CCTSYIntegrationTestCallControl0040::GetTestStepName()); - } - -CCTSYIntegrationTestCallControl0040::~CCTSYIntegrationTestCallControl0040() -/** - * Destructor. - */ - { - } - -TVerdict CCTSYIntegrationTestCallControl0040::doTestStepL() -/** - * @SYMTestCaseID BA-CTSY-INT-CCON-0040 - * @SYMFssID BA/CTSY/CCON-0040 - * @SYMTestCaseDesc Cancel deflect call to registered number - * @SYMTestPriority High - * @SYMTestActions RMobileCall::Deflect - * @SYMTestExpectedResults Pass - Deflect cancelled. - * @SYMTestType CIT - * @SYMTestCaseDependencies live/manual - * - * Reason for test: Verify deflect is cancelled. - * - * @return - TVerdict code - */ - { - - //////////////////////////////////////////////////////////////// - // SET UP - //////////////////////////////////////////////////////////////// - - // Call TNetworkTsyTestHelper::WaitForRegisteredOnHomeNetworkL - RMobilePhone& phone = iEtelSessionMgr.GetPhoneL(KMainServer,KMainPhone); - CHECK_EQUALS_L(iNetworkTestHelper.WaitForRegisteredOnHomeNetworkL(phone), KErrNone, - _L("TNetworkTsyTestHelper::WaitForRegisteredOnHomeNetworkL returned with an error")); - - // Check phone supports KCapsVoice. - RPhone::TCaps phoneCaps; - CHECK_EQUALS_L(phone.GetCaps(phoneCaps), KErrNone, _L("RPhone::GetCaps returned an error")); - CHECK_BITS_SET_L(phoneCaps.iFlags, RPhone::KCapsVoice, KNoUnwantedBits, _L("RPhone::GetCaps returned wrong caps")); - - // Get Voice line 1. - RMobileLine& voiceLine = iEtelSessionMgr.GetLineL(KMainServer, KMainPhone, KVoiceLine); - - // Get call 1. - RMobileCall& call1 = iEtelSessionMgr.GetCallL(KMainServer, KMainPhone, KVoiceLine, KCall1); - - //////////////////////////////////////////////////////////////// - // SET UP END - //////////////////////////////////////////////////////////////// - - StartTest(); - - //////////////////////////////////////////////////////////////// - // TEST START - //////////////////////////////////////////////////////////////// - - - // Tester should dial the board. - DisplayUserInteractionPromptL(_L("Dial in to this phone after pressing Any key"), ETimeLong); - - // Check RLine::NotifyIncomingCall completes with KErrNone - TCoreEtelRequestStatus notifyIncomingCallStatus(voiceLine, &RLine::NotifyIncomingCallCancel); - CleanupStack::PushL(notifyIncomingCallStatus); - TName incomingCallName; - incomingCallName.Zero(); - voiceLine.NotifyIncomingCall(notifyIncomingCallStatus, incomingCallName); - - // Deflect call using aDeflectType = EDeflectRegisteredNumber and specifying a valid destination. - TExtEtelRequestStatus deflectStatus(call1, EMobileCallDeflect); - CleanupStack::PushL(deflectStatus); - RMobileCall::TMobileCallDeflect deflectType = RMobileCall::EDeflectRegisteredNumber; - RMobilePhone::TMobileAddress mobileAddress; - call1.Deflect(deflectStatus, deflectType, mobileAddress); - - // Cancel deflect. - phone.CancelAsyncRequest(EMobileCallDeflect); - - // Check KErrNone or KErrCancel returned. - // $CTSYProblem CTSY is not supporting deflect type of RMobileCall::EDeflectRegisteredNumber, and is returningn KErrNotsupported - ASSERT_EQUALS(WaitForRequestWithTimeOut(deflectStatus, ETimeLong), KErrNone, _L("RCall::Deflect timed-out")); - ASSERT_TRUE((deflectStatus.Int() == KErrNone) || (deflectStatus.Int() == KErrCancel), _L("RMobileCall::Deflect did not return KErrNone or KErrCancel")); - - //////////////////////////////////////////////////////////////// - // TEST END - //////////////////////////////////////////////////////////////// - - StartCleanup(); - - // Pop - // notifyIncomingCallStatus - // deflectStatus - CleanupStack::PopAndDestroy(2, ¬ifyIncomingCallStatus); - - return TestStepResult(); - } - -TPtrC CCTSYIntegrationTestCallControl0040::GetTestStepName() -/** - * @return The test step name. - */ - { - return _L("CCTSYIntegrationTestCallControl0040"); - } - - - -CCTSYIntegrationTestCallControl0041::CCTSYIntegrationTestCallControl0041(CEtelSessionMgr& aEtelSessionMgr) - : CCTSYIntegrationTestCallControlBase(aEtelSessionMgr) -/** - * Constructor. - */ - { - SetTestStepName(CCTSYIntegrationTestCallControl0041::GetTestStepName()); - } - -CCTSYIntegrationTestCallControl0041::~CCTSYIntegrationTestCallControl0041() -/** - * Destructor. - */ - { - } - -TVerdict CCTSYIntegrationTestCallControl0041::doTestStepL() -/** - * @SYMTestCaseID BA-CTSY-INT-CCON-0041 - * @SYMFssID BA/CTSY/CCON-0041 - * @SYMTestCaseDesc Cancelled answer incoming before detection and during detection - * @SYMTestPriority High - * @SYMTestActions RCall::AnswerIncomingCall - * @SYMTestExpectedResults Pass - Answer incoming call request cancelled. - * @SYMTestType CIT - * @SYMTestCaseDependencies live/automatic - * - * Reason for test: Verify answering of incoming call can be cancelled. - * - * @return - TVerdict code - */ - { - - //////////////////////////////////////////////////////////////// - // SET UP - //////////////////////////////////////////////////////////////// - - // Call TNetworkTsyTestHelper::WaitForRegisteredOnHomeNetworkL - RMobilePhone& phone = iEtelSessionMgr.GetPhoneL(KMainServer,KMainPhone); - CHECK_EQUALS_L(iNetworkTestHelper.WaitForRegisteredOnHomeNetworkL(phone), KErrNone, - _L("TNetworkTsyTestHelper::WaitForRegisteredOnHomeNetworkL returned with an error")); - - // Check phone supports KCapsVoice. - RPhone::TCaps phoneCaps; - CHECK_EQUALS_L(phone.GetCaps(phoneCaps), KErrNone, _L("RPhone::GetCaps returned an error")); - CHECK_BITS_SET_L(phoneCaps.iFlags, RPhone::KCapsVoice, KNoUnwantedBits, _L("RPhone::GetCaps returned wrong caps")); - - // Get Voice line 1. - RMobileLine& voiceLine = iEtelSessionMgr.GetLineL(KMainServer, KMainPhone, KVoiceLine); - - //////////////////////////////////////////////////////////////// - // SET UP END - //////////////////////////////////////////////////////////////// - - StartTest(); - - //////////////////////////////////////////////////////////////// - // TEST START - //////////////////////////////////////////////////////////////// - - // Answer incoming call request cancelled with different delays. - AnswerIncomingCallCancelL(voiceLine, KOneSecond/100); - AnswerIncomingCallCancelL(voiceLine, KOneSecond/10000); - AnswerIncomingCallCancelL(voiceLine, 0); - - //////////////////////////////////////////////////////////////// - // TEST END - //////////////////////////////////////////////////////////////// - - StartCleanup(); - - return TestStepResult(); - } - -TPtrC CCTSYIntegrationTestCallControl0041::GetTestStepName() -/** - * @return The test step name. - */ - { - return _L("CCTSYIntegrationTestCallControl0041"); - } - -/** - * Cancels an incoming call answer request after given delay. - * @param aVoiceLine Line object. - * @param aDelay Delay between answering and cancelling request. - */ -void CCTSYIntegrationTestCallControl0041::AnswerIncomingCallCancelL( - RMobileLine& aVoiceLine, - TInt aDelay) - { - // Post notify RLine::NotifyIncomingCall - TCoreEtelRequestStatus notifyIncomingCallStatus(aVoiceLine, &RLine::NotifyIncomingCallCancel); - CleanupStack::PushL(notifyIncomingCallStatus); - TName incomingCallName; - aVoiceLine.NotifyIncomingCall(notifyIncomingCallStatus, incomingCallName); - - // Request incoming call from RPS. - ASSERT_EQUALS (RPSRequestIncomingCallL(EVoiceLine), KErrNone, _L("CCTSYIntegrationTestSuiteStepBase::RPSRequestIncomingCallL returned an error")); - - // Check RLine::NotifyIncomingCall completes. - ASSERT_EQUALS(WaitForRequestWithTimeOut(notifyIncomingCallStatus, ETimeMedium), KErrNone, _L("RLine::NotifyIncomingCall timed-out")); - ASSERT_EQUALS(notifyIncomingCallStatus.Int(), KErrNone, _L("RLine::NotifyIncomingCall returned an error")); - - // Get the incoming call - TCallId incomingCallId; - RMobileCall& call1 = iEtelSessionMgr.GetIncomingCallL(KMainServer, KMainPhone, KVoiceLine, incomingCallName, incomingCallId); - - // Call RCall::AnswerIncomingCall - TCoreEtelRequestStatus answerIncomingStatus(call1, &RCall::AnswerIncomingCallCancel); - CleanupStack::PushL(answerIncomingStatus); - call1.AnswerIncomingCall(answerIncomingStatus); - - // Call RCall::AnswerIncomingCallCancel after a delay - if (aDelay > 0) - { - User::After(aDelay); - } - call1.AnswerIncomingCallCancel(); - DEBUG_PRINTF2(_L("RCall::AnswerIncomingCallCancel called after %d microseconds delay"), aDelay); - - // Check answer incoming call cancelled. - // $CTSYProblem CMmCallTsy::AnswerIncomingCallCancel - // TSY has started a request and it is not possible to then cancel this request. - // The best thing for the TSY to do in this case is to call HangUp method to do this and set a flag so that we can know that AnswerIncomingCallCancel handling is going on. - // Checking is changed from KErrCancel to KErrGsmCallRejected - ASSERT_EQUALS(WaitForRequestWithTimeOut(answerIncomingStatus, ETimeMedium), KErrNone, _L("RMobileCall::AnswerIncomingCall timed-out")); - ASSERT_EQUALS(answerIncomingStatus.Int(), KErrGsmCallRejected, _L("RCall::AnswerIncomingCall was not cancelled correctly")); - RCall::TStatus callStatus; - ASSERT_EQUALS(call1.GetStatus(callStatus), KErrNone, _L("RCall::GetStatus returned an Error")); - ASSERT_EQUALS(callStatus, RCall::EStatusIdle, _L("RCall::GetStatus did not return EStatusIdle")); - - // Release call - iEtelSessionMgr.ReleaseCall(KMainServer, KMainPhone, KVoiceLine, incomingCallId); - - // Pop - // notifyIncomingCallStatus - // answerIncomingStatus - CleanupStack::PopAndDestroy(2, ¬ifyIncomingCallStatus); - } - - -CCTSYIntegrationTestCallControl0042::CCTSYIntegrationTestCallControl0042(CEtelSessionMgr& aEtelSessionMgr) - : CCTSYIntegrationTestCallControlBase(aEtelSessionMgr) -/** - * Constructor. - */ - { - SetTestStepName(CCTSYIntegrationTestCallControl0042::GetTestStepName()); - } - -CCTSYIntegrationTestCallControl0042::~CCTSYIntegrationTestCallControl0042() -/** - * Destructor. - */ - { - } - -TVerdict CCTSYIntegrationTestCallControl0042::doTestStepL() -/** - * @SYMTestCaseID BA-CTSY-INT-CCON-0042 - * @SYMFssID BA/CTSY/CCON-0042 - * @SYMTestCaseDesc Ensure that when in class C operation (PSD only), a voice or data call dial request completes with an error. - * @SYMTestPriority High - * @SYMTestActions - * @SYMTestExpectedResults Pass - KErrGsmOfflineOpNotAllowed returned. - * @SYMTestType CIT - * @SYMTestCaseDependencies live/automatic - * - * Reason for test: Verify error is returned on attempt to dial. - * - * @return - TVerdict code - */ - { - - //////////////////////////////////////////////////////////////// - // SET UP - //////////////////////////////////////////////////////////////// - - // Call TNetworkTsyTestHelper::WaitForRegisteredOnHomeNetworkL - RMobilePhone& phone = iEtelSessionMgr.GetPhoneL(KMainServer,KMainPhone); - CHECK_EQUALS_L(iNetworkTestHelper.WaitForRegisteredOnHomeNetworkL(phone), KErrNone, _L("TNetworkTsyTestHelper::WaitForRegisteredOnHomeNetworkL returned with an error")); - - // Get the packet service. - RPacketService& packetService = iEtelSessionMgr.GetPacketServiceL(KMainServer, KMainPhone, KMainPacketService); - - // Set the MS class to EMSClassAlternateMode. - TExtEtelRequestStatus setMSClassStatus(packetService, EPacketSetMSClass); - CleanupStack::PushL(setMSClassStatus); - packetService.SetMSClass(setMSClassStatus, RPacketService::EMSClassAlternateMode); - CHECK_EQUALS_L(WaitForRequestWithTimeOut(setMSClassStatus, ETimeLong), KErrNone, _L("RPacketService::SetMSClass timed out")); - ERR_PRINTF2(_L("$CTSYKnownFailure: defect id = %d"), 10050); -// CTSY currently does not support the SetMSClass operation - CHECK_EQUALS_L(setMSClassStatus.Int(), KErrNone, _L("RPacketService::SetMSClass returned an error")); - - // Set the preferred bearer to EBearerPacketSwitched - TExtEtelRequestStatus setPreferredBearerStatus(packetService, EPacketSetPrefBearer); - CleanupStack::PushL(setPreferredBearerStatus); - packetService.SetPreferredBearer(setPreferredBearerStatus, RPacketService::EBearerPacketSwitched); - CHECK_EQUALS_L(WaitForRequestWithTimeOut(setPreferredBearerStatus, ETimeLong), KErrNone, _L("RPacketService::SetPreferredBearer timed out")); - CHECK_EQUALS_L(setPreferredBearerStatus.Int(), KErrNone, _L("RPacketService::SetPreferredBearer returned an error")); - - // Ensure the packet service status is EStatusAttached. - RPacketService::TStatus packetStatus; - CHECK_EQUALS_L(packetService.GetStatus(packetStatus), KErrNone, _L("RPacketService::GetStatus returned an error")); - TExtEtelRequestStatus notifyServiceStatusChStatus(packetService, EPacketNotifyStatusChange); - CleanupStack::PushL(notifyServiceStatusChStatus); - RPacketService::TStatus packetServiceStatus; - - if (packetStatus != RPacketService::EStatusAttached) - { - RPacketService::TAttachMode attachMode; - CHECK_EQUALS_L(packetService.GetAttachMode(attachMode), KErrNone, _L("RPacketService::GetAttachMode returned with an error.")); - packetService.NotifyStatusChange(notifyServiceStatusChStatus, packetServiceStatus); - if(attachMode != RPacketService::EAttachWhenPossible) - { - CHECK_EQUALS_L(packetService.SetAttachMode(RPacketService::EAttachWhenPossible), KErrNone, _L("RPacketService::SetAttachMode returned with an error.")); - } - CHECK_EQUALS_L(packetService.GetAttachMode(attachMode), KErrNone, _L("RPacketService::GetAttachMode returned with an error.")); - CHECK_EQUALS_L(attachMode, RPacketService::EAttachWhenPossible, _L("RPacketService::GetAttachMode did not return EAttachWhenPossible.")); - - // Ensure phone is attached to the packet service (RPacketService::GetStatus returns EStatusAttached). - CHECK_EQUALS_L(packetService.GetStatus(packetStatus), KErrNone, _L("RPacketService::GetStatus returned with an error")); - - // Wait for phone to attach to packet service if it is not attached. - if (packetStatus == RPacketService::EStatusUnattached) - { - iPacketServiceTestHelper.WaitForPacketServiceNotifyStatusChange( - packetService, - notifyServiceStatusChStatus, - packetServiceStatus, - RPacketService::EStatusAttached, - KErrNone); - CHECK_EQUALS_L(packetService.GetStatus(packetStatus), KErrNone, _L("RPacketService::GetStatus returned with an error")); - CHECK_EQUALS_L(packetStatus, RPacketService::EStatusAttached, _L("RPacketService::GetStatus did not return EStatusAttached")); - } - } - - - //////////////////////////////////////////////////////////////// - // SET UP END - //////////////////////////////////////////////////////////////// - - StartTest(); - - //////////////////////////////////////////////////////////////// - // TEST START - //////////////////////////////////////////////////////////////// - - - // Get voice line 1. - RLine& line = iEtelSessionMgr.GetLineL(KMainServer, KMainPhone, KVoiceLine); - - // Get call 1. - RCall& call = iEtelSessionMgr.GetCallL(KMainServer, KMainPhone, KVoiceLine, KCall1); - - // Dial a number with call 1. - TPtrC number; - ASSERT_TRUE(GetStringFromConfig(KIniVoiceNumSection, KIniVoiceNumber1, number) != EFalse, _L("GetStringFromConfig did not complete as expected")); - TCoreEtelRequestStatus dialStatus(call, &RCall::DialCancel); - CleanupStack::PushL(dialStatus); - DEBUG_PRINTF1(_L("Dialling VoiceNumber1")); - call.Dial(dialStatus, number); - ASSERT_EQUALS(WaitForRequestWithTimeOut(dialStatus, ETimeLong), KErrNone, _L("RCall::Dial timed-out")); - - // Verify KErrGsmOfflineOpNotAllowed returned. - ASSERT_EQUALS(dialStatus.Int(), KErrGsmOfflineOpNotAllowed, _L("RCall::Dial did not return KErrGsmOfflineOpNotAllowed as expected.")); - - // Get data line 1. - RLine& dataLine = iEtelSessionMgr.GetLineL(KMainServer, KMainPhone, KDataLine); - - // Get call 1 with data line 1. - call = iEtelSessionMgr.GetCallL(KMainServer, KMainPhone, KDataLine, KCall1); - - // Dial a number with call 1. - DEBUG_PRINTF1(_L("Dialling VoiceNumber1")); - call.Dial(dialStatus, number); - ASSERT_EQUALS(WaitForRequestWithTimeOut(dialStatus, ETimeLong), KErrNone, _L("RCall::Dial timed-out")); - - // Verify KErrGsmOfflineOpNotAllowed returned. - ASSERT_EQUALS(dialStatus.Int(), KErrGsmOfflineOpNotAllowed, _L("RCall::Dial did not return KErrGsmOfflineOpNotAllowed as expected.")); - - - //////////////////////////////////////////////////////////////// - // TEST END - //////////////////////////////////////////////////////////////// - - StartCleanup(); - - // Pop - // setMSClassStatus - // setPreferredBearerStatus - // notifyServiceStatusChStatus - // dialStatus - CleanupStack::Pop(4, &setMSClassStatus); - - - return TestStepResult(); - } - -TPtrC CCTSYIntegrationTestCallControl0042::GetTestStepName() -/** - * @return The test step name. - */ - { - return _L("CCTSYIntegrationTestCallControl0042"); - } - - - -CCTSYIntegrationTestCallControl0043::CCTSYIntegrationTestCallControl0043(CEtelSessionMgr& aEtelSessionMgr) - : CCTSYIntegrationTestCallControlBase(aEtelSessionMgr) -/** - * Constructor. - */ - { - SetTestStepName(CCTSYIntegrationTestCallControl0043::GetTestStepName()); - } - -CCTSYIntegrationTestCallControl0043::~CCTSYIntegrationTestCallControl0043() -/** - * Destructor. - */ - { - } - -TVerdict CCTSYIntegrationTestCallControl0043::doTestStepL() -/** - * @SYMTestCaseID BA-CTSY-INT-CCON-0043 - * @SYMFssID BA/CTSY/CCON-0043 - * @SYMTestCaseDesc Ensure that when in class C operation (PSD only), an incoming call does not trigger a NotifyIncomingCall request. - * @SYMTestPriority High - * @SYMTestActions - * @SYMTestExpectedResults Pass - Notify incoming call request does not complete. - * @SYMTestType CIT - * @SYMTestCaseDependencies live/automatic - * - * Reason for test: Verify incoming call notification remains pending. - * - * @return - TVerdict code - */ - { - - //////////////////////////////////////////////////////////////// - // SET UP - //////////////////////////////////////////////////////////////// - - // Call TNetworkTsyTestHelper::WaitForRegisteredOnHomeNetworkL - RMobilePhone& phone = iEtelSessionMgr.GetPhoneL(KMainServer,KMainPhone); - CHECK_EQUALS_L(iNetworkTestHelper.WaitForRegisteredOnHomeNetworkL(phone), KErrNone, - _L("TNetworkTsyTestHelper::WaitForRegisteredOnHomeNetworkL returned with an error")); - - // Get the packet service. - - // Set the MS class to EMSClassAlternateMode. - - // Set the preferred bearer to EBearerPacketSwitched - - // Ensure the packet service status is EStatusAttached. - - - //////////////////////////////////////////////////////////////// - // SET UP END - //////////////////////////////////////////////////////////////// - - StartTest(); - - //////////////////////////////////////////////////////////////// - // TEST START - //////////////////////////////////////////////////////////////// - - - // Get voice line 1. - - // Get call 1. - - // Request incoming call notification with RLine::NotifyIncomingCall - - // Request an incoming call from RPS. - - // Wait for 2 mins. - - // Check that RLine::NotifyIncomingCall notification is still KRequestPending. - - - //////////////////////////////////////////////////////////////// - // TEST END - //////////////////////////////////////////////////////////////// - - StartCleanup(); - - // Put any required test clean up here, then remove this comment - - return TestStepResult(); - } - -TPtrC CCTSYIntegrationTestCallControl0043::GetTestStepName() -/** - * @return The test step name. - */ - { - return _L("CCTSYIntegrationTestCallControl0043"); - } - - - -CCTSYIntegrationTestCallControl0044::CCTSYIntegrationTestCallControl0044(CEtelSessionMgr& aEtelSessionMgr) - : CCTSYIntegrationTestCallControlBase(aEtelSessionMgr) -/** - * Constructor. - */ - { - SetTestStepName(CCTSYIntegrationTestCallControl0044::GetTestStepName()); - } - -CCTSYIntegrationTestCallControl0044::~CCTSYIntegrationTestCallControl0044() -/** - * Destructor. - */ - { - } - -TVerdict CCTSYIntegrationTestCallControl0044::doTestStepL() -/** - * @SYMTestCaseID BA-CTSY-INT-CCON-0044 - * @SYMFssID BA/CTSY/CCON-0044 - * @SYMTestCaseDesc Cancel hang up. - * @SYMTestPriority High - * @SYMTestActions RCall::NotifyStatusChange, RCall::GetStatus, RCall::HangUp, RCall::HangUpCancel, RLine::GetStatus - * @SYMTestExpectedResults Pass - KErrNotSupported. - * @SYMTestType CIT - * @SYMTestCaseDependencies live/automatic - * - * Reason for test: Verify hang up request can be cancelled. - * - * @return - TVerdict code - */ - { - - //////////////////////////////////////////////////////////////// - // SET UP - //////////////////////////////////////////////////////////////// - - // Call TNetworkTsyTestHelper::WaitForRegisteredOnHomeNetworkL - RMobilePhone& phone = iEtelSessionMgr.GetPhoneL(KMainServer,KMainPhone); - CHECK_EQUALS_L(iNetworkTestHelper.WaitForRegisteredOnHomeNetworkL(phone), KErrNone, - _L("TNetworkTsyTestHelper::WaitForRegisteredOnHomeNetworkL returned with an error")); - - // Get Voice line 1. - RMobileLine& voiceLine = iEtelSessionMgr.GetLineL(KMainServer, KMainPhone, KVoiceLine); - - // Get call 1. - RMobileCall& call1 = iEtelSessionMgr.GetCallL(KMainServer, KMainPhone, KVoiceLine, KCall1); - - // Check phone supports KCapsVoice. - RPhone::TCaps phoneCaps; - CHECK_EQUALS_L(phone.GetCaps(phoneCaps), KErrNone,_L("RMobileLine::GetCaps returned an error")); - CHECK_BITS_SET_L(phoneCaps.iFlags, RPhone::KCapsVoice, KNoUnwantedBits, _L("RPhone::GetCaps returned wrong caps")); - - //////////////////////////////////////////////////////////////// - // SET UP END - //////////////////////////////////////////////////////////////// - - StartTest(); - - //////////////////////////////////////////////////////////////// - // TEST START - //////////////////////////////////////////////////////////////// - - // Dial a number that answers. - TPtrC number; - ASSERT_TRUE(GetStringFromConfig(KIniVoiceNumSection, KIniVoiceNumber1, number) != EFalse, _L("GetStringFromConfig did not complete as expected")); - TCoreEtelRequestStatus dialStatus(call1, &RCall::DialCancel); - CleanupStack::PushL(dialStatus); - DEBUG_PRINTF1(_L("Board Now Dialling: ")); - call1.Dial(dialStatus, number); - ASSERT_EQUALS(WaitForRequestWithTimeOut(dialStatus, ETimeMedium), KErrNone, _L("RCall::Dial timed-out")); - ASSERT_EQUALS(dialStatus.Int(), KErrNone, _L("RCall::Dial returned with an error")); - - // Hang up. - TCoreEtelRequestStatus hangUpStatus (call1, &RCall::HangUpCancel); - CleanupStack::PushL(hangUpStatus); - call1.HangUp(hangUpStatus); - - // Immediately cancel the hang up request with RCall::HangUpCancel. - call1.HangUpCancel(); - - // Check hang up is cancelled. - ASSERT_EQUALS(WaitForRequestWithTimeOut(hangUpStatus, ETimeShort), KErrNone, _L("RCall::HangUpCancel timed-out")); - ASSERT_TRUE((hangUpStatus.Int() == KErrNone) || (hangUpStatus.Int() == KErrCancel), _L("RMobileCall::HangUpCancel did not return KErrNone or KErrCancel")); - if(hangUpStatus.Int() == KErrNone) - { - ERR_PRINTF1(_L("HangUpCancel didn't succeed")); - } - else - { - call1.HangUp(hangUpStatus); - ASSERT_EQUALS(WaitForRequestWithTimeOut(hangUpStatus, ETimeShort), KErrNone, _L("RCall::HangUpCancel timed-out")); - ASSERT_EQUALS(hangUpStatus.Int(), KErrNone, _L("RMobileCall::HangUp did not return KErrNone")); - } - //////////////////////////////////////////////////////////////// - // TEST END - //////////////////////////////////////////////////////////////// - - StartCleanup(); - - // Pop - // dialStatus - // hangUpStatus - CleanupStack::PopAndDestroy(2, &dialStatus); - - return TestStepResult(); - } - -TPtrC CCTSYIntegrationTestCallControl0044::GetTestStepName() -/** - * @return The test step name. - */ - { - return _L("CCTSYIntegrationTestCallControl0044"); - } - - - -CCTSYIntegrationTestCallControl0045::CCTSYIntegrationTestCallControl0045(CEtelSessionMgr& aEtelSessionMgr) - : CCTSYIntegrationTestCallControlBase(aEtelSessionMgr) -/** - * Constructor. - */ - { - SetTestStepName(CCTSYIntegrationTestCallControl0045::GetTestStepName()); - } - -CCTSYIntegrationTestCallControl0045::~CCTSYIntegrationTestCallControl0045() -/** - * Destructor. - */ - { - } - -TVerdict CCTSYIntegrationTestCallControl0045::doTestStepL() -/** - * @SYMTestCaseID BA-CTSY-INT-CCON-0045 - * @SYMFssID BA/CTSY/CCON-0045 - * @SYMTestCaseDesc Terminate all calls when there are outgoing calls. - * @SYMTestPriority High - * @SYMTestActions RLine::NotifyStatusChange, RMobileLine::NotifyMobileLineStatusChange, RMobileCall::GetMobileCallStatus, RCall::NotifyStatusChange, RMobileCall::NotifyMobileCallStatusChange, RLine::GetStatus, RMobileLine::GetMobileLineStatus, RMobilePhone::TerminateAllCalls, RCall::GetStatus - * @SYMTestExpectedResults Pass - KErrNotSupported. - * @SYMTestType CIT - * @SYMTestCaseDependencies live/automatic - * - * Reason for test: Verify call and line statuses. - * - * @return - TVerdict code - */ - { - - //////////////////////////////////////////////////////////////// - // SET UP - //////////////////////////////////////////////////////////////// - - // Call TNetworkTsyTestHelper::WaitForRegisteredOnHomeNetworkL - RMobilePhone& phone = iEtelSessionMgr.GetPhoneL(KMainServer,KMainPhone); - CHECK_EQUALS_L(iNetworkTestHelper.WaitForRegisteredOnHomeNetworkL(phone), KErrNone, _L("TNetworkTsyTestHelper::WaitForRegisteredOnHomeNetworkL returned with an error")); - - // Check phone supports KCapsVoice. - RMobilePhone::TCaps lineCaps; - CHECK_EQUALS_L(phone.GetCaps(lineCaps), KErrNone, _L("RMobilePhone::GetCaps returned an error")); - CHECK_BITS_SET_L(lineCaps.iFlags, RMobilePhone::KCapsVoice, KNoUnwantedBits, _L("RMobilePhone::GetCaps did not return KCapsVoice as expected")); - - // Get Voice line 1. - RMobileLine& mobileLine1 = iEtelSessionMgr.GetLineL(KMainServer, KMainPhone, KVoiceLine); - - // Get call 1. - RMobileCall& mobileCall1 = iEtelSessionMgr.GetCallL(KMainServer, KMainPhone, KVoiceLine, KCall1); - - // Get Voice line 2. - RMobileLine& mobileLine2 = iEtelSessionMgr.GetLineL(KAltServer, KMainPhone, KVoiceLine); - - // Get call 2. - RMobileCall& mobileCall2 = iEtelSessionMgr.GetCallL(KMainServer, KMainPhone, KVoiceLine, KCall2); - - // Get phone numbers - TPtrC callNumber; - CHECK_TRUE_L(GetStringFromConfig(KIniVoiceNumSection, KIniVoiceNumber1, callNumber) != EFalse, _L("GetStringFromConfig did not complete as expected")); - - TPtrC callNumber2; - CHECK_TRUE_L(GetStringFromConfig(KIniVoiceNumSection, KIniVoiceNumber2, callNumber2) != EFalse, _L("GetStringFromConfig did not complete as expected")); - - //////////////////////////////////////////////////////////////// - // SET UP END - //////////////////////////////////////////////////////////////// - - StartTest(); - - //////////////////////////////////////////////////////////////// - // TEST START - //////////////////////////////////////////////////////////////// - - - // Dial a number that answers on call 1. - TCoreEtelRequestStatus getDialStatus(mobileCall1, &RMobileCall::DialCancel); - CleanupStack::PushL(getDialStatus); - - mobileCall1.Dial(getDialStatus, callNumber); - ASSERT_EQUALS(WaitForRequestWithTimeOut(getDialStatus, ETimeLong), KErrNone, _L("RMobileCall::Dial timed-out")); - ASSERT_EQUALS(getDialStatus.Int(), KErrNone, _L("RMobileCall::Dial returned error")); - - // Dial a number that answers on call 2. - TCoreEtelRequestStatus getDialStatus2(mobileCall2, &RMobileCall::DialCancel); - CleanupStack::PushL(getDialStatus2); - - mobileCall2.Dial(getDialStatus2, callNumber2); - ASSERT_EQUALS(WaitForRequestWithTimeOut(getDialStatus2, ETimeLong), KErrNone, _L("RMobileCall::Dial timed-out")); - ASSERT_EQUALS(getDialStatus2.Int(), KErrNone, _L("RMobileCall::Dial returned error")); - - // Post notifiers line - RMobileCall::TMobileCallStatus mobileLineStatus; - TExtEtelRequestStatus notifyMobileLineChangeStatus(mobileLine1, EMobileLineNotifyMobileLineStatusChange); - CleanupStack::PushL(notifyMobileLineChangeStatus); - mobileLine1.NotifyMobileLineStatusChange(notifyMobileLineChangeStatus, mobileLineStatus); - - RCall::TStatus lineStatus; - TCoreEtelRequestStatus notifyLineChangeStatus(mobileLine1, &RLine::NotifyStatusChangeCancel); - CleanupStack::PushL(notifyLineChangeStatus); - mobileLine1.NotifyStatusChange(notifyLineChangeStatus, lineStatus); - - RMobileCall::TMobileCallStatus mobileLineStatus2; - TExtEtelRequestStatus notifyMobileLineChangeStatus2(mobileLine2, EMobileLineNotifyMobileLineStatusChange); - CleanupStack::PushL(notifyMobileLineChangeStatus2); - mobileLine2.NotifyMobileLineStatusChange(notifyMobileLineChangeStatus2, mobileLineStatus2); - - RCall::TStatus lineStatus2; - TCoreEtelRequestStatus notifyLineChangeStatus2(mobileLine2, &RLine::NotifyStatusChangeCancel); - CleanupStack::PushL(notifyLineChangeStatus2); - mobileLine2.NotifyStatusChange(notifyLineChangeStatus2, lineStatus2); - - // Post notifiers call - RMobileCall::TMobileCallStatus mobileCallStatus; - TExtEtelRequestStatus notifyMobileCallChangeStatus(mobileCall1, EMobileCallNotifyMobileCallStatusChange); - CleanupStack::PushL(notifyMobileCallChangeStatus); - mobileCall1.NotifyMobileCallStatusChange(notifyMobileCallChangeStatus, mobileCallStatus); - - RCall::TStatus callStatus; - TCoreEtelRequestStatus notifyCallChangeStatus(mobileCall1, &RCall::NotifyStatusChangeCancel); - CleanupStack::PushL(notifyCallChangeStatus); - mobileCall1.NotifyStatusChange(notifyCallChangeStatus, callStatus); - - RMobileCall::TMobileCallStatus mobileCallStatus2; - TExtEtelRequestStatus notifyMobileCallChangeStatus2(mobileCall2, EMobileCallNotifyMobileCallStatusChange); - CleanupStack::PushL(notifyMobileCallChangeStatus2); - mobileCall2.NotifyMobileCallStatusChange(notifyMobileCallChangeStatus2, mobileCallStatus2); - - RCall::TStatus callStatus2; - TCoreEtelRequestStatus notifyCallChangeStatus2(mobileCall2, &RCall::NotifyStatusChangeCancel); - CleanupStack::PushL(notifyCallChangeStatus2); - mobileCall2.NotifyStatusChange(notifyCallChangeStatus2, callStatus2); - - // Terminate all calls with RMobilePhone::TerminateAllCalls - ERR_PRINTF1(_L("$CTSYProblem: RMobilePhone::TerminateAllCalls is not supported by CTSY, checked for KErrNotSupported instead of KErrNone.")); - TExtEtelRequestStatus getTerminateAllCallsStatus(phone, EMobilePhoneTerminateAllCallsCancel); - CleanupStack::PushL(getTerminateAllCallsStatus); - phone.TerminateAllCalls(getTerminateAllCallsStatus); - ASSERT_EQUALS(WaitForRequestWithTimeOut(getTerminateAllCallsStatus, ETimeLong), KErrNone, _L("RMobilePhone::TerminateAllCalls timed-out")); - ASSERT_EQUALS(getTerminateAllCallsStatus.Int(), KErrNotSupported, _L("RMobileCall::TerminateAllCalls returned with an error")); - - // === Check line status for calls 1 and 2 === - - // Check RLine::NotifyStatusChange for call 1 completes with EStatusHangingUp -> EStatusIdle - - // Check RLine::GetStatus for call 1 returns EStatusIdle - - // Check RMobileLine::NotifyMobileLineStatusChange for call 1 completes with EStatusDisconnecting -> EStatusIdle - - // Check RMobileLine::GetMobileLineStatus for call 1 returns EStatusIdle - - // Check RLine::NotifyStatusChange for call 2 completes with EStatusHangingUp -> EStatusIdle - - // Check RLine::GetStatus for call 2 returns EStatusIdle - - // Check RMobileLine::NotifyMobileLineStatusChange for call 2 completes with EStatusDisconnecting -> EStatusIdle - - // Check RMobileLine::GetMobileLineStatus for call 2 returns EStatusIdle - - // === Check call status for calls 1 and 2 === - - // Check RCall::NotifyStatusChange for call 1 completes with EStatusHangingUp -> EStatusIdle. - - // Check RCall::GetStatus for call 1 returns EStatusIdle. - - // Check RMobileCall::NotifyMobileCallStatusChange for call 1 completes with EStatusDisconnecting -> EStatusIdle. - - // Check RMobileCall::GetMobileCallStatus for call 1 returns status of EStatusIdle. - - // Check RCall::NotifyStatusChange for call 2 completes with EStatusHangingUp -> EStatusIdle. - - // Check RCall::GetStatus for call 2 returns EStatusIdle. - - // Check RMobileCall::NotifyMobileCallStatusChange for call 2 completes with EStatusDisconnecting -> EStatusIdle. - - // Check RMobileCall::GetMobileCallStatus for call 2 returns status of EStatusIdle. - - - //////////////////////////////////////////////////////////////// - // TEST END - //////////////////////////////////////////////////////////////// - - StartCleanup(); - - // Hangup calls - mobileCall2.HangUp(); - mobileCall1.HangUp(); - - // Pop - // getDialStatus - // getDialStatus2 - // notifyMobileLineChangeStatus - // notifyLineChangeStatus - // notifyMobileLineChangeStatus2 - // notifyLineChangeStatus2 - // notifyMobileCallChangeStatus - // notifyCallChangeStatus - // notifyMobileCallChangeStatus2 - // notifyCallChangeStatus2 - // getTerminateAllCallsStatus - CleanupStack::Pop(11, &getDialStatus); - - return TestStepResult(); - } - -TPtrC CCTSYIntegrationTestCallControl0045::GetTestStepName() -/** - * @return The test step name. - */ - { - return _L("CCTSYIntegrationTestCallControl0045"); - } - - - -CCTSYIntegrationTestCallControl0046::CCTSYIntegrationTestCallControl0046(CEtelSessionMgr& aEtelSessionMgr) - : CCTSYIntegrationTestCallControlBase(aEtelSessionMgr) -/** - * Constructor. - */ - { - SetTestStepName(CCTSYIntegrationTestCallControl0046::GetTestStepName()); - } - -CCTSYIntegrationTestCallControl0046::~CCTSYIntegrationTestCallControl0046() -/** - * Destructor. - */ - { - } - -TVerdict CCTSYIntegrationTestCallControl0046::doTestStepL() -/** - * @SYMTestCaseID BA-CTSY-INT-CCON-0046 - * @SYMFssID BA/CTSY/CCON-0046 - * @SYMTestCaseDesc Terminate all calls where there are incoming calls. - * @SYMTestPriority High - * @SYMTestActions RCall::AnswerIncomingCall, RMobileCall::Hold, RLine::NotifyStatusChange, RMobileLine::NotifyMobileLineStatusChange, RMobileCall::GetMobileCallStatus, RCall::NotifyStatusChange, RMobileCall::NotifyMobileCallStatusChange, RLine::GetStatus, RMobileLine::GetMobileLineStatus, RMobilePhone::TerminateAllCalls, RCall::GetStatus - * @SYMTestExpectedResults Pass - Calls terminated. - * @SYMTestType CIT - * @SYMTestCaseDependencies live/automatic - * - * Reason for test: Verify call and line statuses. - * - * @return - TVerdict code - */ - { - - //////////////////////////////////////////////////////////////// - // SET UP - //////////////////////////////////////////////////////////////// - - // Call TNetworkTsyTestHelper::WaitForRegisteredOnHomeNetworkL - RMobilePhone& phone = iEtelSessionMgr.GetPhoneL(KMainServer,KMainPhone); - CHECK_EQUALS_L(iNetworkTestHelper.WaitForRegisteredOnHomeNetworkL(phone), KErrNone, - _L("TNetworkTsyTestHelper::WaitForRegisteredOnHomeNetworkL returned with an error")); - - // Check phone supports KCapsVoice. - RMobilePhone::TCaps lineCaps; - CHECK_EQUALS_L(phone.GetCaps(lineCaps), KErrNone, _L("RMobilePhone::GetCaps returned an error")); - CHECK_BITS_SET_L(lineCaps.iFlags, RMobilePhone::KCapsVoice, KNoUnwantedBits, _L("RMobilePhone::GetCaps did not return KCapsVoice as expected")); - - // Get Voice line 1. - RMobileLine& mobileLine1 = iEtelSessionMgr.GetLineL(KMainServer, KMainPhone, KVoiceLine); - - // Get call 1. - RMobileCall& mobileCall1 = iEtelSessionMgr.GetCallL(KMainServer, KMainPhone, KVoiceLine, KCall1); - - // Get Voice line 2. - RMobileLine& mobileLine2 = iEtelSessionMgr.GetLineL(KAltServer, KMainPhone, KVoiceLine); - - // Get call 2. - RMobileCall& mobileCall2 = iEtelSessionMgr.GetCallL(KMainServer, KMainPhone, KVoiceLine, KCall2); - - - //////////////////////////////////////////////////////////////// - // SET UP END - //////////////////////////////////////////////////////////////// - - StartTest(); - - //////////////////////////////////////////////////////////////// - // TEST START - //////////////////////////////////////////////////////////////// - - // Post notification RCall::NotifyIncomingCall for Line1 - TCoreEtelRequestStatus notifyIncomingCallStatus(mobileLine1, &RLine::NotifyIncomingCallCancel); - CleanupStack::PushL(notifyIncomingCallStatus); - TName name; - mobileLine1.NotifyIncomingCall(notifyIncomingCallStatus, name); - - // Request incoming call from RPS. - ASSERT_EQUALS(RPSRequestIncomingCallL(EVoiceLine), KErrNone, _L("CCTSYIntegrationTestSuiteStepBase::RPSRequestIncomingCallL returned an error")); - ASSERT_EQUALS(WaitForRequestWithTimeOut(notifyIncomingCallStatus,ETimeMedium),KErrNone, - _L("RLine::NotifyIncomingCall did not complete without error")); - ASSERT_EQUALS(notifyIncomingCallStatus.Int(), KErrNone, - _L("RLine::NotifyIncomingCall set requestStatus to an error")); - - // Get the incoming call - TCallId incomingCallId; - mobileCall1 = iEtelSessionMgr.GetIncomingCallL(KMainServer, KMainPhone, KVoiceLine, name, incomingCallId); - - // Answer call on call 1. - TCoreEtelRequestStatus answerIncomingMCallStatus1(mobileCall1, &RMobileCall::AnswerIncomingCallCancel); - CleanupStack::PushL(answerIncomingMCallStatus1); - mobileCall1.AnswerIncomingCall(answerIncomingMCallStatus1); - ASSERT_EQUALS(WaitForRequestWithTimeOut(answerIncomingMCallStatus1, ETimeMedium), KErrNone, _L("RMobileCall::AnswerIncomingCall timed-out")) - ASSERT_EQUALS(answerIncomingMCallStatus1.Int(), KErrNone, _L("RMobileCall::AnswerIncomingCall returned with an error")) - - // Hold call 1. - TExtEtelRequestStatus getHoldStatus(mobileCall1, EMobileCallHold); - CleanupStack::PushL(getHoldStatus); - mobileCall1.Hold(getHoldStatus); - ASSERT_EQUALS(WaitForRequestWithTimeOut(getHoldStatus, ETimeMedium), KErrNone, _L("RMobileCall::Hold timed-out")); - ASSERT_EQUALS(getHoldStatus.Int(), KErrNone, _L("RMobileCall::Hold returned with error")); - - // Post notification RCall::NotifyIncomingCall for Line2 - TCoreEtelRequestStatus notifyIncomingCallStatus2(mobileLine2, &RLine::NotifyIncomingCallCancel); - CleanupStack::PushL(notifyIncomingCallStatus2); - TName name2; - mobileLine2.NotifyIncomingCall(notifyIncomingCallStatus2, name2); - - // Request another incoming call from RPS. - ASSERT_EQUALS(RPSRequestIncomingCallL(EVoiceLine), KErrNone, _L("CCTSYIntegrationTestSuiteStepBase::RPSRequestIncomingCallL returned an error")); - - // Tester should have "Call waiting" activated on SIM. Otherwise will fail. - ASSERT_EQUALS(WaitForRequestWithTimeOut(notifyIncomingCallStatus2,ETimeLong),KErrNone, _L("RLine::NotifyIncomingCall did not complete without error")); - ASSERT_EQUALS(notifyIncomingCallStatus2.Int(), KErrNone, _L("RLine::NotifyIncomingCall set requestStatus to an error")); - - // Get the incoming call - TCallId incomingCallId2; - mobileCall2 = iEtelSessionMgr.GetIncomingCallL(KMainServer, KMainPhone, KVoiceLine, name2, incomingCallId2); - - // Answer call on call 2. - TCoreEtelRequestStatus answerIncomingMCallStatus2(mobileCall2, &RMobileCall::AnswerIncomingCallCancel); - CleanupStack::PushL(answerIncomingMCallStatus2); - mobileCall2.AnswerIncomingCall(answerIncomingMCallStatus2); - ASSERT_EQUALS(WaitForRequestWithTimeOut(answerIncomingMCallStatus2, ETimeMedium), KErrNone, _L("RMobileCall::AnswerIncomingCall timed-out")) - ASSERT_EQUALS(answerIncomingMCallStatus2.Int(), KErrNone, _L("RMobileCall::AnswerIncomingCall returned with an error")) - - // Post notifiers line - RMobileCall::TMobileCallStatus mobileLineStatus; - TExtEtelRequestStatus notifyMobileLineChangeStatus(mobileLine1, EMobileLineNotifyMobileLineStatusChange); - CleanupStack::PushL(notifyMobileLineChangeStatus); - mobileLine1.NotifyMobileLineStatusChange(notifyMobileLineChangeStatus, mobileLineStatus); - - RCall::TStatus lineStatus; - TCoreEtelRequestStatus notifyLineChangeStatus(mobileLine1, &RLine::NotifyStatusChangeCancel); - CleanupStack::PushL(notifyLineChangeStatus); - mobileLine1.NotifyStatusChange(notifyLineChangeStatus, lineStatus); - - RMobileCall::TMobileCallStatus mobileLineStatus2; - TExtEtelRequestStatus notifyMobileLineChangeStatus2(mobileLine2, EMobileLineNotifyMobileLineStatusChange); - CleanupStack::PushL(notifyMobileLineChangeStatus2); - mobileLine2.NotifyMobileLineStatusChange(notifyMobileLineChangeStatus2, mobileLineStatus2); - - RCall::TStatus lineStatus2; - TCoreEtelRequestStatus notifyLineChangeStatus2(mobileLine2, &RLine::NotifyStatusChangeCancel); - CleanupStack::PushL(notifyLineChangeStatus2); - mobileLine2.NotifyStatusChange(notifyLineChangeStatus2, lineStatus2); - - // Post notifiers call - RMobileCall::TMobileCallStatus mobileCallStatus; - TExtEtelRequestStatus notifyMobileCallChangeStatus(mobileCall1, EMobileCallNotifyMobileCallStatusChange); - CleanupStack::PushL(notifyMobileCallChangeStatus); - mobileCall1.NotifyMobileCallStatusChange(notifyMobileCallChangeStatus, mobileCallStatus); - - RCall::TStatus callStatus; - TCoreEtelRequestStatus notifyCallChangeStatus(mobileCall1, &RCall::NotifyStatusChangeCancel); - CleanupStack::PushL(notifyCallChangeStatus); - mobileCall1.NotifyStatusChange(notifyCallChangeStatus, callStatus); - - RMobileCall::TMobileCallStatus mobileCallStatus2; - TExtEtelRequestStatus notifyMobileCallChangeStatus2(mobileCall2, EMobileCallNotifyMobileCallStatusChange); - CleanupStack::PushL(notifyMobileCallChangeStatus2); - mobileCall2.NotifyMobileCallStatusChange(notifyMobileCallChangeStatus2, mobileCallStatus2); - - RCall::TStatus callStatus2; - TCoreEtelRequestStatus notifyCallChangeStatus2(mobileCall2, &RCall::NotifyStatusChangeCancel); - CleanupStack::PushL(notifyCallChangeStatus2); - mobileCall2.NotifyStatusChange(notifyCallChangeStatus2, callStatus2); - - // Terminate all calls with RMobilePhone::TerminateAllCalls - TExtEtelRequestStatus getTerminateAllCallsStatus(phone, EMobilePhoneTerminateAllCallsCancel); - CleanupStack::PushL(getTerminateAllCallsStatus); - phone.TerminateAllCalls(getTerminateAllCallsStatus); - - // CTSYProblem CTSY is not supporting EMobilePhoneTerminateAllCalls IPC and test returns -5(KErrNotsuppported) - // Rest of test is not tested before EMobilePhoneTerminateAllCalls IPC support is added - ASSERT_EQUALS(WaitForRequestWithTimeOut(getTerminateAllCallsStatus, ETimeLong), KErrNone, _L("RMobilePhone::TerminateAllCalls timed-out")); - ASSERT_EQUALS(getTerminateAllCallsStatus.Int(), KErrNone, _L("RMobileCall::TerminateAllCalls returned with an error")) - - // === Check line status for calls 1 and 2 === - - // Check RLine::NotifyStatusChange for call 1 completes with EStatusHangingUp -> EStatusIdle - const TInt expectedStatus = KErrNone; - RCall::TStatus expectedCallStatus = RCall::EStatusHangingUp; - iCallControlTestHelper.WaitForLineNotifyStatusChange(mobileLine1, notifyLineChangeStatus, lineStatus, expectedCallStatus, expectedStatus); - expectedCallStatus = RCall::EStatusIdle; - mobileLine1.NotifyStatusChange(notifyLineChangeStatus, lineStatus); - iCallControlTestHelper.WaitForLineNotifyStatusChange(mobileLine1, notifyLineChangeStatus, lineStatus, expectedCallStatus, expectedStatus); - - // Check RLine::GetStatus for call 1 returns EStatusIdle - ASSERT_EQUALS(mobileLine1.GetStatus(lineStatus), KErrNone, _L("RLine::GetStatus returned an error")); - ASSERT_EQUALS(lineStatus, RCall::EStatusIdle, _L("RLine::GetStatus did not EStatusIdle return as expected")); - - // Check RMobileLine::NotifyMobileLineStatusChange for call 1 completes with EStatusDisconnecting -> EStatusIdle - RMobileCall::TMobileCallStatus expectedMobileCallStatus = RMobileCall::EStatusDisconnecting; - iCallControlTestHelper.WaitForMobileLineNotifyMobileLineStatusChange(mobileLine1, notifyMobileLineChangeStatus, mobileLineStatus, expectedMobileCallStatus, expectedStatus); - expectedMobileCallStatus = RMobileCall::EStatusIdle; - mobileLine1.NotifyMobileLineStatusChange(notifyMobileLineChangeStatus, mobileLineStatus); - iCallControlTestHelper.WaitForMobileLineNotifyMobileLineStatusChange(mobileLine1, notifyMobileLineChangeStatus, mobileLineStatus, expectedMobileCallStatus, expectedStatus); - - // Check RMobileLine::GetMobileLineStatus for call 1 returns EStatusIdle - ASSERT_EQUALS(mobileLine1.GetStatus(lineStatus), KErrNone, _L("RMobileLine::GetStatus returned an error")); - ASSERT_EQUALS(lineStatus, RCall::EStatusIdle, _L("RMobileLine::GetStatus did not return EStatusIdle as expected")); - - // Check RLine::NotifyStatusChange for call 2 completes with EStatusHangingUp -> EStatusIdle - RCall::TStatus expectedCallStatus2 = RCall::EStatusHangingUp; - iCallControlTestHelper.WaitForLineNotifyStatusChange(mobileLine2, notifyLineChangeStatus2, lineStatus2, expectedCallStatus2, expectedStatus); - expectedCallStatus2 = RCall::EStatusIdle; - mobileLine2.NotifyStatusChange(notifyLineChangeStatus2, lineStatus2); - iCallControlTestHelper.WaitForLineNotifyStatusChange(mobileLine2, notifyLineChangeStatus2, lineStatus2, expectedCallStatus2, expectedStatus); - - // Check RLine::GetStatus for call 2 returns EStatusIdle - ASSERT_EQUALS(mobileLine2.GetStatus(lineStatus2), KErrNone, _L("RLine::GetStatus returned an error")); - ASSERT_EQUALS(lineStatus2, RCall::EStatusIdle, _L("RLine::GetStatus did not EStatusIdle return as expected")); - - // Check RMobileLine::NotifyMobileLineStatusChange for call 2 completes with EStatusDisconnecting -> EStatusIdle - RMobileCall::TMobileCallStatus expectedMobileCallStatus2 = RMobileCall::EStatusDisconnecting; - iCallControlTestHelper.WaitForMobileLineNotifyMobileLineStatusChange(mobileLine2, notifyMobileLineChangeStatus2, mobileLineStatus2, expectedMobileCallStatus2, expectedStatus); - expectedMobileCallStatus2 = RMobileCall::EStatusIdle; - mobileLine2.NotifyMobileLineStatusChange(notifyMobileLineChangeStatus2, mobileLineStatus2); - iCallControlTestHelper.WaitForMobileLineNotifyMobileLineStatusChange(mobileLine2, notifyMobileLineChangeStatus2, mobileLineStatus2, expectedMobileCallStatus2, expectedStatus); - - // Check RMobileLine::GetMobileLineStatus for call 2 returns EStatusIdle - ASSERT_EQUALS(mobileLine2.GetStatus(lineStatus2), KErrNone, _L("RMobileLine::GetStatus returned an error")); - ASSERT_EQUALS(lineStatus2, RCall::EStatusIdle, _L("RMobileLine::GetStatus did not return EStatusIdle as expected")); - - // === Check call status for calls 1 and 2 === - - // Check RCall::NotifyStatusChange for call 1 completes with EStatusHangingUp -> EStatusIdle. - RCall::TStatus expectedCallStatus3 = RCall::EStatusHangingUp; - iCallControlTestHelper.WaitForCallNotifyStatusChange(mobileCall1, notifyCallChangeStatus, callStatus, expectedCallStatus3, expectedStatus); - expectedCallStatus3 = RCall::EStatusIdle; - mobileCall1.NotifyStatusChange(notifyCallChangeStatus, callStatus); - iCallControlTestHelper.WaitForCallNotifyStatusChange(mobileCall1, notifyCallChangeStatus, callStatus, expectedCallStatus3, expectedStatus); - - // Check RCall::GetStatus for call 1 returns EStatusIdle. - ASSERT_EQUALS(mobileCall1.GetStatus(callStatus), KErrNone, _L("RCall::GetStatus returned an error")); - ASSERT_EQUALS(callStatus, RCall::EStatusIdle, _L("RCall::GetStatus did not EStatusIdle return as expected")); - - // Check RMobileCall::NotifyMobileCallStatusChange for call 1 completes with EStatusDisconnecting -> EStatusIdle. - RMobileCall::TMobileCallStatus expectedMobileCallStatus3 = RMobileCall::EStatusDisconnecting; - iCallControlTestHelper.WaitForMobileCallNotifyMobileCallStatusChange(mobileCall1, notifyMobileCallChangeStatus, mobileCallStatus, expectedMobileCallStatus3, expectedStatus); - expectedMobileCallStatus3 = RMobileCall::EStatusIdle; - mobileCall1.NotifyMobileCallStatusChange(notifyMobileCallChangeStatus, mobileCallStatus); - iCallControlTestHelper.WaitForMobileCallNotifyMobileCallStatusChange(mobileCall1, notifyMobileCallChangeStatus, mobileCallStatus, expectedMobileCallStatus3, expectedStatus); - - // Check RMobileCall::GetMobileCallStatus for call 1 returns status of EStatusIdle. - ASSERT_EQUALS(mobileCall1.GetStatus(callStatus), KErrNone, _L("RMobileCall::GetStatus returned an error")); - ASSERT_EQUALS(callStatus, RCall::EStatusIdle, _L("RMobileCall::GetStatus did not return EStatusIdle as expected")); - - // Check RCall::NotifyStatusChange for call 2 completes with EStatusHangingUp -> EStatusIdle. - RCall::TStatus expectedCallStatus4 = RCall::EStatusHangingUp; - iCallControlTestHelper.WaitForCallNotifyStatusChange(mobileCall2, notifyCallChangeStatus2, callStatus2, expectedCallStatus4, expectedStatus); - expectedCallStatus4 = RCall::EStatusIdle; - mobileCall2.NotifyStatusChange(notifyCallChangeStatus2, callStatus2); - iCallControlTestHelper.WaitForCallNotifyStatusChange(mobileCall2, notifyCallChangeStatus2, callStatus2, expectedCallStatus4, expectedStatus); - - // Check RCall::GetStatus for call 2 returns EStatusIdle. - ASSERT_EQUALS(mobileCall2.GetStatus(callStatus2), KErrNone, _L("RCall::GetStatus returned an error")); - ASSERT_EQUALS(callStatus2, RCall::EStatusIdle, _L("RCall::GetStatus did not EStatusIdle return as expected")); - - // Check RMobileCall::NotifyMobileCallStatusChange for call 2 completes with EStatusDisconnecting -> EStatusIdle. - RMobileCall::TMobileCallStatus expectedMobileCallStatus4 = RMobileCall::EStatusDisconnecting; - iCallControlTestHelper.WaitForMobileCallNotifyMobileCallStatusChange(mobileCall2, notifyMobileCallChangeStatus2, mobileCallStatus2, expectedMobileCallStatus4, expectedStatus); - expectedMobileCallStatus3 = RMobileCall::EStatusIdle; - mobileCall2.NotifyMobileCallStatusChange(notifyMobileCallChangeStatus2, mobileCallStatus2); - iCallControlTestHelper.WaitForMobileCallNotifyMobileCallStatusChange(mobileCall2, notifyMobileCallChangeStatus2, mobileCallStatus2, expectedMobileCallStatus4, expectedStatus); - - // Check RMobileCall::GetMobileCallStatus for call 2 returns status of EStatusIdle. - ASSERT_EQUALS(mobileCall2.GetStatus(callStatus2), KErrNone, _L("RMobileCall::GetStatus returned an error")); - ASSERT_EQUALS(callStatus2, RCall::EStatusIdle, _L("RMobileCall::GetStatus did not return EStatusIdle as expected")); - - - //////////////////////////////////////////////////////////////// - // TEST END - //////////////////////////////////////////////////////////////// - - StartCleanup(); - - // Pop - // notifyIncomingCallStatus - // answerIncomingMCallStatus1 - // getHoldStatus - // notifyIncomingCallStatus2 - // answerIncomingMCallStatus2 - // notifyMobileLineChangeStatus - // notifyLineChangeStatus - // notifyMobileLineChangeStatus2 - // notifyLineChangeStatus2 - // notifyMobileCallChangeStatus - // notifyCallChangeStatus - // notifyMobileCallChangeStatus2 - // notifyCallChangeStatus2 - // getTerminateAllCallsStatus - CleanupStack::PopAndDestroy(14, ¬ifyIncomingCallStatus); - - return TestStepResult(); - } - -TPtrC CCTSYIntegrationTestCallControl0046::GetTestStepName() -/** - * @return The test step name. - */ - { - return _L("CCTSYIntegrationTestCallControl0046"); - } - - - -CCTSYIntegrationTestCallControl0047::CCTSYIntegrationTestCallControl0047(CEtelSessionMgr& aEtelSessionMgr) - : CCTSYIntegrationTestCallControlBase(aEtelSessionMgr) -/** - * Constructor. - */ - { - SetTestStepName(CCTSYIntegrationTestCallControl0047::GetTestStepName()); - } - -CCTSYIntegrationTestCallControl0047::~CCTSYIntegrationTestCallControl0047() -/** - * Destructor. - */ - { - } - -TVerdict CCTSYIntegrationTestCallControl0047::doTestStepL() -/** - * @SYMTestCaseID BA-CTSY-INT-CCON-0047 - * @SYMFssID BA/CTSY/CCON-0047 - * @SYMTestCaseDesc Dial a call using RMobileCall::DialISV - * @SYMTestPriority High - * @SYMTestActions RLine::NotifyStatusChange, - * RMobileLine::NotifyMobileLineStatusChange, - * RLine::GetCallInfo, RLine::GetCaps, - * RMobileCall::DialISV, RLine::GetStatus, - * RMobileLine::GetMobileLineStatus, - * RLine::GetInfo, RLine::EnumerateCall - * @SYMTestExpectedResults Pass - Call connects and line status, - * line caps correct. - * @SYMTestType CIT - * @SYMTestCaseDependencies live/automatic - * - * Reason for test: Verify change in line state is reflected in RLine and RMobileLine - * - * @return - TVerdict code - */ - { - - //////////////////////////////////////////////////////////////// - // SET UP - //////////////////////////////////////////////////////////////// - - // Call TNetworkTsyTestHelper::WaitForRegisteredOnHomeNetworkL - RMobilePhone& phone = iEtelSessionMgr.GetPhoneL(KMainServer,KMainPhone); - CHECK_EQUALS_L(iNetworkTestHelper.WaitForRegisteredOnHomeNetworkL(phone), KErrNone, - _L("TNetworkTsyTestHelper::WaitForRegisteredOnHomeNetworkL returned with an error")); - - // Check phone supports KCapsVoice. - RPhone::TCaps phoneCaps; - CHECK_EQUALS_L(phone.GetCaps(phoneCaps), KErrNone, _L("RPhone::GetCaps returned an error")); - CHECK_BITS_SET_L(phoneCaps.iFlags, RPhone::KCapsVoice, KNoUnwantedBits, _L("RPhone::GetCaps returned wrong caps")); - - // Get Voice line 1. - RMobileLine& voiceLine = iEtelSessionMgr.GetLineL(KMainServer, KMainPhone, KVoiceLine); - - // Get call 1. - RMobileCall& call1 = iEtelSessionMgr.GetCallL(KMainServer, KMainPhone, KVoiceLine, KCall1); - - - //////////////////////////////////////////////////////////////// - // SET UP END - //////////////////////////////////////////////////////////////// - - StartTest(); - - //////////////////////////////////////////////////////////////// - // TEST START - //////////////////////////////////////////////////////////////// - - - // === Check line caps === - - // Check RLine::GetCaps supports caps in set of KCapsVoice. - RLine::TCaps lineCaps; - ASSERT_EQUALS(voiceLine.GetCaps(lineCaps), KErrNone, _L("RLine::GetCaps returned an error")); - ASSERT_BITS_SET(lineCaps.iFlags, RLine::KCapsVoice, KNoUnwantedBits, _L("RLine::GetCaps returned wrong caps")); - - // === Check line status === - - // Check RLine::GetStatus returns EStatusIdle. - RCall::TStatus lineStatus; - ASSERT_EQUALS(voiceLine.GetStatus(lineStatus), KErrNone, _L("RLine::GetStatus returned an error")); - ASSERT_EQUALS(lineStatus, RCall::EStatusIdle, _L("RLine::GetStatus returned wrong status")); - - // Check RMobileLine::GetMobileLineStatus returns EStatusIdle. - RMobileCall::TMobileCallStatus mobilelineStatus; - ASSERT_EQUALS(voiceLine.GetMobileLineStatus(mobilelineStatus), KErrNone, - _L("RMobileLine::GetMobileLineStatus returned an error")); - ASSERT_EQUALS(mobilelineStatus, RMobileCall::EStatusIdle, - _L("RMobileLine::GetMobileLineStatus did not return EStatusIdle as expected")); - - // === Check line info === - - // Check RLine::GetCallInfo returns valid name. - RLine::TCallInfo callInfo; - ASSERT_EQUALS(voiceLine.GetCallInfo( KCall1, callInfo), KErrNone, _L("RLine::GetCallInfo returned an error")); - ASSERT_TRUE(callInfo.iCallName.Length() > 0, _L("RLine::GetCallInfo returned invalid iCallName")); - - // Check RLine::GetCallInfo returns caps in set of KCapsVoice | KCapsDial. - // $CTSYProblem. CTSY is not either completing CapsChanges or/and test suite does not get them correctly hence wrong caps are returned - // Got 0xc , required 0x4c - // KCapsVoice=0x00000004 and KCapsDial=0x00000008 are OK but KCapsAnswer=0x00000040 is missing. - // Changed original test step to check RLine::GetCallInfo returns caps in set of KCapsVoice | KCapsDial instead of KCapsVoice | KCapsDial | KCapsAnswer. - TUint expectedCallCapsFlags = RCall::KCapsVoice | RCall::KCapsDial; - ASSERT_BITS_SET(callInfo.iCallCapsFlags, expectedCallCapsFlags, KNoUnwantedBits, _L("RLine::GetCallInfo returned wrong caps")); - - // Check RLine::GetCallInfo returns status of EStatusIdle. - ASSERT_EQUALS(callInfo.iStatus, RCall::EStatusIdle, _L("RLine::GetCallInfo wrong iStatus, should be EStatusIdle")); - - // Check RLine::GetInfo returns status of EStatusIdle. - RLine::TLineInfo lineInfo; - ASSERT_EQUALS(voiceLine.GetInfo(lineInfo),KErrNone, _L("RLine::GetInfo returned an error")); - ASSERT_EQUALS(lineInfo.iStatus, RCall::EStatusIdle, _L("RLine::GetInfo did not return iStatus EStatusIdle")); - - // Post RLine::NotifyStatusChange - TCoreEtelRequestStatus notifyStatusChangeStatus(voiceLine, &RLine::NotifyStatusChangeCancel); - CleanupStack::PushL(notifyStatusChangeStatus); - voiceLine.NotifyStatusChange(notifyStatusChangeStatus,lineStatus); - - // Post RLine::NotifyMobileLineStatusChange - TExtEtelRequestStatus notifyMobileLineChangeStatus(voiceLine, EMobileLineNotifyMobileLineStatusChange); - CleanupStack::PushL(notifyMobileLineChangeStatus); - voiceLine.NotifyMobileLineStatusChange(notifyMobileLineChangeStatus, mobilelineStatus); - - // Dial a number that answers using RMobileCall::DialISV - TPtrC number; - ASSERT_TRUE(GetStringFromConfig(KIniVoiceNumSection, KIniVoiceNumber1, number) != EFalse, _L("CTestStep::GetStringFromConfig did not complete as expected")); - TExtEtelRequestStatus dialStatus(call1, EMobileCallDialISV); - CleanupStack::PushL(dialStatus); - RMobileCall::TEtel3rdPartyMobileCallParamsV1 callParams; - RMobileCall::TEtel3rdPartyMobileCallParamsV1Pckg callParamsPckg(callParams); - DEBUG_PRINTF1(_L("Board Now Dialling... ")); - call1.DialISV(dialStatus, callParamsPckg, number); - ASSERT_EQUALS(WaitForRequestWithTimeOut(dialStatus, ETimeMedium), KErrNone, _L("RMobileCall::DialISV timed-out")); - ASSERT_EQUALS(dialStatus.Int(), KErrNone, _L("RMobileCall::DialISV returned with an error")); - - // === Check line status === - - // Check RLine::NotifyStatusChange completes with EStatusDialling -> EStatusConnecting -> EStatusConnected. - TInt wantedStatus = KErrNone; - RCall::TStatus expectedLineStatus = RCall::EStatusDialling; - iCallControlTestHelper.WaitForLineNotifyStatusChange(voiceLine, - notifyStatusChangeStatus, - lineStatus, - expectedLineStatus, - wantedStatus); - - voiceLine.NotifyStatusChange(notifyStatusChangeStatus,lineStatus); - expectedLineStatus = RCall::EStatusConnecting; - iCallControlTestHelper.WaitForLineNotifyStatusChange(voiceLine, - notifyStatusChangeStatus, - lineStatus, - expectedLineStatus, - wantedStatus); - - voiceLine.NotifyStatusChange(notifyStatusChangeStatus,lineStatus); - expectedLineStatus = RCall::EStatusConnected; - iCallControlTestHelper.WaitForLineNotifyStatusChange(voiceLine, - notifyStatusChangeStatus, - lineStatus, - expectedLineStatus, - wantedStatus); - - // Check RLine::GetStatus returns EStatusConnected - ASSERT_EQUALS(voiceLine.GetStatus(lineStatus), KErrNone, _L("RLine::GetStatus returned an error")); - ASSERT_EQUALS(lineStatus, RCall::EStatusConnected, _L("RLine::GetStatus did not return EStatusConnected")); - - // Check RMobileLine::NotifyMobileLineStatusChange completes with with EStatusDialling -> EStatusConnecting -> EStatusConnected. - RMobileCall::TMobileCallStatus expectedMobileLineStatus = RMobileCall::EStatusDialling; - iCallControlTestHelper.WaitForMobileLineNotifyMobileLineStatusChange(voiceLine, - notifyMobileLineChangeStatus, - mobilelineStatus, - expectedMobileLineStatus, - wantedStatus); - - voiceLine.NotifyMobileLineStatusChange(notifyMobileLineChangeStatus, mobilelineStatus); - expectedMobileLineStatus = RMobileCall::EStatusConnecting; - iCallControlTestHelper.WaitForMobileLineNotifyMobileLineStatusChange(voiceLine, - notifyMobileLineChangeStatus, - mobilelineStatus, - expectedMobileLineStatus, - wantedStatus); - - voiceLine.NotifyMobileLineStatusChange(notifyMobileLineChangeStatus, mobilelineStatus); - expectedMobileLineStatus = RMobileCall::EStatusConnected; - iCallControlTestHelper.WaitForMobileLineNotifyMobileLineStatusChange(voiceLine, - notifyMobileLineChangeStatus, - mobilelineStatus, - expectedMobileLineStatus, - wantedStatus); - - // Check RMobileLine::GetMobileLineStatus returns EStatusConnected - ASSERT_EQUALS(voiceLine.GetMobileLineStatus(mobilelineStatus), KErrNone, - _L("RMobileLine::GetMobileLineStatus returned an error")); - ASSERT_EQUALS(mobilelineStatus, RMobileCall::EStatusConnected, - _L("RMobileLine::GetMobileLineStatus did not set line status to EStatusConnected")); - - // === Check line info === - - // Check RLine::GetCallInfo returns valid name. - ASSERT_EQUALS(voiceLine.GetCallInfo( KCall1, callInfo), KErrNone, _L("RLine::GetCallInfo returned an error")); - ASSERT_TRUE(callInfo.iCallName.Length()>0, _L("RLine::GetCallInfo returned invalid iCallName")); - - // Check RLine::GetCallInfo returns caps in set of KCapsHangUp. - expectedCallCapsFlags = RCall::KCapsHangUp; - ASSERT_BITS_SET(callInfo.iCallCapsFlags, expectedCallCapsFlags, KNoUnwantedBits, _L("RLine::GetCallInfo returned wrong caps")); - - // Check RLine::GetCallInfo returns status of EStatusConnected. - ASSERT_EQUALS(callInfo.iStatus, RCall::EStatusConnected, _L("RLine::GetCallInfo returned wrong iStatus, should be EStatusConnected")); - - // Check RLine::GetInfo returns status of EStatusConnected. - ASSERT_EQUALS(voiceLine.GetInfo(lineInfo),KErrNone, _L("RLine::GetInfo returned an error")); - ASSERT_EQUALS(lineInfo.iStatus, RCall::EStatusConnected, _L("RLine::GetInfo did not return EStatusConnected")); - - // Check RLine::EnumerateCall returns 2. - TInt numberOfCalls = 0; - TInt wantedNumberOfCalls = 2; - ASSERT_EQUALS(voiceLine.EnumerateCall(numberOfCalls), KErrNone, _L("RLine::EnumerateCall returned an error.")); - ASSERT_EQUALS(numberOfCalls, wantedNumberOfCalls, _L("RLine::EnumerateCall returned wrong number of calls.")); - - // Hang up call 1 - TCoreEtelRequestStatushangupStatus(call1, &RCall::HangUpCancel); - CleanupStack::PushL(hangupStatus); - call1.HangUp(hangupStatus); - ASSERT_EQUALS(WaitForRequestWithTimeOut(hangupStatus, ETimeMedium), KErrNone, _L("RMobileCall::HangUp timed-out")); - ASSERT_EQUALS(hangupStatus.Int(), KErrNone, _L("RMobileCall::HangUp returned error")); - - - //////////////////////////////////////////////////////////////// - // TEST END - //////////////////////////////////////////////////////////////// - - StartCleanup(); - - // Pop - // notifyStatusChangeStatus - // notifyMobileLineChangeStatus - // dialStatus - // hangupStatus - CleanupStack::PopAndDestroy(4, ¬ifyStatusChangeStatus); - - return TestStepResult(); - } - -TPtrC CCTSYIntegrationTestCallControl0047::GetTestStepName() -/** - * @return The test step name. - */ - { - return _L("CCTSYIntegrationTestCallControl0047"); - } - - - -CCTSYIntegrationTestCallControl0048::CCTSYIntegrationTestCallControl0048(CEtelSessionMgr& aEtelSessionMgr) - : CCTSYIntegrationTestCallControlBase(aEtelSessionMgr) -/** - * Constructor. - */ - { - SetTestStepName(CCTSYIntegrationTestCallControl0048::GetTestStepName()); - } - -CCTSYIntegrationTestCallControl0048::~CCTSYIntegrationTestCallControl0048() -/** - * Destructor. - */ - { - } - -TVerdict CCTSYIntegrationTestCallControl0048::doTestStepL() -/** - * @SYMTestCaseID BA-CTSY-INT-CCON-0048 - * @SYMFssID BA/CTSY/CCON-0048 - * @SYMTestCaseDesc Dial a call using RMobileCall::DialISV - * @SYMTestPriority High - * @SYMTestActions RCall::GetCaps, - * RMobileCall::NotifyMobileCallCapsChange, - * RMobileCall::GetMobileCallStatus, - * RMobileCall::GetMobileCallInfo, - * RMobileCall::NotifyMobileCallStatusChange, - * RCall::NotifyStatusChange, RCall::GetInfo, - * RMobileCall::DialISV, - * RCall::NotifyCapsChange, RCall::GetStatus, - * RMobileCall::GetMobileCallCaps - * @SYMTestExpectedResults Pass - Call connects and call status, caps and info correct. - * @SYMTestType CIT - * @SYMTestCaseDependencies live/automatic - * - * Reason for test: Verify change in call state is reflected in RCall and RMobileCall - * - * @return - TVerdict code - */ - { - - //////////////////////////////////////////////////////////////// - // SET UP - //////////////////////////////////////////////////////////////// - - - // Call TNetworkTsyTestHelper::WaitForRegisteredOnHomeNetworkL - RMobilePhone& phone = iEtelSessionMgr.GetPhoneL(KMainServer,KMainPhone); - CHECK_EQUALS_L(iNetworkTestHelper.WaitForRegisteredOnHomeNetworkL(phone), KErrNone, - _L("TNetworkTsyTestHelper::WaitForRegisteredOnHomeNetworkL returned with an error")); - - // Check phone supports KCapsVoice. - RPhone::TCaps phoneCaps; - CHECK_EQUALS_L(phone.GetCaps(phoneCaps), KErrNone, _L("RPhone::GetCaps returned an error")); - CHECK_BITS_SET_L(phoneCaps.iFlags, RPhone::KCapsVoice, KNoUnwantedBits, _L("RPhone::GetCaps returned wrong caps")); - - // Get Voice line 1. - RMobileLine& voiceLine = iEtelSessionMgr.GetLineL(KMainServer, KMainPhone, KVoiceLine); - - // Get call 1. - RMobileCall& call1 = iEtelSessionMgr.GetCallL(KMainServer, KMainPhone, KVoiceLine, KCall1); - - - //////////////////////////////////////////////////////////////// - // SET UP END - //////////////////////////////////////////////////////////////// - - StartTest(); - - //////////////////////////////////////////////////////////////// - // TEST START - //////////////////////////////////////////////////////////////// - - - // === Check call caps === - - // Check RCall::GetCaps supports KCapsDial | KCapsVoice. - RCall::TCaps callCaps; - TUint32 wantedCaps = RCall::KCapsDial | RCall::KCapsVoice; - ASSERT_EQUALS(call1.GetCaps(callCaps), KErrNone, _L("RCall::GetCaps returned an error")); - ASSERT_BITS_SET(callCaps.iFlags, wantedCaps, KNoUnwantedBits, _L("RCall::GetCaps returned wrong caps")); - - // Check RMobileCall::GetMobileCallCaps returns iCallControlCaps in set of KCapsVoice | KCapsDial. - // Check RMobileCall::GetMobileCallCaps includes iCallEventCaps in set of 0. - TUint32 wantedCallControlCaps = RCall::KCapsDial | RCall::KCapsVoice; - TUint32 wantedCallEventCaps = 0; - RMobileCall::TMobileCallCapsV1 mobileCallCaps; - RMobileCall::TMobileCallCapsV1Pckg capsPckg(mobileCallCaps); - ASSERT_EQUALS(call1.GetMobileCallCaps(capsPckg), KErrNone, _L("RMobileCall::GetMobileCallCaps returned an error")); - ASSERT_BITS_SET(mobileCallCaps.iCallControlCaps, wantedCallControlCaps, KNoUnwantedBits, _L("RMobileCall::GetMobileCallCaps returned wrong caps")); - ASSERT_BITS_SET(mobileCallCaps.iCallEventCaps, wantedCallEventCaps, KNoUnwantedBits, _L("RMobileCall::GetMobileCallCaps returned wrong caps")); - - // === Check call status === - - // Check RCall::GetStatus returns EStatusIdle. - RCall::TStatus callStatus; - ASSERT_EQUALS(call1.GetStatus(callStatus), KErrNone, _L("RCall::GetStatus returned an error")); - ASSERT_EQUALS(callStatus, RCall::EStatusIdle, _L("RCall::GetStatus did not return EStatusIdle")); - - // Check RMobileCall::GetMobileCallStatus returns status of EStatusIdle. - RMobileCall::TMobileCallStatus mobileCallStatus; - ASSERT_EQUALS(call1.GetMobileCallStatus(mobileCallStatus), KErrNone, _L("RMobileCall::GetMobileStatus returned an error")); - ASSERT_EQUALS(mobileCallStatus, RMobileCall::EStatusIdle, _L("RMobileCall::GetMobileStatus did not return a status EStatusIdle")); - - // === Check call info === - - // Check RCall::GetInfo returns valid call name. - // Check RCall::GetInfo returns valid voice line name. - // Check RCall::GetInfo returns call status of EStatusIdle. - RCall::TCallInfo callInfo; - ASSERT_EQUALS(call1.GetInfo(callInfo), KErrNone, _L("RCall::GetInfo returned an error")); - ASSERT_TRUE(callInfo.iCallName.Length() > 0, _L("RCall::GetInfo returned an invalid call name")); - ASSERT_TRUE(callInfo.iLineName.Length() > 0,_L("RCall::GetInfo returned an invalid line name")); - ASSERT_EQUALS(callInfo.iStatus, RCall::EStatusIdle, _L("RCall::GetInfo returned wrong status, should be EStatusIdle")); - - // Check RMobileCall::GetMobileCallInfo returns iValid with correct flags for returned parameters set. - RMobileCall::TMobileCallInfoV1 mobileCallInfo; - RMobileCall::TMobileCallInfoV1Pckg callInfoPckg(mobileCallInfo); - ASSERT_EQUALS(call1.GetMobileCallInfo(callInfoPckg), KErrNone, _L("RMobileCall::GetMobileCallInfo returned an error")); - - // Check RMobileCall::GetMobileCallInfo returns valid call status. - ASSERT_EQUALS(mobileCallInfo.iStatus, RMobileCall::EStatusIdle, _L("RMobileCall::GetMobileCallInfo returned an invalid status")); - - // Check RMobileCall::GetMobileCallInfo returns valid call name. - ASSERT_TRUE(mobileCallInfo.iCallName.Length() > 0, _L("RMobileCall::GetMobileCallInfo returned an invalid call name")); - - // Check RMobileCall::GetMobileCallInfo returns valid line name. - ASSERT_TRUE(mobileCallInfo.iLineName.Length() > 0, _L("RMobileCall::GetMobileCallInfo returned an invalid line name")); - - // post notifier RCall::NotifyCapsChange for call1 - TCoreEtelRequestStatus notifyCapsChangeStatus (call1, &RCall::NotifyCapsChangeCancel); - CleanupStack::PushL(notifyCapsChangeStatus); - call1.NotifyCapsChange(notifyCapsChangeStatus, callCaps); - - // post notifier for RMobileCall::NotifyMobileCallCapsChange - TExtEtelRequestStatus notifyMobileCallCapsChangeStatus(call1, EMobileCallNotifyMobileCallCapsChange); - CleanupStack::PushL(notifyMobileCallCapsChangeStatus); - RMobileCall::TMobileCallCapsV1 notifyMobileCallCaps; - RMobileCall::TMobileCallCapsV1Pckg notifymobileCallCapsPckg(notifyMobileCallCaps); - call1.NotifyMobileCallCapsChange(notifyMobileCallCapsChangeStatus, notifymobileCallCapsPckg); - - // post notifier for RCall::NotifyStatusChange - TCoreEtelRequestStatus notifyStatusChangeStatus (call1, &RCall::NotifyStatusChangeCancel); - CleanupStack::PushL(notifyStatusChangeStatus); - RCall::TStatus notifyCallStatus; - call1.NotifyStatusChange(notifyStatusChangeStatus, notifyCallStatus); - - // Post notifiers call - RMobileCall::TMobileCallStatus notifyMobileCallStatus; - TExtEtelRequestStatus notifyMobileCallChangeStatus(call1, EMobileCallNotifyMobileCallStatusChange); - CleanupStack::PushL(notifyMobileCallChangeStatus); - call1.NotifyMobileCallStatusChange(notifyMobileCallChangeStatus, notifyMobileCallStatus); - - // Dial a number that answers using RMobileCall::DialISV - TExtEtelRequestStatus dialStatus(call1, EMobileCallDialISV); - CleanupStack::PushL(dialStatus); - TPtrC number; - ASSERT_TRUE(GetStringFromConfig(KIniVoiceNumSection, KIniVoiceNumber1, number) != EFalse, _L("CTestStep::GetStringFromConfig did not complete as expected")); - RMobileCall::TEtel3rdPartyMobileCallParamsV1 callParams; - RMobileCall::TEtel3rdPartyMobileCallParamsV1Pckg callParamsPckg(callParams); - call1.DialISV(dialStatus, callParamsPckg, number); - DEBUG_PRINTF1(_L("Board Now Dialling... ")); - ASSERT_EQUALS(WaitForRequestWithTimeOut(dialStatus, ETimeMedium), KErrNone, _L("RMobileCall::DialISV timed-out")); - ASSERT_EQUALS(dialStatus.Int(), KErrNone, _L("RMobileCall::DialISV returned with an error")); - - // === Check call caps === - - // Check RCall::NotifyCapsChange completes with caps in set of KCapsVoice | KCapsHangUp. - RCall::TCaps wantedNotifyCaps, unwantedNotifyCaps; - wantedNotifyCaps.iFlags = RCall::KCapsVoice | RCall::KCapsHangUp; - unwantedNotifyCaps.iFlags = 0; - const TInt wantedStatus = KErrNone; - iCallControlTestHelper.WaitForCallNotifyCapsChange(call1, - notifyCapsChangeStatus, - callCaps, - wantedNotifyCaps, - unwantedNotifyCaps, - wantedStatus); - - // Check RCall::GetCaps supports KCapsHangUp | KCapsVoice. - TUint32 wantedCallCaps = RCall::KCapsHangUp | RCall::KCapsVoice; - ASSERT_EQUALS(call1.GetCaps(callCaps),KErrNone, _L("RCall::GetCaps returned an error")); - ASSERT_BITS_SET(callCaps.iFlags, wantedCallCaps, KNoUnwantedBits, _L("RCall::GetCaps returned wrong caps")); - - // Check RMobileCall::NotifyMobileCallCapsChange completes with iCallControlCaps in set of KCapsVoice | KCapsHold | KCapsHangUp | KCapsTransfer. - RMobileCall::TMobileCallCapsV1 wantedMobileCaps; - TCmpRMobileCallTMobileCallCaps mobileCapsComp(wantedMobileCaps,mobileCallCaps, *this); - iCallControlTestHelper.WaitForMobileCallNotifyMobileCallCapsChange(call1, - notifyMobileCallCapsChangeStatus, - mobileCapsComp, - wantedStatus); - wantedMobileCaps.iCallControlCaps = RMobileCall::KCapsVoice | - RMobileCall::KCapsHold | - RMobileCall::KCapsHangUp | - RMobileCall::KCapsTransfer; - - // Check RMobileCall::NotifyMobileCallCapsChange completes with iCallEventCaps in set of KCapsLocalHold | KCapsLocalTransfer | KCapsRemoteHold | KCapsRemoteTerminate | KCapsRemoteConferenceCreate. - wantedMobileCaps.iCallEventCaps = RMobileCall::KCapsLocalHold | - RMobileCall::KCapsLocalTransfer | - RMobileCall::KCapsRemoteHold | - RMobileCall::KCapsRemoteTerminate | - RMobileCall::KCapsRemoteConferenceCreate; - - // Check RMobileCall::GetMobileCallCaps includes iCallControlCaps in set of KCapsVoice | KCapsHold | KCapsHangUp - RMobileCall::TMobileCallCapsV1Pckg mobileCallCapsPckg(mobileCallCaps); - TUint32 wantedMobileCallCaps = RMobileCall::KCapsVoice | - RMobileCall::KCapsHold | - RMobileCall::KCapsHangUp; - ASSERT_EQUALS(call1.GetMobileCallCaps(mobileCallCapsPckg), KErrNone, _L("RMobileCall::GetMobileCallCaps returned an error")); - ASSERT_BITS_SET(mobileCallCaps.iCallControlCaps, wantedMobileCallCaps, KNoUnwantedBits, _L("RMobileCall::GetMobileCallCaps returned wrong caps")); - - // Check RMobileCall::GetMobileCallCaps includes iCallEventCaps in set of KCapsLocalHold | KCapsLocalTransfer | KCapsRemoteHold | KCapsRemoteTerminate | KCapsRemoteConferenceCreate. - TUint32 wantedMobileCallEventCaps = RMobileCall::KCapsLocalHold | - RMobileCall::KCapsLocalTransfer | - RMobileCall::KCapsRemoteHold | - RMobileCall::KCapsRemoteTerminate | - RMobileCall::KCapsRemoteConferenceCreate; - ASSERT_BITS_SET(mobileCallCaps.iCallEventCaps, wantedMobileCallEventCaps, KNoUnwantedBits, - _L("RMobileCall::GetMobileCallCaps returned wrong caps")); - - // === Check call status === - - // Check RCall::NotifyStatusChange completes with EStatusDialling -> EStatusConnecting -> EStatusConnected. - RCall::TStatus expectedCallStatus = RCall::EStatusDialling; - iCallControlTestHelper.WaitForCallNotifyStatusChange(call1, - notifyStatusChangeStatus, - notifyCallStatus, - expectedCallStatus, - wantedStatus); - - call1.NotifyStatusChange(notifyStatusChangeStatus, notifyCallStatus); - expectedCallStatus = RCall::EStatusConnecting; - iCallControlTestHelper.WaitForCallNotifyStatusChange(call1, - notifyStatusChangeStatus, - notifyCallStatus, - expectedCallStatus, - wantedStatus); - - call1.NotifyStatusChange(notifyStatusChangeStatus, notifyCallStatus); - expectedCallStatus = RCall::EStatusConnected; - iCallControlTestHelper.WaitForCallNotifyStatusChange(call1, - notifyStatusChangeStatus, - notifyCallStatus, - expectedCallStatus, - wantedStatus); - - // Check RCall::GetStatus returns EStatusConnected. - ASSERT_EQUALS(call1.GetStatus(callStatus), KErrNone, _L("RCall::GetStatus returned an error")); - ASSERT_EQUALS(callStatus, RCall::EStatusConnected, _L("RCall::GetStatus did not return EStatusConnected")); - - // Check RMobileCall::NotifyMobileCallStatusChange completes with EStatusDialling -> EStatusConnecting -> EStatusConnected. - RMobileCall::TMobileCallStatus expectedMobileCallStatus = RMobileCall::EStatusDialling; - iCallControlTestHelper.WaitForMobileCallNotifyMobileCallStatusChange(call1, - notifyMobileCallChangeStatus, - notifyMobileCallStatus, - expectedMobileCallStatus, - wantedStatus); - - call1.NotifyMobileCallStatusChange(notifyMobileCallChangeStatus, notifyMobileCallStatus); - expectedMobileCallStatus = RMobileCall::EStatusConnecting; - iCallControlTestHelper.WaitForMobileCallNotifyMobileCallStatusChange(call1, - notifyMobileCallChangeStatus, - notifyMobileCallStatus, - expectedMobileCallStatus, - wantedStatus); - - call1.NotifyMobileCallStatusChange(notifyMobileCallChangeStatus, notifyMobileCallStatus); - expectedMobileCallStatus = RMobileCall::EStatusConnected; - iCallControlTestHelper.WaitForMobileCallNotifyMobileCallStatusChange(call1, - notifyMobileCallChangeStatus, - notifyMobileCallStatus, - expectedMobileCallStatus, - wantedStatus); - - // Check RMobileCall::GetMobileCallStatus returns status of EStatusConnected. - ASSERT_EQUALS(call1.GetMobileCallStatus(mobileCallStatus), KErrNone, _L("RMobileCall::GetMobileCallStatus returned an error")); - ASSERT_EQUALS(mobileCallStatus, RMobileCall::EStatusConnected, _L("RMobileCall::GetMobileCallStatus did not return a status EStatusConnected")); - - // === Check call info === - - User::After(KOneSecond*2); // Wait added for call duration - - // Check RCall::GetInfo returns valid call name. - ASSERT_EQUALS(call1.GetInfo(callInfo), KErrNone, _L("RCall::GetInfo returned an error")); - ASSERT_TRUE(callInfo.iCallName.Length() > 0, _L("RCall::GetInfo returned an invalid call name")); - - // Check RCall::GetInfo returns valid voice line name. - ASSERT_TRUE(callInfo.iLineName.Length() > 0 ,_L("RCall::GetInfo returned an invalid line name")); - - // Check RCall::GetInfo returns call status of EStatusConnected. - ASSERT_EQUALS(callInfo.iStatus, RCall::EStatusConnected, _L("RCall::GetInfo returned wrong status, should be EStatusConnected")); - - // Check RCall::GetInfo returns call duration of > 0. - ASSERT_TRUE(callInfo.iDuration.Int() > 0, _L("RCall::GetInfo returned a duration other than > 0")); - - // Check RMobileCall::GetMobileCallInfo returns iValid > 0. - ASSERT_EQUALS(call1.GetMobileCallInfo(callInfoPckg), KErrNone, _L("RMobileCall::GetMobileCallInfo returned an error")); - // $CTSYProblem CTSY initialises iAlternatingCall to EAlternatingModeUnspecified, which should be updated via EMobileCallGetMobileCallInfo from LTSY - // This problem is inside CheckForValidCallInfo() helper method. - iCallControlTestHelper.CheckForValidCallInfo(mobileCallInfo); - - // Check RMobileCall::GetMobileCallInfo returns data for attributes marked as valid in iValid. - ASSERT_TRUE(mobileCallInfo.iCallName.Length() > 0, _L("RMobileCall::GetMobileCallInfo returned an invalid call name")); - - // Check RMobileCall::GetMobileCallInfo returns valid line name. - ASSERT_TRUE(mobileCallInfo.iLineName.Length() > 0, _L("RMobileCall::GetMobileCallInfo returned an invalid line name")); - - - //////////////////////////////////////////////////////////////// - // TEST END - //////////////////////////////////////////////////////////////// - - StartCleanup(); - - // Hangup call - call1.HangUp(); - - // Pop - // notifyCapsChangeStatus - // notifyMobileCallCapsChangeStatus - // notifyStatusChangeStatus - // notifyMobileCallChangeStatus - // dialStatus - CleanupStack::PopAndDestroy(5, ¬ifyCapsChangeStatus); - - return TestStepResult(); - } - -TPtrC CCTSYIntegrationTestCallControl0048::GetTestStepName() -/** - * @return The test step name. - */ - { - return _L("CCTSYIntegrationTestCallControl0048"); - } - - - -CCTSYIntegrationTestCallControl0049::CCTSYIntegrationTestCallControl0049(CEtelSessionMgr& aEtelSessionMgr) - : CCTSYIntegrationTestCallControlBase(aEtelSessionMgr) -/** - * Constructor. - */ - { - SetTestStepName(CCTSYIntegrationTestCallControl0049::GetTestStepName()); - } - -CCTSYIntegrationTestCallControl0049::~CCTSYIntegrationTestCallControl0049() -/** - * Destructor. - */ - { - } - -TVerdict CCTSYIntegrationTestCallControl0049::doTestStepL() -/** - * @SYMTestCaseID BA-CTSY-INT-CCON-0049 - * @SYMFssID BA/CTSY/CCON-0049 - * @SYMTestCaseDesc Answer a call using RMobileCall::AnswerIncomingCallISV - * @SYMTestPriority High - * @SYMTestActions RMobileCall::NotifyMobileCallCapsChange, - * RMobileCall::GetMobileCallStatus, - * RMobileCall::GetMobileCallInfo, - * RLine::NotifyIncomingCall, RCall::GetInfo, - * RCall::NotifyStatusChange, - * RMobileCall::NotifyMobileCallStatusChange, - * RCall::NotifyCapsChange, RCall::GetStatus, - * RMobileCall::AnswerIncomingCallISV, - * RMobileCall::GetMobileCallCaps - * @SYMTestExpectedResults Pass - Call answered. - * @SYMTestType CIT - * @SYMTestCaseDependencies live/automatic - * - * Reason for test: Verify change in call state is reflected in RCall and RMobileCall - * - * @return - TVerdict code - */ - { - - //////////////////////////////////////////////////////////////// - // SET UP - //////////////////////////////////////////////////////////////// - - - // Call TNetworkTsyTestHelper::WaitForRegisteredOnHomeNetworkL - RMobilePhone& phone = iEtelSessionMgr.GetPhoneL(KMainServer,KMainPhone); - CHECK_EQUALS_L(iNetworkTestHelper.WaitForRegisteredOnHomeNetworkL(phone), KErrNone, _L("TNetworkTsyTestHelper::WaitForRegisteredOnHomeNetworkL returned with an error")); - - // Check phone supports KCapsVoice. - RPhone::TCaps phoneCaps; - CHECK_EQUALS_L(phone.GetCaps(phoneCaps), KErrNone, _L("RPhone::GetCaps returned an error")); - CHECK_BITS_SET_L(phoneCaps.iFlags, RPhone::KCapsVoice, KNoUnwantedBits, _L("RPhone::GetCaps returned wrong caps")); - - // Get Voice line 1. - RMobileLine& voiceLine = iEtelSessionMgr.GetLineL(KMainServer, KMainPhone, KVoiceLine); - - - //////////////////////////////////////////////////////////////// - // SET UP END - //////////////////////////////////////////////////////////////// - - StartTest(); - - //////////////////////////////////////////////////////////////// - // TEST START - //////////////////////////////////////////////////////////////// - - - // post notification RLine::NotifyIncomingCall - TCoreEtelRequestStatus notifyIncomingCallStatus(voiceLine, &RLine::NotifyIncomingCallCancel); - CleanupStack::PushL(notifyIncomingCallStatus); - TName incomingCallName; - incomingCallName.Zero(); - voiceLine.NotifyIncomingCall(notifyIncomingCallStatus, incomingCallName); - - // Request incoming call from RPS. - ASSERT_EQUALS (RPSRequestIncomingCallL(EVoiceLine), KErrNone, - _L("CCTSYIntegrationTestSuiteStepBase::RPSRequestIncomingCallL returned an error")); - - // Check RLine::NotifyIncomingCall completes with call name. - ASSERT_EQUALS(WaitForRequestWithTimeOut(notifyIncomingCallStatus, ETimeMedium),KErrNone, _L("RLine::NotifyIncomingCall timed out")); - ASSERT_EQUALS(notifyIncomingCallStatus.Int(), KErrNone, _L("RLine::NotifyIncomingCall returned with an error")); - ASSERT_TRUE(incomingCallName.Length() > 0, _L("RLine::NotifyIncomingCall completed with invalid call name")); - - // Get the incoming call - TCallId incomingCallId; - RMobileCall& call1 = iEtelSessionMgr.GetIncomingCallL(KMainServer, KMainPhone, KVoiceLine, incomingCallName, incomingCallId); - - // post notifier for RCall::NotifyCapsChange - TCoreEtelRequestStatus notifyCapsChangeStatus (call1, &RCall::NotifyCapsChangeCancel); - CleanupStack::PushL(notifyCapsChangeStatus); - RCall::TCaps callCaps; - call1.NotifyCapsChange(notifyCapsChangeStatus, callCaps); - - // post notifier for RMobileCall::NotifyMobileCallCapsChange - TExtEtelRequestStatus notifyMobileCallCapsChangeStatus(call1, EMobileCallNotifyMobileCallCapsChange); - CleanupStack::PushL(notifyMobileCallCapsChangeStatus); - RMobileCall::TMobileCallCapsV1 mobileCallCaps; - RMobileCall::TMobileCallCapsV1Pckg mobileCallCapsPckg(mobileCallCaps); - call1.NotifyMobileCallCapsChange(notifyMobileCallCapsChangeStatus, mobileCallCapsPckg); - - // post notifier for RCall::NotifyStatusChange - TCoreEtelRequestStatus notifyStatusChangeStatus (call1, &RCall::NotifyStatusChangeCancel); - CleanupStack::PushL(notifyStatusChangeStatus); - RCall::TStatus callStatus; - call1.NotifyStatusChange(notifyStatusChangeStatus,callStatus); - - // post notifier for RMobileCall::NotifyMobileCallStatusChange - TExtEtelRequestStatus notifyMobileCallStatusChangeStatus(call1, EMobileCallNotifyMobileCallStatusChange); - CleanupStack::PushL(notifyMobileCallStatusChangeStatus); - RMobileCall::TMobileCallStatus mobileCallStatus; - call1.NotifyMobileCallStatusChange(notifyMobileCallStatusChangeStatus, mobileCallStatus); - - // Answer incoming call with RMobileCall::AnswerIncomingCallISV - TExtEtelRequestStatus answerIncomingCallStatus(call1, EMobileCallAnswerISV); - CleanupStack::PushL(answerIncomingCallStatus); - RMobileCall::TEtel3rdPartyMobileCallParamsV1 callParams; - RMobileCall::TEtel3rdPartyMobileCallParamsV1Pckg callParamsPckg(callParams); - call1.AnswerIncomingCallISV(answerIncomingCallStatus, callParamsPckg); - ASSERT_EQUALS(WaitForRequestWithTimeOut(answerIncomingCallStatus,ETimeMedium),KErrNone,_L("RMobileCall::AnswerIncomingCallISV timed out")); - ASSERT_EQUALS(answerIncomingCallStatus.Int(), KErrNone, _L("RMobileCall::AnswerIncomingCallISV returned with an error")); - - // === Check call caps === - - // Check RCall::NotifyCapsChange completes with caps in set of KCapsVoice | KCapsHangUp. - RCall::TCaps wantedCaps, unwantedCaps; - wantedCaps.iFlags = RCall::KCapsVoice | RCall::KCapsHangUp; - unwantedCaps.iFlags = 0; - const TInt wantedStatus = KErrNone; - iCallControlTestHelper.WaitForCallNotifyCapsChange(call1, - notifyCapsChangeStatus, - callCaps, - wantedCaps, - unwantedCaps, - wantedStatus); - - // Check RCall::GetCaps supports KCapsHangUp | KCapsVoice. - TUint32 wantedCallCaps = RCall::KCapsHangUp | RCall::KCapsVoice; - ASSERT_EQUALS(call1.GetCaps(callCaps),KErrNone, _L("RCall::GetCaps returned an error")); - ASSERT_BITS_SET(callCaps.iFlags, wantedCallCaps, KNoUnwantedBits, _L("RCall::GetCaps returned wrong caps")); - - // Check RMobileCall::NotifyMobileCallCapsChange completes with iCallControlCaps in set of KCapsVoice | KCapsHold | KCapsHangUp - // Check RMobileCall::NotifyMobileCallCapsChange completes with iCallEventCaps in set of KCapsLocalHold | KCapsLocalTransfer | KCapsRemoteHold | KCapsRemoteTerminate | KCapsRemoteConferenceCreate. - RMobileCall::TMobileCallCapsV1 wantedMobileCaps; - wantedMobileCaps.iCallControlCaps = RMobileCall::KCapsVoice | - RMobileCall::KCapsHold | - RMobileCall::KCapsHangUp; - - wantedMobileCaps.iCallEventCaps = RMobileCall::KCapsLocalHold | - RMobileCall::KCapsLocalTransfer | - RMobileCall::KCapsRemoteHold | - RMobileCall::KCapsRemoteTerminate | - RMobileCall::KCapsRemoteConferenceCreate; - - TCmpRMobileCallTMobileCallCaps mobileCapsComp(wantedMobileCaps,mobileCallCaps, *this); - iCallControlTestHelper.WaitForMobileCallNotifyMobileCallCapsChange(call1, - notifyMobileCallCapsChangeStatus, - mobileCapsComp, - wantedStatus); - - // Check RMobileCall::GetMobileCallCaps includes iCallControlCaps in set of KCapsVoice | KCapsHold | KCapsHangUp. - ASSERT_EQUALS(call1.GetMobileCallCaps(mobileCallCapsPckg), KErrNone, _L("RMobileCall::GetMobileCallCaps returned an error")); - ASSERT_BITS_SET(mobileCallCaps.iCallControlCaps, wantedMobileCaps.iCallControlCaps, KNoUnwantedBits, _L("RMobileCall::GetMobileCallCaps returned wrong caps")); - - // Check RMobileCall::GetMobileCallCaps includes iCallEventCaps in set of KCapsLocalHold | KCapsLocalTransfer | KCapsRemoteHold | KCapsRemoteTerminate | KCapsRemoteConferenceCreate. - ASSERT_BITS_SET(mobileCallCaps.iCallEventCaps, wantedMobileCaps.iCallEventCaps, KNoUnwantedBits, _L("RMobileCall::GetMobileCallCaps returned wrong caps")); - - // === Check call status === - - // Check RCall::NotifyStatusChange completes with EStatusConnected - RCall::TStatus expectedCallStatus = RCall::EStatusConnected; - iCallControlTestHelper.WaitForCallNotifyStatusChange(call1, - notifyStatusChangeStatus, - callStatus, - expectedCallStatus, - wantedStatus); - - // Check RCall::GetStatus returns EStatusConnected - ASSERT_EQUALS(call1.GetStatus(callStatus), KErrNone, _L("RCall::GetStatus returned an error")); - ASSERT_EQUALS(callStatus, RCall::EStatusConnected, _L("RCall::GetStatus did not return EStatusConnected")); - - // Check RMobileCall::NotifyMobileCallStatusChange completes with EStatusConnected. - RMobileCall::TMobileCallStatus expectedMobileCallStatus = RMobileCall::EStatusConnected; - iCallControlTestHelper.WaitForMobileCallNotifyMobileCallStatusChange(call1, - notifyMobileCallStatusChangeStatus, - mobileCallStatus, - expectedMobileCallStatus, - wantedStatus); - - // Check RMobileCall::GetMobileCallStatus returns status of EStatusConnected. - ASSERT_EQUALS(call1.GetMobileCallStatus(mobileCallStatus), KErrNone, - _L("RMobileCall::GetMobileStatus returned an error")); - ASSERT_EQUALS(mobileCallStatus, RMobileCall::EStatusConnected, - _L("RMobileCall::GetMobileStatus did not return a status EStatusConnected")); - - // === Check call info === - - User::After(KOneSecond*2); // Wait added for call duration - - // Check RCall::GetInfo returns valid call name. - RCall::TCallInfo callInfo; - ASSERT_EQUALS(call1.GetInfo(callInfo), KErrNone, _L("RCall::GetInfo returned an error")); - ASSERT_TRUE(callInfo.iCallName.Length() > 0, _L("RCall::GetInfo returned an invalid call name")); - - // Check RCall::GetInfo returns valid voice line name. - ASSERT_TRUE(callInfo.iLineName.Length() > 0,_L("RCall::GetInfo returned an invalid line name")); - - // Check RCall::GetInfo returns call status of EStatusConnected. - ASSERT_EQUALS(callInfo.iStatus, RCall::EStatusConnected, _L("RCall::GetInfo returned wrong status, should be EStatusConnected")); - - // Check RCall::GetInfo returns call duration of > 0. - ASSERT_TRUE(callInfo.iDuration.Int() > 0, _L("RCall::GetInfo returned duration <= 0, should > 0")); - - // Check RMobileCall::GetMobileCallInfo returns iValid > 0. - RMobileCall::TMobileCallInfoV1 mobileCallInfo; - RMobileCall::TMobileCallInfoV1Pckg callInfoPckg(mobileCallInfo); - ASSERT_EQUALS(call1.GetMobileCallInfo(callInfoPckg), KErrNone, _L("RMobileCall::GetMobileCallInfo returned an error")); - ASSERT_TRUE(mobileCallInfo.iValid > 0, _L("RMobileCall::GetMobileCallInfo returned iValid <= 0 flags, should be > 0")); - - // Check RMobileCall::GetMobileCallInfo returns data for attributes makred as valid in iValid. - iCallControlTestHelper.CheckForValidCallInfo(mobileCallInfo); - - // Check RMobileCall::GetMobileCallInfo returns valid line name. - ASSERT_TRUE(mobileCallInfo.iLineName.Length() > 0, _L("RMobileCall::GetMobileCallInfo returned an invalid line name")); - - // Hangup call - TCoreEtelRequestStatus hangUpStatus (call1,&RCall::HangUpCancel); - CleanupStack::PushL(hangUpStatus); - call1.HangUp(hangUpStatus); - ASSERT_EQUALS(WaitForRequestWithTimeOut(hangUpStatus, ETimeMedium), KErrNone, _L("RCall::HangUp timed-out")); - ASSERT_EQUALS(hangUpStatus.Int(), KErrNone, _L("RCall::HangUp returned an error")); - - - //////////////////////////////////////////////////////////////// - // TEST END - //////////////////////////////////////////////////////////////// - - StartCleanup(); - - // Pop - // notifyIncomingCallStatus - // notifyCapsChangeStatus - // notifyMobileCallCapsChangeStatus - // notifyStatusChangeStatus - // notifyMobileCallStatusChangeStatus - // answerIncomingCallStatus - // hangUpStatus - CleanupStack::PopAndDestroy(7, ¬ifyIncomingCallStatus); - - return TestStepResult(); - } - -TPtrC CCTSYIntegrationTestCallControl0049::GetTestStepName() -/** - * @return The test step name. - */ - { - return _L("CCTSYIntegrationTestCallControl0049"); - } - - - -CCTSYIntegrationTestCallControl0050::CCTSYIntegrationTestCallControl0050(CEtelSessionMgr& aEtelSessionMgr) - : CCTSYIntegrationTestCallControlBase(aEtelSessionMgr) -/** - * Constructor. - */ - { - SetTestStepName(CCTSYIntegrationTestCallControl0050::GetTestStepName()); - } - -CCTSYIntegrationTestCallControl0050::~CCTSYIntegrationTestCallControl0050() -/** - * Destructor. - */ - { - } - -TVerdict CCTSYIntegrationTestCallControl0050::doTestStepL() -/** - * @SYMTestCaseID BA-CTSY-INT-CCON-0050 - * @SYMFssID BA/CTSY/CCON-0050 - * @SYMTestCaseDesc Answer a call using RMobileCall::AnswerIncomingCallISV - * @SYMTestPriority High - * @SYMTestActions RMobileLine::NotifyMobileLineStatusChange, - * RLine::GetCallInfo, - * RLine::NotifyIncomingCall, RLine::GetStatus, - * RMobileLine::GetMobileLineStatus, - * RLine::GetInfo, - * RMobileCall::AnswerIncomingCallISV - * @SYMTestExpectedResults Pass - Call answered. - * @SYMTestType CIT - * @SYMTestCaseDependencies RPS/automatic - * - * Reason for test: Verify change in line state is reflected in RLine and RMobileLine - * - * @return - TVerdict code - */ - { - - //////////////////////////////////////////////////////////////// - // SET UP - //////////////////////////////////////////////////////////////// - - // Call TNetworkTsyTestHelper::WaitForRegisteredOnHomeNetworkL - RMobilePhone& phone = iEtelSessionMgr.GetPhoneL(KMainServer,KMainPhone); - CHECK_EQUALS_L(iNetworkTestHelper.WaitForRegisteredOnHomeNetworkL(phone), KErrNone, - _L("TNetworkTsyTestHelper::WaitForRegisteredOnHomeNetworkL returned with an error")); - - // Check phone supports KCapsVoice. - RPhone::TCaps phoneCaps; - CHECK_EQUALS_L(phone.GetCaps(phoneCaps), KErrNone, _L("RPhone::GetCaps returned an error")); - CHECK_BITS_SET_L(phoneCaps.iFlags, RPhone::KCapsVoice, KNoUnwantedBits, _L("RPhone::GetCaps returned wrong caps")); - - // Get Voice line 1. - RMobileLine& voiceLine = iEtelSessionMgr.GetLineL(KMainServer, KMainPhone, KVoiceLine); - - // Get Call 1. - RMobileCall& mobileCall1 = iEtelSessionMgr.GetCallL(KMainServer, KMainPhone, KVoiceLine, KCall1); - - //////////////////////////////////////////////////////////////// - // SET UP END - //////////////////////////////////////////////////////////////// - - StartTest(); - - //////////////////////////////////////////////////////////////// - // TEST START - //////////////////////////////////////////////////////////////// - - // Post notification RLine::NotifyIncomingCall - TCoreEtelRequestStatus notifyIncomingCallStatus(voiceLine, &RLine::NotifyIncomingCallCancel); - CleanupStack::PushL(notifyIncomingCallStatus); - TName incomingCallName; - incomingCallName.Zero(); - voiceLine.NotifyIncomingCall(notifyIncomingCallStatus, incomingCallName); - - // Post notifier for RLine::NotifyStatusChange - TCoreEtelRequestStatus notifyStatusChangeStatus (voiceLine, &RLine::NotifyStatusChangeCancel); - CleanupStack::PushL(notifyStatusChangeStatus); - RCall::TStatus lineStatus; - voiceLine.NotifyStatusChange(notifyStatusChangeStatus, lineStatus); - - // Post a notifier for RMobileLine::NotifyMobileLineStatusChange - RMobileCall::TMobileCallStatus mobileLineStatus; - TExtEtelRequestStatus notifyMobileLineChangeStatus(voiceLine, EMobileLineNotifyMobileLineStatusChange); - CleanupStack::PushL(notifyMobileLineChangeStatus); - voiceLine.NotifyMobileLineStatusChange(notifyMobileLineChangeStatus, mobileLineStatus); - - // Request incoming call from RPS. - ASSERT_EQUALS (RPSRequestIncomingCallL(EVoiceLine), KErrNone, _L("CCTSYIntegrationTestSuiteStepBase::RPSRequestIncomingCallL returned an error")); - - // Check RLine::NotifyIncomingCall completes with call name. - ASSERT_EQUALS(WaitForRequestWithTimeOut(notifyIncomingCallStatus, ETimeMedium), KErrNone, _L("RLine::NotifyIncomingCall timed out")); - ASSERT_EQUALS(notifyIncomingCallStatus.Int(), KErrNone, _L("RLine::NotifyIncomingCall returned with an error")); - ASSERT_TRUE(incomingCallName.Length() > 0, _L("RLine::NotifyIncomingCall completed with an invalid call name")); - - // Get the incoming call - TCallId incomingCallId; - mobileCall1 = iEtelSessionMgr.GetIncomingCallL(KMainServer, KMainPhone, KVoiceLine, incomingCallName, incomingCallId); - - // Answer incoming call with RMobileCall::AnswerIncomingCallISV - TExtEtelRequestStatus answerIncomingCallStatus(mobileCall1, EMobileCallAnswerISV); - CleanupStack::PushL(answerIncomingCallStatus); - RMobileCall::TEtel3rdPartyMobileCallParamsV1 callParams; - RMobileCall::TEtel3rdPartyMobileCallParamsV1Pckg callParamsPckg(callParams); - mobileCall1.AnswerIncomingCallISV(answerIncomingCallStatus, callParamsPckg); - ASSERT_EQUALS(WaitForRequestWithTimeOut(answerIncomingCallStatus,ETimeMedium),KErrNone,_L("RMobileCall::AnswerIncomingCallISV timed out")); - ASSERT_EQUALS(answerIncomingCallStatus.Int(), KErrNone, _L("RMobileCall::AnswerIncomingCallISV returned with an error")); - - // === Check line status === - - // Check RLine::NotifyStatusChange completes with EStatusAnswering -> EStatusConnected. - RCall::TStatus expectedLineStatus = RCall::EStatusAnswering; - iCallControlTestHelper.WaitForLineNotifyStatusChange(voiceLine, - notifyStatusChangeStatus, - lineStatus, - expectedLineStatus, - KErrNone); - - voiceLine.NotifyStatusChange(notifyStatusChangeStatus, lineStatus); - expectedLineStatus = RCall::EStatusConnected; - iCallControlTestHelper.WaitForLineNotifyStatusChange(voiceLine, - notifyStatusChangeStatus, - lineStatus, - expectedLineStatus, - KErrNone); - - // Check RLine::GetStatus returns EStatusConnected - ASSERT_EQUALS(voiceLine.GetStatus(lineStatus), KErrNone, _L("RLine::GetStatus returned an error")); - ASSERT_EQUALS(lineStatus, expectedLineStatus, _L("RLine::GetStatus did not return EStatusConnected as expected")); - - // Check RMobileLine::NotifyMobileLineStatusChange completes with EStatusAnswering -> EStatusConnected. - RMobileCall::TMobileCallStatus expectedMobileLineStatus = RMobileCall::EStatusAnswering; - iCallControlTestHelper.WaitForMobileLineNotifyMobileLineStatusChange(voiceLine, - notifyMobileLineChangeStatus, - mobileLineStatus, - expectedMobileLineStatus, - KErrNone); - - voiceLine.NotifyMobileLineStatusChange(notifyMobileLineChangeStatus, mobileLineStatus); - expectedMobileLineStatus = RMobileCall::EStatusConnected; - iCallControlTestHelper.WaitForMobileLineNotifyMobileLineStatusChange(voiceLine, - notifyMobileLineChangeStatus, - mobileLineStatus, - expectedMobileLineStatus, - KErrNone); - - // Check RMobileLine::GetMobileLineStatus returns EStatusConnected - ASSERT_EQUALS(voiceLine.GetMobileLineStatus(mobileLineStatus), KErrNone, _L("RMobileLine::GetMobileLineStatus returned an error")); - ASSERT_EQUALS(mobileLineStatus, RMobileCall::EStatusConnected, _L("RMobileLine::GetMobileLineStatus did not return EStatusConnected as expected")); - - // === Check line info === - - // Check RLine::GetCallInfo returns valid name. - RLine::TCallInfo callInfo; - ASSERT_EQUALS(voiceLine.GetCallInfo(incomingCallId, callInfo), KErrNone, _L("RLine::GetCallInfo returned an error")); - ASSERT_TRUE(callInfo.iCallName.Length() > 0, _L("RLine::GetCallInfo returned an invalid iCallName")); - - // Check RLine::GetCallInfo returns caps in set of KCapsHangUp. - ASSERT_BITS_SET(callInfo.iCallCapsFlags, RCall::KCapsHangUp, KNoUnwantedBits , _L("RLine::GetCallInfo returned wrong caps")); - - // Check RLine::GetCallInfo returns status of EStatusConnected. - ASSERT_EQUALS(callInfo.iStatus, RCall::EStatusConnected, _L("RLine::GetCallInfo did not return EStatusConnected as expected")); - - // Check RLine::GetInfo returns status of EStatusConnected. - RLine::TLineInfo lineInfo; - ASSERT_EQUALS(voiceLine.GetInfo(lineInfo),KErrNone, _L("RLine::GetInfo returned an error")); - ASSERT_EQUALS(lineInfo.iStatus, RCall::EStatusConnected, _L("RLine::GetInfo did not return EStatusConnected as expected")); - - // Hang up the call - TCoreEtelRequestStatus hangUpStatus (mobileCall1, &RCall::HangUpCancel); - CleanupStack::PushL(hangUpStatus); - mobileCall1.HangUp(hangUpStatus); - ASSERT_EQUALS(WaitForRequestWithTimeOut(hangUpStatus, ETimeMedium), KErrNone, _L("RCall::HangUp timed-out")); - ASSERT_EQUALS(hangUpStatus.Int(), KErrNone, _L("RCall::HangUp returned an error")); - - //////////////////////////////////////////////////////////////// - // TEST END - //////////////////////////////////////////////////////////////// - - StartCleanup(); - - // Pop - // notifyIncomingCallStatus - // notifyStatusChangeStatus - // notifyMobileLineChangeStatus - // answerIncomingCallStatus - // hangUpStatus - CleanupStack::PopAndDestroy(5, ¬ifyIncomingCallStatus); - - return TestStepResult(); - } - -TPtrC CCTSYIntegrationTestCallControl0050::GetTestStepName() -/** - * @return The test step name. - */ - { - return _L("CCTSYIntegrationTestCallControl0050"); - } - - - -CCTSYIntegrationTestCallControl0051::CCTSYIntegrationTestCallControl0051(CEtelSessionMgr& aEtelSessionMgr) - : CCTSYIntegrationTestCallControlBase(aEtelSessionMgr) -/** - * Constructor. - */ - { - SetTestStepName(CCTSYIntegrationTestCallControl0051::GetTestStepName()); - } - -CCTSYIntegrationTestCallControl0051::~CCTSYIntegrationTestCallControl0051() -/** - * Destructor. - */ - { - } - -TVerdict CCTSYIntegrationTestCallControl0051::doTestStepL() -/** - * @SYMTestCaseID BA-CTSY-INT-CCON-0051 - * @SYMFssID BA/CTSY/CCON-0051 - * @SYMTestCaseDesc Get the call duration of a call. - * @SYMTestPriority High - * @SYMTestActions RCall::NotifyCallDurationChange, RCall::GetCallDuration, RCall::HangUp - * @SYMTestExpectedResults Pass - Call duration reported correctly during call. - * @SYMTestType CIT - * @SYMTestCaseDependencies live/automatic - * - * Reason for test: Verify notification of call duration advances during call each second. - * - * @return - TVerdict code - */ - { - - //////////////////////////////////////////////////////////////// - // SET UP - //////////////////////////////////////////////////////////////// - - // Call TNetworkTsyTestHelper::WaitForRegisteredOnHomeNetworkL - RMobilePhone& phone = iEtelSessionMgr.GetPhoneL(KMainServer,KMainPhone); - CHECK_EQUALS_L(iNetworkTestHelper.WaitForRegisteredOnHomeNetworkL(phone), KErrNone, - _L("TNetworkTsyTestHelper::WaitForRegisteredOnHomeNetworkL returned with an error")); - - // Check phone supports KCapsVoice. - RPhone::TCaps phoneCaps; - CHECK_EQUALS_L(phone.GetCaps(phoneCaps), KErrNone, _L("RPhone::GetCaps returned an error")); - CHECK_BITS_SET_L(phoneCaps.iFlags, RPhone::KCapsVoice, KNoUnwantedBits, _L("RPhone::GetCaps returned wrong caps")); - - // Get Voice line 1. - RMobileLine& voiceLine = iEtelSessionMgr.GetLineL(KMainServer, KMainPhone, KVoiceLine); - - // Get call 1. - RCall& call1 = iEtelSessionMgr.GetCallL(KMainServer, KMainPhone, KVoiceLine, KCall1); - - - //////////////////////////////////////////////////////////////// - // SET UP END - //////////////////////////////////////////////////////////////// - - StartTest(); - - //////////////////////////////////////////////////////////////// - // TEST START - //////////////////////////////////////////////////////////////// - - // Check RCall::GetInfo returns call status of EStatusIdle. - RCall::TCallInfo callInfo; - ASSERT_EQUALS(call1.GetInfo(callInfo), KErrNone, _L("RCall::GetInfo returned an error")); - ASSERT_EQUALS(callInfo.iStatus, RCall::EStatusIdle, _L("RCall::GetInfo returned wrong status, should be EStatusIdle")); - - // post RCall::NotifyCallDurationChange - TCoreEtelRequestStatus notifyCallDurationChangeStatus(call1, &RCall::NotifyCallDurationChangeCancel); - CleanupStack::PushL(notifyCallDurationChangeStatus); - TTimeIntervalSeconds notifyDuration; - call1.NotifyCallDurationChange(notifyCallDurationChangeStatus, notifyDuration); - - // Dial a number that answers. - TPtrC number; - ASSERT_TRUE(GetStringFromConfig(KIniVoiceNumSection, KIniVoiceNumber1, number) != EFalse, _L("GetStringFromConfig did not complete as expected")); - TCoreEtelRequestStatus dialStatus(call1, &RCall::DialCancel); - CleanupStack::PushL(dialStatus); - DEBUG_PRINTF1(_L("Board Now Dialling... ")); - call1.Dial(dialStatus, number); - ASSERT_EQUALS(WaitForRequestWithTimeOut(dialStatus, ETimeLong), KErrNone, _L("RCall::Dial timed-out")); - ASSERT_EQUALS(dialStatus.Int(), KErrNone, _L("RCall::Dial returned with an error")); - - // Check completion of RCall::NotifyCallDurationChange - ASSERT_EQUALS(WaitForRequestWithTimeOut(notifyCallDurationChangeStatus, ETimeShort), KErrNone, _L("RCall::NotifyCallDurationChange timed-out")); - ASSERT_EQUALS(notifyCallDurationChangeStatus.Int(), KErrNone, _L("RCall::NotifyCallDurationChange returned with an error")); - - for(TInt i = 0; i < 10; ++i) - { - TTimeIntervalSeconds prevNotifyDuration = notifyDuration; - - // post RCall::NotifyCallDurationChange - call1.NotifyCallDurationChange(notifyCallDurationChangeStatus, notifyDuration); - - // Check notification of call duration from RCall::NotifyCallDurationChange completes with call duration which has advanced from previous notification. - ASSERT_EQUALS(WaitForRequestWithTimeOut(notifyCallDurationChangeStatus, ETimeShort), KErrNone, _L("RCall::NotifyCallDurationChange timed-out")); - ASSERT_EQUALS(notifyCallDurationChangeStatus.Int(), KErrNone, _L("RCall::NotifyCallDurationChange returned with an error")); - - ASSERT_TRUE(notifyDuration.Int() > prevNotifyDuration.Int(), _L("RCall::NotifyCallDurationChange completed with duration less than expected")); - - // Check RCall::GetCallDuration returns call duration >= previous call duration. - TTimeIntervalSeconds durationGet, prevdurationGet=0; - ASSERT_EQUALS(call1.GetCallDuration(durationGet), KErrNone, _L("RCall::GetCallDuration returned with an error")); - ASSERT_TRUE(durationGet.Int() >= prevdurationGet.Int(), _L("RCall::GetCallDuration returned with duration less than expected")); - prevdurationGet = durationGet; - } - - // hang up the call - TCoreEtelRequestStatus hangUpStatus (call1,&RCall::HangUpCancel); - CleanupStack::PushL(hangUpStatus); - call1.HangUp(hangUpStatus); - ASSERT_EQUALS(WaitForRequestWithTimeOut(hangUpStatus, ETimeMedium), KErrNone, _L("RCall::HangUp timed-out")); - ASSERT_EQUALS(hangUpStatus.Int(), KErrNone, _L("RCall::HangUp returned with an error")); - - //////////////////////////////////////////////////////////////// - // TEST END - //////////////////////////////////////////////////////////////// - - StartCleanup(); - - // Pop - // notifyCallDurationChangeStatus - // dialStatus - // hangUpStatus - CleanupStack::PopAndDestroy(3, ¬ifyCallDurationChangeStatus); - - return TestStepResult(); - } - -TPtrC CCTSYIntegrationTestCallControl0051::GetTestStepName() -/** - * @return The test step name. - */ - { - return _L("CCTSYIntegrationTestCallControl0051"); - } - - - -CCTSYIntegrationTestCallControl0052::CCTSYIntegrationTestCallControl0052(CEtelSessionMgr& aEtelSessionMgr) - : CCTSYIntegrationTestCallControlBase(aEtelSessionMgr) -/** - * Constructor. - */ - { - SetTestStepName(CCTSYIntegrationTestCallControl0052::GetTestStepName()); - } - -CCTSYIntegrationTestCallControl0052::~CCTSYIntegrationTestCallControl0052() -/** - * Destructor. - */ - { - } - -TVerdict CCTSYIntegrationTestCallControl0052::doTestStepL() -/** - * @SYMTestCaseID BA-CTSY-INT-CCON-0052 - * @SYMFssID BA/CTSY/CCON-0052 - * @SYMTestCaseDesc Cancel call duration notifications. - * @SYMTestPriority High - * @SYMTestActions RCall::NotifyCallDurationChange, RCall::NotifyCallDurationChangeCancel - * @SYMTestExpectedResults Pass - Call duration cancelled. - * @SYMTestType CIT - * @SYMTestCaseDependencies live/automatic - * - * Reason for test: Verify notification of call duration cancelled. - * - * @return - TVerdict code - */ - { - - //////////////////////////////////////////////////////////////// - // SET UP - //////////////////////////////////////////////////////////////// - - // Call TNetworkTsyTestHelper::WaitForRegisteredOnHomeNetworkL - RMobilePhone& phone = iEtelSessionMgr.GetPhoneL(KMainServer,KMainPhone); - CHECK_EQUALS_L(iNetworkTestHelper.WaitForRegisteredOnHomeNetworkL(phone), KErrNone, - _L("TNetworkTsyTestHelper::WaitForRegisteredOnHomeNetworkL returned with an error")); - - // Check phone supports KCapsVoice. - RPhone::TCaps phoneCaps; - CHECK_EQUALS_L(phone.GetCaps(phoneCaps), KErrNone, _L("RPhone::GetCaps returned an error")); - CHECK_BITS_SET_L(phoneCaps.iFlags, RPhone::KCapsVoice, KNoUnwantedBits, _L("RPhone::GetCaps returned wrong caps")); - - // Get Voice line 1. - RMobileLine& voiceLine = iEtelSessionMgr.GetLineL(KMainServer, KMainPhone, KVoiceLine); - - // Get call 1. - RMobileCall& call1 = iEtelSessionMgr.GetCallL(KMainServer, KMainPhone, KVoiceLine, KCall1); - - //////////////////////////////////////////////////////////////// - // SET UP END - //////////////////////////////////////////////////////////////// - - StartTest(); - - //////////////////////////////////////////////////////////////// - // TEST START - //////////////////////////////////////////////////////////////// - - - // Register for notification of call duration with RCall::NotifyCallDurationChange - TCoreEtelRequestStatus notifyCallDurationChangeStatus(call1, &RCall::NotifyCallDurationChangeCancel); - CleanupStack::PushL(notifyCallDurationChangeStatus); - TTimeIntervalSeconds notifyDuration; - call1.NotifyCallDurationChange(notifyCallDurationChangeStatus, notifyDuration); - - // Cancel notification - call1.NotifyCallDurationChangeCancel(); - - // Check status is KErrCancel - ASSERT_EQUALS(notifyCallDurationChangeStatus.Int(), KErrCancel, _L("RCall::NotifyCallDurationChange is not KErrCancel")); - - //////////////////////////////////////////////////////////////// - // TEST END - //////////////////////////////////////////////////////////////// - - StartCleanup(); - - // Pop - // notifyCallDurationChangeStatus - CleanupStack::PopAndDestroy(¬ifyCallDurationChangeStatus); - - return TestStepResult(); - } - -TPtrC CCTSYIntegrationTestCallControl0052::GetTestStepName() -/** - * @return The test step name. - */ - { - return _L("CCTSYIntegrationTestCallControl0052"); - } - - - -CCTSYIntegrationTestCallControl0053::CCTSYIntegrationTestCallControl0053(CEtelSessionMgr& aEtelSessionMgr) - : CCTSYIntegrationTestCallControlBase(aEtelSessionMgr) -/** - * Constructor. - */ - { - SetTestStepName(CCTSYIntegrationTestCallControl0053::GetTestStepName()); - } - -CCTSYIntegrationTestCallControl0053::~CCTSYIntegrationTestCallControl0053() -/** - * Destructor. - */ - { - } - -TVerdict CCTSYIntegrationTestCallControl0053::doTestStepL() -/** - * @SYMTestCaseID BA-CTSY-INT-CCON-0053 - * @SYMFssID BA/CTSY/CCON-0053 - * @SYMTestCaseDesc Close the phone when incoming call is coming (with 2 clients). - * @SYMTestPriority High - * @SYMTestActions RTelServer::LoadPhoneModule, RTelServer::Close, RLine::Open, RLine::NotifyIncomingCall, RPhone::Open, RLine::Close, RTelServer::Connect, RCall::OpenNewCall, RCall::Close, RPhone::Close - * @SYMTestExpectedResults Pass - Incoming call notification received. Subsessions closed successfully. - * @SYMTestType CIT - * @SYMTestCaseDependencies live/automatic - * - * Reason for test: Verify incoming call notification completes and phone and line can be closed. - * - * @return - TVerdict code - */ - { - - //////////////////////////////////////////////////////////////// - // SET UP - //////////////////////////////////////////////////////////////// - - // Call TNetworkTsyTestHelper::WaitForRegisteredOnHomeNetworkL - RMobilePhone& phone = iEtelSessionMgr.GetPhoneL(KMainServer,KMainPhone); - CHECK_EQUALS_L(iNetworkTestHelper.WaitForRegisteredOnHomeNetworkL(phone), KErrNone, - _L("TNetworkTsyTestHelper::WaitForRegisteredOnHomeNetworkL returned with an error")); - - //////////////////////////////////////////////////////////////// - // SET UP END - //////////////////////////////////////////////////////////////// - - StartTest(); - - //////////////////////////////////////////////////////////////// - // TEST START - //////////////////////////////////////////////////////////////// - - // Get voice line 1 on main phone. This is the first client. - RMobileLine& mobileLine= iEtelSessionMgr.GetLineL(KMainServer, KMainPhone, KVoiceLine); - - // Get voice line 1 on alt phone. This is the second client. - RMobileLine& mobileLine2= iEtelSessionMgr.GetLineL(KAltServer, KMainPhone, KVoiceLine); - - // Register for notification of incoming call1 with RLine::NotifyIncomingCall - TName name; - TCoreEtelRequestStatus notifyIncomingCallStatus (mobileLine,&RLine::NotifyIncomingCallCancel); - CleanupStack::PushL(notifyIncomingCallStatus); - mobileLine.NotifyIncomingCall(notifyIncomingCallStatus,name); - - // Register for notification of incoming call2 with RLine::NotifyIncomingCall - TName name2; - TCoreEtelRequestStatus notifyIncomingCallStatus2 (mobileLine2,&RLine::NotifyIncomingCallCancel); - CleanupStack::PushL(notifyIncomingCallStatus2); - mobileLine2.NotifyIncomingCall(notifyIncomingCallStatus2,name2); - - // Request an incoming call from RPS - ASSERT_EQUALS (RPSRequestIncomingCallL(EVoiceLine), KErrNone, _L("CCTSYIntegrationTestSuiteStepBase::RPSRequestIncomingCallL returned an error")); - - // Check RLine::NotifyIncomingCall completes with KErrNone on both clients. - ASSERT_EQUALS(WaitForRequestWithTimeOut(notifyIncomingCallStatus,ETimeMedium),KErrNone,_L("RLine::NotifyIncomingCall (1) timed out")); - ASSERT_EQUALS(notifyIncomingCallStatus.Int(), KErrNone, _L("RLine::NotifyIncomingCall (1) returned with an error")); - - ASSERT_EQUALS(WaitForRequestWithTimeOut(notifyIncomingCallStatus2,ETimeMedium),KErrNone,_L("RLine::NotifyIncomingCall (2) timed out")); - ASSERT_EQUALS(notifyIncomingCallStatus2.Int(), KErrNone, _L("RLine::NotifyIncomingCall (2) returned with an error")); - - // Release main phone. - iEtelSessionMgr.GetLineL(KMainServer, KMainPhone, KVoiceLine); - - // Release alt phone. - iEtelSessionMgr.GetLineL(KAltServer, KMainPhone, KVoiceLine); - - - //////////////////////////////////////////////////////////////// - // TEST END - //////////////////////////////////////////////////////////////// - - StartCleanup(); - - // Pop - // notifyIncomingCallStatus - // notifyIncomingCallStatus2 - - CleanupStack::PopAndDestroy(2,¬ifyIncomingCallStatus); - - return TestStepResult(); - } - -TPtrC CCTSYIntegrationTestCallControl0053::GetTestStepName() -/** - * @return The test step name. - */ - { - return _L("CCTSYIntegrationTestCallControl0053"); - } - - - -CCTSYIntegrationTestCallControl0054::CCTSYIntegrationTestCallControl0054(CEtelSessionMgr& aEtelSessionMgr) - : CCTSYIntegrationTestCallControlBase(aEtelSessionMgr) -/** - * Constructor. - */ - { - SetTestStepName(CCTSYIntegrationTestCallControl0054::GetTestStepName()); - } - -CCTSYIntegrationTestCallControl0054::~CCTSYIntegrationTestCallControl0054() -/** - * Destructor. - */ - { - } - -TVerdict CCTSYIntegrationTestCallControl0054::doTestStepL() -/** - * @SYMTestCaseID BA-CTSY-INT-CCON-0054 - * @SYMFssID BA/CTSY/CCON-0054 - * @SYMTestCaseDesc Answer incoming call and hang up call. - * @SYMTestPriority High - * @SYMTestActions RMobileLine::NotifyMobileLineStatusChange, - * RLine::GetCallInfo, - * RLine::NotifyIncomingCall, - * RCall::OpenExistingCall, RLine::GetStatus, - * RCall::AnswerIncomingCall, - * RMobileLine::GetMobileLineStatus, - * RLine::GetInfo - * @SYMTestExpectedResults Pass - Call can be answered and line status is correct. - * @SYMTestType CIT - * @SYMTestCaseDependencies live/automatic - * - * Reason for test: Verify call can be answered with specified - * params and line status, and line info correct. - * - * @return - TVerdict code - */ - { - - //////////////////////////////////////////////////////////////// - // SET UP - //////////////////////////////////////////////////////////////// - - // Call TNetworkTsyTestHelper::WaitForRegisteredOnHomeNetworkL - RMobilePhone& phone = iEtelSessionMgr.GetPhoneL(KMainServer,KMainPhone); - CHECK_EQUALS_L(iNetworkTestHelper.WaitForRegisteredOnHomeNetworkL(phone), KErrNone, - _L("TNetworkTsyTestHelper::WaitForRegisteredOnHomeNetworkL returned with an error")); - - // Check phone supports KCapsVoice. - RPhone::TCaps phoneCaps; - CHECK_EQUALS_L(phone.GetCaps(phoneCaps), KErrNone, _L("RPhone::GetCaps returned an error")); - CHECK_BITS_SET_L(phoneCaps.iFlags, RPhone::KCapsVoice, KNoUnwantedBits, _L("RPhone::GetCaps returned wrong caps, shouydl be KCapsVoice")); - - // Get Voice line 1. - RMobileLine& voiceLine = iEtelSessionMgr.GetLineL(KMainServer, KMainPhone, KVoiceLine); - - // Get call 1. - RMobileCall& call1 = iEtelSessionMgr.GetCallL(KMainServer, KMainPhone, KVoiceLine, KCall1); - - //////////////////////////////////////////////////////////////// - // SET UP END - //////////////////////////////////////////////////////////////// - - StartTest(); - - //////////////////////////////////////////////////////////////// - // TEST START - //////////////////////////////////////////////////////////////// - - // post notify RLine::NotifyIncomingCall - TCoreEtelRequestStatus notifyIncomingCallStatus (voiceLine, &RLine::NotifyIncomingCallCancel); - CleanupStack::PushL(notifyIncomingCallStatus); - TName incomingCallName; - voiceLine.NotifyIncomingCall(notifyIncomingCallStatus, incomingCallName); - - // post notifier for RLine::NotifyStatusChange - TCoreEtelRequestStatus notifyStatusChangeStatus (voiceLine, &RLine::NotifyStatusChangeCancel); - CleanupStack::PushL(notifyStatusChangeStatus); - RCall::TStatus lineStatus; - voiceLine.NotifyStatusChange(notifyStatusChangeStatus, lineStatus); - - // Request an incoming call from RPS. - ASSERT_EQUALS(RPSRequestIncomingCallL(EVoiceLine), KErrNone, _L("CCTSYIntegrationTestSuiteStepBase::RPSRequestIncomingCallL returned an error")); - - // Check RLine::NotifyIncomingCall completes. - ASSERT_EQUALS(WaitForRequestWithTimeOut(notifyIncomingCallStatus, ETimeMedium), KErrNone, - _L("RLine::NotifyIncomingCall did not complete without error")); - ASSERT_EQUALS(notifyIncomingCallStatus.Int(), KErrNone, _L("RLine::NotifyIncomingCall returned an error")); - - // Get the incoming call - TCallId incomingCallId; - call1 = iEtelSessionMgr.GetIncomingCallL(KMainServer, KMainPhone, KVoiceLine, incomingCallName, incomingCallId); - - // === Check line status === - - // Check RLine::NotifyStatusChange completes with EStatusRinging - RCall::TStatus expectedCallStatus = RCall::EStatusRinging; - TInt expectedStatus = KErrNone; - iCallControlTestHelper.WaitForLineNotifyStatusChange(voiceLine, - notifyStatusChangeStatus, - lineStatus, - expectedCallStatus, - expectedStatus); - - // Check RLine::GetStatus returns EStatusRinging - ASSERT_EQUALS(voiceLine.GetStatus(lineStatus),KErrNone, _L("RLine::GetStatus returned an error")); - ASSERT_EQUALS(lineStatus, RCall::EStatusRinging, _L("RLine::GetStatus returned wrong status, should be EStatusRinging")); - - // === Check line info === - - // Check RLine::GetCallInfo returns correct call name. - // Get the latest created call id. Call indexing starts from 0, so decrease it with one. - TInt numberOfCalls; - voiceLine.EnumerateCall(numberOfCalls); - numberOfCalls-=1; - RLine::TCallInfo callInfo; - ASSERT_EQUALS(voiceLine.GetCallInfo(numberOfCalls, callInfo), KErrNone, _L("RLine::GetCallInfo returned an error")); - ASSERT_TRUE(callInfo.iCallName.Length() > 0, _L("RLine::GetCallInfo returned an invalid name")); - - // Check RLine::GetCallInfo returns caps in set of KCapsVoice | KCapsAnswer. - ASSERT_BITS_SET(callInfo.iCallCapsFlags, RCall::KCapsVoice | RCall::KCapsAnswer, KNoUnwantedBits , - _L("RLine::GetCallInfo returned wrong caps")); - // Check RLine::GetCallInfo returns status of EStatusRinging - ASSERT_EQUALS(callInfo.iStatus, RCall::EStatusRinging, _L("RLine::GetCallInfo wrong iStatus, should be EStatusRinging")); - - // Populate a RMobileCall::TMobileCallParamsV1 with: - RMobileCall::TMobileCallParamsV1 mobileCallParams; - RMobileCall::TMobileCallParamsV1Pckg mobileCallParamsPckg(mobileCallParams); - - // ? iSpeakerControl = EMonitorSpeakerControlAlwaysOff - mobileCallParams.iSpeakerControl = RCall::EMonitorSpeakerControlAlwaysOff; - - // ?iSpeakerVolume = EMonitorSpeakerVolumeOff - mobileCallParams.iSpeakerVolume = RCall::EMonitorSpeakerVolumeOff; - - // ?iInterval = 0x01 - mobileCallParams.iInterval = 0x01; - - // ?iWaitForDialTone = EDialToneWait - mobileCallParams.iWaitForDialTone = RCall::EDialToneWait; - - // ?iIdRestrict = EIdRestrictDefault - mobileCallParams.iIdRestrict = RMobileCall::EIdRestrictDefault; - - // ?iExplicitInvoke = TRUE - mobileCallParams.iCug.iExplicitInvoke = TRUE; - - // ?iCugIndex = 0x0000 - mobileCallParams.iCug.iCugIndex = 0x0000; - - // ?iSuppressOA = FALSE - mobileCallParams.iCug.iSuppressOA = FALSE; - - // ?iSuppressPrefCug = FALSE - mobileCallParams.iCug.iSuppressPrefCug = FALSE; - - // ?iAutoRedial = FALSE - mobileCallParams.iAutoRedial = FALSE; - - // post a notifier for RMobileLine::NotifyMobileLineStatusChange - RMobileCall::TMobileCallStatus mobileLineStatus; - TExtEtelRequestStatus notifyMobileLineChangeStatus(voiceLine, EMobileLineNotifyMobileLineStatusChange); - CleanupStack::PushL(notifyMobileLineChangeStatus); - voiceLine.NotifyMobileLineStatusChange(notifyMobileLineChangeStatus, mobileLineStatus); - - // post notifier for RLine::NotifyStatusChange - voiceLine.NotifyStatusChange(notifyStatusChangeStatus,lineStatus); - - // Answer incoming call by calling RCall::AnswerIncomingCall and using TMobileCallParamsV1 - ASSERT_EQUALS(call1.AnswerIncomingCall(mobileCallParamsPckg), KErrNone, _L("RCall::AnswerIncomingCall returned an error")); - - // === Check line status === - - // Check RLine::NotifyStatusChange completes with EStatusAnswering -> EStatusConnected. - expectedCallStatus = RCall::EStatusAnswering; - iCallControlTestHelper.WaitForLineNotifyStatusChange(voiceLine, - notifyStatusChangeStatus, - lineStatus, - expectedCallStatus, - expectedStatus); - - voiceLine.NotifyStatusChange(notifyStatusChangeStatus,lineStatus); - expectedCallStatus = RCall::EStatusConnected; - iCallControlTestHelper.WaitForLineNotifyStatusChange(voiceLine, - notifyStatusChangeStatus, - lineStatus, - expectedCallStatus, - expectedStatus); - - // Check RLine::GetStatus returns EStatusConnected - ASSERT_EQUALS(voiceLine.GetStatus(lineStatus),KErrNone, _L("RLine::GetStatus returned an error")); - ASSERT_EQUALS(lineStatus, RCall::EStatusConnected, _L("RLine::GetStatus returned wrong status, should be EStatusConnected")); - - // Check RMobileLine::NotifyMobileLineStatusChange completes with with EStatusAnswering -> EStatusConnected. - TInt wantedStatus = KErrNone; - RMobileCall::TMobileCallStatus expectedMobileLineStatus = RMobileCall::EStatusAnswering; - iCallControlTestHelper.WaitForMobileLineNotifyMobileLineStatusChange(voiceLine, - notifyMobileLineChangeStatus, - mobileLineStatus, - expectedMobileLineStatus, - wantedStatus); - - voiceLine.NotifyMobileLineStatusChange(notifyMobileLineChangeStatus, mobileLineStatus); - expectedMobileLineStatus = RMobileCall::EStatusConnected; - iCallControlTestHelper.WaitForMobileLineNotifyMobileLineStatusChange(voiceLine, - notifyMobileLineChangeStatus, - mobileLineStatus, - expectedMobileLineStatus, - wantedStatus); - - // Check RMobileLine::GetMobileLineStatus returns EStatusConnected - ASSERT_EQUALS(voiceLine.GetMobileLineStatus(mobileLineStatus), KErrNone, - _L("RMobileLine::GetMobileLineStatus returned an error")); - ASSERT_EQUALS(mobileLineStatus, RMobileCall::EStatusConnected, - _L("RMobileLine::GetMobileLineStatus did not return EStatusConnected as expected")); - - // === Check line info === - - // Check RLine::GetCallInfo returns valid name. - // Check RLine::GetCallInfo returns caps in set of KCapsHangUp. - // Check RLine::GetCallInfo returns status of EStatusConnected. - ASSERT_EQUALS(voiceLine.GetCallInfo(numberOfCalls, callInfo), KErrNone, _L("RLine::GetCallInfo returned an error")); - ASSERT_TRUE(callInfo.iCallName.Length()>0, _L("RLine::GetCallInfo returned an invalid name")); - ASSERT_BITS_SET(callInfo.iCallCapsFlags, RCall::KCapsHangUp, KNoUnwantedBits , - _L("RLine::GetCallInfo returned wrong caps")); - ASSERT_EQUALS(callInfo.iStatus, RCall::EStatusConnected, _L("RLine::GetCallInfo wrong iStatus, should be EStatusConnected")); - - // Check RLine::GetInfo returns status of EStatusConnected. - RLine::TLineInfo lineInfo; - ASSERT_EQUALS(voiceLine.GetInfo(lineInfo),KErrNone, _L("RLine::GetInfo returned an error")); - ASSERT_EQUALS(lineInfo.iStatus, RCall::EStatusConnected, _L("RLine::GetInfo did not return EStatusConnected")); - - voiceLine.NotifyStatusChange(notifyStatusChangeStatus,lineStatus); - voiceLine.NotifyMobileLineStatusChange(notifyMobileLineChangeStatus, mobileLineStatus); - - // Hang up the call - TCoreEtelRequestStatus hangUpStatus (call1, &RCall::HangUpCancel); - CleanupStack::PushL(hangUpStatus); - call1.HangUp(hangUpStatus); - ASSERT_EQUALS(WaitForRequestWithTimeOut(hangUpStatus, ETimeLong), KErrNone, _L("RCall::HangUp timed-out")); - ASSERT_EQUALS(hangUpStatus.Int(), KErrNone, _L("RCall::HangUp returned an error")); - - // === Check line status === - - // Check RLine::NotifyStatusChange completes with EStatusHangingUp -> EStatusIdle - expectedCallStatus = RCall::EStatusHangingUp; - iCallControlTestHelper.WaitForLineNotifyStatusChange(voiceLine, - notifyStatusChangeStatus, - lineStatus, - expectedCallStatus, - expectedStatus); - - voiceLine.NotifyStatusChange(notifyStatusChangeStatus,lineStatus); - expectedCallStatus = RCall::EStatusIdle; - iCallControlTestHelper.WaitForLineNotifyStatusChange(voiceLine, - notifyStatusChangeStatus, - lineStatus, - expectedCallStatus, - expectedStatus); - - // Check RLine::GetStatus returns EStatusIdle - ASSERT_EQUALS(voiceLine.GetStatus(lineStatus),KErrNone, _L("RLine::GetStatus returned an error")); - ASSERT_EQUALS(lineStatus, RCall::EStatusIdle, _L("RLine::GetStatus returned wrong status, should be EStatusIdle")); - - // Check RMobileLine::NotifyMobileLineStatusChange completes with EStatusDisconnecting -> EStatusIdle - expectedMobileLineStatus = RMobileCall::EStatusDisconnecting; - iCallControlTestHelper.WaitForMobileLineNotifyMobileLineStatusChange(voiceLine, - notifyMobileLineChangeStatus, - mobileLineStatus, - expectedMobileLineStatus, - wantedStatus); - voiceLine.NotifyMobileLineStatusChange(notifyMobileLineChangeStatus, mobileLineStatus); - expectedMobileLineStatus = RMobileCall::EStatusIdle; - iCallControlTestHelper.WaitForMobileLineNotifyMobileLineStatusChange(voiceLine, - notifyMobileLineChangeStatus, - mobileLineStatus, - expectedMobileLineStatus, - wantedStatus); - - // Check RMobileLine::GetMobileLineStatus returns EStatusIdle - ASSERT_EQUALS(voiceLine.GetMobileLineStatus(mobileLineStatus), KErrNone, - _L("RMobileLine::GetMobileLineStatus returned an error")); - ASSERT_EQUALS(mobileLineStatus, RMobileCall::EStatusIdle, - _L("RMobileLine::GetMobileLineStatus did not return EStatusIdle as expected")); - - // === Check line info === - - // Check RLine::GetCallInfo returns valid name. - // Check RLine::GetCallInfo returns caps in set of KCapsVoice | KCapsDial. - // Check RLine::GetCallInfo returns status of EStatusIdle. - ASSERT_EQUALS(voiceLine.GetCallInfo(numberOfCalls, callInfo), KErrNone, _L("RLine::GetCallInfo returned an error")); - ASSERT_TRUE(callInfo.iCallName.Length() > 0, _L("RLine::GetCallInfo returned an invalid name")); - ASSERT_BITS_SET(callInfo.iCallCapsFlags, RCall::KCapsVoice | RCall::KCapsDial, KNoUnwantedBits , - _L("RLine::GetCallInfo returned wrong caps")); - ASSERT_EQUALS(callInfo.iStatus, RCall::EStatusIdle, _L("RLine::GetCallInfo wrong iStatus, should be EStatusIdle")); - - // Check RLine::GetInfo returns status of EStatusIdle. - ASSERT_EQUALS(voiceLine.GetInfo(lineInfo), KErrNone, _L("RLine::GetInfo returned an error")); - ASSERT_EQUALS(lineInfo.iStatus, RCall::EStatusIdle, _L("RLine::GetInfo did not return EStatusIdle")); - - - //////////////////////////////////////////////////////////////// - // TEST END - //////////////////////////////////////////////////////////////// - - StartCleanup(); - - // Pop - // notifyIncomingCallStatus - // notifyStatusChangeStatus - // notifyMobileLineChangeStatus - // hangUpStatus - CleanupStack::PopAndDestroy(4, ¬ifyIncomingCallStatus); - - return TestStepResult(); - } - -TPtrC CCTSYIntegrationTestCallControl0054::GetTestStepName() -/** - * @return The test step name. - */ - { - return _L("CCTSYIntegrationTestCallControl0054"); - } - - - -CCTSYIntegrationTestCallControl0055::CCTSYIntegrationTestCallControl0055(CEtelSessionMgr& aEtelSessionMgr) - : CCTSYIntegrationTestCallControlBase(aEtelSessionMgr) -/** - * Constructor. - */ - { - SetTestStepName(CCTSYIntegrationTestCallControl0055::GetTestStepName()); - } - -CCTSYIntegrationTestCallControl0055::~CCTSYIntegrationTestCallControl0055() -/** - * Destructor. - */ - { - } - -TVerdict CCTSYIntegrationTestCallControl0055::doTestStepL() -/** - * @SYMTestCaseID BA-CTSY-INT-CCON-0055 - * @SYMFssID BA/CTSY/CCON-0055 - * @SYMTestCaseDesc Answer incoming call then have remote party hang up. - * @SYMTestPriority High - * @SYMTestActions RMobileLine::NotifyMobileLineStatusChange, - * RLine::GetCallInfo, - * RLine::NotifyIncomingCall, - * RCall::OpenExistingCall, RLine::GetStatus, - * RCall::AnswerIncomingCall, - * RMobileLine::GetMobileLineStatus, - * RLine::GetInfo - * @SYMTestExpectedResults Pass - Line status correct after remote party hangs up. - * @SYMTestType CIT - * @SYMTestCaseDependencies rps/automatic - * - * Reason for test: Verify call can be answered with specified - * params and line status, and line info correct. - * - * @return - TVerdict code - */ - { - - //////////////////////////////////////////////////////////////// - // SET UP - //////////////////////////////////////////////////////////////// - - // Call TNetworkTsyTestHelper::WaitForRegisteredOnHomeNetworkL - RMobilePhone& phone = iEtelSessionMgr.GetPhoneL(KMainServer,KMainPhone); - CHECK_EQUALS_L(iNetworkTestHelper.WaitForRegisteredOnHomeNetworkL(phone), KErrNone, - _L("TNetworkTsyTestHelper::WaitForRegisteredOnHomeNetworkL returned with an error")); - - // Check phone supports KCapsVoice - RPhone::TCaps phoneCaps; - CHECK_EQUALS_L(phone.GetCaps(phoneCaps), KErrNone, _L("RPhone::GetCaps returned an error")); - CHECK_BITS_SET_L(phoneCaps.iFlags, RPhone::KCapsVoice, KNoUnwantedBits, _L("RPhone::GetCaps returned wrong caps")); - - // Get Voice line 1 - RMobileLine& voiceLine = iEtelSessionMgr.GetLineL(KMainServer, KMainPhone, KVoiceLine); - - // Get call 1. - RMobileCall& call1 = iEtelSessionMgr.GetCallL(KMainServer, KMainPhone, KVoiceLine, KCall1); - - //////////////////////////////////////////////////////////////// - // SET UP END - //////////////////////////////////////////////////////////////// - - StartTest(); - - //////////////////////////////////////////////////////////////// - // TEST START - //////////////////////////////////////////////////////////////// - - // Post notification RLine::NotifyIncomingCall - TCoreEtelRequestStatus notifyIncomingCallStatus(voiceLine, &RLine::NotifyIncomingCallCancel); - CleanupStack::PushL(notifyIncomingCallStatus); - TName incomingCallName; - incomingCallName.Zero(); - voiceLine.NotifyIncomingCall(notifyIncomingCallStatus, incomingCallName); - - // Post notifier for RLine::NotifyStatusChange - TCoreEtelRequestStatus notifyStatusChangeStatus (voiceLine, &RLine::NotifyStatusChangeCancel); - CleanupStack::PushL(notifyStatusChangeStatus); - RCall::TStatus lineStatus; - voiceLine.NotifyStatusChange(notifyStatusChangeStatus, lineStatus); - - // Request an incoming call from RPS. - ASSERT_EQUALS(RPSRequestIncomingCallL(EVoiceLine), KErrNone, _L("CCTSYIntegrationTestSuiteStepBase::RPSRequestIncomingCallL returned an error")); - - // Check RLine::NotifyIncomingCall completes. - ASSERT_EQUALS(WaitForRequestWithTimeOut(notifyIncomingCallStatus, ETimeMedium), KErrNone, - _L("RLine::NotifyIncomingCall timed-out.")); - ASSERT_EQUALS(notifyIncomingCallStatus.Int(), KErrNone, - _L( "RLine::NotifyIncomingCall returned with an error.")); - ASSERT_TRUE(incomingCallName.Length() > 0, - _L("RLine::NotifyIncomingCall completed with invalid call name.")); - - // Get the incoming call - TCallId incomingCallId; - call1 = iEtelSessionMgr.GetIncomingCallL(KMainServer, KMainPhone, KVoiceLine, incomingCallName, incomingCallId); - - // === Check line status === - - // Check RLine::NotifyStatusChange completes with EStatusRinging - RCall::TStatus expectedLineStatus = RCall::EStatusRinging; - iCallControlTestHelper.WaitForLineNotifyStatusChange(voiceLine, - notifyStatusChangeStatus, - lineStatus, - expectedLineStatus, - KErrNone); - - // Check RLine::GetStatus returns EStatusRinging - ASSERT_EQUALS(voiceLine.GetStatus(lineStatus), KErrNone, _L("RLine::GetStatus returned an error.")); - ASSERT_EQUALS(lineStatus, RCall::EStatusRinging, _L("RLine::GetStatus did not return EStatusRinging as expected.")); - - // === Check line info === - - // Check RLine::GetCallInfo returns correct call name. - RLine::TCallInfo callInfo; - ASSERT_EQUALS(voiceLine.GetCallInfo(incomingCallId, callInfo), KErrNone, _L( "RLine::GetCallInfo returned an error")); - ASSERT_TRUE(callInfo.iCallName.Length() > 0, _L("RLine::GetCallInfo returned an invalid name")); - - // Check RLine::GetCallInfo returns caps in set of KCapsVoice | KCapsAnswer. - // $CTSYProblem RLine::GetCallInfo returns wrong bits set : Got 0x44 , required 0x64 - // KCapsVoice=0x00000004 and KCapsAnswer=0x00000040 are OK but KCapsHangUp=0x00000020 is missing. - // Changed original test step to check RLine::GetCallinfo returns caps in set KCapsVoice | KCapsAnswer instead of KCapsVoice | KCapsAnswer | KCapsHangUp. - ASSERT_BITS_SET(callInfo.iCallCapsFlags, RCall::KCapsVoice | RCall::KCapsAnswer, KNoUnwantedBits, _L( "RLine::GetCallInfo returned wrong caps")); - - // Check RLine::GetCallInfo returns status of EStatusRinging - ASSERT_EQUALS(callInfo.iStatus, RCall::EStatusRinging, _L( "RLine::GetCallInfo did not return EStatusRinging as expected.")); - - // Populate a RMobileCall::TMobileCallParamsV1 with: - RMobileCall::TMobileCallParamsV1 mobileCallParams; - RMobileCall::TMobileCallParamsV1Pckg mobileCallParamsPckg(mobileCallParams); - - // ?iSpeakerControl = EMonitorSpeakerControlAlwaysOff - mobileCallParams.iSpeakerControl = RCall::EMonitorSpeakerControlAlwaysOff; - - // ?iSpeakerVolume = EMonitorSpeakerVolumeOff - mobileCallParams.iSpeakerVolume = RCall::EMonitorSpeakerVolumeOff; - - // ?iInterval = 0x01 - mobileCallParams.iInterval = 0x01; - - // ?iWaitForDialTone = EDialToneWait - mobileCallParams.iWaitForDialTone = RCall::EDialToneWait; - - // ?iIdRestrict = EIdRestrictDefault - mobileCallParams.iIdRestrict = RMobileCall::EIdRestrictDefault; - - // ?iExplicitInvoke = TRUE - mobileCallParams.iCug.iExplicitInvoke = TRUE; - - // ?iCugIndex = 0x0000 - mobileCallParams.iCug.iCugIndex = 0x0000; - - // ?iSuppressOA = FALSE - mobileCallParams.iCug.iSuppressOA = FALSE; - - // ?iSuppressPrefCug = FALSE - mobileCallParams.iCug.iSuppressPrefCug = FALSE; - - // ?iAutoRedial = FALSE - mobileCallParams.iAutoRedial = FALSE; - - // Post a notifier for RMobileLine::NotifyMobileLineStatusChange - RMobileCall::TMobileCallStatus mobileLineStatus; - TExtEtelRequestStatus notifyMobileLineChangeStatus(voiceLine, EMobileLineNotifyMobileLineStatusChange); - CleanupStack::PushL(notifyMobileLineChangeStatus); - voiceLine.NotifyMobileLineStatusChange(notifyMobileLineChangeStatus, mobileLineStatus); - - // Repost notifier for RLine::NotifyStatusChange - voiceLine.NotifyStatusChange(notifyStatusChangeStatus, lineStatus); - - // Answer incoming call by calling RCall::AnswerIncomingCall and using TMobileCallParamsV1 - ASSERT_EQUALS(call1.AnswerIncomingCall(mobileCallParamsPckg), KErrNone, - _L( "RCall::AnswerIncomingCall returned an error")); - - // === Check line status === - - // Check RLine::NotifyStatusChange completes with EStatusAnswering -> EStatusConnected. - expectedLineStatus = RCall::EStatusAnswering; - iCallControlTestHelper.WaitForLineNotifyStatusChange(voiceLine, - notifyStatusChangeStatus, - lineStatus, - expectedLineStatus, - KErrNone); - - voiceLine.NotifyStatusChange(notifyStatusChangeStatus, lineStatus); - expectedLineStatus = RCall::EStatusConnected; - iCallControlTestHelper.WaitForLineNotifyStatusChange(voiceLine, - notifyStatusChangeStatus, - lineStatus, - expectedLineStatus, - KErrNone); - - // Check RLine::GetStatus returns EStatusConnected - ASSERT_EQUALS(voiceLine.GetStatus(lineStatus), KErrNone, _L("RLine::GetStatus returned an error.")); - ASSERT_EQUALS(lineStatus, RCall::EStatusConnected, _L("RLine::GetStatus did not return EStatusConnected as expected.")); - - // Check RMobileLine::NotifyMobileLineStatusChange completes with with EStatusAnswering -> EStatusConnected. - RMobileCall::TMobileCallStatus expectedMobileLineStatus = RMobileCall::EStatusAnswering; - iCallControlTestHelper.WaitForMobileLineNotifyMobileLineStatusChange(voiceLine, - notifyMobileLineChangeStatus, - mobileLineStatus, - expectedMobileLineStatus, - KErrNone); - - voiceLine.NotifyMobileLineStatusChange(notifyMobileLineChangeStatus, mobileLineStatus); - expectedMobileLineStatus = RMobileCall::EStatusConnected; - iCallControlTestHelper.WaitForMobileLineNotifyMobileLineStatusChange(voiceLine, - notifyMobileLineChangeStatus, - mobileLineStatus, - expectedMobileLineStatus, - KErrNone); - - // Check RMobileLine::GetMobileLineStatus returns EStatusConnected - ASSERT_EQUALS(voiceLine.GetMobileLineStatus(mobileLineStatus), KErrNone, - _L("RMobileLine::GetMobileLineStatus returned an error")); - ASSERT_EQUALS(mobileLineStatus, RMobileCall::EStatusConnected, - _L("RMobileLine::GetMobileLineStatus did not return EStatusConnected as expected")); - - // === Check line info === - - // Check RLine::GetCallInfo returns valid name. - RLine::TCallInfo callInfo2; - ASSERT_EQUALS(voiceLine.GetCallInfo(incomingCallId, callInfo2), KErrNone, _L("RLine::GetCallInfo returned an error")); - ASSERT_TRUE(callInfo2.iCallName.Length()>0, _L("RLine::GetCallInfo returned an invalid name")); - - // Check RLine::GetCallInfo returns caps in set of KCapsHangUp. - ASSERT_BITS_SET(callInfo2.iCallCapsFlags, RCall::KCapsHangUp, KNoUnwantedBits, _L("RLine::GetCallInfo returned wrong caps")); - - // Check RLine::GetCallInfo returns status of EStatusConnected. - ASSERT_EQUALS(callInfo2.iStatus, RCall::EStatusConnected, _L("RLine::GetCallInfo did not return EStatusConnected as expected.")); - - // Check RLine::GetInfo returns status of EStatusConnected. - RLine::TLineInfo lineInfo; - ASSERT_EQUALS(voiceLine.GetInfo(lineInfo), KErrNone, _L("RLine::GetInfo returned an error")); - ASSERT_EQUALS(lineInfo.iStatus, RCall::EStatusConnected, _L("RLine::GetInfo did not return EStatusConnected as expected.")); - - // Repost notifier for RLine::NotifyStatusChange - voiceLine.NotifyStatusChange(notifyStatusChangeStatus, lineStatus); - - // Repost notifer for RMobileLine::NotifyMobileLineStatusChange - voiceLine.NotifyMobileLineStatusChange(notifyMobileLineChangeStatus, mobileLineStatus); - - // RPS hangs up the call - ASSERT_EQUALS(RPSHangupL(EVoiceLine, 0), KErrNone, _L("CCTSYIntegrationTestSuiteStepBase::RPSHangup returned an error")); - - // === Check line status === - - // Check RLine::NotifyStatusChange completes with EStatusHangingUp -> EStatusIdle - expectedLineStatus = RCall::EStatusHangingUp; - iCallControlTestHelper.WaitForLineNotifyStatusChange(voiceLine, - notifyStatusChangeStatus, - lineStatus, - expectedLineStatus, - KErrNone); - - voiceLine.NotifyStatusChange(notifyStatusChangeStatus, lineStatus); - expectedLineStatus = RCall::EStatusIdle; - iCallControlTestHelper.WaitForLineNotifyStatusChange(voiceLine, - notifyStatusChangeStatus, - lineStatus, - expectedLineStatus, - KErrNone); - - // Check RLine::GetStatus returns EStatusIdle - ASSERT_EQUALS(voiceLine.GetStatus(lineStatus), KErrNone, _L("RLine::GetStatus returned an error")); - ASSERT_EQUALS(lineStatus, RCall::EStatusIdle, _L("RLine::GetStatus did not return EStatusIdle as expected.")); - - // Check RMobileLine::NotifyMobileLineStatusChange completes with with EStatusDisconnecting -> EStatusIdle - expectedMobileLineStatus = RMobileCall::EStatusDisconnecting; - iCallControlTestHelper.WaitForMobileLineNotifyMobileLineStatusChange(voiceLine, - notifyMobileLineChangeStatus, - mobileLineStatus, - expectedMobileLineStatus, - KErrNone); - - voiceLine.NotifyMobileLineStatusChange(notifyMobileLineChangeStatus, mobileLineStatus); - expectedMobileLineStatus = RMobileCall::EStatusIdle; - iCallControlTestHelper.WaitForMobileLineNotifyMobileLineStatusChange(voiceLine, - notifyMobileLineChangeStatus, - mobileLineStatus, - expectedMobileLineStatus, - KErrNone); - - // Check RMobileLine::GetMobileLineStatus returns EStatusIdle - ASSERT_EQUALS(voiceLine.GetMobileLineStatus(mobileLineStatus), KErrNone, - _L("RMobileLine::GetMobileLineStatus returned an error")); - ASSERT_EQUALS(mobileLineStatus, RMobileCall::EStatusIdle, - _L("RMobileLine::GetMobileLineStatus did not return EStatusIdle as expected")); - - // === Check line info === - - // Check RLine::GetCallInfo returns valid name. - RLine::TCallInfo callInfo3; - ASSERT_EQUALS(voiceLine.GetCallInfo(incomingCallId, callInfo3), KErrNone, _L("RLine::GetCallInfo returned an error")); - ASSERT_TRUE(callInfo3.iCallName.Length() > 0, _L("RLine::GetCallInfo returned an invalid name")); - - // Check RLine::GetCallInfo returns caps in set of KCapsVoice | KCapsDial. - TUint expectedCallCapsFlags = RCall::KCapsVoice | RCall::KCapsDial; - ASSERT_BITS_SET(callInfo3.iCallCapsFlags, expectedCallCapsFlags, KNoUnwantedBits, _L("RLine::GetCallInfo returned wrong caps")); - - // Check RLine::GetCallInfo returns status of EStatusIdle. - ASSERT_EQUALS(callInfo3.iStatus, RCall::EStatusIdle, - _L("RLine::GetCallInfo did not return EStatusIdle as expected.")); - - // Check RLine::GetInfo returns status of EStatusIdle. - ASSERT_EQUALS(voiceLine.GetInfo(lineInfo), KErrNone, _L("RLine::GetInfo returned an error")); - ASSERT_EQUALS(lineInfo.iStatus, RCall::EStatusIdle, _L("RLine::GetInfo did not return EStatusIdle as expected.")); - - //////////////////////////////////////////////////////////////// - // TEST END - //////////////////////////////////////////////////////////////// - - StartCleanup(); - - // Pop - // notifyIncomingCallStatus - // notifyStatusChangeStatus - // notifyMobileLineChangeStatus - CleanupStack::PopAndDestroy(3, ¬ifyIncomingCallStatus); - - return TestStepResult(); - } - -TPtrC CCTSYIntegrationTestCallControl0055::GetTestStepName() -/** - * @return The test step name. - */ - { - return _L("CCTSYIntegrationTestCallControl0055"); - } - - - -CCTSYIntegrationTestCallControl0056::CCTSYIntegrationTestCallControl0056(CEtelSessionMgr& aEtelSessionMgr) - : CCTSYIntegrationTestCallControlBase(aEtelSessionMgr) -/** - * Constructor. - */ - { - SetTestStepName(CCTSYIntegrationTestCallControl0056::GetTestStepName()); - } - -CCTSYIntegrationTestCallControl0056::~CCTSYIntegrationTestCallControl0056() -/** - * Destructor. - */ - { - } - -TVerdict CCTSYIntegrationTestCallControl0056::doTestStepL() -/** - * @SYMTestCaseID BA-CTSY-INT-CCON-0056 - * @SYMFssID BA/CTSY/CCON-0056 - * @SYMTestCaseDesc Remove SIM during call - * @SYMTestPriority High - * @SYMTestActions RMobilePhone::GetNetworkRegistrationStatus, RLine::NotifyStatusChange, RLine::GetStatus, RMobileLine::NotifyMobileLineStatusChange, RMobileLine::GetMobileLineStatus, RCall::NotifyStatusChange, RCall::GetStatus, RMobileCall::NotifyMobileCallStatusChange, RMobileCall::GetMobileCallStatus - * @SYMTestExpectedResults Pass - Phone is not registered on network after 35s of SIM removal. - * @SYMTestType CIT - * @SYMTestCaseDependencies live/manual - * - * Reason for test: Verify network registration status, call and line statuses are correct - * - * @return - TVerdict code - */ - { - - //////////////////////////////////////////////////////////////// - // SET UP - //////////////////////////////////////////////////////////////// - - // Call TNetworkTsyTestHelper::WaitForRegisteredOnHomeNetworkL - RMobilePhone& phone = iEtelSessionMgr.GetPhoneL(KMainServer,KMainPhone); - CHECK_EQUALS_L(iNetworkTestHelper.WaitForRegisteredOnHomeNetworkL(phone), KErrNone, - _L("TNetworkTsyTestHelper::WaitForRegisteredOnHomeNetworkL returned with an error")); - - // Get Voice Line 1 - - // Get Call 1 - - // Dial a number that answers - - // Ensure call is connected before starting test - - - //////////////////////////////////////////////////////////////// - // SET UP END - //////////////////////////////////////////////////////////////// - - StartTest(); - - //////////////////////////////////////////////////////////////// - // TEST START - //////////////////////////////////////////////////////////////// - - - // Check RMobilePhone::GetNetworkRegistrationStatus returns ERegisteredOnHomeNetwork - - // Remove SIM. - - // Wait for 35 seconds. - - // Check RMobilePhone::NotifyNetworkRegistrationStatusChange completes with one of ENotRegisteredSearching | ENotRegisteredEmergencyOnly - - // Check RMobilePhone::GetNetworkRegistrationStatus returns one of ENotRegisteredSearching | ENotRegisteredEmergencyOnly - - // === Check line status === - - // Check RLine::NotifyStatusChange completes with EStatusIdle - - // Check RLine::GetStatus returns EStatusIdle - - // Check RMobileLine::NotifyMobileLineStatusChange completes with EStatusIdle - - // Check RMobileLine::GetMobileLineStatus returns EStatusIdle - - // === Check call status === - - // Check RCall::NotifyStatusChange completes with EStatusIdle - - // Check RCall::GetStatus returns EStatusIdle - - // Check RMobileCall::NotifyMobileCallStatusChange completes with EStatusIdle - - // Check RMobileCall::GetMobileCallStatus returns EStatusIdle - - - //////////////////////////////////////////////////////////////// - // TEST END - //////////////////////////////////////////////////////////////// - - StartCleanup(); - - // Put any required test clean up here, then remove this comment - - return TestStepResult(); - } - -TPtrC CCTSYIntegrationTestCallControl0056::GetTestStepName() -/** - * @return The test step name. - */ - { - return _L("CCTSYIntegrationTestCallControl0056"); - } - - - -CCTSYIntegrationTestCallControl0057::CCTSYIntegrationTestCallControl0057(CEtelSessionMgr& aEtelSessionMgr) - : CCTSYIntegrationTestCallControlBase(aEtelSessionMgr) -/** - * Constructor. - */ - { - SetTestStepName(CCTSYIntegrationTestCallControl0057::GetTestStepName()); - } - -CCTSYIntegrationTestCallControl0057::~CCTSYIntegrationTestCallControl0057() -/** - * Destructor. - */ - { - } - -TVerdict CCTSYIntegrationTestCallControl0057::doTestStepL() -/** - * @SYMTestCaseID BA-CTSY-INT-CCON-0057 - * @SYMFssID BA/CTSY/CCON-0057 - * @SYMTestCaseDesc Remove SIM during idle mode - * @SYMTestPriority High - * @SYMTestActions RMobileLine::NotifyMobileLineStatusChange, RMobileCall::GetMobileCallStatus, RCall::Dial, RMobilePhone::NotifyNetworkRegistrationStatusChange, RMobileCall::GetMobileCallInfo, RMobileCall::NotifyMobileCallStatusChange, RCall::NotifyStatusChange, RLine::NotifyStatusChange, RLine::GetStatus, RLine::GetStatus, RMobileLine::GetMobileLineStatus, RMobilePhone::GetNetworkRegistrationStatus, RMobileCall::DialEmergencyCall, RCall::GetStatus - * @SYMTestExpectedResults Pass - Only emergency numbers can be dialled without SIM. - * @SYMTestType CIT - * @SYMTestCaseDependencies simulated/manual - * - * Reason for test: Verify only emergency calls can be made without a SIM. - * - * @return - TVerdict code - */ - { - - //////////////////////////////////////////////////////////////// - // SET UP - //////////////////////////////////////////////////////////////// - - // Call TNetworkTsyTestHelper::WaitForRegisteredOnHomeNetworkL - RMobilePhone& phone = iEtelSessionMgr.GetPhoneL(KMainServer,KMainPhone); - CHECK_EQUALS_L(iNetworkTestHelper.WaitForRegisteredOnHomeNetworkL(phone), KErrNone, - _L("TNetworkTsyTestHelper::WaitForRegisteredOnHomeNetworkL returned with an error")); - - // Ensure phone is camped on simulated network. - - // Get Voice Line 1 - - // Get Call 1 - - - //////////////////////////////////////////////////////////////// - // SET UP END - //////////////////////////////////////////////////////////////// - - StartTest(); - - //////////////////////////////////////////////////////////////// - // TEST START - //////////////////////////////////////////////////////////////// - - - // Remove SIM. - - // Check RMobilePhone::NotifyNetworkRegistrationStatusChange completes with one of ENotRegisteredSearching | ENotRegisteredEmergencyOnly - - // Check RMobilePhone::GetNetworkRegistrationStatus returns one of ENotRegisteredSearching | ENotRegisteredEmergencyOnly - - // === Check line status and call status === - - // Check RLine::GetStatus returns EStatusIdle. - - // Check RMobileLine::GetMobileLineStatus returns EStatusIdle. - - // Check RCall::GetStatus returns EStatusIdle. - - // Check RMobileCall::GetMobileCallStatus returns status of EStatusIdle. - - // === Attempt to dial a non-emergency number === - - // Dial a non-emergency number with RCall::Dial - - // Wait for completion - - // Check error is returned. - - // === Check line status and call status === - - // Check RLine::GetStatus returns EStatusIdle. - - // Check RMobileLine::GetMobileLineStatus returns EStatusIdle. - - // Check RCall::GetStatus returns EStatusIdle. - - // Check RMobileCall::GetMobileCallStatus returns status of EStatusIdle. - - // === Attempt to dial the international emergency number, simulate answering === - - // Dial emergency number with RCall::DialEmergencyCall - - // === Check call status === - - // Check RCall::NotifyStatusChange completes with EStatusDialling -> EStatusConnecting -> EStatusConnected. - - // Check RCall::GetStatus returns EStatusConnected. - - // Check RMobileCall::NotifyMobileCallStatusChange completes with EStatusDialling -> EStatusConnecting -> EStatusConnected. - - // Check RMobileCall::GetMobileCallStatus returns status of EStatusConnected. - - // === Check line status === - - // Check RLine::NotifyStatusChange completes with EStatusDialling -> EStatusConnecting -> EStatusConnected. - - // Check RLine::GetStatus returns EStatusConnected - - // Check RMobileLine::NotifyMobileLineStatusChange completes with with EStatusDialling -> EStatusConnecting -> EStatusConnected. - - // Check RMobileLine::GetMobileLineStatus returns EStatusConnected - - // === Check call info === - - // Check RMobileCall::GetMobileCallInfo returns valid call name - // Check RMobileCall::GetMobileCallInfo returns valid line name - // Check RMobileCall::GetMobileCallInfo returns correct number in iDialledParty.iTelNumber - // Check RMobileCall::GetMobileCallInfo returns iEmergency == ETrue - // Check RMobileCall::GetMobileCallInfo returns iStatus of EStatusConnected - // Check RMobileCall::GetMobileCallInfo returns correct iRemoteNumber and iDirection in iRemoteParty - // Check RMobileCall::GetMobileCallInfo returns correct iValid for returned parameters - - // Hang up. - - // === Check call status === - - // Check RCall::NotifyStatusChange completes with EStatusHangingUp -> EStatusIdle. - - // Check RCall::GetStatus returns EStatusIdle. - - // Check RMobileCall::NotifyMobileCallStatusChange completes with EStatusDisconnecting -> EStatusIdle. - - // Check RMobileCall::GetMobileCallStatus returns status of EStatusIdle. - - // === Check line status === - - // Check RMobileLine::NotifyStatusChange completes with EStatusHangingUp -> EStatusIdle - - // Check RMobileLine::GetStatus returns EStatusIdle - - // Check RMobileLine::NotifyMobileLineStatusChange completes with with EStatusDisconnecting -> EStatusIdle - - // Check RMobileLine::GetMobileLineStatus returns EStatusIdle - - // === Attempt to dial national emergency number === - - // Dial emergency number with RCall::DialEmergencyCall - - // === Check call status === - - // Check RCall::NotifyStatusChange completes with EStatusDialling -> EStatusConnecting -> EStatusConnected. - - // Check RCall::GetStatus returns EStatusConnected. - - // Check RMobileCall::NotifyMobileCallStatusChange completes with EStatusDialling -> EStatusConnecting -> EStatusConnected. - - // Check RMobileCall::GetMobileCallStatus returns status of EStatusConnected. - - // === Check line status === - - // Check RLine::NotifyStatusChange completes with EStatusDialling -> EStatusConnecting -> EStatusConnected. - - // Check RLine::GetStatus returns EStatusConnected - - // Check RMobileLine::NotifyMobileLineStatusChange completes with with EStatusDialling -> EStatusConnecting -> EStatusConnected. - - // Check RMobileLine::GetMobileLineStatus returns EStatusConnected - - // === Check call info === - - // Check RMobileCall::GetMobileCallInfo returns valid call name - // Check RMobileCall::GetMobileCallInfo returns valid line name - // Check RMobileCall::GetMobileCallInfo returns correct number in iDialledParty.iTelNumber - // Check RMobileCall::GetMobileCallInfo returns iEmergency == ETrue - // Check RMobileCall::GetMobileCallInfo returns iStatus of EStatusConnected - // Check RMobileCall::GetMobileCallInfo returns correct iRemoteNumber and iDirection in iRemoteParty - // Check RMobileCall::GetMobileCallInfo returns correct iValid for returned parameters - - // Hang up. - - // === Check call status === - - // Check RCall::NotifyStatusChange completes with EStatusHangingUp -> EStatusIdle. - - // Check RCall::GetStatus returns EStatusIdle. - - // Check RMobileCall::NotifyMobileCallStatusChange completes with EStatusDisconnecting -> EStatusIdle. - - // Check RMobileCall::GetMobileCallStatus returns status of EStatusIdle. - - // === Check line status === - - // Check RMobileLine::NotifyStatusChange completes with EStatusHangingUp -> EStatusIdle - - // Check RMobileLine::GetStatus returns EStatusIdle - - // Check RMobileLine::NotifyMobileLineStatusChange completes with with EStatusDisconnecting -> EStatusIdle - - // Check RMobileLine::GetMobileLineStatus returns EStatusIdle - - - //////////////////////////////////////////////////////////////// - // TEST END - //////////////////////////////////////////////////////////////// - - StartCleanup(); - - // Put any required test clean up here, then remove this comment - - return TestStepResult(); - } - -TPtrC CCTSYIntegrationTestCallControl0057::GetTestStepName() -/** - * @return The test step name. - */ - { - return _L("CCTSYIntegrationTestCallControl0057"); - } - - - -CCTSYIntegrationTestCallControl0058::CCTSYIntegrationTestCallControl0058(CEtelSessionMgr& aEtelSessionMgr) - : CCTSYIntegrationTestCallControlBase(aEtelSessionMgr) -/** - * Constructor. - */ - { - SetTestStepName(CCTSYIntegrationTestCallControl0058::GetTestStepName()); - } - -CCTSYIntegrationTestCallControl0058::~CCTSYIntegrationTestCallControl0058() -/** - * Destructor. - */ - { - } - -TVerdict CCTSYIntegrationTestCallControl0058::doTestStepL() -/** - * @SYMTestCaseID BA-CTSY-INT-CCON-0058 - * @SYMFssID BA/CTSY/CCON-0058 - * @SYMTestCaseDesc Remove SIM and replace with another SIM. - * @SYMTestPriority High - * @SYMTestActions RMobilePhone::GetNetworkRegistrationStatus, RCall::Dial, RCall::HangUp, RLine::NotifyStatusChange, RLine::GetStatus, RMobileLine::NotifyMobileLineStatusChange, RMobileLine::GetMobileLineStatus, RCall::NotifyStatusChange, RCall::GetStatus, RMobileCall::NotifyMobileCallStatusChange, RMobileCall::GetMobileCallStatus - * @SYMTestExpectedResults Pass - Phone uses new SIM when SIM replaced. - * @SYMTestType CIT - * @SYMTestCaseDependencies live/manual - * - * Reason for test: Verify remote party receives call from new SIM phone number. - * - * @return - TVerdict code - */ - { - - //////////////////////////////////////////////////////////////// - // SET UP - //////////////////////////////////////////////////////////////// - - // Ensure phone is camped on network. - // Call TNetworkTsyTestHelper::WaitForRegisteredOnHomeNetworkL - RMobilePhone& phone = iEtelSessionMgr.GetPhoneL(KMainServer,KMainPhone); - CHECK_EQUALS_L(iNetworkTestHelper.WaitForRegisteredOnHomeNetworkL(phone), KErrNone, - _L("TNetworkTsyTestHelper::WaitForRegisteredOnHomeNetworkL returned with an error")); - - //////////////////////////////////////////////////////////////// - // SET UP END - //////////////////////////////////////////////////////////////// - - StartTest(); - - //////////////////////////////////////////////////////////////// - // TEST START - //////////////////////////////////////////////////////////////// - - - // Remove SIM. - - // Replace with another SIM. - - // Reinitialise the TSY? - - // Check RMobilePhone::GetNetworkRegistrationStatus returns one of ERegisteredOnHomeNetwork - - // Get call 1. - - // Get voice line 1. - - // Dial outgoing call to RPS which answers. - - // === Check call status === - - // Check RCall::NotifyStatusChange completes with EStatusDialling -> EStatusConnecting -> EStatusConnected. - - // Check RCall::GetStatus returns EStatusConnected. - - // Check RMobileCall::NotifyMobileCallStatusChange completes with EStatusDialling -> EStatusConnecting -> EStatusConnected. - - // Check RMobileCall::GetMobileCallStatus returns status of EStatusConnected. - - // === Check line status === - - // Check RLine::NotifyStatusChange completes with EStatusDialling -> EStatusConnecting -> EStatusConnected. - - // Check RLine::GetStatus returns EStatusConnected - - // Check RMobileLine::NotifyMobileLineStatusChange completes with with EStatusDialling -> EStatusConnecting -> EStatusConnected. - - // Check RMobileLine::GetMobileLineStatus returns EStatusConnected - - // RPS returns MO number as being from the new SIM. - - // Hang up. - - // === Check call status === - - // Check RCall::NotifyStatusChange completes with EStatusHangingUp -> EStatusIdle. - - // Check RCall::GetStatus returns EStatusIdle. - - // Check RMobileCall::NotifyMobileCallStatusChange completes with EStatusDisconnecting -> EStatusIdle. - - // Check RMobileCall::GetMobileCallStatus returns status of EStatusIdle. - - // === Check line status === - - // Check RMobileLine::NotifyStatusChange completes with EStatusHangingUp -> EStatusIdle - - // Check RMobileLine::GetStatus returns EStatusIdle - - // Check RMobileLine::NotifyMobileLineStatusChange completes with with EStatusDisconnecting -> EStatusIdle - - // Check RMobileLine::GetMobileLineStatus returns EStatusIdle - - // RPS dials old SIM number. - - // Verify phone does not respond. - - - //////////////////////////////////////////////////////////////// - // TEST END - //////////////////////////////////////////////////////////////// - - StartCleanup(); - - // Put any required test clean up here, then remove this comment - - return TestStepResult(); - } - -TPtrC CCTSYIntegrationTestCallControl0058::GetTestStepName() -/** - * @return The test step name. - */ - { - return _L("CCTSYIntegrationTestCallControl0058"); - } - -CCTSYIntegrationTestCallControl0059::CCTSYIntegrationTestCallControl0059(CEtelSessionMgr& aEtelSessionMgr) - : CCTSYIntegrationTestCallControlBase(aEtelSessionMgr) -/** - * Constructor. - */ - { - SetTestStepName(CCTSYIntegrationTestCallControl0059::GetTestStepName()); - } - -CCTSYIntegrationTestCallControl0059::~CCTSYIntegrationTestCallControl0059() -/** - * Destructor. - */ - { - } - -TVerdict CCTSYIntegrationTestCallControl0059::doTestStepL() -/** - * @SYMTestCaseID BA-CTSY-INT-CCON-0059 - * @SYMFssID BA/CTSY/CCON-0059 - * @SYMTestCaseDesc Update life time parameter with call duration - * @SYMTestPriority High - * @SYMTestActions - * @SYMTestExpectedResults Pass - Life time param updated after call executed - * @SYMTestType CIT - * @SYMTestCaseDependencies live/automatic - * - * Reason for test - * - * @return - TVerdict code - */ - { - - //////////////////////////////////////////////////////////////// - // SET UP - //////////////////////////////////////////////////////////////// - - // Check phone supports KCapsVoice - // Get Voice line 1 - RMobileLine& voiceLine = iEtelSessionMgr.GetLineL(KMainServer, KMainPhone, KVoiceLine); - // Get call 1 - RMobileCall& call1 = iEtelSessionMgr.GetCallL(KMainServer, KMainPhone, KVoiceLine, KCall1); - - RLine::TCaps lineCaps; - CHECK_TRUE_L(voiceLine.GetCaps(lineCaps) == KErrNone, - _L("RMobileLine::GetCaps returned an error")); - CHECK_BITS_SET_L(lineCaps.iFlags, RLine::KCapsVoice, KNoUnwantedBits, - _L("RLine::GetCaps returned wrong caps")); - - // Ensure phone is camped on network. - // Call TNetworkTsyTestHelper::WaitForRegisteredOnHomeNetworkL - RMobilePhone& phone = iEtelSessionMgr.GetPhoneL(KMainServer,KMainPhone); - CHECK_EQUALS_L(iNetworkTestHelper.WaitForRegisteredOnHomeNetworkL(phone), KErrNone, - _L("TNetworkTsyTestHelper::WaitForRegisteredOnHomeNetworkL returned with an error")); - RMmCustomAPI& customApi = iEtelSessionMgr.GetCustomApiL(KMainServer, KMainPhone, KMainCustomApi); - - //////////////////////////////////////////////////////////////// - // SET UP END - //////////////////////////////////////////////////////////////// - - StartTest(); - - //////////////////////////////////////////////////////////////// - // TEST START - //////////////////////////////////////////////////////////////// - - // calling RMmCustomAPI::GetLifeTime() to retrieve current LTSY value for life time param before the call: - TExtEtelRequestStatus getLifeTimeStatus(customApi, ECustomGetLifeTimeIPC); - CleanupStack::PushL(getLifeTimeStatus); - RMmCustomAPI::TLifeTimeData ltData; - TPckg ltPckg(ltData); - customApi.GetLifeTime(getLifeTimeStatus, ltPckg); - ASSERT_EQUALS(WaitForRequestWithTimeOut(getLifeTimeStatus, ETimeLong), KErrNone, _L("RMmCustomAPI::GetLifeTime timed out")); - ASSERT_EQUALS(getLifeTimeStatus.Int(), KErrNone, _L("RMmCustomAPI::GetLifeTime returned an error")); - DEBUG_PRINTF3(_L("Life Time param before the call: hours=%d, min=%d"), ltData.iHours, ltData.iMinutes); - - - // post a notifier for RMobileCall::NotifyMobileCallStatusChange - TExtEtelRequestStatus notifyMobileCallChangeStatus(call1, EMobileCallNotifyMobileCallStatusChange); - CleanupStack::PushL(notifyMobileCallChangeStatus); - RMobileCall::TMobileCallStatus mobileCallStatus; - call1.NotifyMobileCallStatusChange(notifyMobileCallChangeStatus, mobileCallStatus); - - // Dial RPS which answers - TPtrC number; - GetRPSNumber(EVoiceLine,number); - RPSAnswerNextCallL(EVoiceLine); - - TCoreEtelRequestStatus dialStatus(call1, &RCall::DialCancel); - CleanupStack::PushL(dialStatus); - call1.Dial(dialStatus, number); - ASSERT_EQUALS(WaitForRequestWithTimeOut(dialStatus, ETimeMedium), KErrNone, - _L("RCall::Dial timed-out")); - ASSERT_EQUALS(dialStatus.Int(), KErrNone, - _L("RCall::Dial Expected KErrNone, but an error returned")); - - // === Check call status === - - const TInt wantedStatus = KErrNone; - - // Check RMobileCall::NotifyMobileCallStatusChange completes with EStatusDialling -> EStatusConnecting -> EStatusConnected. - RMobileCall::TMobileCallStatus expectedMobileCallStatus = RMobileCall::EStatusDialling; - iCallControlTestHelper.WaitForMobileCallNotifyMobileCallStatusChange(call1, - notifyMobileCallChangeStatus, - mobileCallStatus, - expectedMobileCallStatus, - wantedStatus); - - call1.NotifyMobileCallStatusChange(notifyMobileCallChangeStatus, mobileCallStatus); - expectedMobileCallStatus = RMobileCall::EStatusConnecting; - iCallControlTestHelper.WaitForMobileCallNotifyMobileCallStatusChange(call1, - notifyMobileCallChangeStatus, - mobileCallStatus, - expectedMobileCallStatus, - wantedStatus); - - call1.NotifyMobileCallStatusChange(notifyMobileCallChangeStatus, mobileCallStatus); - expectedMobileCallStatus = RMobileCall::EStatusConnected; - iCallControlTestHelper.WaitForMobileCallNotifyMobileCallStatusChange(call1, - notifyMobileCallChangeStatus, - mobileCallStatus, - expectedMobileCallStatus, - wantedStatus); - - // Check RMobileCall::GetMobileCallStatus returns status of EStatusConnected. - ASSERT_EQUALS(call1.GetMobileCallStatus(mobileCallStatus), KErrNone, - _L("RMobileCall::GetMobileStatus returned an error")); - ASSERT_EQUALS(mobileCallStatus, RMobileCall::EStatusConnected, - _L("RMobileCall::GetMobileStatus did not return a status EStatusConnected")); - - User::After(180000000); // Wait added for call duration of 3min - - //==== Post Notifiers ======== - call1.NotifyMobileCallStatusChange(notifyMobileCallChangeStatus, mobileCallStatus); - - // RPS hangs up. - ASSERT_EQUALS(RPSHangupL(EVoiceLine,0), KErrNone, _L("CCTSYIntegrationTestSuiteStepBase::RPSHangup returned an error")); - - // Check RMobileCall::NotifyMobileCallStatusChange completes with EStatusDisconnecting -> EStatusIdle. - expectedMobileCallStatus = RMobileCall::EStatusDisconnecting; - iCallControlTestHelper.WaitForMobileCallNotifyMobileCallStatusChange(call1, - notifyMobileCallChangeStatus, - mobileCallStatus, - expectedMobileCallStatus, - wantedStatus); - - call1.NotifyMobileCallStatusChange(notifyMobileCallChangeStatus, mobileCallStatus); - expectedMobileCallStatus = RMobileCall::EStatusIdle; - iCallControlTestHelper.WaitForMobileCallNotifyMobileCallStatusChange(call1, - notifyMobileCallChangeStatus, - mobileCallStatus, - expectedMobileCallStatus, - wantedStatus); - - // Check RMobileCall::GetMobileCallStatus returns status of EStatusIdle. - ASSERT_EQUALS(call1.GetMobileCallStatus(mobileCallStatus), KErrNone, - _L("RMobileCall::GetMobileStatus returned an error")); - ASSERT_EQUALS(mobileCallStatus, RMobileCall::EStatusIdle, - _L("RMobileCall::GetMobileStatus did not return a status EStatusIdle")); - - // calling RMmCustomAPI::GetLifeTime() to retrieve current LTSY value for life time param after the call: - customApi.GetLifeTime(getLifeTimeStatus, ltPckg); - ASSERT_EQUALS(WaitForRequestWithTimeOut(getLifeTimeStatus, ETimeLong), KErrNone, _L("RMmCustomAPI::GetLifeTime timed out")); - ASSERT_EQUALS(getLifeTimeStatus.Int(), KErrNone, _L("RMmCustomAPI::GetLifeTime returned an error")); - DEBUG_PRINTF3(_L("Life Time param after the call: hours=%d, min=%d"), ltData.iHours, ltData.iMinutes); - - //////////////////////////////////////////////////////////////// - // TEST END - //////////////////////////////////////////////////////////////// - - StartCleanup(); - - // Put any required test clean up here, then remove this comment - - CleanupStack::PopAndDestroy(3,&getLifeTimeStatus); - - return TestStepResult(); - } - -TPtrC CCTSYIntegrationTestCallControl0059::GetTestStepName() -/** - * @return The test step name. - */ - { - return _L("CCTSYIntegrationTestCallControl0059"); - } - - - -CCTSYIntegrationTestCallControl0060::CCTSYIntegrationTestCallControl0060(CEtelSessionMgr& aEtelSessionMgr) - : CCTSYIntegrationTestCallControlBase(aEtelSessionMgr) -/** - * Constructor. - */ - { - SetTestStepName(CCTSYIntegrationTestCallControl0060::GetTestStepName()); - } - -CCTSYIntegrationTestCallControl0060::~CCTSYIntegrationTestCallControl0060() -/** - * Destructor. - */ - { - } - -TVerdict CCTSYIntegrationTestCallControl0060::doTestStepL() -/** - * @SYMTestCaseID BA-CTSY-INT-CCON-0060 - * @SYMFssID BA/CTSY/CCON-0060 - * @SYMTestCaseDesc Update life time parameter with call duration - * @SYMTestPriority High - * @SYMTestActions - * @SYMTestExpectedResults Pass - Life time param updated after call executed - * @SYMTestType CIT - * @SYMTestCaseDependencies live/automatic - * - * Reason for test - * - * @return - TVerdict code - */ - { - //////////////////////////////////////////////////////////////// - // SET UP - //////////////////////////////////////////////////////////////// - RMobilePhone& phone = iEtelSessionMgr.GetPhoneL(KMainServer,KMainPhone); - - // Get Voice line 1 - RMobileLine& voiceLine = iEtelSessionMgr.GetLineL(KMainServer, KMainPhone, KVoiceLine); - - // Get call 1 - RMobileCall& call1 = iEtelSessionMgr.GetCallL(KMainServer, KMainPhone, KVoiceLine, KCall1); - - // Check phone supports KCapsVoice - RLine::TCaps lineCaps; - CHECK_EQUALS_L(voiceLine.GetCaps(lineCaps), KErrNone, - _L("RMobileLine::GetCaps returned an error")); - CHECK_BITS_SET_L(lineCaps.iFlags, RLine::KCapsVoice, KNoUnwantedBits, - _L("RLine::GetCaps returned wrong caps")); - - // Call TNetworkTsyTestHelper::WaitForRegisteredOnHomeNetworkL - CHECK_EQUALS_L(iNetworkTestHelper.WaitForRegisteredOnHomeNetworkL(phone), KErrNone, _L("TNetworkTsyTestHelper::WaitForRegisteredOnHomeNetworkL returned with an error")); - RMmCustomAPI& customApi = iEtelSessionMgr.GetCustomApiL(KMainServer, KMainPhone, KMainCustomApi); - - //////////////////////////////////////////////////////////////// - // SET UP END - //////////////////////////////////////////////////////////////// - - StartTest(); - - //////////////////////////////////////////////////////////////// - // TEST START - //////////////////////////////////////////////////////////////// - - // calling RMmCustomAPI::GetLifeTime() to retrieve current LTSY value for life time param before the call: - TExtEtelRequestStatus getLifeTimeStatus(customApi, ECustomGetLifeTimeIPC); - CleanupStack::PushL(getLifeTimeStatus); - - RMmCustomAPI::TLifeTimeData lifeTimeData; - lifeTimeData.iHours = 0; - lifeTimeData.iMinutes = 0; - TPckg lifeTimePckg(lifeTimeData); - - customApi.GetLifeTime(getLifeTimeStatus, lifeTimePckg); - ASSERT_EQUALS(WaitForRequestWithTimeOut(getLifeTimeStatus, ETimeLong), KErrNone, _L("RMmCustomAPI::GetLifeTime timed out")); - ASSERT_EQUALS(getLifeTimeStatus.Int(), KErrNone, _L("RMmCustomAPI::GetLifeTime returned an error")); - DEBUG_PRINTF3(_L("Life Time param before the call: hours=%d, min=%d"), lifeTimeData.iHours, lifeTimeData.iMinutes); - - TUint32 lifTimeInMintues = lifeTimeData.iHours * 60 + lifeTimeData.iMinutes; - - // Check RPhone::GetLineInfo returns iStatus of EStatusIdle - RPhone::TLineInfo lineInfo; - TInt lineIndex=0; - ASSERT_EQUALS(phone.GetLineInfo(lineIndex, lineInfo), KErrNone, - _L("RPhone::GetLineInfo returned an error")); - ASSERT_EQUALS(lineInfo.iStatus, RCall::EStatusIdle, - _L("RPhone::GetLineInfo wrong iStatus, should be EStatusIdle")); - - // Check RPhone::GetLineInfo returns iLineCapsFlags of KCapsVoice - ASSERT_BITS_SET(lineInfo.iLineCapsFlags, RLine::KCapsVoice, KNoUnwantedBits, - _L("RPhone::GetLineInfo returned wrong caps")); - - // Check RPhone::GetLineInfo returns a valid line name - ASSERT_TRUE(lineInfo.iName.Length() >0, - _L("RPhone::GetLineInfo wrong call name")); - - // Get the voice number that answers. - TPtrC number; - ASSERT_TRUE(GetStringFromConfig(KIniVoiceNumSection, KIniVoiceNumber1, number) != EFalse, - _L("CTestStep::GetStringFromConfig did not complete as expected")); - - TCoreEtelRequestStatus dialStatus(call1, &RCall::DialCancel); - CleanupStack::PushL(dialStatus); - - // make 3 calls 70 seconds each and check if Life Timer is increased by at least a minute each time - TInt callCount = 3; - - for (TInt i = 0; i < callCount; i++) - { - call1.Dial(dialStatus, number); - ASSERT_EQUALS(WaitForRequestWithTimeOut(dialStatus, ETimeMedium), KErrNone, - _L("RCall::Dial timed-out")); - ASSERT_EQUALS(dialStatus.Int(), KErrNone, - _L("RCall::Dial returned with an error")); - - // Check RPhone::GetLineInfo returns iStatus of EStatusConnected - ASSERT_EQUALS(phone.GetLineInfo(lineIndex, lineInfo), KErrNone, - _L("RPhone::GetLineInfo returned an error")); - ASSERT_EQUALS(lineInfo.iStatus, RCall::EStatusConnected, - _L("RPhone::GetLineInfo wrong iStatus, should be EStatusConnected")); - - // Check RPhone::GetLineInfo returns a valid line name - ASSERT_TRUE(lineInfo.iName.Length() >0, - _L("RPhone::GetLineInfo wrong call name")); - - User::After(70*KOneSecond); // Wait added for call duration of just over a minute - - // hang up the active call - TCoreEtelRequestStatus hangUpStatus (call1,&RCall::HangUpCancel); - CleanupStack::PushL(hangUpStatus); - call1.HangUp(hangUpStatus); - WaitForRequestWithTimeOut(hangUpStatus, ETimeMedium); - - // calling RMmCustomAPI::GetLifeTime() to retrieve current LTSY value for life time param after the call: - customApi.GetLifeTime(getLifeTimeStatus, lifeTimePckg); - - ASSERT_EQUALS(WaitForRequestWithTimeOut(getLifeTimeStatus, ETimeLong), KErrNone, _L("RMmCustomAPI::GetLifeTime timed out")); - ASSERT_EQUALS(getLifeTimeStatus.Int(), KErrNone, _L("RMmCustomAPI::GetLifeTime returned an error")); - DEBUG_PRINTF3(_L("Life Time param after the call: hours=%d, min=%d"), lifeTimeData.iHours, lifeTimeData.iMinutes); - - lifTimeInMintues++; - ASSERT_TRUE( lifTimeInMintues <= (lifeTimeData.iHours * 60 + lifeTimeData.iMinutes), _L("Life Time was not updated properly") ); - } - - //////////////////////////////////////////////////////////////// - // TEST END - //////////////////////////////////////////////////////////////// - - StartCleanup(); - CleanupStack::PopAndDestroy(5,&getLifeTimeStatus); - return TestStepResult(); - } - -TPtrC CCTSYIntegrationTestCallControl0060::GetTestStepName() -/** - * @return The test step name. - */ - { - return _L("CCTSYIntegrationTestCallControl0060"); - } +/* +* Copyright (c) 2007-2008 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: +* +*/ + + + +/** + * Test step definitions for the CallControl functional unit. + * @internalTechnology + */ + +#include "cctsyintegrationtestcallcontrol.h" +#include "cetelsessionmgr.h" +#include "cctsyinidata.h" +#include "tcallcontroltsytesthelper.h" +#include +#include "rpsasciirqstdefs.h" +#include "rpsmaster.h" +#include +#include "rpsasciirqstdefs.h" +#include "rpsmaster.h" + + +CCTSYIntegrationTestCallControlBase::CCTSYIntegrationTestCallControlBase(CEtelSessionMgr& aEtelSessionMgr) + : CCTSYIntegrationTestSuiteStepBase(aEtelSessionMgr), iCallControlTestHelper(*this), iNetworkTestHelper(*this), iPacketServiceTestHelper(*this) +/** + * Constructor + */ + { + } + +CCTSYIntegrationTestCallControlBase::~CCTSYIntegrationTestCallControlBase() +/* + * Destructor + */ + { + } + +CCTSYIntegrationTestCallControl0001::CCTSYIntegrationTestCallControl0001(CEtelSessionMgr& aEtelSessionMgr) + : CCTSYIntegrationTestCallControlBase(aEtelSessionMgr) +/** + * Constructor. + */ + { + SetTestStepName(CCTSYIntegrationTestCallControl0001::GetTestStepName()); + } + +CCTSYIntegrationTestCallControl0001::~CCTSYIntegrationTestCallControl0001() +/** + * Destructor. + */ + { + } + + +TVerdict CCTSYIntegrationTestCallControl0001::doTestStepL() +/** + * @SYMTestCaseID BA-CTSY-INT-CCON-0001 + * @SYMFssID BA/CTSY/CCON-0001 + * @SYMTestCaseDesc Make an outgoing voice call that connects + * @SYMTestPriority High + * @SYMTestActions RPhone::EnumerateLines, RCall::Dial + * @SYMTestExpectedResults Pass - MO call connects. Phone status updates correctly. + * @SYMTestType CIT + * @SYMTestCaseDependencies live/automatic + * + * Reason for test: Verify change in call state is reflected in RPhone. + * + * @return - TVerdict code + */ + { + + //////////////////////////////////////////////////////////////// + // SET UP + //////////////////////////////////////////////////////////////// + RMobilePhone& phone = iEtelSessionMgr.GetPhoneL(KMainServer,KMainPhone); + + // Get Voice line 1 + RMobileLine& voiceLine = iEtelSessionMgr.GetLineL(KMainServer, KMainPhone, KVoiceLine); + + // Get call 1 + RMobileCall& call1 = iEtelSessionMgr.GetCallL(KMainServer, KMainPhone, KVoiceLine, KCall1); + + // Check phone supports KCapsVoice + RLine::TCaps lineCaps; + CHECK_EQUALS_L(voiceLine.GetCaps(lineCaps), KErrNone, + _L("RMobileLine::GetCaps returned an error")); + CHECK_BITS_SET_L(lineCaps.iFlags, RLine::KCapsVoice, KNoUnwantedBits, + _L("RLine::GetCaps returned wrong caps")); + + // Call TNetworkTsyTestHelper::WaitForRegisteredOnHomeNetworkL + CHECK_EQUALS_L(iNetworkTestHelper.WaitForRegisteredOnHomeNetworkL(phone), KErrNone, _L("TNetworkTsyTestHelper::WaitForRegisteredOnHomeNetworkL returned with an error")); + + //////////////////////////////////////////////////////////////// + // SET UP END + //////////////////////////////////////////////////////////////// + + StartTest(); + + //////////////////////////////////////////////////////////////// + // TEST START + //////////////////////////////////////////////////////////////// + + + // Check RPhone::EnumerateLines returns 4 (CTSY hard-coded value) + + TInt count = 0; + ASSERT_EQUALS(phone.EnumerateLines(count), KErrNone, + _L("RPhone::EnumerateLines did returned an error")); + ASSERT_EQUALS(count, 4, + _L("RPhone::EnumerateLines did not return a count of four")); + + // Check RPhone::GetLineInfo returns iStatus of EStatusIdle + RPhone::TLineInfo lineInfo; + TInt dataLineIndex=0; + ASSERT_EQUALS(phone.GetLineInfo(dataLineIndex, lineInfo), KErrNone, + _L("RPhone::GetLineInfo returned an error")); + ASSERT_EQUALS(lineInfo.iStatus, RCall::EStatusIdle, + _L("RPhone::GetLineInfo wrong iStatus, should be EStatusIdle")); + + // Check RPhone::GetLineInfo returns iLineCapsFlags of KCapsVoice + ASSERT_BITS_SET(lineInfo.iLineCapsFlags, RLine::KCapsVoice, KNoUnwantedBits, + _L("RPhone::GetLineInfo returned wrong caps")); + + // Check RPhone::GetLineInfo returns a valid line name + ASSERT_TRUE(lineInfo.iName.Length() >0, + _L("RPhone::GetLineInfo wrong call name")); + + // Dial voice number that answers. + TPtrC number; + ASSERT_TRUE(GetStringFromConfig(KIniVoiceNumSection, KIniVoiceNumber1, number) != EFalse, + _L("CTestStep::GetStringFromConfig did not complete as expected")); + TCoreEtelRequestStatus dialStatus(call1, &RCall::DialCancel); + CleanupStack::PushL(dialStatus); + call1.Dial(dialStatus, number); + ASSERT_EQUALS(WaitForRequestWithTimeOut(dialStatus, ETimeMedium), KErrNone, + _L("RCall::Dial timed-out")); + ASSERT_EQUALS(dialStatus.Int(), KErrNone, + _L("RCall::Dial returned with an error")); + + // Check RPhone::GetLineInfo returns iStatus of EStatusConnected + ASSERT_EQUALS(phone.GetLineInfo(dataLineIndex, lineInfo), KErrNone, + _L("RPhone::GetLineInfo returned an error")); + ASSERT_EQUALS(lineInfo.iStatus, RCall::EStatusConnected, + _L("RPhone::GetLineInfo wrong iStatus, should be EStatusConnected")); + + // Check RPhone::GetLineInfo returns iLineCapsFlags of KCapsVoice + ASSERT_BITS_SET(lineInfo.iLineCapsFlags, RLine::KCapsVoice, KNoUnwantedBits, + _L("RPhone::GetLineInfo returned wrong caps")); + + // Check RPhone::GetLineInfo returns a valid line name + ASSERT_TRUE(lineInfo.iName.Length() >0, + _L("RPhone::GetLineInfo wrong call name")); + + //////////////////////////////////////////////////////////////// + // TEST END + //////////////////////////////////////////////////////////////// + + StartCleanup(); + + // hang up the active call + TCoreEtelRequestStatus hangUpStatus (call1,&RCall::HangUpCancel); + CleanupStack::PushL(hangUpStatus); + call1.HangUp(hangUpStatus); + WaitForRequestWithTimeOut(hangUpStatus, ETimeMedium); + + + CleanupStack::PopAndDestroy(2,&dialStatus); + + return TestStepResult(); + } + +TPtrC CCTSYIntegrationTestCallControl0001::GetTestStepName() +/** + * @return The test step name. + */ + { + return _L("CCTSYIntegrationTestCallControl0001"); + } + + + +CCTSYIntegrationTestCallControl0002::CCTSYIntegrationTestCallControl0002(CEtelSessionMgr& aEtelSessionMgr) + : CCTSYIntegrationTestCallControlBase(aEtelSessionMgr) +/** + * Constructor. + */ + { + SetTestStepName(CCTSYIntegrationTestCallControl0002::GetTestStepName()); + } + +CCTSYIntegrationTestCallControl0002::~CCTSYIntegrationTestCallControl0002() +/** + * Destructor. + */ + { + } + +TVerdict CCTSYIntegrationTestCallControl0002::doTestStepL() +/** + * @SYMTestCaseID BA-CTSY-INT-CCON-0002 + * @SYMFssID BA/CTSY/CCON-0002 + * @SYMTestCaseDesc Make an outgoing voice call that connects + * @SYMTestPriority High + * @SYMTestActions RLine::NotifyStatusChange, RLine::GetStatus, RMobileLine::NotifyMobileLineStatusChange, RMobileLine::GetMobileLineStatus, RLine::GetInfo, RLine::GetCallInfo, RLine::EnumerateCall + * @SYMTestExpectedResults Pass - Mo call connects. Line status updates corectly. + * @SYMTestType CIT + * @SYMTestCaseDependencies live/automatic + * + * Reason for test: Verify change in call state is reflected in RLine and RMobileLine + * + * @return - TVerdict code + */ + { + + //////////////////////////////////////////////////////////////// + // SET UP + //////////////////////////////////////////////////////////////// + + // Get phone + RMobilePhone& phone = iEtelSessionMgr.GetPhoneL(KMainServer,KMainPhone); + + // Check phone supports KCapsVoice + // Get Voice line 1 + RMobileLine& voiceLine = iEtelSessionMgr.GetLineL(KMainServer, KMainPhone, KVoiceLine); + + // Get call 1 + RMobileCall& call1 = iEtelSessionMgr.GetCallL(KMainServer, KMainPhone, KVoiceLine, KCall1); + + // Check GetCaps returns iLineCapsFlags of KCapsVoice + RLine::TCaps lineCaps; + CHECK_EQUALS_L(voiceLine.GetCaps(lineCaps), KErrNone, + _L("RMobileLine::GetCaps returned an error")); + CHECK_BITS_SET_L(lineCaps.iFlags, RLine::KCapsVoice, KNoUnwantedBits, + _L("RLine::GetCaps returned wrong caps")); + + // Call TNetworkTsyTestHelper::WaitForRegisteredOnHomeNetworkL + CHECK_EQUALS_L(iNetworkTestHelper.WaitForRegisteredOnHomeNetworkL(phone), KErrNone, _L("TNetworkTsyTestHelper::WaitForRegisteredOnHomeNetworkL returned with an error")); + + //////////////////////////////////////////////////////////////// + // SET UP END + //////////////////////////////////////////////////////////////// + + StartTest(); + + //////////////////////////////////////////////////////////////// + // TEST START + //////////////////////////////////////////////////////////////// + + + // === Check line caps === + + // Check RLine::GetCaps supports caps in set of KCapsVoice. + ASSERT_EQUALS(voiceLine.GetCaps(lineCaps), KErrNone, + _L("RMobileLine::GetCaps returned an error")); + ASSERT_BITS_SET(lineCaps.iFlags, RLine::KCapsVoice, KNoUnwantedBits, + _L("RLine::GetCaps returned wrong caps")); + + // === Check line status === + + // Check RLine::GetStatus returns EStatusIdle. + RCall::TStatus callStatus; + ASSERT_EQUALS(voiceLine.GetStatus(callStatus), KErrNone, + _L("RLine::GetStatus returned an error")); + ASSERT_EQUALS(callStatus, RCall::EStatusIdle, + _L("RLine::GetStatus wrong iStatus, should be EStatusIdle")); + + // Check RMobileLine::GetMobileLineStatus returns EStatusIdle. + RMobileCall::TMobileCallStatus lineStatus; + ASSERT_EQUALS(voiceLine.GetMobileLineStatus(lineStatus), KErrNone, + _L("RMobileLine::GetMobileLineStatus returned an error")); + ASSERT_EQUALS(lineStatus, RMobileCall::EStatusIdle, + _L("RMobileLine::GetMobileLineStatus did not return EStatusIdle as expected")); + + // === Check line info === + + // Check RLine::GetCallInfo returns valid name. + // Check RLine::GetCallInfo returns caps in set of KCapsVoice | KCapsDial. + // Check RLine::GetCallInfo returns status of EStatusIdle. + RLine::TCallInfo callInfo; + TInt dataLineIndex=0; + ASSERT_EQUALS(voiceLine.GetCallInfo(dataLineIndex, callInfo), KErrNone, + _L("RLine::GetCallInfo returned an error")); + ASSERT_TRUE(callInfo.iCallName.Length() >0, + _L("RLine::GetCallInfo returned an invalid name")); + ASSERT_BITS_SET(callInfo.iCallCapsFlags, RCall::KCapsVoice | RCall::KCapsDial, KNoUnwantedBits , + _L("RLine::GetCallInfo returned wrong caps")); + ASSERT_EQUALS(callInfo.iStatus, RCall::EStatusIdle, + _L("RLine::GetCallInfo wrong iStatus, should be EStatusIdle")); + + // Check RLine::GetInfo returns status of EStatusIdle. + RLine::TLineInfo lineInfo; + ASSERT_EQUALS(voiceLine.GetInfo(lineInfo),KErrNone, + _L("RLine::GetInfo returned an error")); + ASSERT_EQUALS(lineInfo.iStatus, RCall::EStatusIdle, + _L("RLine::GetInfo did not return EStatusIdle")); + + // Check RLine::EnumerateCall returns aCount of 4 + TInt count = 0; + ASSERT_EQUALS(phone.EnumerateLines(count), KErrNone, + _L("RPhone::EnumerateLines did returned an error")); + ASSERT_EQUALS(count, 4, + _L("RPhone::EnumerateLines did not return a count of four")); + + // post notifier for RLine::NotifyStatusChange + TCoreEtelRequestStatus notifyStatusChangeStatus (voiceLine,&RLine::NotifyStatusChangeCancel); + CleanupStack::PushL(notifyStatusChangeStatus); + voiceLine.NotifyStatusChange(notifyStatusChangeStatus,callStatus); + + // post a notifier for RMobileLine::NotifyMobileLineStatusChange + RMobileCall::TMobileCallStatus mobileCallStatus; + TExtEtelRequestStatus notifyMobileLineChangeStatus(voiceLine, EMobileLineNotifyMobileLineStatusChange); + CleanupStack::PushL(notifyMobileLineChangeStatus); + voiceLine.NotifyMobileLineStatusChange(notifyMobileLineChangeStatus, mobileCallStatus); + + // Dial a voice number that answers. + TPtrC number; + ASSERT_TRUE(GetStringFromConfig(KIniVoiceNumSection, KIniVoiceNumber1, number) != EFalse, + _L("CTestStep::GetStringFromConfig did not complete as expected")); + TCoreEtelRequestStatus dialStatus(call1, &RCall::DialCancel); + CleanupStack::PushL(dialStatus); + call1.Dial(dialStatus, number); + ASSERT_EQUALS(WaitForRequestWithTimeOut(dialStatus, ETimeMedium), KErrNone, + _L("RCall::Dial timed-out")); + ASSERT_EQUALS(dialStatus.Int(), KErrNone, + _L("RCall::Dial returned with an error")); + + // === Check line status === + + // Check RLine::NotifyStatusChange completes with EStatusDialling -> + TInt expectedStatus = KErrNone; + RCall::TStatus expectedCallStatus = RCall::EStatusDialling; + iCallControlTestHelper.WaitForLineNotifyStatusChange(voiceLine, + notifyStatusChangeStatus, + callStatus, + expectedCallStatus, + expectedStatus); + + // Check RLine::NotifyStatusChange completes with EStatusConnecting -> + expectedCallStatus = RCall::EStatusConnecting; + voiceLine.NotifyStatusChange(notifyStatusChangeStatus,callStatus); + iCallControlTestHelper.WaitForLineNotifyStatusChange(voiceLine, + notifyStatusChangeStatus, + callStatus, + expectedCallStatus, + expectedStatus); + + // Check RLine::NotifyStatusChange completes with EStatusConnected. + expectedCallStatus = RCall::EStatusConnected; + voiceLine.NotifyStatusChange(notifyStatusChangeStatus,callStatus); + iCallControlTestHelper.WaitForLineNotifyStatusChange(voiceLine, + notifyStatusChangeStatus, + callStatus, + expectedCallStatus, + expectedStatus); + + // Check RLine::GetStatus returns EStatusConnected + ASSERT_EQUALS(voiceLine.GetStatus(callStatus), KErrNone, + _L("RLine::GetStatus returned an error")); + ASSERT_EQUALS(callStatus, RCall::EStatusConnected, + _L("RLine::GetStatus did not return EStatusConnected as expected")); + + // Check RMobileLine::NotifyMobileLineStatusChange completes with with EStatusDialling -> + RMobileCall::TMobileCallStatus expectedMobileCallStatus = RMobileCall::EStatusDialling; + iCallControlTestHelper.WaitForMobileLineNotifyMobileLineStatusChange(voiceLine, + notifyMobileLineChangeStatus, + mobileCallStatus, + expectedMobileCallStatus, + expectedStatus); + + // Check RMobileLine::NotifyMobileLineStatusChange completes with with EStatusConnecting -> + expectedMobileCallStatus = RMobileCall::EStatusConnecting; + voiceLine.NotifyMobileLineStatusChange(notifyMobileLineChangeStatus, mobileCallStatus); + iCallControlTestHelper.WaitForMobileLineNotifyMobileLineStatusChange(voiceLine, + notifyMobileLineChangeStatus, + mobileCallStatus, + expectedMobileCallStatus, + expectedStatus); + + // Check RMobileLine::NotifyMobileLineStatusChange completes with with EStatusConnected. + expectedMobileCallStatus = RMobileCall::EStatusConnected; + voiceLine.NotifyMobileLineStatusChange(notifyMobileLineChangeStatus, mobileCallStatus); + iCallControlTestHelper.WaitForMobileLineNotifyMobileLineStatusChange(voiceLine, + notifyMobileLineChangeStatus, + mobileCallStatus, + expectedMobileCallStatus, + expectedStatus); + + + // Check RMobileLine::GetMobileLineStatus returns EStatusConnected + ASSERT_EQUALS(voiceLine.GetMobileLineStatus(mobileCallStatus), KErrNone, + _L("RMobileLine::GetMobileLineStatus returned an error")); + ASSERT_EQUALS(mobileCallStatus, RMobileCall::EStatusConnected, + _L("RMobileLine::GetMobileLineStatus did not set line status to EStatusConnected")); + + + // === Check line info === + + // Check RLine::GetCallInfo returns valid name. + // Check RLine::GetCallInfo returns caps in set of KCapsHangUp. + // Check RLine::GetCallInfo returns status of EStatusConnected. + ASSERT_EQUALS(voiceLine.GetCallInfo(dataLineIndex, callInfo), KErrNone, + _L("RLine::GetCallInfo returned an error")); + ASSERT_TRUE(callInfo.iCallName.Length() >0, + _L("RLine::GetCallInfo returned an invalid name")); + ASSERT_BITS_SET(callInfo.iCallCapsFlags, RCall::KCapsHangUp, KNoUnwantedBits, + _L("RLine::GetCallInfo returned wrong caps")); + ASSERT_EQUALS(callInfo.iStatus, RCall::EStatusConnected, + _L("RLine::GetCallInfo wrong iStatus, should be EStatusConnected")); + + // Check RLine::GetInfo returns status of EStatusConnected. + ASSERT_EQUALS(voiceLine.GetInfo(lineInfo), KErrNone, + _L("RLine::GetInfo returned an error")); + ASSERT_EQUALS(lineInfo.iStatus, RCall::EStatusConnected, + _L("RLine::GetInfo did not return EStatusConnected")); + + + //////////////////////////////////////////////////////////////// + // TEST END + //////////////////////////////////////////////////////////////// + + StartCleanup(); + + // hang up the active call + TCoreEtelRequestStatus hangUpStatus (call1,&RCall::HangUpCancel); + CleanupStack::PushL(hangUpStatus); + call1.HangUp(hangUpStatus); + WaitForRequestWithTimeOut(hangUpStatus, ETimeMedium); + + // Pop + // notifyStatusChangeStatus + // notifyMobileLineChangeStatus + // dialStatus + // hangUpStatus + CleanupStack::PopAndDestroy(4,¬ifyStatusChangeStatus); + + return TestStepResult(); + } + +TPtrC CCTSYIntegrationTestCallControl0002::GetTestStepName() +/** + * @return The test step name. + */ + { + return _L("CCTSYIntegrationTestCallControl0002"); + } + + + +CCTSYIntegrationTestCallControl0003::CCTSYIntegrationTestCallControl0003(CEtelSessionMgr& aEtelSessionMgr) + : CCTSYIntegrationTestCallControlBase(aEtelSessionMgr) +/** + * Constructor. + */ + { + SetTestStepName(CCTSYIntegrationTestCallControl0003::GetTestStepName()); + } + +CCTSYIntegrationTestCallControl0003::~CCTSYIntegrationTestCallControl0003() +/** + * Destructor. + */ + { + } + +TVerdict CCTSYIntegrationTestCallControl0003::doTestStepL() +/** + * @SYMTestCaseID BA-CTSY-INT-CCON-0003 + * @SYMFssID BA/CTSY/CCON-0003 + * @SYMTestCaseDesc Make an outgoing voice call that connects + * @SYMTestPriority High + * @SYMTestActions RCall::GetInfo, RCall::GetStatus, RCall::NotifyCapsChange, RCall::NotifyStatusChange, RMobileCall::GetMobileCallCaps, RMobileCall::GetMobileCallInfo, RMobileCall::GetMobileCallStatus, RMobileCall::NotifyMobileCallCapsChange, RMobileCall::NotifyMobileCallStatusChange + * @SYMTestExpectedResults Pass - Mo call connects. Call status updates correctly. + * @SYMTestType CIT + * @SYMTestCaseDependencies live/automatic + * + * Reason for test: Verify change in call state is reflected in RCall and RMobileCall. + * + * @return - TVerdict code + */ + { + + //////////////////////////////////////////////////////////////// + // SET UP + //////////////////////////////////////////////////////////////// + RMobilePhone& phone = iEtelSessionMgr.GetPhoneL(KMainServer,KMainPhone); + + // Check phone supports KCapsVoice + // Get Voice line 1 + RMobileLine& voiceLine = iEtelSessionMgr.GetLineL(KMainServer, KMainPhone, KVoiceLine); + + // Get call 1 + RMobileCall& call1 = iEtelSessionMgr.GetCallL(KMainServer, KMainPhone, KVoiceLine, KCall1); + + RLine::TCaps lineCaps; + CHECK_EQUALS_L(voiceLine.GetCaps(lineCaps), KErrNone, + _L("RMobileLine::GetCaps returned an error")); + CHECK_BITS_SET_L(lineCaps.iFlags, RLine::KCapsVoice, KNoUnwantedBits, + _L("RLine::GetCaps returned wrong caps")); + + // Call TNetworkTsyTestHelper::WaitForRegisteredOnHomeNetworkL + CHECK_EQUALS_L(iNetworkTestHelper.WaitForRegisteredOnHomeNetworkL(phone), KErrNone, _L("TNetworkTsyTestHelper::WaitForRegisteredOnHomeNetworkL returned with an error")); + + //////////////////////////////////////////////////////////////// + // SET UP END + //////////////////////////////////////////////////////////////// + + StartTest(); + + //////////////////////////////////////////////////////////////// + // TEST START + //////////////////////////////////////////////////////////////// + + + // === Check call caps === + + // Check RCall::GetCaps supports KCapsDial | KCapsVoice. + RCall::TCaps callCaps; + TUint32 wantedCaps = RCall::KCapsDial | RCall::KCapsVoice; + ASSERT_EQUALS(call1.GetCaps(callCaps),KErrNone, + _L("RCall::GetCaps returned an error")); + ASSERT_BITS_SET(callCaps.iFlags, wantedCaps, KNoUnwantedBits, + _L("RCall::GetCaps returned wrong caps")); + + // Check RMobileCall::GetMobileCallCaps returns iCallControlCaps in set of KCapsVoice | KCapsDial. + // Check RMobileCall::GetMobileCallCaps includes iCallEventCaps in set of 0. + TUint32 wantedCallControlCaps = RCall::KCapsDial | RCall::KCapsVoice; + TUint32 wantedCallEventCaps = 0; + RMobileCall::TMobileCallCapsV1 mobileCallCaps; + RMobileCall::TMobileCallCapsV1Pckg capsPckg(mobileCallCaps); + ASSERT_EQUALS(call1.GetMobileCallCaps(capsPckg), KErrNone, + _L("RMobileCall::GetMobileCallCaps returned an error")); + ASSERT_BITS_SET(mobileCallCaps.iCallControlCaps, wantedCallControlCaps, KNoUnwantedBits, + _L("RMobileCall::GetMobileCallCaps returned wrong caps")); + ASSERT_BITS_SET(mobileCallCaps.iCallEventCaps, wantedCallEventCaps, KNoUnwantedBits, + _L("RMobileCall::GetMobileCallCaps returned wrong caps")); + + // === Check call status === + + // Check RCall::GetStatus returns EStatusIdle. + RCall::TStatus callStatus; + ASSERT_EQUALS(call1.GetStatus(callStatus), KErrNone, + _L("RCall::GetStatus returned an Error")); + ASSERT_EQUALS(callStatus, RCall::EStatusIdle, + _L("RCall::GetStatus did not return EStatusIdle")); + + // Check RMobileCall::GetMobileCallStatus returns status of EStatusIdle. + RMobileCall::TMobileCallStatus mobileCallStatus; + ASSERT_EQUALS(call1.GetMobileCallStatus(mobileCallStatus), KErrNone, + _L("RMobileCall::GetMobileCallStatus returned an Error")); + ASSERT_EQUALS(mobileCallStatus, RMobileCall::EStatusIdle, + _L("RMobileCall::GetMobileCallStatus did not set the status to EStatusIdle")); + + // === Check call info === + + // Check RCall::GetInfo returns valid call name. + // Check RCall::GetInfo returns valid voice line name. + // Check RCall::GetInfo returns call status of EStatusIdle. + + RCall::TCallInfo callInfo; + ASSERT_EQUALS(call1.GetInfo(callInfo), KErrNone, + _L("RCall::GetInfo returned an error")); + ASSERT_TRUE(callInfo.iCallName.Length() >0, + _L("RCall::GetInfo returned an invalid name")); + ASSERT_TRUE(callInfo.iLineName.Length() >0, + _L("RCall::GetInfo returned an invalid Line name")); + ASSERT_EQUALS(callInfo.iStatus, RCall::EStatusIdle, + _L("RCall::GetInfo wrong iStatus, should be EStatusIdle")); + + // Check RMobileCall::GetMobileCallInfo returns iValid with correct flags for returned parameters set. + // Check RMobileCall::GetMobileCallInfo returns valid call name. + // Check RMobileCall::GetMobileCallInfo returns valid line name. + RMobileCall::TMobileCallInfoV1 mobileCallInfo; + RMobileCall::TMobileCallInfoV1Pckg callInfoPckg(mobileCallInfo); + RMobileCall::TMobileCallInfoV1 validCallInfo; + validCallInfo.iValid = RMobileCall::KCallStartTime; + ASSERT_EQUALS(call1.GetMobileCallInfo(callInfoPckg), KErrNone, + _L("RMobileCall::GetMobileCallInfo returned an error")); + ASSERT_BITS_SET(mobileCallInfo.iValid, validCallInfo.iValid,KNoUnwantedBits, + _L("RMobileCall::GetMobileCallInfo returned unexpected flags in iValid")); + ASSERT_TRUE(mobileCallInfo.iCallName.Length() >0, + _L("RMobileCall::GetMobileCallInfo returned an invalid callName")); + ASSERT_TRUE(mobileCallInfo.iLineName.Length() >0, + _L("RMobileCall::GetMobileCallInfo returned an invalid line name")); + + // post notifier for RCall::NotifyCapsChange + TCoreEtelRequestStatus notifyCapsChangeStatus (call1,&RCall::NotifyCapsChangeCancel); + CleanupStack::PushL(notifyCapsChangeStatus); + call1.NotifyCapsChange(notifyCapsChangeStatus,callCaps); + + // post notifier for RMobileCall::NotifyMobileCallCapsChange + TExtEtelRequestStatus notifyMobileCallCapsChangeStatus(call1, EMobileCallNotifyMobileCallCapsChange); + CleanupStack::PushL(notifyMobileCallCapsChangeStatus); + call1.NotifyMobileCallCapsChange(notifyMobileCallCapsChangeStatus,capsPckg); + + // post notifier for RCall::NotifyStatusChange + TCoreEtelRequestStatus notifyStatusChangeStatus (call1,&RCall::NotifyStatusChangeCancel); + CleanupStack::PushL(notifyStatusChangeStatus); + call1.NotifyStatusChange(notifyStatusChangeStatus,callStatus); + + // post notifier for RMobileCall::NotifyMobileCallStatusChange + TExtEtelRequestStatus notifyMobileCallStatusChangeStatus(call1, EMobileCallNotifyMobileCallStatusChange); + CleanupStack::PushL(notifyMobileCallStatusChangeStatus); + call1.NotifyMobileCallStatusChange(notifyMobileCallStatusChangeStatus, mobileCallStatus); + + // Dial a voice number. + TPtrC number; + ASSERT_TRUE(GetStringFromConfig(KIniVoiceNumSection, KIniVoiceNumber1, number) != EFalse, + _L("CTestStep::GetStringFromConfig did not complete as expected")); + TCoreEtelRequestStatus dialStatus(call1, &RCall::DialCancel); + CleanupStack::PushL(dialStatus); + call1.Dial(dialStatus, number); + ASSERT_EQUALS(WaitForRequestWithTimeOut(dialStatus, ETimeMedium), KErrNone, + _L("RCall::Dial timed-out")); + ASSERT_EQUALS(dialStatus.Int(), KErrNone, + _L("RCall::Dial returned with an error")); + + // === Check call caps === + + // Check RCall::NotifyCapsChange completes with caps in set of KCapsVoice | KCapsHangUp. + RCall::TCaps wantedCaps2, unwantedCaps2; + wantedCaps2.iFlags = RCall::KCapsVoice | RCall::KCapsHangUp; + unwantedCaps2.iFlags = 0; + const TInt wantedStatus = KErrNone; + iCallControlTestHelper.WaitForCallNotifyCapsChange(call1, + notifyCapsChangeStatus, + callCaps, + wantedCaps2, + unwantedCaps2, + wantedStatus); + + // Check RCall::GetCaps supports KCapsHangUp | KCapsVoice. + wantedCaps = RCall::KCapsHangUp | RCall::KCapsVoice; + ASSERT_EQUALS(call1.GetCaps(callCaps), KErrNone, + _L("RCall::GetCaps returned an Error")); + ASSERT_BITS_SET(callCaps.iFlags, wantedCaps, KNoUnwantedBits, + _L("RCall::GetCaps returned unexpected Caps")); + + + // Check RMobileCall::NotifyMobileCallCapsChange completes with iCallControlCaps in set of + // KCapsVoice | KCapsHold | KCapsHangUp | KCapsTransfer. + // Check RMobileCall::NotifyMobileCallCapsChange completes with iCallEventCaps in set of + // KCapsLocalHold | KCapsLocalTransfer | KCapsRemoteHold | KCapsRemoteTerminate | + // KCapsRemoteConferenceCreate. + RMobileCall::TMobileCallCapsV1 wantedMobileCaps; + wantedMobileCaps.iCallControlCaps = RMobileCall::KCapsVoice | + RMobileCall::KCapsHold | + RMobileCall::KCapsHangUp; + + wantedMobileCaps.iCallEventCaps = RMobileCall::KCapsLocalHold | + RMobileCall::KCapsLocalTransfer | + RMobileCall::KCapsRemoteHold | + RMobileCall::KCapsRemoteTerminate | + RMobileCall::KCapsRemoteConferenceCreate; + + TCmpRMobileCallTMobileCallCaps mobileCapsComp(wantedMobileCaps,mobileCallCaps, *this); + iCallControlTestHelper.WaitForMobileCallNotifyMobileCallCapsChange(call1, + notifyMobileCallCapsChangeStatus, + mobileCapsComp, + wantedStatus); + + // Check RMobileCall::GetMobileCallCaps includes iCallControlCaps in set of + // KCapsVoice |KCapsHold | KCapsHangUp | KCapsTransfer. + // Check RMobileCall::GetMobileCallCaps includes iCallEventCaps in set of + // KCapsLocalHold | KCapsLocalTransfer | KCapsRemoteHold | KCapsRemoteTerminate | + // KCapsRemoteConferenceCreate. + ASSERT_EQUALS(call1.GetMobileCallCaps(capsPckg), KErrNone, + _L("RMobileCall::GetMobileCallCaps returned an error")); + wantedMobileCaps.iCallControlCaps = RMobileCall::KCapsVoice | + RMobileCall::KCapsHold | + RMobileCall::KCapsHangUp; + ASSERT_BITS_SET(mobileCallCaps.iCallControlCaps, wantedMobileCaps.iCallControlCaps,KNoUnwantedBits, + _L("RMobileCall::GetMobileCallCaps returned unexpected iCallControlCaps")); + + wantedMobileCaps.iCallEventCaps = RMobileCall::KCapsLocalHold | + RMobileCall::KCapsLocalTransfer | + RMobileCall::KCapsRemoteHold | + RMobileCall::KCapsRemoteTerminate | + RMobileCall::KCapsRemoteConferenceCreate; + ASSERT_BITS_SET(mobileCallCaps.iCallEventCaps, wantedMobileCaps.iCallEventCaps,KNoUnwantedBits, + _L("RMobileCall::GetMobileCallCaps returned unexpected iCallEventCaps")); + + + // === Check call status === + + // Check RCall::NotifyStatusChange completes with EStatusDialling -> + RCall::TStatus expectedCallStatus = RCall::EStatusDialling; + iCallControlTestHelper.WaitForCallNotifyStatusChange(call1, + notifyStatusChangeStatus, + callStatus, + expectedCallStatus, + wantedStatus); + + // Check RCall::NotifyStatusChange completes with EStatusConnecting -> + expectedCallStatus = RCall::EStatusConnecting; + call1.NotifyStatusChange(notifyStatusChangeStatus,callStatus); + iCallControlTestHelper.WaitForCallNotifyStatusChange(call1, + notifyStatusChangeStatus, + callStatus, + expectedCallStatus, + wantedStatus); + + // Check RCall::NotifyStatusChange completes with EStatusConnected. + expectedCallStatus = RCall::EStatusConnected; + call1.NotifyStatusChange(notifyStatusChangeStatus,callStatus); + iCallControlTestHelper.WaitForCallNotifyStatusChange(call1, + notifyStatusChangeStatus, + callStatus, + expectedCallStatus, + wantedStatus); + + // Check RCall::GetStatus returns EStatusConnected. + ASSERT_EQUALS(call1.GetStatus(callStatus),KErrNone, + _L("RCall::GetStatus returned an error")); + ASSERT_EQUALS(callStatus, RCall::EStatusConnected, + _L("RCall::GetStatus returned an unexpected call status")); + + // Check RMobileCall::NotifyMobileCallStatusChange completes with EStatusDialling -> + RMobileCall::TMobileCallStatus expectedMobileCallStatus = RMobileCall::EStatusDialling; + iCallControlTestHelper.WaitForMobileCallNotifyMobileCallStatusChange(call1, + notifyMobileCallStatusChangeStatus, + mobileCallStatus, + expectedMobileCallStatus, + wantedStatus); + + // Check RMobileCall::NotifyMobileCallStatusChange completes with EStatusConnecting -> + call1.NotifyMobileCallStatusChange(notifyMobileCallStatusChangeStatus, mobileCallStatus); + expectedMobileCallStatus = RMobileCall::EStatusConnecting; + iCallControlTestHelper.WaitForMobileCallNotifyMobileCallStatusChange(call1, + notifyMobileCallStatusChangeStatus, + mobileCallStatus, + expectedMobileCallStatus, + wantedStatus); + + // Check RMobileCall::NotifyMobileCallStatusChange completes with EStatusConnected. + call1.NotifyMobileCallStatusChange(notifyMobileCallStatusChangeStatus, mobileCallStatus); + expectedMobileCallStatus = RMobileCall::EStatusConnected; + iCallControlTestHelper.WaitForMobileCallNotifyMobileCallStatusChange(call1, + notifyMobileCallStatusChangeStatus, + mobileCallStatus, + expectedMobileCallStatus, + wantedStatus); + + // Check RMobileCall::GetMobileCallStatus returns status of EStatusConnected. + ASSERT_EQUALS(call1.GetMobileCallStatus(mobileCallStatus), KErrNone, + _L("RMobileCall::GetMobileStatus returned an error")); + ASSERT_EQUALS(mobileCallStatus, RMobileCall::EStatusConnected, + _L("RMobileCall::GetMobileStatus did not return a status EStatusConnected")); + + + // === Check call info === + + // Check RCall::GetInfo returns valid call name. + // Check RCall::GetInfo returns valid voice line name. + // Check RCall::GetInfo returns call status of EStatusConnected. + // Check RCall::GetInfo returns call duration of > 0. + User::After(KOneSecond*1); + ASSERT_EQUALS(call1.GetInfo(callInfo), KErrNone, + _L("RCall::GetInfo returned an error")); + ASSERT_TRUE(callInfo.iCallName.Length() >0, + _L("RCall::GetInfo returned an invalid name")); + ASSERT_TRUE(callInfo.iLineName.Length() >0, + _L("RCall::GetInfo returned an invalid Line name")); + ASSERT_EQUALS(callInfo.iStatus, RCall::EStatusConnected, + _L("RCall::GetInfo wrong iStatus, should be EStatusConnected")); + ASSERT_TRUE(callInfo.iDuration.Int() > 0, + _L("RCall::GetInfo wrong iDuration, should be >0")); + + // Check RMobileCall::GetMobileCallInfo returns iValid > 0. + // Check RMobileCall::GetMobileCallInfo returns data for attributes marked as valid in iValid. + // Check RMobileCall::GetMobileCallInfo returns valid line name. + ASSERT_EQUALS(call1.GetMobileCallInfo(callInfoPckg), KErrNone, + _L("RMobileCall::GetMobileCallInfo returned an error")); + ASSERT_TRUE(mobileCallInfo.iLineName.Length() >0, + _L("RMobileCall::GetMobileCallInfo returned an invalid line name")); + ASSERT_TRUE(mobileCallInfo.iValid > 0, + _L("RMobileCall::GetMobileCallInfo returned unexpected flags in iValid")); + + iCallControlTestHelper.CheckForValidCallInfo(mobileCallInfo, number); + + + //////////////////////////////////////////////////////////////// + // TEST END + //////////////////////////////////////////////////////////////// + + StartCleanup(); + + // hang up the active call + TCoreEtelRequestStatus hangUpStatus (call1,&RCall::HangUpCancel); + CleanupStack::PushL(hangUpStatus); + call1.HangUp(hangUpStatus); + WaitForRequestWithTimeOut(hangUpStatus, ETimeMedium); + + // Pop + // notifyCapsChangeStatus + // notifyMobileCallCapsChangeStatus + // notifyStatusChangeStatus + // notifyMobileCallStatusChangeStatus + // dialStatus + // hangUpStatus + + CleanupStack::PopAndDestroy(6,¬ifyCapsChangeStatus); + + return TestStepResult(); + } + +TPtrC CCTSYIntegrationTestCallControl0003::GetTestStepName() +/** + * @return The test step name. + */ + { + return _L("CCTSYIntegrationTestCallControl0003"); + } + + + +CCTSYIntegrationTestCallControl0004::CCTSYIntegrationTestCallControl0004(CEtelSessionMgr& aEtelSessionMgr) + : CCTSYIntegrationTestCallControlBase(aEtelSessionMgr) +/** + * Constructor. + */ + { + SetTestStepName(CCTSYIntegrationTestCallControl0004::GetTestStepName()); + } + +CCTSYIntegrationTestCallControl0004::~CCTSYIntegrationTestCallControl0004() +/** + * Destructor. + */ + { + } + +TVerdict CCTSYIntegrationTestCallControl0004::doTestStepL() +/** + * @SYMTestCaseID BA-CTSY-INT-CCON-0004 + * @SYMFssID BA/CTSY/CCON-0004 + * @SYMTestCaseDesc Dial a call which remote party rejects. + * @SYMTestPriority High + * @SYMTestActions RLine::NotifyStatusChange, RMobileLine::NotifyMobileLineStatusChange, RMobileCall::GetMobileCallStatus, RCall::NotifyStatusChange, RMobileCall::NotifyMobileCallStatusChange, RLine::GetStatus, RMobileLine::GetMobileLineStatus, RCall::GetStatus + * @SYMTestExpectedResults Pass - Dial completes with an error. + * @SYMTestType CIT + * @SYMTestCaseDependencies live/rps + * + * Reason for test: Verify call and line status after call is rejected. + * + * @return - TVerdict code + */ + { + + //////////////////////////////////////////////////////////////// + // SET UP + //////////////////////////////////////////////////////////////// + RMobilePhone& phone = iEtelSessionMgr.GetPhoneL(KMainServer,KMainPhone); + + // Check phone supports KCapsVoice + // Get Voice line 1 + RMobileLine& voiceLine = iEtelSessionMgr.GetLineL(KMainServer, KMainPhone, KVoiceLine); + + // Get call 1 + RMobileCall& call1 = iEtelSessionMgr.GetCallL(KMainServer, KMainPhone, KVoiceLine, KCall1); + + RLine::TCaps lineCaps; + CHECK_EQUALS_L(voiceLine.GetCaps(lineCaps), KErrNone, + _L("RMobileLine::GetCaps returned an error")); + CHECK_BITS_SET_L(lineCaps.iFlags, RLine::KCapsVoice, KNoUnwantedBits, + _L("RLine::GetCaps returned wrong caps")); + + // Call TNetworkTsyTestHelper::WaitForRegisteredOnHomeNetworkL + CHECK_EQUALS_L(iNetworkTestHelper.WaitForRegisteredOnHomeNetworkL(phone), KErrNone, _L("TNetworkTsyTestHelper::WaitForRegisteredOnHomeNetworkL returned with an error")); + + //////////////////////////////////////////////////////////////// + // SET UP END + //////////////////////////////////////////////////////////////// + + StartTest(); + + //////////////////////////////////////////////////////////////// + // TEST START + //////////////////////////////////////////////////////////////// + + // post a notifier for RLine::NotifyStatusChange + RCall::TStatus lineStatus; + TCoreEtelRequestStatus notifyStatusChangeStatus (voiceLine,&RLine::NotifyStatusChangeCancel); + CleanupStack::PushL(notifyStatusChangeStatus); + voiceLine.NotifyStatusChange(notifyStatusChangeStatus,lineStatus); + + // post a notifier for RMobileLine::NotifyMobileLineStatusChange + RMobileCall::TMobileCallStatus mobileLineStatus; + TExtEtelRequestStatus notifyMobileLineChangeStatus(voiceLine, EMobileLineNotifyMobileLineStatusChange); + CleanupStack::PushL(notifyMobileLineChangeStatus); + voiceLine.NotifyMobileLineStatusChange(notifyMobileLineChangeStatus, mobileLineStatus); + + // post notifier for RCall::NotifyStatusChange + RCall::TStatus callStatus; + TCoreEtelRequestStatus notifyCallStatusChangeStatus (call1,&RCall::NotifyStatusChangeCancel); + CleanupStack::PushL(notifyCallStatusChangeStatus); + call1.NotifyStatusChange(notifyCallStatusChangeStatus,callStatus); + + // post a notifier for RMobileCall::NotifyMobileCallStatusChange + RMobileCall::TMobileCallStatus mobileCallStatus; + TExtEtelRequestStatus notifyMobileCallChangeStatus(call1, EMobileCallNotifyMobileCallStatusChange); + CleanupStack::PushL(notifyMobileCallChangeStatus); + call1.NotifyMobileCallStatusChange(notifyMobileCallChangeStatus, mobileCallStatus); + + // Dial RPS which will reject the call. + TPtrC number; + TCoreEtelRequestStatus dialStatus(call1, &RCall::DialCancel); + CleanupStack::PushL(dialStatus); + RPSRejectNextCallL(EVoiceLine); + GetRPSNumber(EVoiceLine, number); // Voicemail should be deactivated for this number + call1.Dial(dialStatus, number); + ASSERT_EQUALS(WaitForRequestWithTimeOut(dialStatus, ETimeVeryLong), KErrNone, + _L("RCall::Dial timed-out")); + ASSERT_TRUE(dialStatus.Int() != KErrNone, + _L("RCall::Dial did not return an error")); + + // === Check line status === + + // Check RLine::NotifyStatusChange completes with EStatusDialling -> EStatusHangingUp -> EStatusIdle + RCall::TStatus expectedLineStatus = RCall::EStatusDialling; + TInt expectedStatus = KErrNone; + iCallControlTestHelper.WaitForLineNotifyStatusChange(voiceLine, + notifyStatusChangeStatus, + lineStatus, + expectedLineStatus, + expectedStatus); + + + voiceLine.NotifyStatusChange(notifyStatusChangeStatus,lineStatus); + expectedLineStatus = RCall::EStatusHangingUp; + ERR_PRINTF2(_L("$CTSYKnownFailure: defect id = %d"), 10065); + iCallControlTestHelper.WaitForLineNotifyStatusChange(voiceLine, + notifyStatusChangeStatus, + lineStatus, + expectedLineStatus, + expectedStatus); + + voiceLine.NotifyStatusChange(notifyStatusChangeStatus,lineStatus); + expectedLineStatus = RCall::EStatusIdle; + iCallControlTestHelper.WaitForLineNotifyStatusChange(voiceLine, + notifyStatusChangeStatus, + lineStatus, + expectedLineStatus, + expectedStatus); + + // Check RLine::GetStatus returns EStatusIdle + ASSERT_EQUALS(voiceLine.GetStatus(lineStatus), KErrNone, + _L("RLine::GetStatus returned an error")); + ASSERT_EQUALS(lineStatus, RCall::EStatusIdle, + _L("RLine::GetStatus did not return EStatusIdle as expected")); + + + // Check RMobileLine::NotifyMobileLineStatusChange completes with with EStatusDisconnecting -> EStatusIdle + RMobileCall::TMobileCallStatus expectedMobileLineStatus = RMobileCall::EStatusDisconnecting; + ERR_PRINTF2(_L("$CTSYKnownFailure: defect id = %d"), 10065); + voiceLine.NotifyMobileLineStatusChange(notifyMobileLineChangeStatus, mobileLineStatus); + iCallControlTestHelper.WaitForMobileLineNotifyMobileLineStatusChange(voiceLine, + notifyMobileLineChangeStatus, + mobileLineStatus, + expectedMobileLineStatus, + expectedStatus); + + // Check RMobileLine::NotifyMobileLineStatusChange completes with with EStatusIdle + expectedMobileLineStatus = RMobileCall::EStatusIdle; + voiceLine.NotifyMobileLineStatusChange(notifyMobileLineChangeStatus, mobileLineStatus); + iCallControlTestHelper.WaitForMobileLineNotifyMobileLineStatusChange(voiceLine, + notifyMobileLineChangeStatus, + mobileLineStatus, + expectedMobileLineStatus, + expectedStatus); + // === Check call status === + + // Check RCall::NotifyStatusChange completes with EStatusHangingUp -> EStatusIdle. + RCall::TStatus expectedCallStatus = RCall::EStatusHangingUp; + iCallControlTestHelper.WaitForCallNotifyStatusChange(call1, + notifyCallStatusChangeStatus, + callStatus, + expectedCallStatus, + expectedStatus); + + expectedCallStatus = RCall::EStatusIdle; + call1.NotifyStatusChange(notifyCallStatusChangeStatus,callStatus); + iCallControlTestHelper.WaitForCallNotifyStatusChange(call1, + notifyCallStatusChangeStatus, + callStatus, + expectedCallStatus, + expectedStatus); + // Check RCall::GetStatus returns EStatusIdle. + ASSERT_EQUALS(call1.GetStatus(callStatus), KErrNone, + _L("RCall::GetStatus returned an Error")); + ASSERT_EQUALS(callStatus, RCall::EStatusIdle, + _L("RCall::GetStatus did not return EStatusIdle")); + + // Check RMobileCall::NotifyMobileCallStatusChange completes with EStatusDisconnecting -> EStatusIdle. + RMobileCall::TMobileCallStatus expectedMobileCallStatus = RMobileCall::EStatusDisconnecting; + iCallControlTestHelper.WaitForMobileCallNotifyMobileCallStatusChange(call1, + notifyMobileCallChangeStatus, + mobileCallStatus, + expectedMobileCallStatus, + expectedStatus); + + expectedMobileCallStatus = RMobileCall::EStatusIdle; + call1.NotifyMobileCallStatusChange(notifyMobileCallChangeStatus, mobileCallStatus); + iCallControlTestHelper.WaitForMobileCallNotifyMobileCallStatusChange(call1, + notifyMobileCallChangeStatus, + mobileCallStatus, + expectedMobileCallStatus, + expectedStatus); + + + // Check RMobileCall::GetMobileCallStatus returns status of EStatusIdle. + ASSERT_EQUALS(call1.GetMobileCallStatus(mobileCallStatus), KErrNone, + _L("RMobileCall::GetMobileCallStatus returned an error")); + ASSERT_EQUALS(mobileCallStatus, RMobileCall::EStatusIdle, + _L("RMobileCall::GetMobileCallStatus did not return EStatusIdle")); + + //////////////////////////////////////////////////////////////// + // TEST END + //////////////////////////////////////////////////////////////// + + StartCleanup(); + + // hang up the active call + TCoreEtelRequestStatus hangUpStatus (call1,&RCall::HangUpCancel); + CleanupStack::PushL(hangUpStatus); + call1.HangUp(hangUpStatus); + WaitForRequestWithTimeOut(hangUpStatus, ETimeMedium); + + // Pop + // notifyStatusChangeStatus + // notifyMobileLineChangeStatus + // notifyCallStatusChangeStatus + // notifyMobileCallChangeStatus + // dialStatus + // hangUpStatus + CleanupStack::PopAndDestroy(6,¬ifyStatusChangeStatus); + + return TestStepResult(); + } + +TPtrC CCTSYIntegrationTestCallControl0004::GetTestStepName() +/** + * @return The test step name. + */ + { + return _L("CCTSYIntegrationTestCallControl0004"); + } + + + +CCTSYIntegrationTestCallControl0005::CCTSYIntegrationTestCallControl0005(CEtelSessionMgr& aEtelSessionMgr) + : CCTSYIntegrationTestCallControlBase(aEtelSessionMgr) +/** + * Constructor. + */ + { + SetTestStepName(CCTSYIntegrationTestCallControl0005::GetTestStepName()); + } + +CCTSYIntegrationTestCallControl0005::~CCTSYIntegrationTestCallControl0005() +/** + * Destructor. + */ + { + } + +TVerdict CCTSYIntegrationTestCallControl0005::doTestStepL() +/** + * @SYMTestCaseID BA-CTSY-INT-CCON-0005 + * @SYMFssID BA/CTSY/CCON-0005 + * @SYMTestCaseDesc Dial. Remote end doesn't pick up + * @SYMTestPriority High + * @SYMTestActions This requires a mobile SIM with voicemail deactivated. This test will only time out after 100seconds. + * @SYMTestExpectedResults Pass - Error returned. + * @SYMTestType CIT + * @SYMTestCaseDependencies live/manual + * + * Reason for test: Verify error is returned on attempt to dial. + * + * @return - TVerdict code + */ + { + + //////////////////////////////////////////////////////////////// + // SET UP + //////////////////////////////////////////////////////////////// + RMobilePhone& phone = iEtelSessionMgr.GetPhoneL(KMainServer,KMainPhone); + + // Get Voice line 1 + RMobileLine& voiceLine = iEtelSessionMgr.GetLineL(KMainServer, KMainPhone, KVoiceLine); + + // Get call 1 + RMobileCall& call1 = iEtelSessionMgr.GetCallL(KMainServer, KMainPhone, KVoiceLine, KCall1); + + // Check phone supports KCapsVoice. + RLine::TCaps lineCaps; + CHECK_EQUALS_L(voiceLine.GetCaps(lineCaps), KErrNone, + _L("RMobileLine::GetCaps returned an error")); + CHECK_BITS_SET_L(lineCaps.iFlags, RLine::KCapsVoice, KNoUnwantedBits, + _L("RLine::GetCaps returned wrong caps")); + + // Call TNetworkTsyTestHelper::WaitForRegisteredOnHomeNetworkL + CHECK_EQUALS_L(iNetworkTestHelper.WaitForRegisteredOnHomeNetworkL(phone), KErrNone, _L("TNetworkTsyTestHelper::WaitForRegisteredOnHomeNetworkL returned with an error")); + + //////////////////////////////////////////////////////////////// + // SET UP END + //////////////////////////////////////////////////////////////// + + StartTest(); + + //////////////////////////////////////////////////////////////// + // TEST START + //////////////////////////////////////////////////////////////// + + + // Dial a number which will not answer. + TPtrC number; + GetStringFromConfig(KIniVoiceNumSection,KIniVoiceNumDoesNotConnect,number); + TCoreEtelRequestStatus dialStatus(call1, &RCall::DialCancel); + CleanupStack::PushL(dialStatus); + call1.Dial(dialStatus, number); + ASSERT_EQUALS(WaitForRequestWithTimeOut(dialStatus, ETimeVeryLong), KErrNone, + _L("RCall::Dial timed-out")); + // Check Dial request completes with an error + ASSERT_TRUE(dialStatus.Int() != KErrNone, + _L("RCall::Dial did not return KErrNone")); + + //////////////////////////////////////////////////////////////// + // TEST END + //////////////////////////////////////////////////////////////// + + StartCleanup(); + + // hang up the active call + TCoreEtelRequestStatus hangUpStatus (call1,&RCall::HangUpCancel); + CleanupStack::PushL(hangUpStatus); + call1.HangUp(hangUpStatus); + WaitForRequestWithTimeOut(hangUpStatus, ETimeMedium); + + //Pop + // dialStatus + // hangUpStatus + CleanupStack::PopAndDestroy(2,&dialStatus); + + return TestStepResult(); + } + +TPtrC CCTSYIntegrationTestCallControl0005::GetTestStepName() +/** + * @return The test step name. + */ + { + return _L("CCTSYIntegrationTestCallControl0005"); + } + + + +CCTSYIntegrationTestCallControl0006::CCTSYIntegrationTestCallControl0006(CEtelSessionMgr& aEtelSessionMgr) + : CCTSYIntegrationTestCallControlBase(aEtelSessionMgr) +/** + * Constructor. + */ + { + SetTestStepName(CCTSYIntegrationTestCallControl0006::GetTestStepName()); + } + +CCTSYIntegrationTestCallControl0006::~CCTSYIntegrationTestCallControl0006() +/** + * Destructor. + */ + { + } + +TVerdict CCTSYIntegrationTestCallControl0006::doTestStepL() +/** + * @SYMTestCaseID BA-CTSY-INT-CCON-0006 + * @SYMFssID BA/CTSY/CCON-0006 + * @SYMTestCaseDesc Dial when no network is present + * @SYMTestPriority High + * @SYMTestActions RCall::Dial + * @SYMTestExpectedResults Pass - KErrGsmOfflineOpNotAllowed returned. + * @SYMTestType CIT + * @SYMTestCaseDependencies live/manual + * + * Reason for test: Verify error is returned on attempt to dial. + * + * @return - TVerdict code + */ + { + + //////////////////////////////////////////////////////////////// + // SET UP + //////////////////////////////////////////////////////////////// + RMobilePhone& phone = iEtelSessionMgr.GetPhoneL(KMainServer,KMainPhone); + + // Check phone supports KCapsVoice. + // Get Voice line 1 + RMobileLine& voiceLine = iEtelSessionMgr.GetLineL(KMainServer, KMainPhone, KVoiceLine); + // Get call 1 + RMobileCall& call1 = iEtelSessionMgr.GetCallL(KMainServer, KMainPhone, KVoiceLine, KCall1); + + RLine::TCaps lineCaps; + CHECK_EQUALS_L(voiceLine.GetCaps(lineCaps), KErrNone, + _L("RMobileLine::GetCaps returned an error")); + CHECK_BITS_SET_L(lineCaps.iFlags, RLine::KCapsVoice, KNoUnwantedBits, + _L("RLine::GetCaps returned wrong caps")); + + //////////////////////////////////////////////////////////////// + // SET UP END + //////////////////////////////////////////////////////////////// + + StartTest(); + + //////////////////////////////////////////////////////////////// + // TEST START + //////////////////////////////////////////////////////////////// + + // Remove aerial from phone. + + // Check RMobilePhone::GetNetworkRegistrationStatus returns one of ENotRegisteredNoService | ENotRegisteredSearching + RMobilePhone::TMobilePhoneRegistrationStatus registrationStatus; + TExtEtelRequestStatus getNWRegistraionStatusStatus(phone,EMobilePhoneGetNetworkRegistrationStatus); + CleanupStack::PushL(getNWRegistraionStatusStatus); + phone.GetNetworkRegistrationStatus(getNWRegistraionStatusStatus,registrationStatus); + ASSERT_EQUALS(WaitForRequestWithTimeOut(getNWRegistraionStatusStatus, ETimeMedium), KErrNone, + _L("RMobilePhone::GetNetworkRegistrationStatus timed out")); + ASSERT_EQUALS(getNWRegistraionStatusStatus.Int(), KErrNone, + _L("RMobilePhone::GetNetworkRegistrationStatus returned an error")); + ASSERT_TRUE(((registrationStatus == RMobilePhone::ENotRegisteredNoService) || (registrationStatus ==RMobilePhone::ENotRegisteredSearching)), + _L("RMobilePhone::GetNetworkRegistrationStatus did not set the registration status to ENotRegisteredNoService | ENotRegisteredSearching")); + + // Dial a number. + TCoreEtelRequestStatus dialStatus(call1, &RCall::DialCancel); + CleanupStack::PushL(dialStatus); + TPtrC number; + ASSERT_TRUE(GetStringFromConfig(KIniVoiceNumSection, KIniVoiceNumber1, number) != EFalse, + _L("GetStringFromConfig did not complete as expected")); + call1.Dial(dialStatus, number); + ASSERT_EQUALS(WaitForRequestWithTimeOut(dialStatus, ETimeLong), KErrNone, + _L("RCall::Dial timed-out")); + + // Check KErrGsmOfflineOpNotAllowed or KErrGsmNoService is returned. + ASSERT_TRUE( ((dialStatus.Int() == KErrGsmOfflineOpNotAllowed) || (dialStatus.Int() == KErrGsmNoService) ), + _L("RCall::Dial did not return KErrGsmOfflineOpNotAllowed nor KErrGsmNoService")); + + //////////////////////////////////////////////////////////////// + // TEST END + //////////////////////////////////////////////////////////////// + + StartCleanup(); + + // hang up the active call + TCoreEtelRequestStatus hangUpStatus (call1,&RCall::HangUpCancel); + CleanupStack::PushL(hangUpStatus); + call1.HangUp(hangUpStatus); + WaitForRequestWithTimeOut(hangUpStatus, ETimeMedium); + + // Pop + // getNWRegistraionStatusStatus + // dialStatus + // hangUpStatus + CleanupStack::PopAndDestroy(3, &getNWRegistraionStatusStatus); + + return TestStepResult(); + } + +TPtrC CCTSYIntegrationTestCallControl0006::GetTestStepName() +/** + * @return The test step name. + */ + { + return _L("CCTSYIntegrationTestCallControl0006"); + } + + + +CCTSYIntegrationTestCallControl0007::CCTSYIntegrationTestCallControl0007(CEtelSessionMgr& aEtelSessionMgr) + : CCTSYIntegrationTestCallControlBase(aEtelSessionMgr) +/** + * Constructor. + */ + { + SetTestStepName(CCTSYIntegrationTestCallControl0007::GetTestStepName()); + } + +CCTSYIntegrationTestCallControl0007::~CCTSYIntegrationTestCallControl0007() +/** + * Destructor. + */ + { + } + +TVerdict CCTSYIntegrationTestCallControl0007::doTestStepL() +/** + * @SYMTestCaseID BA-CTSY-INT-CCON-0007 + * @SYMFssID BA/CTSY/CCON-0007 + * @SYMTestCaseDesc Make a voice call to remote party that is engaged. + * @SYMTestPriority High + * @SYMTestActions RMobileLine::NotifyMobileLineStatusChange, RMobileCall::GetMobileCallStatus, RCall::NotifyStatusChange, RMobileCall::NotifyMobileCallStatusChange, RLine::GetStatus, RMobileLine::GetMobileLineStatus, RCall::GetStatus, RCall::Dial + * @SYMTestExpectedResults Pass - Dialling to a busy number fails. + * @SYMTestType CIT + * @SYMTestCaseDependencies live/automatic + * + * Reason for test: Verify dialling fails and line returns to idle. + * + * @return - TVerdict code + */ + { + + //////////////////////////////////////////////////////////////// + // SET UP + //////////////////////////////////////////////////////////////// + RMobilePhone& phone = iEtelSessionMgr.GetPhoneL(KMainServer,KMainPhone); + + // Get Voice line 1 + RMobileLine& voiceLine = iEtelSessionMgr.GetLineL(KMainServer, KMainPhone, KVoiceLine); + // Get call 1 + RMobileCall& call1 = iEtelSessionMgr.GetCallL(KMainServer, KMainPhone, KVoiceLine, KCall1); + + // Call TNetworkTsyTestHelper::WaitForRegisteredOnHomeNetworkL + CHECK_EQUALS_L(iNetworkTestHelper.WaitForRegisteredOnHomeNetworkL(phone), KErrNone, _L("TNetworkTsyTestHelper::WaitForRegisteredOnHomeNetworkL returned with an error")); + + //////////////////////////////////////////////////////////////// + // SET UP END + //////////////////////////////////////////////////////////////// + + StartTest(); + + //////////////////////////////////////////////////////////////// + // TEST START + //////////////////////////////////////////////////////////////// + + // post notifier for RCall::NotifyStatusChange + RCall::TStatus callStatus; + TCoreEtelRequestStatus notifyCallStatusChangeStatus (call1,&RCall::NotifyStatusChangeCancel); + CleanupStack::PushL(notifyCallStatusChangeStatus); + call1.NotifyStatusChange(notifyCallStatusChangeStatus,callStatus); + + // post a notifier for RMobileCall::NotifyMobileCallStatusChange + RMobileCall::TMobileCallStatus mobileCallStatus; + TExtEtelRequestStatus notifyMobileCallChangeStatus(call1, EMobileCallNotifyMobileCallStatusChange); + CleanupStack::PushL(notifyMobileCallChangeStatus); + call1.NotifyMobileCallStatusChange(notifyMobileCallChangeStatus, mobileCallStatus); + + // post a notifier for RLine::NotifyStatusChange + RCall::TStatus lineStatus; + TCoreEtelRequestStatus notifyStatusChangeStatus (voiceLine,&RLine::NotifyStatusChangeCancel); + CleanupStack::PushL(notifyStatusChangeStatus); + voiceLine.NotifyStatusChange(notifyStatusChangeStatus,lineStatus); + + // post a notifier for RMobileLine::NotifyMobileLineStatusChange + RMobileCall::TMobileCallStatus mobileLineStatus; + TExtEtelRequestStatus notifyMobileLineChangeStatus(voiceLine, EMobileLineNotifyMobileLineStatusChange); + CleanupStack::PushL(notifyMobileLineChangeStatus); + voiceLine.NotifyMobileLineStatusChange(notifyMobileLineChangeStatus, mobileLineStatus); + + // Set RPS to simulate an engaged remote party. + TPtrC number; + ASSERT_TRUE(GetStringFromConfig(KIniVoiceNumSection, KIniVoiceNumber1, number) != EFalse, + _L("GetStringFromConfig did not complete as expected")); + RPSDialNumberL(number,EVoiceLine); + + // Dial RPS. + TPtrC engagedNumber; + GetRPSNumber(EVoiceLine,engagedNumber); //this will return KIniVoiceNumber2 if not using RPS, + //This should be the phone which is engaged, if testing manually. + TCoreEtelRequestStatus dialStatus(call1, &RCall::DialCancel); + CleanupStack::PushL(dialStatus); + call1.Dial(dialStatus, engagedNumber); + + // === Check call status === + + // Check RCall::NotifyStatusChange completes with EStatusDialling. + RCall::TStatus expectedCallStatus = RCall::EStatusDialling; + const TInt expectedStatus = KErrNone; + iCallControlTestHelper.WaitForCallNotifyStatusChange(call1, + notifyCallStatusChangeStatus, + callStatus, + expectedCallStatus, + expectedStatus); + + // Check RMobileCall::NotifyMobileCallStatusChange completes with EStatusDialling. + RMobileCall::TMobileCallStatus expectedMobileCallStatus = RMobileCall::EStatusDialling; + iCallControlTestHelper.WaitForMobileCallNotifyMobileCallStatusChange(call1, + notifyMobileCallChangeStatus, + mobileCallStatus, + expectedMobileCallStatus, + expectedStatus); + + + // === Check line status === + + // Check RLine::NotifyStatusChange completes with EStatusDialling. + RCall::TStatus expectedLineStatus = RCall::EStatusDialling; + iCallControlTestHelper.WaitForLineNotifyStatusChange(voiceLine, + notifyStatusChangeStatus, + lineStatus, + expectedLineStatus, + expectedStatus); + + // Check RLine::GetStatus returns EStatusDialling + ASSERT_EQUALS(voiceLine.GetStatus(lineStatus), KErrNone, + _L("RLine::GetStatus returned an error")); + ASSERT_EQUALS(lineStatus, RCall::EStatusDialling, + _L("RLine::GetStatus did not return EStatusDialling as expected")); + + // Check RMobileLine::NotifyMobileLineStatusChange completes with with EStatusDialling . + expectedMobileCallStatus = RMobileCall::EStatusDialling; + iCallControlTestHelper.WaitForMobileLineNotifyMobileLineStatusChange(voiceLine, + notifyMobileLineChangeStatus, + mobileLineStatus, + expectedMobileCallStatus, + expectedStatus); + + // Check RMobileLine::GetMobileLineStatus returns EStatusDialling + ASSERT_EQUALS(voiceLine.GetMobileLineStatus(mobileLineStatus), KErrNone, + _L("RMobileLine::GetMobileLineStatus returned an error")); + ASSERT_EQUALS(mobileLineStatus, RMobileCall::EStatusDialling, + _L("RMobileLine::GetMobileLineStatus did not set the status to EStatusDialling")); + + // Check dial fails because line is engaged. + ASSERT_EQUALS(WaitForRequestWithTimeOut(dialStatus, ETimeLong), KErrNone, + _L("RCall::Dial timed-out")); + ASSERT_TRUE(dialStatus.Int() != KErrNone, + _L("RCall::Dial Should have failed because engaged")); + + // === Check line goes back to idle === + // post notifier for RLine::NotifyStatusChange + voiceLine.NotifyStatusChange(notifyStatusChangeStatus,lineStatus); + call1.NotifyStatusChange(notifyCallStatusChangeStatus,callStatus); + voiceLine.NotifyMobileLineStatusChange(notifyMobileCallChangeStatus, mobileCallStatus); + + // Check RLine::NotifyStatusChange completes with RCall::EStatusIdle + expectedLineStatus = RCall::EStatusIdle; + ERR_PRINTF2(_L("$CTSYKnownFailure: defect id = %d"), 10065); + iCallControlTestHelper.WaitForLineNotifyStatusChange(voiceLine, + notifyStatusChangeStatus, + lineStatus, + expectedLineStatus, + expectedStatus); + + // Check RLine::GetStatus returns RCall::EStatusIdle + ASSERT_EQUALS(voiceLine.GetStatus(lineStatus), KErrNone, + _L("RLine::GetStatus returned an error")); + ASSERT_EQUALS(lineStatus, RCall::EStatusIdle, + _L("RLine::GetStatus did not return EStatusIdle as expected")); + + // === Check call status goes back to idle === + + // Check RCall::NotifyStatusChange completes with EStatusIdle. + expectedCallStatus = RCall::EStatusIdle; + iCallControlTestHelper.WaitForCallNotifyStatusChange(call1, + notifyCallStatusChangeStatus, + callStatus, + expectedCallStatus, + expectedStatus); + // Check RCall::GetStatus returns EStatusIdle. + ASSERT_EQUALS(call1.GetStatus(callStatus), KErrNone, + _L("RCall::GetStatus returned an error")); + ASSERT_EQUALS(callStatus, RCall::EStatusIdle, + _L("RCall::GetStatus did not return EStatusIdle")); + + // Check RMobileCall::NotifyMobileCallStatusChange completes with EStatusIdle. + expectedMobileCallStatus = RMobileCall::EStatusIdle; + ERR_PRINTF2(_L("$CTSYKnownFailure: defect id = %d"), 10066); + iCallControlTestHelper.WaitForMobileCallNotifyMobileCallStatusChange(call1, + notifyMobileCallChangeStatus, + mobileCallStatus, + expectedMobileCallStatus, + expectedStatus); + + // Check RMobileCall::GetMobileCallStatus returns status of EStatusIdle. + ASSERT_EQUALS(call1.GetMobileCallStatus(mobileCallStatus), KErrNone, + _L("RMobileCall::GetMobileCallStatus returned an error")); + ASSERT_EQUALS(mobileCallStatus, RMobileCall::EStatusIdle, + _L("RMobileCall::GetMobileCallStatus did not return EStatusIdle")); + + + //////////////////////////////////////////////////////////////// + // TEST END + //////////////////////////////////////////////////////////////// + + StartCleanup(); + + // tell RPS to hang up after 0 seconds + RPSHangupL(EVoiceLine,0); + + // Pop + // notifyCallStatusChangeStatus + // notifyMobileCallChangeStatus + // notifyStatusChangeStatus + // notifyMobileLineChangeStatus + // dialStatus + CleanupStack::PopAndDestroy(5, ¬ifyCallStatusChangeStatus); + + return TestStepResult(); + } + +TPtrC CCTSYIntegrationTestCallControl0007::GetTestStepName() +/** + * @return The test step name. + */ + { + return _L("CCTSYIntegrationTestCallControl0007"); + } + + + +CCTSYIntegrationTestCallControl0008::CCTSYIntegrationTestCallControl0008(CEtelSessionMgr& aEtelSessionMgr) + : CCTSYIntegrationTestCallControlBase(aEtelSessionMgr) +/** + * Constructor. + */ + { + SetTestStepName(CCTSYIntegrationTestCallControl0008::GetTestStepName()); + } + +CCTSYIntegrationTestCallControl0008::~CCTSYIntegrationTestCallControl0008() +/** + * Destructor. + */ + { + } + +TVerdict CCTSYIntegrationTestCallControl0008::doTestStepL() +/** + * @SYMTestCaseID BA-CTSY-INT-CCON-0008 + * @SYMFssID BA/CTSY/CCON-0008 + * @SYMTestCaseDesc Make a call to an international number + * @SYMTestPriority High + * @SYMTestActions RLine::NotifyStatusChange, RLine::GetStatus, RMobileLine::NotifyMobileLineStatusChange, RMobileLine::GetMobileLineStatus, RCall::NotifyStatusChange, RCall::GetStatus, RMobileCall::NotifyMobileCallStatusChange, RMobileCall::GetMobileCallStatus, RCall::HangUp, RCall::GetInfo, RMobileCall::GetMobileCallInfo + * @SYMTestExpectedResults Pass - Can dial international numbers + * @SYMTestType CIT + * @SYMTestCaseDependencies live/automatic + * + * Reason for test: Verify international number can be dialled and line and call statuses are correct. + * + * @return - TVerdict code + */ + { + + //////////////////////////////////////////////////////////////// + // SET UP + //////////////////////////////////////////////////////////////// + + + // Get Voice line 1 + RMobileLine& voiceLine = iEtelSessionMgr.GetLineL(KMainServer, KMainPhone, KVoiceLine); + // Get call 1 + RMobileCall& call1 = iEtelSessionMgr.GetCallL(KMainServer, KMainPhone, KVoiceLine, KCall1); + + // Call TNetworkTsyTestHelper::WaitForRegisteredOnHomeNetworkL + RMobilePhone& phone = iEtelSessionMgr.GetPhoneL(KMainServer,KMainPhone); + CHECK_EQUALS_L(iNetworkTestHelper.WaitForRegisteredOnHomeNetworkL(phone), KErrNone, + _L("TNetworkTsyTestHelper::WaitForRegisteredOnHomeNetworkL returned with an error")); + + //////////////////////////////////////////////////////////////// + // SET UP END + //////////////////////////////////////////////////////////////// + + StartTest(); + + //////////////////////////////////////////////////////////////// + // TEST START + //////////////////////////////////////////////////////////////// + + + // === Check call status === + + // Check RCall::GetStatus returns EStatusIdle or EStatusUnknown. + RCall::TStatus callStatus; + ASSERT_EQUALS(call1.GetStatus(callStatus), KErrNone, + _L("RCall::GetStatus returned an error")); + ASSERT_TRUE(callStatus == RCall::EStatusIdle || + callStatus == RCall::EStatusUnknown, + _L("RCall::GetStatus did not set call status EStatusIdle or EStatusUnknown as expected")); + + // Check RMobileCall::GetMobileCallStatus returns status of EStatusIdle or EStatusUnknown. + RMobileCall::TMobileCallStatus mobileCallStatus; + ASSERT_EQUALS(call1.GetMobileCallStatus(mobileCallStatus), KErrNone, + _L("RMobileCall::GetMobileCallStatus returned an error")); + ASSERT_TRUE(mobileCallStatus == RMobileCall::EStatusUnknown || + mobileCallStatus == RMobileCall::EStatusIdle, + _L("RMobileCall::GetMobileCallStatus did not set call status EStatusIdle or EStatusUnknown as expected")); + + // === Check line status === + + // Check RLine::GetStatus returns EStatusIdle or EStatusUnknown. + ASSERT_EQUALS(voiceLine.GetStatus(callStatus), KErrNone, + _L("RLine::GetStatus returned an error")); + ASSERT_TRUE(callStatus == RCall::EStatusUnknown || + callStatus == RCall::EStatusIdle, + _L("RLine::GetStatus did not set call status to EStatusIdle or EStatusUnknown as expected")); + + // Check RMobileLine::GetMobileLineStatus returns EStatusIdle or EStatusUnknown. + ASSERT_EQUALS(voiceLine.GetMobileLineStatus(mobileCallStatus), KErrNone, + _L("RMobileLine::GetMobileLineStatus returned an error")); + ASSERT_TRUE(mobileCallStatus == RMobileCall::EStatusUnknown || + mobileCallStatus == RMobileCall::EStatusIdle, + _L("RMobileLine::GetMobileLineStatus did not set status to EStatusIdle or EStatusUnknown")); + + // post notifier for RCall::NotifyStatusChange + TCoreEtelRequestStatus notifyCallStatusChangeStatus (call1,&RCall::NotifyStatusChangeCancel); + CleanupStack::PushL(notifyCallStatusChangeStatus); + call1.NotifyStatusChange(notifyCallStatusChangeStatus,callStatus); + + // post a notifier for RMobileCall::NotifyMobileCallStatusChange + TExtEtelRequestStatus notifyMobileCallChangeStatus(call1, EMobileCallNotifyMobileCallStatusChange); + CleanupStack::PushL(notifyMobileCallChangeStatus); + call1.NotifyMobileCallStatusChange(notifyMobileCallChangeStatus, mobileCallStatus); + + // post a notifier for RLine::NotifyStatusChange + TCoreEtelRequestStatus notifyStatusChangeStatus (voiceLine,&RLine::NotifyStatusChangeCancel); + CleanupStack::PushL(notifyStatusChangeStatus); + RCall::TStatus lineStatus; + voiceLine.NotifyStatusChange(notifyStatusChangeStatus,lineStatus); + + // post a notifier for RMobileLine::NotifyMobileLineStatusChange + TExtEtelRequestStatus notifyMobileLineChangeStatus(voiceLine, EMobileLineNotifyMobileLineStatusChange); + CleanupStack::PushL(notifyMobileLineChangeStatus); + RMobileCall::TMobileCallStatus mobileLineStatus; + voiceLine.NotifyMobileLineStatusChange(notifyMobileLineChangeStatus, mobileLineStatus); + + + // Dial a number with a + prefix where remote party answers. + TPtrC number; + GetStringFromConfig(KIniVoiceNumSection, KIniVoiceNumber2, number); + TCoreEtelRequestStatus dialStatus(call1, &RCall::DialCancel); + CleanupStack::PushL(dialStatus); + call1.Dial(dialStatus, number); + ASSERT_EQUALS(WaitForRequestWithTimeOut(dialStatus, ETimeMedium), KErrNone, + _L("RCall::Dial timed-out")); + ASSERT_EQUALS(dialStatus.Int(), KErrNone, + _L("RCall::Dial returned with an error")); + + // === Check call status === + + // Check RCall::NotifyStatusChange completes with EStatusDialling -> EStatusConnecting -> EStatusConnected. + RCall::TStatus expectedCallStatus = RCall::EStatusDialling; + const TInt expectedStatus = KErrNone; + iCallControlTestHelper.WaitForCallNotifyStatusChange(call1, + notifyCallStatusChangeStatus, + callStatus, + expectedCallStatus, + expectedStatus); + + call1.NotifyStatusChange(notifyCallStatusChangeStatus,callStatus); + expectedCallStatus = RCall::EStatusConnecting; + iCallControlTestHelper.WaitForCallNotifyStatusChange(call1, + notifyCallStatusChangeStatus, + callStatus, + expectedCallStatus, + expectedStatus); + + call1.NotifyStatusChange(notifyCallStatusChangeStatus,callStatus); + expectedCallStatus = RCall::EStatusConnected; + iCallControlTestHelper.WaitForCallNotifyStatusChange(call1, + notifyCallStatusChangeStatus, + callStatus, + expectedCallStatus, + expectedStatus); + + // Check RCall::GetStatus returns EStatusConnected. + ASSERT_EQUALS(call1.GetStatus(callStatus), KErrNone, + _L("RCall::GetStatus returned an error")); + ASSERT_EQUALS(callStatus, RCall::EStatusConnected, + _L("RCall::GetStatus did not set call status EStatusConnected as expected")); + + // Check RMobileCall::NotifyMobileCallStatusChange completes with EStatusDialling -> EStatusConnecting -> EStatusConnected. + RMobileCall::TMobileCallStatus expectedMobileCallStatus = RMobileCall::EStatusDialling; + iCallControlTestHelper.WaitForMobileCallNotifyMobileCallStatusChange(call1, + notifyMobileCallChangeStatus, + mobileCallStatus, + expectedMobileCallStatus, + expectedStatus); + expectedMobileCallStatus = RMobileCall::EStatusConnecting; + call1.NotifyMobileCallStatusChange(notifyMobileCallChangeStatus, mobileCallStatus); + iCallControlTestHelper.WaitForMobileCallNotifyMobileCallStatusChange(call1, + notifyMobileCallChangeStatus, + mobileCallStatus, + expectedMobileCallStatus, + expectedStatus); + expectedMobileCallStatus = RMobileCall::EStatusConnected; + call1.NotifyMobileCallStatusChange(notifyMobileCallChangeStatus, mobileCallStatus); + iCallControlTestHelper.WaitForMobileCallNotifyMobileCallStatusChange(call1, + notifyMobileCallChangeStatus, + mobileCallStatus, + expectedMobileCallStatus, + expectedStatus); + + // Check RMobileCall::GetMobileCallStatus returns status of EStatusConnected. + ASSERT_EQUALS(call1.GetMobileCallStatus(mobileCallStatus), KErrNone, + _L("RMobileCall::GetMobileCallStatus returned an error")); + ASSERT_EQUALS(mobileCallStatus, RMobileCall::EStatusConnected, + _L("RMobileCall::GetMobileCallStatus did not set call status EStatusConnected as expected")); + + // === Check line status === + + // Check RLine::NotifyStatusChange completes with EStatusDialling -> EStatusConnecting -> EStatusConnected. + RCall::TStatus expectedLineStatus = RCall::EStatusDialling; + iCallControlTestHelper.WaitForLineNotifyStatusChange(voiceLine, + notifyStatusChangeStatus, + lineStatus, + expectedLineStatus, + expectedStatus); + expectedLineStatus = RCall::EStatusConnecting; + voiceLine.NotifyStatusChange(notifyStatusChangeStatus, lineStatus); + iCallControlTestHelper.WaitForLineNotifyStatusChange(voiceLine, + notifyStatusChangeStatus, + lineStatus, + expectedLineStatus, + expectedStatus); + expectedLineStatus = RCall::EStatusConnected; + voiceLine.NotifyStatusChange(notifyStatusChangeStatus, lineStatus); + iCallControlTestHelper.WaitForLineNotifyStatusChange(voiceLine, + notifyStatusChangeStatus, + lineStatus, + expectedLineStatus, + expectedStatus); + + // Check RLine::GetStatus returns EStatusConnected + ASSERT_EQUALS(voiceLine.GetStatus(callStatus), KErrNone, + _L("RLine::GetStatus returned an error")); + ASSERT_EQUALS(callStatus, RCall::EStatusConnected, + _L("RLine::GetStatus did not set call status to EStatusConnected as expected")); + + // Check RMobileLine::NotifyMobileLineStatusChange completes with with EStatusDialling -> EStatusConnecting -> EStatusConnected. + RMobileCall::TMobileCallStatus expectedMobileLineStatus = RMobileCall::EStatusDialling; + iCallControlTestHelper.WaitForMobileLineNotifyMobileLineStatusChange(voiceLine, + notifyMobileLineChangeStatus, + mobileLineStatus, + expectedMobileLineStatus, + expectedStatus); + + voiceLine.NotifyMobileLineStatusChange(notifyMobileLineChangeStatus, mobileLineStatus); + expectedMobileLineStatus = RMobileCall::EStatusConnecting; + iCallControlTestHelper.WaitForMobileLineNotifyMobileLineStatusChange(voiceLine, + notifyMobileLineChangeStatus, + mobileLineStatus, + expectedMobileLineStatus, + expectedStatus); + + voiceLine.NotifyMobileLineStatusChange(notifyMobileLineChangeStatus, mobileLineStatus); + expectedMobileLineStatus = RMobileCall::EStatusConnected; + iCallControlTestHelper.WaitForMobileLineNotifyMobileLineStatusChange(voiceLine, + notifyMobileLineChangeStatus, + mobileLineStatus, + expectedMobileLineStatus, + expectedStatus); + + // Check RMobileLine::GetMobileLineStatus returns EStatusConnected + ASSERT_EQUALS(voiceLine.GetMobileLineStatus(mobileCallStatus), KErrNone, + _L("RMobileLine::GetMobileLineStatus returned an error")); + ASSERT_EQUALS(mobileCallStatus, RMobileCall::EStatusConnected, + _L("RMobileLine::GetMobileLineStatus did not set status to EStatusConnected")); + + // === Check call info === + + // Wait 3 seconds, so that the call duration will be more then 0 seconds + User::After(3*KOneSecond); + + // Check RCall::GetInfo returns valid call name. + // Check RCall::GetInfo returns valid voice line name. + // Check RCall::GetInfo returns call status of EStatusConnected. + // Check RCall::GetInfo returns call duration of > 0. + RCall::TCallInfo callInfo; + ASSERT_EQUALS(call1.GetInfo(callInfo), KErrNone, + _L("RCall::GetInfo returned an error")); + ASSERT_TRUE(callInfo.iCallName.Length() >0, + _L("RCall::GetInfo returned an invalid name")); + ASSERT_TRUE(callInfo.iLineName.Length() >0, + _L("RCall::GetInfo returned an invalid Line name")); + ASSERT_EQUALS(callInfo.iStatus, RCall::EStatusConnected, + _L("RCall::GetInfo wrong iStatus, should be EStatusIdle")); + ASSERT_TRUE(callInfo.iDuration.Int()>0, + _L("RCall::GetInfo wrong iDuration, should be > 0")); + + + + // Check RMobileCall::GetMobileCallInfo returns iValid > 0. + // Check RMobileCall::GetMobileCallInfo returns data for attributes marked as valid in iValid. + // Check RMobileCall::GetMobileCallInfo returns valid line name. + // Check RMobileCall::GetMobileCallInfo returns correct number for iDialledParty.iTelNumber + // Check RMobileCall::GetMobileCallInfo returns iDialledParty.iTypeOfNumber of EInternationalNumber + RMobileCall::TMobileCallInfoV1 mobileCallInfo; + RMobileCall::TMobileCallInfoV1Pckg callInfoPckg(mobileCallInfo); + ASSERT_EQUALS(call1.GetMobileCallInfo(callInfoPckg), KErrNone, + _L("RMobileCall::GetMobileCallInfo returned an error")); + ASSERT_TRUE(mobileCallInfo.iValid > 0, + _L("RMobileCall::GetMobileCallInfo returned unexpected flags in iValid")); + ASSERT_TRUE(mobileCallInfo.iCallName.Length() >0, + _L("RMobileCall::GetMobileCallInfo returned an invalid callName")); + ASSERT_TRUE(mobileCallInfo.iLineName.Length() >0, + _L("RMobileCall::GetMobileCallInfo returned an invalid line name")); + ASSERT_EQUALS_DES16(mobileCallInfo.iDialledParty.iTelNumber, number, + _L("RMobileCall::GetMobileCallInfo returned incorrect number for iDialledParty.iTelNumber")); + ASSERT_EQUALS(mobileCallInfo.iDialledParty.iTypeOfNumber, RMobilePhone::EInternationalNumber, + _L("RMobileCall::GetMobileCallInfo returned incorrect type for iDialledParty.iTypeOfNumber")); + + + //------------ Post Notifiers ---------------------------- + call1.NotifyStatusChange(notifyCallStatusChangeStatus,callStatus); + call1.NotifyMobileCallStatusChange(notifyMobileCallChangeStatus, mobileCallStatus); + voiceLine.NotifyStatusChange(notifyStatusChangeStatus,lineStatus); + voiceLine.NotifyMobileLineStatusChange(notifyMobileLineChangeStatus, mobileLineStatus); + + + // Hang up. + TCoreEtelRequestStatus hangUpStatus (call1,&RCall::HangUpCancel); + CleanupStack::PushL(hangUpStatus); + call1.HangUp(hangUpStatus); + ASSERT_EQUALS(WaitForRequestWithTimeOut(hangUpStatus, ETimeMedium), KErrNone, + _L("RCall::HangUp timed-out")); + ASSERT_EQUALS(hangUpStatus.Int(), KErrNone, + _L("RCall::HangUp returned an error")); + + // === Check call status === + + // Check RCall::NotifyStatusChange completes with EStatusHangingUp -> EStatusIdle. + expectedCallStatus = RCall::EStatusHangingUp; + const TInt wantedStatus = KErrNone; + iCallControlTestHelper.WaitForCallNotifyStatusChange(call1, + notifyStatusChangeStatus, + callStatus, + expectedCallStatus, + wantedStatus); + + call1.NotifyStatusChange(notifyStatusChangeStatus,callStatus); + expectedCallStatus = RCall::EStatusIdle; + iCallControlTestHelper.WaitForCallNotifyStatusChange(call1, + notifyStatusChangeStatus, + callStatus, + expectedCallStatus, + wantedStatus); + + // Check RCall::GetStatus returns EStatusIdle. + ASSERT_EQUALS(call1.GetStatus(callStatus),KErrNone, + _L("RCall::GetStatus returned an error")); + ASSERT_EQUALS(callStatus, RCall::EStatusIdle, + _L("RCall::GetStatus returned an unexpected call status")); + + // Check RMobileCall::NotifyMobileCallStatusChange completes with EStatusDisconnecting -> EStatusIdle. + expectedMobileCallStatus = RMobileCall::EStatusDisconnecting; + iCallControlTestHelper.WaitForMobileCallNotifyMobileCallStatusChange(call1, + notifyMobileCallChangeStatus, + mobileCallStatus, + expectedMobileCallStatus, + wantedStatus); + + call1.NotifyMobileCallStatusChange(notifyMobileCallChangeStatus, mobileCallStatus); + expectedMobileCallStatus = RMobileCall::EStatusIdle; + iCallControlTestHelper.WaitForMobileCallNotifyMobileCallStatusChange(call1, + notifyMobileCallChangeStatus, + mobileCallStatus, + expectedMobileCallStatus, + wantedStatus); + + // Check RMobileCall::GetMobileCallStatus returns status of EStatusIdle. + ASSERT_EQUALS(call1.GetMobileCallStatus(mobileCallStatus), KErrNone, + _L("RMobileCall::GetMobileStatus returned an error")); + ASSERT_EQUALS(mobileCallStatus, RMobileCall::EStatusIdle, + _L("RMobileCall::GetMobileStatus did not return a status EStatusIdle")); + + // === Check line status === + + // Check RMobileLine::NotifyStatusChange completes with EStatusHangingUp -> EStatusIdle + expectedLineStatus = RCall::EStatusHangingUp; + iCallControlTestHelper.WaitForLineNotifyStatusChange(voiceLine, + notifyStatusChangeStatus, + lineStatus, + expectedLineStatus, + expectedStatus); + + voiceLine.NotifyStatusChange(notifyStatusChangeStatus,lineStatus); + expectedLineStatus = RCall::EStatusIdle; + iCallControlTestHelper.WaitForLineNotifyStatusChange(voiceLine, + notifyStatusChangeStatus, + lineStatus, + expectedLineStatus, + expectedStatus); + voiceLine.NotifyStatusChange(notifyStatusChangeStatus,lineStatus); + // Check RMobileLine::GetStatus returns EStatusIdle + ASSERT_EQUALS(voiceLine.GetStatus(lineStatus), KErrNone, + _L("RLine::GetStatus returned an error")); + ASSERT_EQUALS(lineStatus, RCall::EStatusIdle, + _L("RLine::GetStatus did not return EStatusIdle as expected")); + + // Check RMobileLine::NotifyMobileLineStatusChange completes with with EStatusDisconnecting -> EStatusIdle + expectedMobileLineStatus = RMobileCall::EStatusDisconnecting; + iCallControlTestHelper.WaitForMobileLineNotifyMobileLineStatusChange(voiceLine, + notifyMobileLineChangeStatus, + mobileLineStatus, + expectedMobileLineStatus, + expectedStatus); + + voiceLine.NotifyMobileLineStatusChange(notifyMobileLineChangeStatus, mobileLineStatus); + expectedMobileLineStatus = RMobileCall::EStatusIdle; + iCallControlTestHelper.WaitForMobileLineNotifyMobileLineStatusChange(voiceLine, + notifyMobileLineChangeStatus, + mobileLineStatus, + expectedMobileLineStatus, + expectedStatus); + // Check RMobileLine::GetMobileLineStatus returns EStatusIdle + ASSERT_EQUALS(voiceLine.GetMobileLineStatus(mobileLineStatus), KErrNone, + _L("RMobileLine::GetMobileLineStatus returned an error")); + ASSERT_EQUALS(mobileLineStatus, RMobileCall::EStatusIdle, + _L("RMobileLine::GetMobileLineStatus did not set the status to EStatusIdle")); + + + //////////////////////////////////////////////////////////////// + // TEST END + //////////////////////////////////////////////////////////////// + + StartCleanup(); + + // Pop: + // hangUpStatus + // dialStatus + // notifyMobileLineChangeStatus + // notifyStatusChangeStatus + // notifyMobileCallChangeStatus + // notifyCallStatusChangeStatus + CleanupStack::PopAndDestroy(6,¬ifyCallStatusChangeStatus); + + return TestStepResult(); + } + +TPtrC CCTSYIntegrationTestCallControl0008::GetTestStepName() +/** + * @return The test step name. + */ + { + return _L("CCTSYIntegrationTestCallControl0008"); + } + + + +CCTSYIntegrationTestCallControl0009::CCTSYIntegrationTestCallControl0009(CEtelSessionMgr& aEtelSessionMgr) + : CCTSYIntegrationTestCallControlBase(aEtelSessionMgr) +/** + * Constructor. + */ + { + SetTestStepName(CCTSYIntegrationTestCallControl0009::GetTestStepName()); + } + +CCTSYIntegrationTestCallControl0009::~CCTSYIntegrationTestCallControl0009() +/** + * Destructor. + */ + { + } + +TVerdict CCTSYIntegrationTestCallControl0009::doTestStepL() +/** + * @SYMTestCaseID BA-CTSY-INT-CCON-0009 + * @SYMFssID BA/CTSY/CCON-0009 + * @SYMTestCaseDesc Dial and hang up a call specifying valid call parameters 01. + * @SYMTestPriority High + * @SYMTestActions RMobileCall::NotifyMobileCallStatusChange, RCall::NotifyStatusChange, RLine::NotifyStatusChange, RMobileLine::GetMobileLineStatus, RMobileLine::NotifyMobileLineStatusChange, RLine::GetStatus, RMobileCall::GetMobileCallStatus, RCall::GetCallParams, RCall::GetStatus, RCall::GetCallParams, RCall::GetStatus, RCall::HangUp + * @SYMTestExpectedResults Pass - Call connects and call parameters are correct. + * @SYMTestType CIT + * @SYMTestCaseDependencies live/automatic + * + * Reason for test: Verify call and line statuses and call params are correct. + * + * @return - TVerdict code + */ + { + + //////////////////////////////////////////////////////////////// + // SET UP + //////////////////////////////////////////////////////////////// + + RMobilePhone& phone = iEtelSessionMgr.GetPhoneL(KMainServer,KMainPhone); + + // Check phone supports KCapsVoice + + // Get Voice line 1 + RMobileLine& voiceLine = iEtelSessionMgr.GetLineL(KMainServer, KMainPhone, KVoiceLine); + // Get call 1 + RMobileCall& call1 = iEtelSessionMgr.GetCallL(KMainServer, KMainPhone, KVoiceLine, KCall1); + + RLine::TCaps lineCaps; + CHECK_EQUALS_L(voiceLine.GetCaps(lineCaps), KErrNone, + _L("RMobileLine::GetCaps returned an error")); + CHECK_BITS_SET_L(lineCaps.iFlags, RLine::KCapsVoice, KNoUnwantedBits, + _L("RLine::GetCaps returned wrong caps")); + + // Call TNetworkTsyTestHelper::WaitForRegisteredOnHomeNetworkL + CHECK_EQUALS_L(iNetworkTestHelper.WaitForRegisteredOnHomeNetworkL(phone), KErrNone, _L("TNetworkTsyTestHelper::WaitForRegisteredOnHomeNetworkL returned with an error")); + + //////////////////////////////////////////////////////////////// + // SET UP END + //////////////////////////////////////////////////////////////// + + StartTest(); + + //////////////////////////////////////////////////////////////// + // TEST START + //////////////////////////////////////////////////////////////// + + + // Populate RMobileCall::TMobileCallParamsV1 with + RMobileCall::TMobileCallParamsV1 mobileCallParams; + // • iSpeakerControl = EMonitorSpeakerControlAlwaysOff + mobileCallParams.iSpeakerControl = RCall::EMonitorSpeakerControlAlwaysOff; + // • iSpeakerVolume = EMonitorSpeakerVolumeOff + mobileCallParams.iSpeakerVolume = RCall::EMonitorSpeakerVolumeOff; + // • iInterval = 0x01 + mobileCallParams.iInterval = 0x01; + // • iWaitForDialTone = EDialToneWait + mobileCallParams.iWaitForDialTone = RCall::EDialToneWait; + // • iIdRestrict = EIdRestrictDefault + mobileCallParams.iIdRestrict = RMobileCall::EIdRestrictDefault; + // • iExplicitInvoke = TRUE + mobileCallParams.iCug.iExplicitInvoke = TRUE ; + // • iCugIndex = 0x0000 + mobileCallParams.iCug.iCugIndex = 0x0000; + // • iSuppressOA = FALSE + mobileCallParams.iCug.iSuppressOA = FALSE; + // • iSuppressPrefCug = TRUE + mobileCallParams.iCug.iSuppressPrefCug = TRUE; + // • iAutoRedial = TRUE + mobileCallParams.iAutoRedial = TRUE; + + RMobileCall::TMobileCallParamsV1Pckg mobileCallParamsPkg(mobileCallParams); + + //=========Post Notifiers=============== + + // post notifier for RCall::NotifyStatusChange + TCoreEtelRequestStatus notifyCallStatusChangeStatus (call1,&RCall::NotifyStatusChangeCancel); + CleanupStack::PushL(notifyCallStatusChangeStatus); + RCall::TStatus callStatus; + call1.NotifyStatusChange(notifyCallStatusChangeStatus,callStatus); + + // post a notifier for RMobileCall::NotifyMobileCallStatusChange + TExtEtelRequestStatus notifyMobileCallChangeStatus(call1, EMobileCallNotifyMobileCallStatusChange); + CleanupStack::PushL(notifyMobileCallChangeStatus); + RMobileCall::TMobileCallStatus mobileCallStatus; + call1.NotifyMobileCallStatusChange(notifyMobileCallChangeStatus, mobileCallStatus); + + // post a notifier for RLine::NotifyStatusChange + TCoreEtelRequestStatus notifyStatusChangeStatus (voiceLine,&RLine::NotifyStatusChangeCancel); + CleanupStack::PushL(notifyStatusChangeStatus); + RCall::TStatus lineStatus; + voiceLine.NotifyStatusChange(notifyStatusChangeStatus,lineStatus); + + // post a notifier for RMobileLine::NotifyMobileLineStatusChange + TExtEtelRequestStatus notifyMobileLineChangeStatus(voiceLine, EMobileLineNotifyMobileLineStatusChange); + CleanupStack::PushL(notifyMobileLineChangeStatus); + RMobileCall::TMobileCallStatus mobileLineStatus; + voiceLine.NotifyMobileLineStatusChange(notifyMobileLineChangeStatus, mobileLineStatus); + + + //======= Dial a number which answers using call params. + TCoreEtelRequestStatus dialStatus(call1, &RCall::DialCancel); + CleanupStack::PushL(dialStatus); + TPtrC number; + ASSERT_TRUE(GetStringFromConfig(KIniVoiceNumSection, KIniVoiceNumber1, number) != EFalse, + _L("GetStringFromConfig did not complete as expected")); + call1.Dial(dialStatus,mobileCallParamsPkg, number); + // Wait for completion. + ASSERT_EQUALS(WaitForRequestWithTimeOut(dialStatus, ETimeMedium), KErrNone, + _L("RCall::Dial timed-out")); + ASSERT_EQUALS(dialStatus.Int(), KErrNone, + _L("RCall::Dial returned an error")); + + const TInt expectedStatus = KErrNone; + + // === Check line status === + + // Check RLine::NotifyStatusChange completes with EStatusDialling -> EStatusConnecting -> EStatusConnected. + RCall::TStatus expectedLineStatus = RCall::EStatusDialling; + iCallControlTestHelper.WaitForLineNotifyStatusChange(voiceLine, + notifyStatusChangeStatus, + lineStatus, + expectedLineStatus, + expectedStatus); + + expectedLineStatus = RCall::EStatusConnecting; + voiceLine.NotifyStatusChange(notifyStatusChangeStatus, lineStatus); + iCallControlTestHelper.WaitForLineNotifyStatusChange(voiceLine, + notifyStatusChangeStatus, + lineStatus, + expectedLineStatus, + expectedStatus); + + expectedLineStatus = RCall::EStatusConnected; + voiceLine.NotifyStatusChange(notifyStatusChangeStatus, lineStatus); + iCallControlTestHelper.WaitForLineNotifyStatusChange(voiceLine, + notifyStatusChangeStatus, + lineStatus, + expectedLineStatus, + expectedStatus); + + // Check RLine::GetStatus returns EStatusConnected + ASSERT_EQUALS(voiceLine.GetStatus(lineStatus), KErrNone, + _L("RLine::GetStatus returned an error")); + ASSERT_EQUALS(lineStatus, RCall::EStatusConnected, + _L("RLine::GetStatus did not set line status to EStatusConnected as expected")); + + // Check RMobileLine::NotifyMobileLineStatusChange completes with with EStatusDialling -> EStatusConnecting -> EStatusConnected. + RMobileCall::TMobileCallStatus expectedMobileLineStatus = RMobileCall::EStatusDialling; + iCallControlTestHelper.WaitForMobileLineNotifyMobileLineStatusChange(voiceLine, + notifyMobileLineChangeStatus, + mobileLineStatus, + expectedMobileLineStatus, + expectedStatus); + + voiceLine.NotifyMobileLineStatusChange(notifyMobileLineChangeStatus, mobileLineStatus); + expectedMobileLineStatus = RMobileCall::EStatusConnecting; + iCallControlTestHelper.WaitForMobileLineNotifyMobileLineStatusChange(voiceLine, + notifyMobileLineChangeStatus, + mobileLineStatus, + expectedMobileLineStatus, + expectedStatus); + + voiceLine.NotifyMobileLineStatusChange(notifyMobileLineChangeStatus, mobileLineStatus); + expectedMobileLineStatus = RMobileCall::EStatusConnected; + iCallControlTestHelper.WaitForMobileLineNotifyMobileLineStatusChange(voiceLine, + notifyMobileLineChangeStatus, + mobileLineStatus, + expectedMobileLineStatus, + expectedStatus); + + // Check RMobileLine::GetMobileLineStatus returns EStatusConnected + ASSERT_EQUALS(voiceLine.GetMobileLineStatus(mobileLineStatus), KErrNone, + _L("RMobileLine::GetMobileLineStatus returned an error")); + ASSERT_EQUALS(mobileLineStatus, RMobileCall::EStatusConnected, + _L("RMobileLine::GetMobileLineStatus did not set status to EStatusConnected")); + + // === Check call status === + + // Check RCall::NotifyStatusChange completes with EStatusDialling -> EStatusConnecting -> EStatusConnected. + RCall::TStatus expectedCallStatus = RCall::EStatusDialling; + iCallControlTestHelper.WaitForCallNotifyStatusChange(call1, + notifyCallStatusChangeStatus, + callStatus, + expectedCallStatus, + expectedStatus); + + call1.NotifyStatusChange(notifyCallStatusChangeStatus,callStatus); + expectedCallStatus = RCall::EStatusConnecting; + iCallControlTestHelper.WaitForCallNotifyStatusChange(call1, + notifyCallStatusChangeStatus, + callStatus, + expectedCallStatus, + expectedStatus); + DEBUG_PRINTF1(_L("3")); + call1.NotifyStatusChange(notifyCallStatusChangeStatus,callStatus); + expectedCallStatus = RCall::EStatusConnected; + iCallControlTestHelper.WaitForCallNotifyStatusChange(call1, + notifyCallStatusChangeStatus, + callStatus, + expectedCallStatus, + expectedStatus); + + // Check RCall::GetStatus returns EStatusConnected. + ASSERT_EQUALS(voiceLine.GetStatus(callStatus), KErrNone, + _L("RLine::GetStatus returned an error")); + ASSERT_EQUALS(callStatus, RCall::EStatusConnected, + _L("RLine::GetStatus did not return EStatusConnected as expected")); + DEBUG_PRINTF1(_L("5 check for mobile call dialling")); + // Check RMobileCall::NotifyMobileCallStatusChange completes with EStatusDialling -> EStatusConnecting -> EStatusConnected. + RMobileCall::TMobileCallStatus expectedMobileCallStatus = RMobileCall::EStatusDialling; + iCallControlTestHelper.WaitForMobileCallNotifyMobileCallStatusChange(call1, + notifyMobileCallChangeStatus, + mobileCallStatus, + expectedMobileCallStatus, + expectedStatus); + + expectedMobileCallStatus = RMobileCall::EStatusConnecting; + call1.NotifyMobileCallStatusChange(notifyMobileCallChangeStatus, mobileCallStatus); + iCallControlTestHelper.WaitForMobileCallNotifyMobileCallStatusChange(call1, + notifyMobileCallChangeStatus, + mobileCallStatus, + expectedMobileCallStatus, + expectedStatus); + + expectedMobileCallStatus = RMobileCall::EStatusConnected; + call1.NotifyMobileCallStatusChange(notifyMobileCallChangeStatus, mobileCallStatus); + iCallControlTestHelper.WaitForMobileCallNotifyMobileCallStatusChange(call1, + notifyMobileCallChangeStatus, + mobileCallStatus, + expectedMobileCallStatus, + expectedStatus); + + // Check RMobileCall::GetMobileCallStatus returns status of EStatusConnected. + ASSERT_EQUALS(call1.GetMobileCallStatus(mobileCallStatus), KErrNone, + _L("RMobileCall::GetMobileCallStatus returned an error")); + ASSERT_EQUALS(mobileCallStatus, RMobileCall::EStatusConnected, + _L("RMobileCall::GetMobileCallStatus did not set call status EStatusConnected as expected")); + + + // === Get call parameters. === + RMobileCall::TMobileCallParamsV1 checkParams; + RMobileCall::TMobileCallParamsV1Pckg checkParamsPkg(checkParams); + call1.GetCallParams(checkParamsPkg); + + // Check RCall::GetCallParams with aParams as a packaged RMobileCall::TMobileCallParamsV1 returns same iSpeakerControl as that used for Dial. + ASSERT_EQUALS(checkParams.iSpeakerControl, mobileCallParams.iSpeakerControl, + _L("RCall::GetCallParams did not return the same iSpeakerControl as that used for Dial")); + // Check RCall::GetCallParams with aParams as a packaged RMobileCall::TMobileCallParamsV1 returns same iSpeakerVolume as that used for Dial. + ASSERT_EQUALS(checkParams.iSpeakerVolume, mobileCallParams.iSpeakerVolume, + _L("RCall::GetCallParams did not return the same iSpeakerVolume as that used for Dial")); + // Check RCall::GetCallParams with aParams as a packaged RMobileCall::TMobileCallParamsV1 returns same iInterval as that used for Dial. + ASSERT_EQUALS(checkParams.iInterval, mobileCallParams.iInterval, + _L("RCall::GetCallParams did not return the same iInterval as that used for Dial")); + // Check RCall::GetCallParams with aParams as a packaged RMobileCall::TMobileCallParamsV1 returns same iWaitForDialTone as that used for Dial. + ASSERT_EQUALS(checkParams.iWaitForDialTone, mobileCallParams.iWaitForDialTone, + _L("RCall::GetCallParams did not return the same iWaitForDialTone as that used for Dial")); + // Check RCall::GetCallParams with aParams as a packaged RMobileCall::TMobileCallParamsV1 returns same iIdRestrict as that used for Dial. + ASSERT_EQUALS(checkParams.iIdRestrict, mobileCallParams.iIdRestrict, + _L("RCall::GetCallParams did not return the same iIdRestrict as that used for Dial")); + // Check RCall::GetCallParams with aParams as a packaged RMobileCall::TMobileCallParamsV1 returns same iCug.iExplicitInvoke as that used for Dial. + ASSERT_EQUALS(checkParams.iCug.iExplicitInvoke, mobileCallParams.iCug.iExplicitInvoke, + _L("RCall::GetCallParams did not return the same iCug.iExplicitInvoke as that used for Dial")); + // Check RCall::GetCallParams with aParams as a packaged RMobileCall::TMobileCallParamsV1 returns same iCug.iCugIndex as that used for Dial. + ASSERT_EQUALS(checkParams.iCug.iCugIndex, mobileCallParams.iCug.iCugIndex, + _L("RCall::GetCallParams did not return the same iCug.iCugIndex as that used for Dial")); + // Check RCall::GetCallParams with aParams as a packaged RMobileCall::TMobileCallParamsV1 returns same iCug.iSuppressPrefCug as that used for Dial. + ASSERT_EQUALS(checkParams.iCug.iSuppressPrefCug, mobileCallParams.iCug.iSuppressPrefCug, + _L("RCall::GetCallParams did not return the same iCug.iSuppressPrefCug as that used for Dial")); + // Check RCall::GetCallParams with aParams as a packaged RMobileCall::TMobileCallParamsV1 returns same iCug.iSuppressOA as that used for Dial. + ASSERT_EQUALS(checkParams.iCug.iSuppressOA, mobileCallParams.iCug.iSuppressOA, + _L("RCall::GetCallParams did not return the same iCug.iSuppressOA as that used for Dial")); + // Check RCall::GetCallParams with aParams as a packaged RMobileCall::TMobileCallParamsV1 returns same iAutoRedial as that used for Dial. + ASSERT_EQUALS(checkParams.iAutoRedial, mobileCallParams.iAutoRedial, + _L("RCall::GetCallParams did not return the same iAutoRedial as that used for Dial")); + + + //------------ Post Notifiers ---------------------------- + call1.NotifyStatusChange(notifyCallStatusChangeStatus,callStatus); + call1.NotifyMobileCallStatusChange(notifyMobileCallChangeStatus, mobileCallStatus); + voiceLine.NotifyStatusChange(notifyStatusChangeStatus,lineStatus); + voiceLine.NotifyMobileLineStatusChange(notifyMobileLineChangeStatus, mobileLineStatus); + + // Hang up call. + TCoreEtelRequestStatus hangUpStatus (call1,&RCall::HangUpCancel); + CleanupStack::PushL(hangUpStatus); + call1.HangUp(hangUpStatus); + ASSERT_EQUALS(WaitForRequestWithTimeOut(hangUpStatus, ETimeMedium), KErrNone, + _L("RCall::HangUp timed-out")); + ASSERT_EQUALS(hangUpStatus.Int(), KErrNone, + _L("RCall::HangUp returned an error")); + + // === Check call status === + + // Check RCall::NotifyStatusChange completes with EStatusHangingUp -> EStatusIdle + expectedCallStatus = RCall::EStatusHangingUp; + const TInt wantedStatus = KErrNone; + iCallControlTestHelper.WaitForCallNotifyStatusChange(call1, + notifyStatusChangeStatus, + callStatus, + expectedCallStatus, + wantedStatus); + + call1.NotifyStatusChange(notifyStatusChangeStatus,callStatus); + expectedCallStatus = RCall::EStatusIdle; + iCallControlTestHelper.WaitForCallNotifyStatusChange(call1, + notifyStatusChangeStatus, + callStatus, + expectedCallStatus, + wantedStatus); + // Check RCall::GetStatus returns EStatusIdle. + ASSERT_EQUALS(call1.GetStatus(callStatus),KErrNone, + _L("RCall::GetStatus returned an error")); + ASSERT_EQUALS(callStatus, RCall::EStatusIdle, + _L("RCall::GetStatus returned an unexpected call status")); + + // Check RMobileCall::NotifyMobileCallStatusChange completes with EStatusDisconnecting -> EStatusIdle + expectedMobileCallStatus = RMobileCall::EStatusDisconnecting; + iCallControlTestHelper.WaitForMobileCallNotifyMobileCallStatusChange(call1, + notifyMobileCallChangeStatus, + mobileCallStatus, + expectedMobileCallStatus, + wantedStatus); + + call1.NotifyMobileCallStatusChange(notifyMobileCallChangeStatus, mobileCallStatus); + expectedMobileCallStatus = RMobileCall::EStatusIdle; + iCallControlTestHelper.WaitForMobileCallNotifyMobileCallStatusChange(call1, + notifyMobileCallChangeStatus, + mobileCallStatus, + expectedMobileCallStatus, + wantedStatus); + + // Check RMobileCall::GetMobileCallStatus returns status of EStatusIdle. + ASSERT_EQUALS(call1.GetMobileCallStatus(mobileCallStatus), KErrNone, + _L("RMobileCall::GetMobileStatus returned an error")); + ASSERT_EQUALS(mobileCallStatus, RMobileCall::EStatusIdle, + _L("RMobileCall::GetMobileStatus did not return a status EStatusIdle")); + + // === Check line status === + + // Check RLine::NotifyStatusChange completes with EStatusHangingUp -> EStatusIdle + DEBUG_PRINTF1(_L("12")); + expectedLineStatus = RCall::EStatusHangingUp; + iCallControlTestHelper.WaitForLineNotifyStatusChange(voiceLine, + notifyStatusChangeStatus, + lineStatus, + expectedLineStatus, + expectedStatus); + + voiceLine.NotifyStatusChange(notifyStatusChangeStatus,lineStatus); + expectedLineStatus = RCall::EStatusIdle; + iCallControlTestHelper.WaitForLineNotifyStatusChange(voiceLine, + notifyStatusChangeStatus, + lineStatus, + expectedLineStatus, + expectedStatus); + + // Check RLine::GetStatus returns EStatusIdle + ASSERT_EQUALS(voiceLine.GetStatus(lineStatus), KErrNone, + _L("RLine::GetStatus returned an error")); + ASSERT_EQUALS(lineStatus, RCall::EStatusIdle, + _L("RLine::GetStatus did not return EStatusIdle as expected")); + + // Check RMobileLine::NotifyMobileLineStatusChange completes with with EStatusDisconnecting -> EStatusIdle + DEBUG_PRINTF1(_L("13")); + expectedMobileLineStatus = RMobileCall::EStatusDisconnecting; + iCallControlTestHelper.WaitForMobileLineNotifyMobileLineStatusChange(voiceLine, + notifyMobileLineChangeStatus, + mobileLineStatus, + expectedMobileLineStatus, + expectedStatus); + + voiceLine.NotifyMobileLineStatusChange(notifyMobileLineChangeStatus, mobileLineStatus); + expectedMobileLineStatus = RMobileCall::EStatusIdle; + iCallControlTestHelper.WaitForMobileLineNotifyMobileLineStatusChange(voiceLine, + notifyMobileLineChangeStatus, + mobileLineStatus, + expectedMobileLineStatus, + expectedStatus); + + // Check RMobileLine::GetMobileLineStatus returns EStatusIdle + ASSERT_EQUALS(voiceLine.GetMobileLineStatus(mobileLineStatus), KErrNone, + _L("RMobileLine::GetMobileLineStatus returned an error")); + ASSERT_EQUALS(mobileLineStatus, RMobileCall::EStatusIdle, + _L("RMobileLine::GetMobileLineStatus did not set the status to EStatusIdle")); + + + //////////////////////////////////////////////////////////////// + // TEST END + //////////////////////////////////////////////////////////////// + + StartCleanup(); + + // Pop + // notifyCallStatusChangeStatus + // notifyMobileCallChangeStatus + // notifyStatusChangeStatus + // notifyMobileLineChangeStatus + // dialStatus + // hangUpStatus + CleanupStack::PopAndDestroy(6,¬ifyCallStatusChangeStatus); + + return TestStepResult(); + } + +TPtrC CCTSYIntegrationTestCallControl0009::GetTestStepName() +/** + * @return The test step name. + */ + { + return _L("CCTSYIntegrationTestCallControl0009"); + } + + + +CCTSYIntegrationTestCallControl0010::CCTSYIntegrationTestCallControl0010(CEtelSessionMgr& aEtelSessionMgr) + : CCTSYIntegrationTestCallControlBase(aEtelSessionMgr) +/** + * Constructor. + */ + { + SetTestStepName(CCTSYIntegrationTestCallControl0010::GetTestStepName()); + } + +CCTSYIntegrationTestCallControl0010::~CCTSYIntegrationTestCallControl0010() +/** + * Destructor. + */ + { + } + +TVerdict CCTSYIntegrationTestCallControl0010::doTestStepL() +/** + * @SYMTestCaseID BA-CTSY-INT-CCON-0010 + * @SYMFssID BA/CTSY/CCON-0010 + * @SYMTestCaseDesc Dial and hang up a call specifying valid call parameters 02. + * @SYMTestPriority High + * @SYMTestActions RMobileCall::NotifyMobileCallStatusChange, RCall::NotifyStatusChange, RLine::NotifyStatusChange, RMobileLine::GetMobileLineStatus, RMobileLine::NotifyMobileLineStatusChange, RLine::GetStatus, RMobileCall::GetMobileCallStatus, RCall::GetCallParams, RCall::GetStatus, RCall::GetCallParams, RCall::GetStatus, RCall::HangUp + * @SYMTestExpectedResults Pass - Call connects and call parameters are correct. + * @SYMTestType CIT + * @SYMTestCaseDependencies live/automatic + * + * Reason for test: Verify call and line statuses and call params are correct. + * + * @return - TVerdict code + */ + { + + //////////////////////////////////////////////////////////////// + // SET UP + //////////////////////////////////////////////////////////////// + + + // Check phone supports KCapsVoice + // Get Voice line 1 + RMobileLine& voiceLine = iEtelSessionMgr.GetLineL(KMainServer, KMainPhone, KVoiceLine); + // Get call 1 + RMobileCall& call1 = iEtelSessionMgr.GetCallL(KMainServer, KMainPhone, KVoiceLine, KCall1); + + RLine::TCaps lineCaps; + CHECK_EQUALS_L(voiceLine.GetCaps(lineCaps), KErrNone, + _L("RMobileLine::GetCaps returned an error")); + CHECK_BITS_SET_L(lineCaps.iFlags, RLine::KCapsVoice, KNoUnwantedBits, + _L("RLine::GetCaps returned wrong caps")); + + // Call TNetworkTsyTestHelper::WaitForRegisteredOnHomeNetworkL + RMobilePhone& phone = iEtelSessionMgr.GetPhoneL(KMainServer,KMainPhone); + CHECK_EQUALS_L(iNetworkTestHelper.WaitForRegisteredOnHomeNetworkL(phone), KErrNone, + _L("TNetworkTsyTestHelper::WaitForRegisteredOnHomeNetworkL returned with an error")); + + //////////////////////////////////////////////////////////////// + // SET UP END + //////////////////////////////////////////////////////////////// + + StartTest(); + + //////////////////////////////////////////////////////////////// + // TEST START + //////////////////////////////////////////////////////////////// + + + // Populate RMobileCall::TMobileCallParamsV1 with + RMobileCall::TMobileCallParamsV1 mobileCallParams; + RMobileCall::TMobileCallParamsV1Pckg mobileCallParamsPkg(mobileCallParams); + // • iSpeakerControl = EMonitorSpeakerControlAlwaysOff + mobileCallParams.iSpeakerControl = RCall::EMonitorSpeakerControlAlwaysOff; + // • iSpeakerVolume = EMonitorSpeakerVolumeHigh + mobileCallParams.iSpeakerVolume = RCall::EMonitorSpeakerVolumeHigh; + // • iInterval = 0x02 + mobileCallParams.iInterval = 0x02; + // • iWaitForDialTone = EDialToneWait + mobileCallParams.iWaitForDialTone = RCall::EDialToneWait; + // • iIdRestrict = ESendMyId + mobileCallParams.iIdRestrict = RMobileCall::ESendMyId; + // • iExplicitInvoke = FALSE + mobileCallParams.iCug.iExplicitInvoke = FALSE ; + // • iCugIndex = 0x0000 + mobileCallParams.iCug.iCugIndex = 0x0000; + // • iSuppressOA = FALSE + mobileCallParams.iCug.iSuppressOA = FALSE; + // • iSuppressPrefCug = FALSE + mobileCallParams.iCug.iSuppressPrefCug = FALSE; + // • iAutoRedial = FALSE + mobileCallParams.iAutoRedial = FALSE; + + //=========Post Notifiers=============== + + // post notifier for RCall::NotifyStatusChange + TCoreEtelRequestStatus notifyCallStatusChangeStatus (call1,&RCall::NotifyStatusChangeCancel); + CleanupStack::PushL(notifyCallStatusChangeStatus); + RCall::TStatus callStatus; + call1.NotifyStatusChange(notifyCallStatusChangeStatus,callStatus); + + // post a notifier for RMobileCall::NotifyMobileCallStatusChange + TExtEtelRequestStatus notifyMobileCallChangeStatus(call1, EMobileCallNotifyMobileCallStatusChange); + CleanupStack::PushL(notifyMobileCallChangeStatus); + RMobileCall::TMobileCallStatus mobileCallStatus; + call1.NotifyMobileCallStatusChange(notifyMobileCallChangeStatus, mobileCallStatus); + + // post a notifier for RLine::NotifyStatusChange + TCoreEtelRequestStatus notifyStatusChangeStatus (voiceLine,&RLine::NotifyStatusChangeCancel); + CleanupStack::PushL(notifyStatusChangeStatus); + RCall::TStatus lineStatus; + voiceLine.NotifyStatusChange(notifyStatusChangeStatus,lineStatus); + + // post a notifier for RMobileLine::NotifyMobileLineStatusChange + TExtEtelRequestStatus notifyMobileLineChangeStatus(voiceLine, EMobileLineNotifyMobileLineStatusChange); + CleanupStack::PushL(notifyMobileLineChangeStatus); + RMobileCall::TMobileCallStatus mobileLineStatus; + voiceLine.NotifyMobileLineStatusChange(notifyMobileLineChangeStatus, mobileLineStatus); + + // Dial a number which answers using call params. + TCoreEtelRequestStatus dialStatus(call1, &RCall::DialCancel); + CleanupStack::PushL(dialStatus); + TPtrC number; + ASSERT_TRUE(GetStringFromConfig(KIniVoiceNumSection, KIniVoiceNumber1, number) != EFalse, + _L("GetStringFromConfig did not complete as expected")); + call1.Dial(dialStatus,mobileCallParamsPkg, number); + // Wait for completion. + ASSERT_EQUALS(WaitForRequestWithTimeOut(dialStatus, ETimeMedium), KErrNone, + _L("RCall::Dial timed-out")); + ASSERT_EQUALS(dialStatus.Int(), KErrNone, + _L("RCall::Dial returned an error")); + + + // === Check line status === + + const TInt expectedStatus = KErrNone; + + // === Check line status === + + // Check RLine::NotifyStatusChange completes with EStatusDialling -> EStatusConnecting -> EStatusConnected. + RCall::TStatus expectedLineStatus = RCall::EStatusDialling; + iCallControlTestHelper.WaitForLineNotifyStatusChange(voiceLine, + notifyStatusChangeStatus, + lineStatus, + expectedLineStatus, + expectedStatus); + + expectedLineStatus = RCall::EStatusConnecting; + voiceLine.NotifyStatusChange(notifyStatusChangeStatus, lineStatus); + iCallControlTestHelper.WaitForLineNotifyStatusChange(voiceLine, + notifyStatusChangeStatus, + lineStatus, + expectedLineStatus, + expectedStatus); + + expectedLineStatus = RCall::EStatusConnected; + voiceLine.NotifyStatusChange(notifyStatusChangeStatus, lineStatus); + iCallControlTestHelper.WaitForLineNotifyStatusChange(voiceLine, + notifyStatusChangeStatus, + lineStatus, + expectedLineStatus, + expectedStatus); + + // Check RLine::GetStatus returns EStatusConnected + ASSERT_EQUALS(voiceLine.GetStatus(lineStatus), KErrNone, + _L("RLine::GetStatus returned an error")); + ASSERT_EQUALS(lineStatus, RCall::EStatusConnected, + _L("RLine::GetStatus did not set line status to EStatusConnected as expected")); + + // Check RMobileLine::NotifyMobileLineStatusChange completes with with EStatusDialling -> EStatusConnecting -> EStatusConnected. + RMobileCall::TMobileCallStatus expectedMobileLineStatus = RMobileCall::EStatusDialling; + iCallControlTestHelper.WaitForMobileLineNotifyMobileLineStatusChange(voiceLine, + notifyMobileLineChangeStatus, + mobileLineStatus, + expectedMobileLineStatus, + expectedStatus); + + voiceLine.NotifyMobileLineStatusChange(notifyMobileLineChangeStatus, mobileLineStatus); + expectedMobileLineStatus = RMobileCall::EStatusConnecting; + iCallControlTestHelper.WaitForMobileLineNotifyMobileLineStatusChange(voiceLine, + notifyMobileLineChangeStatus, + mobileLineStatus, + expectedMobileLineStatus, + expectedStatus); + + voiceLine.NotifyMobileLineStatusChange(notifyMobileLineChangeStatus, mobileLineStatus); + expectedMobileLineStatus = RMobileCall::EStatusConnected; + iCallControlTestHelper.WaitForMobileLineNotifyMobileLineStatusChange(voiceLine, + notifyMobileLineChangeStatus, + mobileLineStatus, + expectedMobileLineStatus, + expectedStatus); + + // Check RMobileLine::GetMobileLineStatus returns EStatusConnected + ASSERT_EQUALS(voiceLine.GetMobileLineStatus(mobileLineStatus), KErrNone, + _L("RMobileLine::GetMobileLineStatus returned an error")); + ASSERT_EQUALS(mobileLineStatus, RMobileCall::EStatusConnected, + _L("RMobileLine::GetMobileLineStatus did not set status to EStatusConnected")); + + // === Check call status === + + // Check RCall::NotifyStatusChange completes with EStatusDialling -> EStatusConnecting -> EStatusConnected. + RCall::TStatus expectedCallStatus = RCall::EStatusDialling; + iCallControlTestHelper.WaitForCallNotifyStatusChange(call1, + notifyCallStatusChangeStatus, + callStatus, + expectedCallStatus, + expectedStatus); + + call1.NotifyStatusChange(notifyCallStatusChangeStatus,callStatus); + expectedCallStatus = RCall::EStatusConnecting; + iCallControlTestHelper.WaitForCallNotifyStatusChange(call1, + notifyCallStatusChangeStatus, + callStatus, + expectedCallStatus, + expectedStatus); + + call1.NotifyStatusChange(notifyCallStatusChangeStatus,callStatus); + expectedCallStatus = RCall::EStatusConnected; + iCallControlTestHelper.WaitForCallNotifyStatusChange(call1, + notifyCallStatusChangeStatus, + callStatus, + expectedCallStatus, + expectedStatus); + + // Check RCall::GetStatus returns EStatusConnected. + ASSERT_EQUALS(voiceLine.GetStatus(callStatus), KErrNone, + _L("RLine::GetStatus returned an error")); + ASSERT_EQUALS(callStatus, RCall::EStatusConnected, + _L("RLine::GetStatus did not return EStatusConnected as expected")); + + // Check RMobileCall::NotifyMobileCallStatusChange completes with EStatusDialling -> EStatusConnecting -> EStatusConnected. + RMobileCall::TMobileCallStatus expectedMobileCallStatus = RMobileCall::EStatusDialling; + iCallControlTestHelper.WaitForMobileCallNotifyMobileCallStatusChange(call1, + notifyMobileCallChangeStatus, + mobileCallStatus, + expectedMobileCallStatus, + expectedStatus); + + expectedMobileCallStatus = RMobileCall::EStatusConnecting; + call1.NotifyMobileCallStatusChange(notifyMobileCallChangeStatus, mobileCallStatus); + iCallControlTestHelper.WaitForMobileCallNotifyMobileCallStatusChange(call1, + notifyMobileCallChangeStatus, + mobileCallStatus, + expectedMobileCallStatus, + expectedStatus); + + expectedMobileCallStatus = RMobileCall::EStatusConnected; + call1.NotifyMobileCallStatusChange(notifyMobileCallChangeStatus, mobileCallStatus); + iCallControlTestHelper.WaitForMobileCallNotifyMobileCallStatusChange(call1, + notifyMobileCallChangeStatus, + mobileCallStatus, + expectedMobileCallStatus, + expectedStatus); + + // Check RMobileCall::GetMobileCallStatus returns status of EStatusConnected. + ASSERT_EQUALS(call1.GetMobileCallStatus(mobileCallStatus), KErrNone, + _L("RMobileCall::GetMobileCallStatus returned an error")); + ASSERT_EQUALS(mobileCallStatus, RMobileCall::EStatusConnected, + _L("RMobileCall::GetMobileCallStatus did not set call status EStatusConnected as expected")); + + // === Get call parameters. === + RMobileCall::TMobileCallParamsV1 checkParams; + RMobileCall::TMobileCallParamsV1Pckg checkParamsPkg(checkParams); + call1.GetCallParams(checkParamsPkg); + + // Check RCall::GetCallParams with aParams as a packaged RMobileCall::TMobileCallParamsV1 returns same iSpeakerControl as that used for Dial. + ASSERT_EQUALS(checkParams.iSpeakerControl, mobileCallParams.iSpeakerControl, + _L("RCall::GetCallParams did not return the same iSpeakerControl as that used for Dial")); + // Check RCall::GetCallParams with aParams as a packaged RMobileCall::TMobileCallParamsV1 returns same iSpeakerVolume as that used for Dial. + ASSERT_EQUALS(checkParams.iSpeakerVolume, mobileCallParams.iSpeakerVolume, + _L("RCall::GetCallParams did not return the same iSpeakerVolume as that used for Dial")); + // Check RCall::GetCallParams with aParams as a packaged RMobileCall::TMobileCallParamsV1 returns same iInterval as that used for Dial. + ASSERT_EQUALS(checkParams.iInterval, mobileCallParams.iInterval, + _L("RCall::GetCallParams did not return the same iInterval as that used for Dial")); + // Check RCall::GetCallParams with aParams as a packaged RMobileCall::TMobileCallParamsV1 returns same iWaitForDialTone as that used for Dial. + ASSERT_EQUALS(checkParams.iWaitForDialTone, mobileCallParams.iWaitForDialTone, + _L("RCall::GetCallParams did not return the same iWaitForDialTone as that used for Dial")); + // Check RCall::GetCallParams with aParams as a packaged RMobileCall::TMobileCallParamsV1 returns same iIdRestrict as that used for Dial. + ASSERT_EQUALS(checkParams.iIdRestrict, mobileCallParams.iIdRestrict, + _L("RCall::GetCallParams did not return the same iIdRestrict as that used for Dial")); + // Check RCall::GetCallParams with aParams as a packaged RMobileCall::TMobileCallParamsV1 returns same iCug.iExplicitInvoke as that used for Dial. + ASSERT_EQUALS(checkParams.iCug.iExplicitInvoke, mobileCallParams.iCug.iExplicitInvoke, + _L("RCall::GetCallParams did not return the same iCug.iExplicitInvoke as that used for Dial")); + // Check RCall::GetCallParams with aParams as a packaged RMobileCall::TMobileCallParamsV1 returns same iCug.iCugIndex as that used for Dial. + ASSERT_EQUALS(checkParams.iCug.iCugIndex, mobileCallParams.iCug.iCugIndex, + _L("RCall::GetCallParams did not return the same iCug.iCugIndex as that used for Dial")); + // Check RCall::GetCallParams with aParams as a packaged RMobileCall::TMobileCallParamsV1 returns same iCug.iSuppressPrefCug as that used for Dial. + ASSERT_EQUALS(checkParams.iCug.iSuppressPrefCug, mobileCallParams.iCug.iSuppressPrefCug, + _L("RCall::GetCallParams did not return the same iCug.iSuppressPrefCug as that used for Dial")); + // Check RCall::GetCallParams with aParams as a packaged RMobileCall::TMobileCallParamsV1 returns same iCug.iSuppressOA as that used for Dial. + ASSERT_EQUALS(checkParams.iCug.iSuppressOA, mobileCallParams.iCug.iSuppressOA, + _L("RCall::GetCallParams did not return the same iCug.iSuppressOA as that used for Dial")); + // Check RCall::GetCallParams with aParams as a packaged RMobileCall::TMobileCallParamsV1 returns same iAutoRedial as that used for Dial. + ASSERT_EQUALS(checkParams.iAutoRedial, mobileCallParams.iAutoRedial, + _L("RCall::GetCallParams did not return the same iAutoRedial as that used for Dial")); + + //------------ Post Notifiers ---------------------------- + call1.NotifyStatusChange(notifyCallStatusChangeStatus,callStatus); + call1.NotifyMobileCallStatusChange(notifyMobileCallChangeStatus, mobileCallStatus); + voiceLine.NotifyStatusChange(notifyStatusChangeStatus,lineStatus); + voiceLine.NotifyMobileLineStatusChange(notifyMobileLineChangeStatus, mobileLineStatus); + + // Hang up call. + TCoreEtelRequestStatus hangUpStatus (call1,&RCall::HangUpCancel); + CleanupStack::PushL(hangUpStatus); + call1.HangUp(hangUpStatus); + ASSERT_EQUALS(WaitForRequestWithTimeOut(hangUpStatus, ETimeMedium), KErrNone, + _L("RCall::HangUp timed-out")); + ASSERT_EQUALS(hangUpStatus.Int(), KErrNone, + _L("RCall::HangUp returned an error")); + + // === Check call status === + + // Check RCall::NotifyStatusChange completes with EStatusHangingUp -> EStatusIdle + expectedCallStatus = RCall::EStatusHangingUp; + const TInt wantedStatus = KErrNone; + iCallControlTestHelper.WaitForCallNotifyStatusChange(call1, + notifyStatusChangeStatus, + callStatus, + expectedCallStatus, + wantedStatus); + + call1.NotifyStatusChange(notifyStatusChangeStatus,callStatus); + expectedCallStatus = RCall::EStatusIdle; + iCallControlTestHelper.WaitForCallNotifyStatusChange(call1, + notifyStatusChangeStatus, + callStatus, + expectedCallStatus, + wantedStatus); + // Check RCall::GetStatus returns EStatusIdle. + ASSERT_EQUALS(call1.GetStatus(callStatus),KErrNone, + _L("RCall::GetStatus returned an error")); + ASSERT_EQUALS(callStatus, RCall::EStatusIdle, + _L("RCall::GetStatus returned an unexpected call status")); + + // Check RMobileCall::NotifyMobileCallStatusChange completes with EStatusDisconnecting -> EStatusIdle + expectedMobileCallStatus = RMobileCall::EStatusDisconnecting; + iCallControlTestHelper.WaitForMobileCallNotifyMobileCallStatusChange(call1, + notifyMobileCallChangeStatus, + mobileCallStatus, + expectedMobileCallStatus, + wantedStatus); + + call1.NotifyMobileCallStatusChange(notifyMobileCallChangeStatus, mobileCallStatus); + expectedMobileCallStatus = RMobileCall::EStatusIdle; + iCallControlTestHelper.WaitForMobileCallNotifyMobileCallStatusChange(call1, + notifyMobileCallChangeStatus, + mobileCallStatus, + expectedMobileCallStatus, + wantedStatus); + + // Check RMobileCall::GetMobileCallStatus returns status of EStatusIdle. + ASSERT_EQUALS(call1.GetMobileCallStatus(mobileCallStatus), KErrNone, + _L("RMobileCall::GetMobileStatus returned an error")); + ASSERT_EQUALS(mobileCallStatus, RMobileCall::EStatusIdle, + _L("RMobileCall::GetMobileStatus did not return a status EStatusIdle")); + + // === Check line status === + + // Check RLine::NotifyStatusChange completes with EStatusHangingUp -> EStatusIdle + expectedLineStatus = RCall::EStatusHangingUp; + iCallControlTestHelper.WaitForLineNotifyStatusChange(voiceLine, + notifyStatusChangeStatus, + lineStatus, + expectedLineStatus, + expectedStatus); + + voiceLine.NotifyStatusChange(notifyStatusChangeStatus,lineStatus); + expectedLineStatus = RCall::EStatusIdle; + iCallControlTestHelper.WaitForLineNotifyStatusChange(voiceLine, + notifyStatusChangeStatus, + lineStatus, + expectedLineStatus, + expectedStatus); + + // Check RLine::GetStatus returns EStatusIdle + ASSERT_EQUALS(voiceLine.GetStatus(lineStatus), KErrNone, + _L("RLine::GetStatus returned an error")); + ASSERT_EQUALS(lineStatus, RCall::EStatusIdle, + _L("RLine::GetStatus did not return EStatusIdle as expected")); + + // Check RMobileLine::NotifyMobileLineStatusChange completes with with EStatusDisconnecting -> EStatusIdle + expectedMobileLineStatus = RMobileCall::EStatusDisconnecting; + iCallControlTestHelper.WaitForMobileLineNotifyMobileLineStatusChange(voiceLine, + notifyMobileLineChangeStatus, + mobileLineStatus, + expectedMobileLineStatus, + expectedStatus); + + voiceLine.NotifyMobileLineStatusChange(notifyMobileLineChangeStatus, mobileLineStatus); + expectedMobileLineStatus = RMobileCall::EStatusIdle; + iCallControlTestHelper.WaitForMobileLineNotifyMobileLineStatusChange(voiceLine, + notifyMobileLineChangeStatus, + mobileLineStatus, + expectedMobileLineStatus, + expectedStatus); + + // Check RMobileLine::GetMobileLineStatus returns EStatusIdle + ASSERT_EQUALS(voiceLine.GetMobileLineStatus(mobileLineStatus), KErrNone, + _L("RMobileLine::GetMobileLineStatus returned an error")); + ASSERT_EQUALS(mobileLineStatus, RMobileCall::EStatusIdle, + _L("RMobileLine::GetMobileLineStatus did not set the status to EStatusIdle")); + + + //////////////////////////////////////////////////////////////// + // TEST END + //////////////////////////////////////////////////////////////// + + StartCleanup(); + + // Pop + // notifyCallStatusChangeStatus + // notifyMobileCallChangeStatus + // notifyStatusChangeStatus + // notifyMobileLineChangeStatus + // dialStatus + // hangUpStatus + CleanupStack::PopAndDestroy(6,¬ifyCallStatusChangeStatus); + + return TestStepResult(); + } + +TPtrC CCTSYIntegrationTestCallControl0010::GetTestStepName() +/** + * @return The test step name. + */ + { + return _L("CCTSYIntegrationTestCallControl0010"); + } + + + +CCTSYIntegrationTestCallControl0011::CCTSYIntegrationTestCallControl0011(CEtelSessionMgr& aEtelSessionMgr) + : CCTSYIntegrationTestCallControlBase(aEtelSessionMgr) +/** + * Constructor. + */ + { + SetTestStepName(CCTSYIntegrationTestCallControl0011::GetTestStepName()); + } + +CCTSYIntegrationTestCallControl0011::~CCTSYIntegrationTestCallControl0011() +/** + * Destructor. + */ + { + } + +TVerdict CCTSYIntegrationTestCallControl0011::doTestStepL() +/** + * @SYMTestCaseID BA-CTSY-INT-CCON-0011 + * @SYMFssID BA/CTSY/CCON-0011 + * @SYMTestCaseDesc Dial and hang up a call specifying valid call parameters 03. + * @SYMTestPriority High + * @SYMTestActions RMobileCall::NotifyMobileCallStatusChange, RCall::NotifyStatusChange, RLine::NotifyStatusChange, RMobileLine::GetMobileLineStatus, RMobileLine::NotifyMobileLineStatusChange, RLine::GetStatus, RMobileCall::GetMobileCallStatus, RCall::GetCallParams, RCall::GetStatus, RCall::GetCallParams, RCall::GetStatus, RCall::HangUp + * @SYMTestExpectedResults Pass - Call connects and call parameters are correct. + * @SYMTestType CIT + * @SYMTestCaseDependencies live/automatic + * + * Reason for test: Verify call and line statuses and call params are correct. + * + * @return - TVerdict code + */ + { + + //////////////////////////////////////////////////////////////// + // SET UP + //////////////////////////////////////////////////////////////// + + + // Check phone supports KCapsVoice + // Get Voice line 1 + RMobileLine& voiceLine = iEtelSessionMgr.GetLineL(KMainServer, KMainPhone, KVoiceLine); + // Get call 1 + RMobileCall& call1 = iEtelSessionMgr.GetCallL(KMainServer, KMainPhone, KVoiceLine, KCall1); + + RLine::TCaps lineCaps; + CHECK_EQUALS_L(voiceLine.GetCaps(lineCaps), KErrNone, + _L("RMobileLine::GetCaps returned an error")); + CHECK_BITS_SET_L(lineCaps.iFlags, RLine::KCapsVoice, KNoUnwantedBits, + _L("RLine::GetCaps returned wrong caps")); + + // Call TNetworkTsyTestHelper::WaitForRegisteredOnHomeNetworkL + RMobilePhone& phone = iEtelSessionMgr.GetPhoneL(KMainServer,KMainPhone); + CHECK_EQUALS_L(iNetworkTestHelper.WaitForRegisteredOnHomeNetworkL(phone), KErrNone, + _L("TNetworkTsyTestHelper::WaitForRegisteredOnHomeNetworkL returned with an error")); + + //////////////////////////////////////////////////////////////// + // SET UP END + //////////////////////////////////////////////////////////////// + + StartTest(); + + //////////////////////////////////////////////////////////////// + // TEST START + //////////////////////////////////////////////////////////////// + + + // Populate RMobileCall::TMobileCallParamsV1 with + RMobileCall::TMobileCallParamsV1 mobileCallParams; + RMobileCall::TMobileCallParamsV1Pckg mobileCallParamsPkg(mobileCallParams); + // • iSpeakerControl = EMonitorSpeakerControlUnknown + mobileCallParams.iSpeakerControl = RCall::EMonitorSpeakerControlUnknown; + // • iSpeakerVolume = EMonitorSpeakerVolumeUnknown + mobileCallParams.iSpeakerVolume = RCall::EMonitorSpeakerVolumeUnknown; + // • iInterval = 0x03 + mobileCallParams.iInterval = 0x03; + // • iWaitForDialTone = EDialToneWait + mobileCallParams.iWaitForDialTone = RCall::EDialToneWait; + // • iIdRestrict = EDontSendMyId + mobileCallParams.iIdRestrict = RMobileCall::EDontSendMyId; + // • iExplicitInvoke = TRUE + mobileCallParams.iCug.iExplicitInvoke = TRUE; + // • iCugIndex = 0x9c40 + mobileCallParams.iCug.iCugIndex = 0x9c40 ; + // • iSuppressOA = FALSE + mobileCallParams.iCug.iSuppressOA = FALSE; + // • iSuppressPrefCug = TRUE + mobileCallParams.iCug.iSuppressPrefCug = TRUE; + // • iAutoRedial = TRUE + mobileCallParams.iAutoRedial = TRUE; + + + + //=========Post Notifiers=============== + + // post notifier for RCall::NotifyStatusChange + TCoreEtelRequestStatus notifyCallStatusChangeStatus (call1,&RCall::NotifyStatusChangeCancel); + CleanupStack::PushL(notifyCallStatusChangeStatus); + RCall::TStatus callStatus; + call1.NotifyStatusChange(notifyCallStatusChangeStatus,callStatus); + + // post a notifier for RMobileCall::NotifyMobileCallStatusChange + TExtEtelRequestStatus notifyMobileCallChangeStatus(call1, EMobileCallNotifyMobileCallStatusChange); + CleanupStack::PushL(notifyMobileCallChangeStatus); + RMobileCall::TMobileCallStatus mobileCallStatus; + call1.NotifyMobileCallStatusChange(notifyMobileCallChangeStatus, mobileCallStatus); + + // post a notifier for RLine::NotifyStatusChange + TCoreEtelRequestStatus notifyStatusChangeStatus (voiceLine,&RLine::NotifyStatusChangeCancel); + CleanupStack::PushL(notifyStatusChangeStatus); + RCall::TStatus lineStatus; + voiceLine.NotifyStatusChange(notifyStatusChangeStatus,lineStatus); + + // post a notifier for RMobileLine::NotifyMobileLineStatusChange + TExtEtelRequestStatus notifyMobileLineChangeStatus(voiceLine, EMobileLineNotifyMobileLineStatusChange); + CleanupStack::PushL(notifyMobileLineChangeStatus); + RMobileCall::TMobileCallStatus mobileLineStatus; + voiceLine.NotifyMobileLineStatusChange(notifyMobileLineChangeStatus, mobileLineStatus); + + // Dial a number which answers using call params. + TCoreEtelRequestStatus dialStatus(call1, &RCall::DialCancel); + CleanupStack::PushL(dialStatus); + TPtrC number; + ASSERT_TRUE(GetStringFromConfig(KIniVoiceNumSection, KIniVoiceNumber1, number) != EFalse, + _L("GetStringFromConfig did not complete as expected")); + call1.Dial(dialStatus,mobileCallParamsPkg, number); + // Wait for completion. + ASSERT_EQUALS(WaitForRequestWithTimeOut(dialStatus, ETimeMedium), KErrNone, + _L("RCall::Dial timed-out")); + ASSERT_EQUALS(dialStatus.Int(), KErrNone, + _L("RCall::Dial returned an error")); + + // === Check line status === + TInt expectedStatus = KErrNone; + + // Check RLine::NotifyStatusChange completes with EStatusDialling -> EStatusConnecting -> EStatusConnected. + RCall::TStatus expectedLineStatus = RCall::EStatusDialling; + iCallControlTestHelper.WaitForLineNotifyStatusChange(voiceLine, + notifyStatusChangeStatus, + lineStatus, + expectedLineStatus, + expectedStatus); + + expectedLineStatus = RCall::EStatusConnecting; + voiceLine.NotifyStatusChange(notifyStatusChangeStatus, lineStatus); + iCallControlTestHelper.WaitForLineNotifyStatusChange(voiceLine, + notifyStatusChangeStatus, + lineStatus, + expectedLineStatus, + expectedStatus); + + expectedLineStatus = RCall::EStatusConnected; + voiceLine.NotifyStatusChange(notifyStatusChangeStatus, lineStatus); + iCallControlTestHelper.WaitForLineNotifyStatusChange(voiceLine, + notifyStatusChangeStatus, + lineStatus, + expectedLineStatus, + expectedStatus); + + // Check RLine::GetStatus returns EStatusConnected + ASSERT_EQUALS(voiceLine.GetStatus(lineStatus), KErrNone, + _L("RLine::GetStatus returned an error")); + ASSERT_EQUALS(lineStatus, RCall::EStatusConnected, + _L("RLine::GetStatus did not set line status to EStatusConnected as expected")); + + // Check RMobileLine::NotifyMobileLineStatusChange completes with with EStatusDialling -> EStatusConnecting -> EStatusConnected. + RMobileCall::TMobileCallStatus expectedMobileLineStatus = RMobileCall::EStatusDialling; + iCallControlTestHelper.WaitForMobileLineNotifyMobileLineStatusChange(voiceLine, + notifyMobileLineChangeStatus, + mobileLineStatus, + expectedMobileLineStatus, + expectedStatus); + + + voiceLine.NotifyMobileLineStatusChange(notifyMobileLineChangeStatus, mobileLineStatus); + expectedMobileLineStatus = RMobileCall::EStatusConnecting; + iCallControlTestHelper.WaitForMobileLineNotifyMobileLineStatusChange(voiceLine, + notifyMobileLineChangeStatus, + mobileLineStatus, + expectedMobileLineStatus, + expectedStatus); + + voiceLine.NotifyMobileLineStatusChange(notifyMobileLineChangeStatus, mobileLineStatus); + expectedMobileLineStatus = RMobileCall::EStatusConnected; + iCallControlTestHelper.WaitForMobileLineNotifyMobileLineStatusChange(voiceLine, + notifyMobileLineChangeStatus, + mobileLineStatus, + expectedMobileLineStatus, + expectedStatus); + + // Check RMobileLine::GetMobileLineStatus returns EStatusConnected + ASSERT_EQUALS(voiceLine.GetMobileLineStatus(mobileLineStatus), KErrNone, + _L("RMobileLine::GetMobileLineStatus returned an error")); + ASSERT_EQUALS(mobileLineStatus, RMobileCall::EStatusConnected, + _L("RMobileLine::GetMobileLineStatus did not set status to EStatusConnected")); + + // === Check call status === + + // Check RCall::NotifyStatusChange completes with EStatusDialling -> EStatusConnecting -> EStatusConnected. + RCall::TStatus expectedCallStatus = RCall::EStatusDialling; + + iCallControlTestHelper.WaitForCallNotifyStatusChange(call1, + notifyCallStatusChangeStatus, + callStatus, + expectedCallStatus, + expectedStatus); + + call1.NotifyStatusChange(notifyCallStatusChangeStatus,callStatus); + expectedCallStatus = RCall::EStatusConnecting; + iCallControlTestHelper.WaitForCallNotifyStatusChange(call1, + notifyCallStatusChangeStatus, + callStatus, + expectedCallStatus, + expectedStatus); + + call1.NotifyStatusChange(notifyCallStatusChangeStatus,callStatus); + expectedCallStatus = RCall::EStatusConnected; + iCallControlTestHelper.WaitForCallNotifyStatusChange(call1, + notifyCallStatusChangeStatus, + callStatus, + expectedCallStatus, + expectedStatus); + + // Check RCall::GetStatus returns EStatusConnected. + ASSERT_EQUALS(voiceLine.GetStatus(callStatus), KErrNone, + _L("RLine::GetStatus returned an error")); + ASSERT_EQUALS(callStatus, RCall::EStatusConnected, + _L("RLine::GetStatus did not return EStatusConnected as expected")); + + // Check RMobileCall::NotifyMobileCallStatusChange completes with EStatusDialling -> EStatusConnecting -> EStatusConnected. + RMobileCall::TMobileCallStatus expectedMobileCallStatus = RMobileCall::EStatusDialling; + iCallControlTestHelper.WaitForMobileCallNotifyMobileCallStatusChange(call1, + notifyMobileCallChangeStatus, + mobileCallStatus, + expectedMobileCallStatus, + expectedStatus); + + expectedMobileCallStatus = RMobileCall::EStatusConnecting; + call1.NotifyMobileCallStatusChange(notifyMobileCallChangeStatus, mobileCallStatus); + iCallControlTestHelper.WaitForMobileCallNotifyMobileCallStatusChange(call1, + notifyMobileCallChangeStatus, + mobileCallStatus, + expectedMobileCallStatus, + expectedStatus); + + expectedMobileCallStatus = RMobileCall::EStatusConnected; + call1.NotifyMobileCallStatusChange(notifyMobileCallChangeStatus, mobileCallStatus); + iCallControlTestHelper.WaitForMobileCallNotifyMobileCallStatusChange(call1, + notifyMobileCallChangeStatus, + mobileCallStatus, + expectedMobileCallStatus, + expectedStatus); + + // Check RMobileCall::GetMobileCallStatus returns status of EStatusConnected. + ASSERT_EQUALS(call1.GetMobileCallStatus(mobileCallStatus), KErrNone, + _L("RMobileCall::GetMobileCallStatus returned an error")); + ASSERT_EQUALS(mobileCallStatus, RMobileCall::EStatusConnected, + _L("RMobileCall::GetMobileCallStatus did not set call status EStatusConnected as expected")); + + // === Get call parameters. === + RMobileCall::TMobileCallParamsV1 checkParams; + RMobileCall::TMobileCallParamsV1Pckg checkParamsPkg(checkParams); + call1.GetCallParams(checkParamsPkg); + + // Check RCall::GetCallParams with aParams as a packaged RMobileCall::TMobileCallParamsV1 returns same iSpeakerControl as that used for Dial. + ASSERT_EQUALS(checkParams.iSpeakerControl, mobileCallParams.iSpeakerControl, + _L("RCall::GetCallParams did not return the same iSpeakerControl as that used for Dial")); + // Check RCall::GetCallParams with aParams as a packaged RMobileCall::TMobileCallParamsV1 returns same iSpeakerVolume as that used for Dial. + ASSERT_EQUALS(checkParams.iSpeakerVolume, mobileCallParams.iSpeakerVolume, + _L("RCall::GetCallParams did not return the same iSpeakerVolume as that used for Dial")); + // Check RCall::GetCallParams with aParams as a packaged RMobileCall::TMobileCallParamsV1 returns same iInterval as that used for Dial. + ASSERT_EQUALS(checkParams.iInterval, mobileCallParams.iInterval, + _L("RCall::GetCallParams did not return the same iInterval as that used for Dial")); + // Check RCall::GetCallParams with aParams as a packaged RMobileCall::TMobileCallParamsV1 returns same iWaitForDialTone as that used for Dial. + ASSERT_EQUALS(checkParams.iWaitForDialTone, mobileCallParams.iWaitForDialTone, + _L("RCall::GetCallParams did not return the same iWaitForDialTone as that used for Dial")); + // Check RCall::GetCallParams with aParams as a packaged RMobileCall::TMobileCallParamsV1 returns same iIdRestrict as that used for Dial. + ASSERT_EQUALS(checkParams.iIdRestrict, mobileCallParams.iIdRestrict, + _L("RCall::GetCallParams did not return the same iIdRestrict as that used for Dial")); + // Check RCall::GetCallParams with aParams as a packaged RMobileCall::TMobileCallParamsV1 returns same iCug.iExplicitInvoke as that used for Dial. + ASSERT_EQUALS(checkParams.iCug.iExplicitInvoke, mobileCallParams.iCug.iExplicitInvoke, + _L("RCall::GetCallParams did not return the same iCug.iExplicitInvoke as that used for Dial")); + // Check RCall::GetCallParams with aParams as a packaged RMobileCall::TMobileCallParamsV1 returns same iCug.iCugIndex as that used for Dial. + ASSERT_EQUALS(checkParams.iCug.iCugIndex, mobileCallParams.iCug.iCugIndex, + _L("RCall::GetCallParams did not return the same iCug.iCugIndex as that used for Dial")); + // Check RCall::GetCallParams with aParams as a packaged RMobileCall::TMobileCallParamsV1 returns same iCug.iSuppressPrefCug as that used for Dial. + ASSERT_EQUALS(checkParams.iCug.iSuppressPrefCug, mobileCallParams.iCug.iSuppressPrefCug, + _L("RCall::GetCallParams did not return the same iCug.iSuppressPrefCug as that used for Dial")); + // Check RCall::GetCallParams with aParams as a packaged RMobileCall::TMobileCallParamsV1 returns same iCug.iSuppressOA as that used for Dial. + ASSERT_EQUALS(checkParams.iCug.iSuppressOA, mobileCallParams.iCug.iSuppressOA, + _L("RCall::GetCallParams did not return the same iCug.iSuppressOA as that used for Dial")); + // Check RCall::GetCallParams with aParams as a packaged RMobileCall::TMobileCallParamsV1 returns same iAutoRedial as that used for Dial. + ASSERT_EQUALS(checkParams.iAutoRedial, mobileCallParams.iAutoRedial, + _L("RCall::GetCallParams did not return the same iAutoRedial as that used for Dial")); + + //------------ Post Notifiers ---------------------------- + call1.NotifyStatusChange(notifyCallStatusChangeStatus,callStatus); + call1.NotifyMobileCallStatusChange(notifyMobileCallChangeStatus, mobileCallStatus); + voiceLine.NotifyStatusChange(notifyStatusChangeStatus,lineStatus); + voiceLine.NotifyMobileLineStatusChange(notifyMobileLineChangeStatus, mobileLineStatus); + + // Hang up call. + TCoreEtelRequestStatus hangUpStatus (call1,&RCall::HangUpCancel); + CleanupStack::PushL(hangUpStatus); + call1.HangUp(hangUpStatus); + ASSERT_EQUALS(WaitForRequestWithTimeOut(hangUpStatus, ETimeMedium), KErrNone, + _L("RCall::HangUp timed-out")); + ASSERT_EQUALS(hangUpStatus.Int(), KErrNone, + _L("RCall::HangUp returned an error")); + + // === Check call status === + // Check RCall::NotifyStatusChange completes with EStatusHangingUp -> EStatusIdle + expectedCallStatus = RCall::EStatusHangingUp; + const TInt wantedStatus = KErrNone; + iCallControlTestHelper.WaitForCallNotifyStatusChange(call1, + notifyStatusChangeStatus, + callStatus, + expectedCallStatus, + wantedStatus); + + call1.NotifyStatusChange(notifyStatusChangeStatus,callStatus); + expectedCallStatus = RCall::EStatusIdle; + iCallControlTestHelper.WaitForCallNotifyStatusChange(call1, + notifyStatusChangeStatus, + callStatus, + expectedCallStatus, + wantedStatus); + // Check RCall::GetStatus returns EStatusIdle. + ASSERT_EQUALS(call1.GetStatus(callStatus),KErrNone, + _L("RCall::GetStatus returned an error")); + ASSERT_EQUALS(callStatus, RCall::EStatusIdle, + _L("RCall::GetStatus returned an unexpected call status")); + + // Check RMobileCall::NotifyMobileCallStatusChange completes with EStatusDisconnecting -> EStatusIdle + expectedMobileCallStatus = RMobileCall::EStatusDisconnecting; + iCallControlTestHelper.WaitForMobileCallNotifyMobileCallStatusChange(call1, + notifyMobileCallChangeStatus, + mobileCallStatus, + expectedMobileCallStatus, + wantedStatus); + + call1.NotifyMobileCallStatusChange(notifyMobileCallChangeStatus, mobileCallStatus); + expectedMobileCallStatus = RMobileCall::EStatusIdle; + iCallControlTestHelper.WaitForMobileCallNotifyMobileCallStatusChange(call1, + notifyMobileCallChangeStatus, + mobileCallStatus, + expectedMobileCallStatus, + wantedStatus); + + // Check RMobileCall::GetMobileCallStatus returns status of EStatusIdle. + ASSERT_EQUALS(call1.GetMobileCallStatus(mobileCallStatus), KErrNone, + _L("RMobileCall::GetMobileStatus returned an error")); + ASSERT_EQUALS(mobileCallStatus, RMobileCall::EStatusIdle, + _L("RMobileCall::GetMobileStatus did not return a status EStatusIdle")); + + // === Check line status === + + // Check RLine::NotifyStatusChange completes with EStatusHangingUp -> EStatusIdle + expectedLineStatus = RCall::EStatusHangingUp; + iCallControlTestHelper.WaitForLineNotifyStatusChange(voiceLine, + notifyStatusChangeStatus, + lineStatus, + expectedLineStatus, + expectedStatus); + + voiceLine.NotifyStatusChange(notifyStatusChangeStatus,lineStatus); + expectedLineStatus = RCall::EStatusIdle; + iCallControlTestHelper.WaitForLineNotifyStatusChange(voiceLine, + notifyStatusChangeStatus, + lineStatus, + expectedLineStatus, + expectedStatus); + + // Check RLine::GetStatus returns EStatusIdle + ASSERT_EQUALS(voiceLine.GetStatus(lineStatus), KErrNone, + _L("RLine::GetStatus returned an error")); + ASSERT_EQUALS(lineStatus, RCall::EStatusIdle, + _L("RLine::GetStatus did not return EStatusIdle as expected")); + + // Check RMobileLine::NotifyMobileLineStatusChange completes with with EStatusDisconnecting -> EStatusIdle + expectedMobileLineStatus = RMobileCall::EStatusDisconnecting; + iCallControlTestHelper.WaitForMobileLineNotifyMobileLineStatusChange(voiceLine, + notifyMobileLineChangeStatus, + mobileLineStatus, + expectedMobileLineStatus, + expectedStatus); + + voiceLine.NotifyMobileLineStatusChange(notifyMobileLineChangeStatus, mobileLineStatus); + expectedMobileLineStatus = RMobileCall::EStatusIdle; + iCallControlTestHelper.WaitForMobileLineNotifyMobileLineStatusChange(voiceLine, + notifyMobileLineChangeStatus, + mobileLineStatus, + expectedMobileLineStatus, + expectedStatus); + + // Check RMobileLine::GetMobileLineStatus returns EStatusIdle + ASSERT_EQUALS(voiceLine.GetMobileLineStatus(mobileLineStatus), KErrNone, + _L("RMobileLine::GetMobileLineStatus returned an error")); + ASSERT_EQUALS(mobileLineStatus, RMobileCall::EStatusIdle, + _L("RMobileLine::GetMobileLineStatus did not set the status to EStatusIdle")); + + + //////////////////////////////////////////////////////////////// + // TEST END + //////////////////////////////////////////////////////////////// + + StartCleanup(); + + // Pop + // notifyCallStatusChangeStatus + // notifyMobileCallChangeStatus + // notifyStatusChangeStatus + // notifyMobileLineChangeStatus + // dialStatus + // hangUpStatus + CleanupStack::PopAndDestroy(6,¬ifyCallStatusChangeStatus); + + return TestStepResult(); + } + +TPtrC CCTSYIntegrationTestCallControl0011::GetTestStepName() +/** + * @return The test step name. + */ + { + return _L("CCTSYIntegrationTestCallControl0011"); + } + + + +CCTSYIntegrationTestCallControl0012::CCTSYIntegrationTestCallControl0012(CEtelSessionMgr& aEtelSessionMgr) + : CCTSYIntegrationTestCallControlBase(aEtelSessionMgr) +/** + * Constructor. + */ + { + SetTestStepName(CCTSYIntegrationTestCallControl0012::GetTestStepName()); + } + +CCTSYIntegrationTestCallControl0012::~CCTSYIntegrationTestCallControl0012() +/** + * Destructor. + */ + { + } + +TVerdict CCTSYIntegrationTestCallControl0012::doTestStepL() +/** + * @SYMTestCaseID BA-CTSY-INT-CCON-0012 + * @SYMFssID BA/CTSY/CCON-0012 + * @SYMTestCaseDesc Dial and hang up a call specifying valid call parameters 04. + * @SYMTestPriority High + * @SYMTestActions RMobileCall::NotifyMobileCallStatusChange, RCall::NotifyStatusChange, RLine::NotifyStatusChange, RMobileLine::GetMobileLineStatus, RMobileLine::NotifyMobileLineStatusChange, RLine::GetStatus, RMobileCall::GetMobileCallStatus, RCall::GetCallParams, RCall::GetStatus, RCall::GetCallParams, RCall::GetStatus, RCall::HangUp + * @SYMTestExpectedResults Pass - Call connects and call parameters are correct. + * @SYMTestType CIT + * @SYMTestCaseDependencies live/automatic + * + * Reason for test: Verify call and line statuses and call params are correct. + * + * @return - TVerdict code + */ + { + + //////////////////////////////////////////////////////////////// + // SET UP + //////////////////////////////////////////////////////////////// + + + // Check phone supports KCapsVoice + // Get Voice line 1 + RMobileLine& voiceLine = iEtelSessionMgr.GetLineL(KMainServer, KMainPhone, KVoiceLine); + // Get call 1 + RMobileCall& call1 = iEtelSessionMgr.GetCallL(KMainServer, KMainPhone, KVoiceLine, KCall1); + + RLine::TCaps lineCaps; + CHECK_EQUALS_L(voiceLine.GetCaps(lineCaps), KErrNone, + _L("RMobileLine::GetCaps returned an error")); + CHECK_BITS_SET_L(lineCaps.iFlags, RLine::KCapsVoice, KNoUnwantedBits, + _L("RLine::GetCaps returned wrong caps")); + + // Call TNetworkTsyTestHelper::WaitForRegisteredOnHomeNetworkL + RMobilePhone& phone = iEtelSessionMgr.GetPhoneL(KMainServer,KMainPhone); + CHECK_EQUALS_L(iNetworkTestHelper.WaitForRegisteredOnHomeNetworkL(phone), KErrNone, + _L("TNetworkTsyTestHelper::WaitForRegisteredOnHomeNetworkL returned with an error")); + + //////////////////////////////////////////////////////////////// + // SET UP END + //////////////////////////////////////////////////////////////// + + StartTest(); + + //////////////////////////////////////////////////////////////// + // TEST START + //////////////////////////////////////////////////////////////// + + + // Populate RMobileCall::TMobileCallParamsV1 with + RMobileCall::TMobileCallParamsV1 mobileCallParams; + RMobileCall::TMobileCallParamsV1Pckg mobileCallParamsPkg(mobileCallParams); + + // • iSpeakerControl = EMonitorSpeakerControlOnExceptDuringDialling + mobileCallParams.iSpeakerControl = RCall::EMonitorSpeakerControlOnExceptDuringDialling; + // • iSpeakerVolume = EMonitorSpeakerVolumeUnknown + mobileCallParams.iSpeakerVolume = RCall::EMonitorSpeakerVolumeUnknown; + // • iInterval = 0x02 + mobileCallParams.iInterval = 0x02; + // • iWaitForDialTone = EDialToneWait + mobileCallParams.iWaitForDialTone = RCall::EDialToneWait; + // • iIdRestrict = ESendMyId + mobileCallParams.iIdRestrict = RMobileCall::ESendMyId; + // • iExplicitInvoke = FALSE + mobileCallParams.iCug.iExplicitInvoke = FALSE ; + // • iCugIndex = 0x00 + mobileCallParams.iCug.iCugIndex = 0x0000; + // • iSuppressOA = FALSE + mobileCallParams.iCug.iSuppressOA = FALSE; + // • iSuppressPrefCug = FALSE + mobileCallParams.iCug.iSuppressPrefCug = FALSE; + // • iAutoRedial = FALSE + mobileCallParams.iAutoRedial = FALSE; + + //=========Post Notifiers=============== + + // post notifier for RCall::NotifyStatusChange + TCoreEtelRequestStatus notifyCallStatusChangeStatus (call1,&RCall::NotifyStatusChangeCancel); + CleanupStack::PushL(notifyCallStatusChangeStatus); + RCall::TStatus callStatus; + call1.NotifyStatusChange(notifyCallStatusChangeStatus,callStatus); + + // post a notifier for RMobileCall::NotifyMobileCallStatusChange + TExtEtelRequestStatus notifyMobileCallChangeStatus(call1, EMobileCallNotifyMobileCallStatusChange); + CleanupStack::PushL(notifyMobileCallChangeStatus); + RMobileCall::TMobileCallStatus mobileCallStatus; + call1.NotifyMobileCallStatusChange(notifyMobileCallChangeStatus, mobileCallStatus); + + // post a notifier for RLine::NotifyStatusChange + TCoreEtelRequestStatus notifyStatusChangeStatus (voiceLine,&RLine::NotifyStatusChangeCancel); + CleanupStack::PushL(notifyStatusChangeStatus); + RCall::TStatus lineStatus; + voiceLine.NotifyStatusChange(notifyStatusChangeStatus,lineStatus); + + // post a notifier for RMobileLine::NotifyMobileLineStatusChange + TExtEtelRequestStatus notifyMobileLineChangeStatus(voiceLine, EMobileLineNotifyMobileLineStatusChange); + CleanupStack::PushL(notifyMobileLineChangeStatus); + RMobileCall::TMobileCallStatus mobileLineStatus; + voiceLine.NotifyMobileLineStatusChange(notifyMobileLineChangeStatus, mobileLineStatus); + + // Dial a number which answers using call params. + TCoreEtelRequestStatus dialStatus(call1, &RCall::DialCancel); + CleanupStack::PushL(dialStatus); + TPtrC number; + ASSERT_TRUE(GetStringFromConfig(KIniVoiceNumSection, KIniVoiceNumber1, number) != EFalse, + _L("GetStringFromConfig did not complete as expected")); + call1.Dial(dialStatus,mobileCallParamsPkg, number); + // Wait for completion. + ASSERT_EQUALS(WaitForRequestWithTimeOut(dialStatus, ETimeMedium), KErrNone, + _L("RCall::Dial timed-out")); + ASSERT_EQUALS(dialStatus.Int(), KErrNone, + _L("RCall::Dial returned an error")); + + // === Check line status === + + TInt expectedStatus = KErrNone; + + // Check RLine::NotifyStatusChange completes with EStatusDialling -> EStatusConnecting -> EStatusConnected. + RCall::TStatus expectedLineStatus = RCall::EStatusDialling; + iCallControlTestHelper.WaitForLineNotifyStatusChange(voiceLine, + notifyStatusChangeStatus, + lineStatus, + expectedLineStatus, + expectedStatus); + + expectedLineStatus = RCall::EStatusConnecting; + voiceLine.NotifyStatusChange(notifyStatusChangeStatus, lineStatus); + iCallControlTestHelper.WaitForLineNotifyStatusChange(voiceLine, + notifyStatusChangeStatus, + lineStatus, + expectedLineStatus, + expectedStatus); + + expectedLineStatus = RCall::EStatusConnected; + voiceLine.NotifyStatusChange(notifyStatusChangeStatus, lineStatus); + iCallControlTestHelper.WaitForLineNotifyStatusChange(voiceLine, + notifyStatusChangeStatus, + lineStatus, + expectedLineStatus, + expectedStatus); + + // Check RLine::GetStatus returns EStatusConnected + ASSERT_EQUALS(voiceLine.GetStatus(lineStatus), KErrNone, + _L("RLine::GetStatus returned an error")); + ASSERT_EQUALS(lineStatus, RCall::EStatusConnected, + _L("RLine::GetStatus did not set line status to EStatusConnected as expected")); + + // Check RMobileLine::NotifyMobileLineStatusChange completes with with EStatusDialling -> EStatusConnecting -> EStatusConnected. + RMobileCall::TMobileCallStatus expectedMobileLineStatus = RMobileCall::EStatusDialling; + iCallControlTestHelper.WaitForMobileLineNotifyMobileLineStatusChange(voiceLine, + notifyMobileLineChangeStatus, + mobileLineStatus, + expectedMobileLineStatus, + expectedStatus); + + voiceLine.NotifyMobileLineStatusChange(notifyMobileLineChangeStatus, mobileLineStatus); + expectedMobileLineStatus = RMobileCall::EStatusConnecting; + iCallControlTestHelper.WaitForMobileLineNotifyMobileLineStatusChange(voiceLine, + notifyMobileLineChangeStatus, + mobileLineStatus, + expectedMobileLineStatus, + expectedStatus); + + voiceLine.NotifyMobileLineStatusChange(notifyMobileLineChangeStatus, mobileLineStatus); + expectedMobileLineStatus = RMobileCall::EStatusConnected; + iCallControlTestHelper.WaitForMobileLineNotifyMobileLineStatusChange(voiceLine, + notifyMobileLineChangeStatus, + mobileLineStatus, + expectedMobileLineStatus, + expectedStatus); + + // Check RMobileLine::GetMobileLineStatus returns EStatusConnected + ASSERT_EQUALS(voiceLine.GetMobileLineStatus(mobileLineStatus), KErrNone, + _L("RMobileLine::GetMobileLineStatus returned an error")); + ASSERT_EQUALS(mobileLineStatus, RMobileCall::EStatusConnected, + _L("RMobileLine::GetMobileLineStatus did not set status to EStatusConnected")); + + // === Check call status === + + // Check RCall::NotifyStatusChange completes with EStatusDialling -> EStatusConnecting -> EStatusConnected. + RCall::TStatus expectedCallStatus = RCall::EStatusDialling; + + iCallControlTestHelper.WaitForCallNotifyStatusChange(call1, + notifyCallStatusChangeStatus, + callStatus, + expectedCallStatus, + expectedStatus); + + call1.NotifyStatusChange(notifyCallStatusChangeStatus,callStatus); + expectedCallStatus = RCall::EStatusConnecting; + iCallControlTestHelper.WaitForCallNotifyStatusChange(call1, + notifyCallStatusChangeStatus, + callStatus, + expectedCallStatus, + expectedStatus); + + call1.NotifyStatusChange(notifyCallStatusChangeStatus,callStatus); + expectedCallStatus = RCall::EStatusConnected; + iCallControlTestHelper.WaitForCallNotifyStatusChange(call1, + notifyCallStatusChangeStatus, + callStatus, + expectedCallStatus, + expectedStatus); + + // Check RCall::GetStatus returns EStatusConnected. + ASSERT_EQUALS(voiceLine.GetStatus(callStatus), KErrNone, + _L("RLine::GetStatus returned an error")); + ASSERT_EQUALS(callStatus, RCall::EStatusConnected, + _L("RLine::GetStatus did not return EStatusConnected as expected")); + + // Check RMobileCall::NotifyMobileCallStatusChange completes with EStatusDialling -> EStatusConnecting -> EStatusConnected. + RMobileCall::TMobileCallStatus expectedMobileCallStatus = RMobileCall::EStatusDialling; + iCallControlTestHelper.WaitForMobileCallNotifyMobileCallStatusChange(call1, + notifyMobileCallChangeStatus, + mobileCallStatus, + expectedMobileCallStatus, + expectedStatus); + + expectedMobileCallStatus = RMobileCall::EStatusConnecting; + call1.NotifyMobileCallStatusChange(notifyMobileCallChangeStatus, mobileCallStatus); + iCallControlTestHelper.WaitForMobileCallNotifyMobileCallStatusChange(call1, + notifyMobileCallChangeStatus, + mobileCallStatus, + expectedMobileCallStatus, + expectedStatus); + + expectedMobileCallStatus = RMobileCall::EStatusConnected; + call1.NotifyMobileCallStatusChange(notifyMobileCallChangeStatus, mobileCallStatus); + iCallControlTestHelper.WaitForMobileCallNotifyMobileCallStatusChange(call1, + notifyMobileCallChangeStatus, + mobileCallStatus, + expectedMobileCallStatus, + expectedStatus); + + // Check RMobileCall::GetMobileCallStatus returns status of EStatusConnected. + ASSERT_EQUALS(call1.GetMobileCallStatus(mobileCallStatus), KErrNone, + _L("RMobileCall::GetMobileCallStatus returned an error")); + ASSERT_EQUALS(mobileCallStatus, RMobileCall::EStatusConnected, + _L("RMobileCall::GetMobileCallStatus did not set call status EStatusConnected as expected")); + + // === Get call parameters. === + RMobileCall::TMobileCallParamsV1 checkParams; + RMobileCall::TMobileCallParamsV1Pckg checkParamsPkg(checkParams); + call1.GetCallParams(checkParamsPkg); + + // Check RCall::GetCallParams with aParams as a packaged RMobileCall::TMobileCallParamsV1 returns same iSpeakerControl as that used for Dial. + ASSERT_EQUALS(checkParams.iSpeakerControl, mobileCallParams.iSpeakerControl, + _L("RCall::GetCallParams did not return the same iSpeakerControl as that used for Dial")); + // Check RCall::GetCallParams with aParams as a packaged RMobileCall::TMobileCallParamsV1 returns same iSpeakerVolume as that used for Dial. + ASSERT_EQUALS(checkParams.iSpeakerVolume, mobileCallParams.iSpeakerVolume, + _L("RCall::GetCallParams did not return the same iSpeakerVolume as that used for Dial")); + // Check RCall::GetCallParams with aParams as a packaged RMobileCall::TMobileCallParamsV1 returns same iInterval as that used for Dial. + ASSERT_EQUALS(checkParams.iInterval, mobileCallParams.iInterval, + _L("RCall::GetCallParams did not return the same iInterval as that used for Dial")); + // Check RCall::GetCallParams with aParams as a packaged RMobileCall::TMobileCallParamsV1 returns same iWaitForDialTone as that used for Dial. + ASSERT_EQUALS(checkParams.iWaitForDialTone, mobileCallParams.iWaitForDialTone, + _L("RCall::GetCallParams did not return the same iWaitForDialTone as that used for Dial")); + // Check RCall::GetCallParams with aParams as a packaged RMobileCall::TMobileCallParamsV1 returns same iIdRestrict as that used for Dial. + ASSERT_EQUALS(checkParams.iIdRestrict, mobileCallParams.iIdRestrict, + _L("RCall::GetCallParams did not return the same iIdRestrict as that used for Dial")); + // Check RCall::GetCallParams with aParams as a packaged RMobileCall::TMobileCallParamsV1 returns same iCug.iExplicitInvoke as that used for Dial. + ASSERT_EQUALS(checkParams.iCug.iExplicitInvoke, mobileCallParams.iCug.iExplicitInvoke, + _L("RCall::GetCallParams did not return the same iCug.iExplicitInvoke as that used for Dial")); + // Check RCall::GetCallParams with aParams as a packaged RMobileCall::TMobileCallParamsV1 returns same iCug.iCugIndex as that used for Dial. + ASSERT_EQUALS(checkParams.iCug.iCugIndex, mobileCallParams.iCug.iCugIndex, + _L("RCall::GetCallParams did not return the same iCug.iCugIndex as that used for Dial")); + // Check RCall::GetCallParams with aParams as a packaged RMobileCall::TMobileCallParamsV1 returns same iCug.iSuppressPrefCug as that used for Dial. + ASSERT_EQUALS(checkParams.iCug.iSuppressPrefCug, mobileCallParams.iCug.iSuppressPrefCug, + _L("RCall::GetCallParams did not return the same iCug.iSuppressPrefCug as that used for Dial")); + // Check RCall::GetCallParams with aParams as a packaged RMobileCall::TMobileCallParamsV1 returns same iCug.iSuppressOA as that used for Dial. + ASSERT_EQUALS(checkParams.iCug.iSuppressOA, mobileCallParams.iCug.iSuppressOA, + _L("RCall::GetCallParams did not return the same iCug.iSuppressOA as that used for Dial")); + // Check RCall::GetCallParams with aParams as a packaged RMobileCall::TMobileCallParamsV1 returns same iAutoRedial as that used for Dial. + ASSERT_EQUALS(checkParams.iAutoRedial, mobileCallParams.iAutoRedial, + _L("RCall::GetCallParams did not return the same iAutoRedial as that used for Dial")); + + //------------ Post Notifiers ---------------------------- + call1.NotifyStatusChange(notifyCallStatusChangeStatus,callStatus); + call1.NotifyMobileCallStatusChange(notifyMobileCallChangeStatus, mobileCallStatus); + voiceLine.NotifyStatusChange(notifyStatusChangeStatus,lineStatus); + voiceLine.NotifyMobileLineStatusChange(notifyMobileLineChangeStatus, mobileLineStatus); + + // Hang up call. + TCoreEtelRequestStatus hangUpStatus (call1,&RCall::HangUpCancel); + CleanupStack::PushL(hangUpStatus); + call1.HangUp(hangUpStatus); + ASSERT_EQUALS(WaitForRequestWithTimeOut(hangUpStatus, ETimeMedium), KErrNone, + _L("RCall::HangUp timed-out")); + ASSERT_EQUALS(hangUpStatus.Int(), KErrNone, + _L("RCall::HangUp returned an error")); + + // === Check call status === + // Check RCall::NotifyStatusChange completes with EStatusHangingUp -> EStatusIdle + expectedCallStatus = RCall::EStatusHangingUp; + const TInt wantedStatus = KErrNone; + iCallControlTestHelper.WaitForCallNotifyStatusChange(call1, + notifyStatusChangeStatus, + callStatus, + expectedCallStatus, + wantedStatus); + + call1.NotifyStatusChange(notifyStatusChangeStatus,callStatus); + expectedCallStatus = RCall::EStatusIdle; + iCallControlTestHelper.WaitForCallNotifyStatusChange(call1, + notifyStatusChangeStatus, + callStatus, + expectedCallStatus, + wantedStatus); + // Check RCall::GetStatus returns EStatusIdle. + ASSERT_EQUALS(call1.GetStatus(callStatus),KErrNone, + _L("RCall::GetStatus returned an error")); + ASSERT_EQUALS(callStatus, RCall::EStatusIdle, + _L("RCall::GetStatus returned an unexpected call status")); + + // Check RMobileCall::NotifyMobileCallStatusChange completes with EStatusDisconnecting -> EStatusIdle + expectedMobileCallStatus = RMobileCall::EStatusDisconnecting; + iCallControlTestHelper.WaitForMobileCallNotifyMobileCallStatusChange(call1, + notifyMobileCallChangeStatus, + mobileCallStatus, + expectedMobileCallStatus, + wantedStatus); + + call1.NotifyMobileCallStatusChange(notifyMobileCallChangeStatus, mobileCallStatus); + expectedMobileCallStatus = RMobileCall::EStatusIdle; + iCallControlTestHelper.WaitForMobileCallNotifyMobileCallStatusChange(call1, + notifyMobileCallChangeStatus, + mobileCallStatus, + expectedMobileCallStatus, + wantedStatus); + + // Check RMobileCall::GetMobileCallStatus returns status of EStatusIdle. + ASSERT_EQUALS(call1.GetMobileCallStatus(mobileCallStatus), KErrNone, + _L("RMobileCall::GetMobileStatus returned an error")); + ASSERT_EQUALS(mobileCallStatus, RMobileCall::EStatusIdle, + _L("RMobileCall::GetMobileStatus did not return a status EStatusIdle")); + + // === Check line status === + + // Check RLine::NotifyStatusChange completes with EStatusHangingUp -> EStatusIdle + expectedLineStatus = RCall::EStatusHangingUp; + iCallControlTestHelper.WaitForLineNotifyStatusChange(voiceLine, + notifyStatusChangeStatus, + lineStatus, + expectedLineStatus, + expectedStatus); + + voiceLine.NotifyStatusChange(notifyStatusChangeStatus,lineStatus); + expectedLineStatus = RCall::EStatusIdle; + iCallControlTestHelper.WaitForLineNotifyStatusChange(voiceLine, + notifyStatusChangeStatus, + lineStatus, + expectedLineStatus, + expectedStatus); + + // Check RLine::GetStatus returns EStatusIdle + ASSERT_EQUALS(voiceLine.GetStatus(lineStatus), KErrNone, + _L("RLine::GetStatus returned an error")); + ASSERT_EQUALS(lineStatus, RCall::EStatusIdle, + _L("RLine::GetStatus did not return EStatusIdle as expected")); + + // Check RMobileLine::NotifyMobileLineStatusChange completes with with EStatusDisconnecting -> EStatusIdle + expectedMobileLineStatus = RMobileCall::EStatusDisconnecting; + iCallControlTestHelper.WaitForMobileLineNotifyMobileLineStatusChange(voiceLine, + notifyMobileLineChangeStatus, + mobileLineStatus, + expectedMobileLineStatus, + expectedStatus); + + voiceLine.NotifyMobileLineStatusChange(notifyMobileLineChangeStatus, mobileLineStatus); + expectedMobileLineStatus = RMobileCall::EStatusIdle; + iCallControlTestHelper.WaitForMobileLineNotifyMobileLineStatusChange(voiceLine, + notifyMobileLineChangeStatus, + mobileLineStatus, + expectedMobileLineStatus, + expectedStatus); + + // Check RMobileLine::GetMobileLineStatus returns EStatusIdle + ASSERT_EQUALS(voiceLine.GetMobileLineStatus(mobileLineStatus), KErrNone, + _L("RMobileLine::GetMobileLineStatus returned an error")); + ASSERT_EQUALS(mobileLineStatus, RMobileCall::EStatusIdle, + _L("RMobileLine::GetMobileLineStatus did not set the status to EStatusIdle")); + + + + //////////////////////////////////////////////////////////////// + // TEST END + //////////////////////////////////////////////////////////////// + + StartCleanup(); + + // Pop + // notifyCallStatusChangeStatus + // notifyMobileCallChangeStatus + // notifyStatusChangeStatus + // notifyMobileLineChangeStatus + // dialStatus + // hangUpStatus + CleanupStack::PopAndDestroy(6,¬ifyCallStatusChangeStatus); + + return TestStepResult(); + } + +TPtrC CCTSYIntegrationTestCallControl0012::GetTestStepName() +/** + * @return The test step name. + */ + { + return _L("CCTSYIntegrationTestCallControl0012"); + } + + + +CCTSYIntegrationTestCallControl0013::CCTSYIntegrationTestCallControl0013(CEtelSessionMgr& aEtelSessionMgr) + : CCTSYIntegrationTestCallControlBase(aEtelSessionMgr) +/** + * Constructor. + */ + { + SetTestStepName(CCTSYIntegrationTestCallControl0013::GetTestStepName()); + } + +CCTSYIntegrationTestCallControl0013::~CCTSYIntegrationTestCallControl0013() +/** + * Destructor. + */ + { + } + +TVerdict CCTSYIntegrationTestCallControl0013::doTestStepL() +/** + * @SYMTestCaseID BA-CTSY-INT-CCON-0013 + * @SYMFssID BA/CTSY/CCON-0013 + * @SYMTestCaseDesc Dial and hang up a call specifying valid call parameters 05. + * @SYMTestPriority High + * @SYMTestActions RMobileCall::NotifyMobileCallStatusChange, RCall::NotifyStatusChange, RLine::NotifyStatusChange, RMobileLine::GetMobileLineStatus, RMobileLine::NotifyMobileLineStatusChange, RLine::GetStatus, RMobileCall::GetMobileCallStatus, RCall::GetCallParams, RCall::GetStatus, RCall::GetCallParams, RCall::GetStatus, RCall::HangUp + * @SYMTestExpectedResults Pass - Call connects and call parameters are correct. + * @SYMTestType CIT + * @SYMTestCaseDependencies live/automatic + * + * Reason for test: Verify call and line statuses and call params are correct. + * + * @return - TVerdict code + */ + { + + //////////////////////////////////////////////////////////////// + // SET UP + //////////////////////////////////////////////////////////////// + + + // Check phone supports KCapsVoice + // Get Voice line 1 + RMobileLine& voiceLine = iEtelSessionMgr.GetLineL(KMainServer, KMainPhone, KVoiceLine); + // Get call 1 + RMobileCall& call1 = iEtelSessionMgr.GetCallL(KMainServer, KMainPhone, KVoiceLine, KCall1); + + RLine::TCaps lineCaps; + CHECK_EQUALS_L(voiceLine.GetCaps(lineCaps), KErrNone, + _L("RMobileLine::GetCaps returned an error")); + CHECK_BITS_SET_L(lineCaps.iFlags, RLine::KCapsVoice, KNoUnwantedBits, + _L("RLine::GetCaps returned wrong caps")); + + // Call TNetworkTsyTestHelper::WaitForRegisteredOnHomeNetworkL + RMobilePhone& phone = iEtelSessionMgr.GetPhoneL(KMainServer,KMainPhone); + CHECK_EQUALS_L(iNetworkTestHelper.WaitForRegisteredOnHomeNetworkL(phone), KErrNone, + _L("TNetworkTsyTestHelper::WaitForRegisteredOnHomeNetworkL returned with an error")); + + //////////////////////////////////////////////////////////////// + // SET UP END + //////////////////////////////////////////////////////////////// + + StartTest(); + + //////////////////////////////////////////////////////////////// + // TEST START + //////////////////////////////////////////////////////////////// + + + // Populate RMobileCall::TMobileCallParamsV1 with + RMobileCall::TMobileCallParamsV1 mobileCallParams; + RMobileCall::TMobileCallParamsV1Pckg mobileCallParamsPkg(mobileCallParams); + + // • iSpeakerControl = EMonitorSpeakerControlUnknown + mobileCallParams.iSpeakerControl = RCall::EMonitorSpeakerControlUnknown; + // • iSpeakerVolume = EMonitorSpeakerVolumeHigh + mobileCallParams.iSpeakerVolume = RCall::EMonitorSpeakerVolumeHigh; + // • iInterval = 0x01 + mobileCallParams.iInterval = 0x01; + // • iWaitForDialTone = EDialToneWait + mobileCallParams.iWaitForDialTone = RCall::EDialToneWait; + // • iIdRestrict = EIdRestrictDefault + mobileCallParams.iIdRestrict = RMobileCall::EIdRestrictDefault; + // • iExplicitInvoke = FALSE + mobileCallParams.iCug.iExplicitInvoke = FALSE ; + // • iCugIndex = 0x00 + mobileCallParams.iCug.iCugIndex = 0x00; + // • iSuppressOA = FALSE + mobileCallParams.iCug.iSuppressOA = FALSE; + // • iSuppressPrefCug = FALSE + mobileCallParams.iCug.iSuppressPrefCug = FALSE; + // • iAutoRedial = FALSE + mobileCallParams.iAutoRedial = FALSE; + + //=========Post Notifiers=============== + + // post notifier for RCall::NotifyStatusChange + TCoreEtelRequestStatus notifyCallStatusChangeStatus (call1,&RCall::NotifyStatusChangeCancel); + CleanupStack::PushL(notifyCallStatusChangeStatus); + RCall::TStatus callStatus; + call1.NotifyStatusChange(notifyCallStatusChangeStatus,callStatus); + + // post a notifier for RMobileCall::NotifyMobileCallStatusChange + TExtEtelRequestStatus notifyMobileCallChangeStatus(call1, EMobileCallNotifyMobileCallStatusChange); + CleanupStack::PushL(notifyMobileCallChangeStatus); + RMobileCall::TMobileCallStatus mobileCallStatus; + call1.NotifyMobileCallStatusChange(notifyMobileCallChangeStatus, mobileCallStatus); + + // post a notifier for RLine::NotifyStatusChange + TCoreEtelRequestStatus notifyStatusChangeStatus (voiceLine,&RLine::NotifyStatusChangeCancel); + CleanupStack::PushL(notifyStatusChangeStatus); + RCall::TStatus lineStatus; + voiceLine.NotifyStatusChange(notifyStatusChangeStatus,lineStatus); + + // post a notifier for RMobileLine::NotifyMobileLineStatusChange + TExtEtelRequestStatus notifyMobileLineChangeStatus(voiceLine, EMobileLineNotifyMobileLineStatusChange); + CleanupStack::PushL(notifyMobileLineChangeStatus); + RMobileCall::TMobileCallStatus mobileLineStatus; + voiceLine.NotifyMobileLineStatusChange(notifyMobileLineChangeStatus, mobileLineStatus); + + // Dial a number which answers using call params. + TCoreEtelRequestStatus dialStatus(call1, &RCall::DialCancel); + CleanupStack::PushL(dialStatus); + TPtrC number; + ASSERT_TRUE(GetStringFromConfig(KIniVoiceNumSection, KIniVoiceNumber1, number) != EFalse, + _L("GetStringFromConfig did not complete as expected")); + call1.Dial(dialStatus,mobileCallParamsPkg, number); + // Wait for completion. + ASSERT_EQUALS(WaitForRequestWithTimeOut(dialStatus, ETimeMedium), KErrNone, + _L("RCall::Dial timed-out")); + ASSERT_EQUALS(dialStatus.Int(), KErrNone, + _L("RCall::Dial returned an error")); + + // === Check line status === + + TInt expectedStatus = KErrNone; + + // Check RLine::NotifyStatusChange completes with EStatusDialling -> EStatusConnecting -> EStatusConnected. + RCall::TStatus expectedLineStatus = RCall::EStatusDialling; + iCallControlTestHelper.WaitForLineNotifyStatusChange(voiceLine, + notifyStatusChangeStatus, + lineStatus, + expectedLineStatus, + expectedStatus); + + expectedLineStatus = RCall::EStatusConnecting; + voiceLine.NotifyStatusChange(notifyStatusChangeStatus, lineStatus); + iCallControlTestHelper.WaitForLineNotifyStatusChange(voiceLine, + notifyStatusChangeStatus, + lineStatus, + expectedLineStatus, + expectedStatus); + + expectedLineStatus = RCall::EStatusConnected; + voiceLine.NotifyStatusChange(notifyStatusChangeStatus, lineStatus); + iCallControlTestHelper.WaitForLineNotifyStatusChange(voiceLine, + notifyStatusChangeStatus, + lineStatus, + expectedLineStatus, + expectedStatus); + + // Check RLine::GetStatus returns EStatusConnected + ASSERT_EQUALS(voiceLine.GetStatus(lineStatus), KErrNone, + _L("RLine::GetStatus returned an error")); + ASSERT_EQUALS(lineStatus, RCall::EStatusConnected, + _L("RLine::GetStatus did not set line status to EStatusConnected as expected")); + + // Check RMobileLine::NotifyMobileLineStatusChange completes with with EStatusDialling -> EStatusConnecting -> EStatusConnected. + RMobileCall::TMobileCallStatus expectedMobileLineStatus = RMobileCall::EStatusDialling; + iCallControlTestHelper.WaitForMobileLineNotifyMobileLineStatusChange(voiceLine, + notifyMobileLineChangeStatus, + mobileLineStatus, + expectedMobileLineStatus, + expectedStatus); + + voiceLine.NotifyMobileLineStatusChange(notifyMobileLineChangeStatus, mobileLineStatus); + expectedMobileLineStatus = RMobileCall::EStatusConnecting; + iCallControlTestHelper.WaitForMobileLineNotifyMobileLineStatusChange(voiceLine, + notifyMobileLineChangeStatus, + mobileLineStatus, + expectedMobileLineStatus, + expectedStatus); + + voiceLine.NotifyMobileLineStatusChange(notifyMobileLineChangeStatus, mobileLineStatus); + expectedMobileLineStatus = RMobileCall::EStatusConnected; + iCallControlTestHelper.WaitForMobileLineNotifyMobileLineStatusChange(voiceLine, + notifyMobileLineChangeStatus, + mobileLineStatus, + expectedMobileLineStatus, + expectedStatus); + + // Check RMobileLine::GetMobileLineStatus returns EStatusConnected + ASSERT_EQUALS(voiceLine.GetMobileLineStatus(mobileLineStatus), KErrNone, + _L("RMobileLine::GetMobileLineStatus returned an error")); + ASSERT_EQUALS(mobileLineStatus, RMobileCall::EStatusConnected, + _L("RMobileLine::GetMobileLineStatus did not set status to EStatusConnected")); + + // === Check call status === + + // Check RCall::NotifyStatusChange completes with EStatusDialling -> EStatusConnecting -> EStatusConnected. + RCall::TStatus expectedCallStatus = RCall::EStatusDialling; + + iCallControlTestHelper.WaitForCallNotifyStatusChange(call1, + notifyCallStatusChangeStatus, + callStatus, + expectedCallStatus, + expectedStatus); + + call1.NotifyStatusChange(notifyCallStatusChangeStatus,callStatus); + expectedCallStatus = RCall::EStatusConnecting; + iCallControlTestHelper.WaitForCallNotifyStatusChange(call1, + notifyCallStatusChangeStatus, + callStatus, + expectedCallStatus, + expectedStatus); + + call1.NotifyStatusChange(notifyCallStatusChangeStatus,callStatus); + expectedCallStatus = RCall::EStatusConnected; + iCallControlTestHelper.WaitForCallNotifyStatusChange(call1, + notifyCallStatusChangeStatus, + callStatus, + expectedCallStatus, + expectedStatus); + + // Check RCall::GetStatus returns EStatusConnected. + ASSERT_EQUALS(voiceLine.GetStatus(callStatus), KErrNone, + _L("RLine::GetStatus returned an error")); + ASSERT_EQUALS(callStatus, RCall::EStatusConnected, + _L("RLine::GetStatus did not return EStatusConnected as expected")); + + // Check RMobileCall::NotifyMobileCallStatusChange completes with EStatusDialling -> EStatusConnecting -> EStatusConnected. + RMobileCall::TMobileCallStatus expectedMobileCallStatus = RMobileCall::EStatusDialling; + iCallControlTestHelper.WaitForMobileCallNotifyMobileCallStatusChange(call1, + notifyMobileCallChangeStatus, + mobileCallStatus, + expectedMobileCallStatus, + expectedStatus); + + expectedMobileCallStatus = RMobileCall::EStatusConnecting; + call1.NotifyMobileCallStatusChange(notifyMobileCallChangeStatus, mobileCallStatus); + iCallControlTestHelper.WaitForMobileCallNotifyMobileCallStatusChange(call1, + notifyMobileCallChangeStatus, + mobileCallStatus, + expectedMobileCallStatus, + expectedStatus); + + expectedMobileCallStatus = RMobileCall::EStatusConnected; + call1.NotifyMobileCallStatusChange(notifyMobileCallChangeStatus, mobileCallStatus); + iCallControlTestHelper.WaitForMobileCallNotifyMobileCallStatusChange(call1, + notifyMobileCallChangeStatus, + mobileCallStatus, + expectedMobileCallStatus, + expectedStatus); + + // Check RMobileCall::GetMobileCallStatus returns status of EStatusConnected. + ASSERT_EQUALS(call1.GetMobileCallStatus(mobileCallStatus), KErrNone, + _L("RMobileCall::GetMobileCallStatus returned an error")); + ASSERT_EQUALS(mobileCallStatus, RMobileCall::EStatusConnected, + _L("RMobileCall::GetMobileCallStatus did not set call status EStatusConnected as expected")); + + // === Get call parameters. === + RMobileCall::TMobileCallParamsV1 checkParams; + RMobileCall::TMobileCallParamsV1Pckg checkParamsPkg(checkParams); + call1.GetCallParams(checkParamsPkg); + + // Check RCall::GetCallParams with aParams as a packaged RMobileCall::TMobileCallParamsV1 returns same iSpeakerControl as that used for Dial. + ASSERT_EQUALS(checkParams.iSpeakerControl, mobileCallParams.iSpeakerControl, + _L("RCall::GetCallParams did not return the same iSpeakerControl as that used for Dial")); + // Check RCall::GetCallParams with aParams as a packaged RMobileCall::TMobileCallParamsV1 returns same iSpeakerVolume as that used for Dial. + ASSERT_EQUALS(checkParams.iSpeakerVolume, mobileCallParams.iSpeakerVolume, + _L("RCall::GetCallParams did not return the same iSpeakerVolume as that used for Dial")); + // Check RCall::GetCallParams with aParams as a packaged RMobileCall::TMobileCallParamsV1 returns same iInterval as that used for Dial. + ASSERT_EQUALS(checkParams.iInterval, mobileCallParams.iInterval, + _L("RCall::GetCallParams did not return the same iInterval as that used for Dial")); + // Check RCall::GetCallParams with aParams as a packaged RMobileCall::TMobileCallParamsV1 returns same iWaitForDialTone as that used for Dial. + ASSERT_EQUALS(checkParams.iWaitForDialTone, mobileCallParams.iWaitForDialTone, + _L("RCall::GetCallParams did not return the same iWaitForDialTone as that used for Dial")); + // Check RCall::GetCallParams with aParams as a packaged RMobileCall::TMobileCallParamsV1 returns same iIdRestrict as that used for Dial. + ASSERT_EQUALS(checkParams.iIdRestrict, mobileCallParams.iIdRestrict, + _L("RCall::GetCallParams did not return the same iIdRestrict as that used for Dial")); + // Check RCall::GetCallParams with aParams as a packaged RMobileCall::TMobileCallParamsV1 returns same iCug.iExplicitInvoke as that used for Dial. + ASSERT_EQUALS(checkParams.iCug.iExplicitInvoke, mobileCallParams.iCug.iExplicitInvoke, + _L("RCall::GetCallParams did not return the same iCug.iExplicitInvoke as that used for Dial")); + // Check RCall::GetCallParams with aParams as a packaged RMobileCall::TMobileCallParamsV1 returns same iCug.iCugIndex as that used for Dial. + ASSERT_EQUALS(checkParams.iCug.iCugIndex, mobileCallParams.iCug.iCugIndex, + _L("RCall::GetCallParams did not return the same iCug.iCugIndex as that used for Dial")); + // Check RCall::GetCallParams with aParams as a packaged RMobileCall::TMobileCallParamsV1 returns same iCug.iSuppressPrefCug as that used for Dial. + ASSERT_EQUALS(checkParams.iCug.iSuppressPrefCug, mobileCallParams.iCug.iSuppressPrefCug, + _L("RCall::GetCallParams did not return the same iCug.iSuppressPrefCug as that used for Dial")); + // Check RCall::GetCallParams with aParams as a packaged RMobileCall::TMobileCallParamsV1 returns same iCug.iSuppressOA as that used for Dial. + ASSERT_EQUALS(checkParams.iCug.iSuppressOA, mobileCallParams.iCug.iSuppressOA, + _L("RCall::GetCallParams did not return the same iCug.iSuppressOA as that used for Dial")); + // Check RCall::GetCallParams with aParams as a packaged RMobileCall::TMobileCallParamsV1 returns same iAutoRedial as that used for Dial. + ASSERT_EQUALS(checkParams.iAutoRedial, mobileCallParams.iAutoRedial, + _L("RCall::GetCallParams did not return the same iAutoRedial as that used for Dial")); + + //------------ Post Notifiers ---------------------------- + call1.NotifyStatusChange(notifyCallStatusChangeStatus,callStatus); + call1.NotifyMobileCallStatusChange(notifyMobileCallChangeStatus, mobileCallStatus); + voiceLine.NotifyStatusChange(notifyStatusChangeStatus,lineStatus); + voiceLine.NotifyMobileLineStatusChange(notifyMobileLineChangeStatus, mobileLineStatus); + + // Hang up call. + TCoreEtelRequestStatus hangUpStatus (call1,&RCall::HangUpCancel); + CleanupStack::PushL(hangUpStatus); + call1.HangUp(hangUpStatus); + ASSERT_EQUALS(WaitForRequestWithTimeOut(hangUpStatus, ETimeMedium), KErrNone, + _L("RCall::HangUp timed-out")); + ASSERT_EQUALS(hangUpStatus.Int(), KErrNone, + _L("RCall::HangUp returned an error")); + + // === Check call status === + + // Check RCall::NotifyStatusChange completes with EStatusHangingUp -> EStatusIdle + expectedCallStatus = RCall::EStatusHangingUp; + const TInt wantedStatus = KErrNone; + iCallControlTestHelper.WaitForCallNotifyStatusChange(call1, + notifyStatusChangeStatus, + callStatus, + expectedCallStatus, + wantedStatus); + + call1.NotifyStatusChange(notifyStatusChangeStatus,callStatus); + expectedCallStatus = RCall::EStatusIdle; + iCallControlTestHelper.WaitForCallNotifyStatusChange(call1, + notifyStatusChangeStatus, + callStatus, + expectedCallStatus, + wantedStatus); + // Check RCall::GetStatus returns EStatusIdle. + ASSERT_EQUALS(call1.GetStatus(callStatus),KErrNone, + _L("RCall::GetStatus returned an error")); + ASSERT_EQUALS(callStatus, RCall::EStatusIdle, + _L("RCall::GetStatus returned an unexpected call status")); + + // Check RMobileCall::NotifyMobileCallStatusChange completes with EStatusDisconnecting -> EStatusIdle + expectedMobileCallStatus = RMobileCall::EStatusDisconnecting; + iCallControlTestHelper.WaitForMobileCallNotifyMobileCallStatusChange(call1, + notifyMobileCallChangeStatus, + mobileCallStatus, + expectedMobileCallStatus, + wantedStatus); + + call1.NotifyMobileCallStatusChange(notifyMobileCallChangeStatus, mobileCallStatus); + expectedMobileCallStatus = RMobileCall::EStatusIdle; + iCallControlTestHelper.WaitForMobileCallNotifyMobileCallStatusChange(call1, + notifyMobileCallChangeStatus, + mobileCallStatus, + expectedMobileCallStatus, + wantedStatus); + + // Check RMobileCall::GetMobileCallStatus returns status of EStatusIdle. + ASSERT_EQUALS(call1.GetMobileCallStatus(mobileCallStatus), KErrNone, + _L("RMobileCall::GetMobileStatus returned an error")); + ASSERT_EQUALS(mobileCallStatus, RMobileCall::EStatusIdle, + _L("RMobileCall::GetMobileStatus did not return a status EStatusIdle")); + + // === Check line status === + + // Check RLine::NotifyStatusChange completes with EStatusHangingUp -> EStatusIdle + expectedLineStatus = RCall::EStatusHangingUp; + iCallControlTestHelper.WaitForLineNotifyStatusChange(voiceLine, + notifyStatusChangeStatus, + lineStatus, + expectedLineStatus, + expectedStatus); + + voiceLine.NotifyStatusChange(notifyStatusChangeStatus,lineStatus); + expectedLineStatus = RCall::EStatusIdle; + iCallControlTestHelper.WaitForLineNotifyStatusChange(voiceLine, + notifyStatusChangeStatus, + lineStatus, + expectedLineStatus, + expectedStatus); + + // Check RLine::GetStatus returns EStatusIdle + ASSERT_EQUALS(voiceLine.GetStatus(lineStatus), KErrNone, + _L("RLine::GetStatus returned an error")); + ASSERT_EQUALS(lineStatus, RCall::EStatusIdle, + _L("RLine::GetStatus did not return EStatusIdle as expected")); + + // Check RMobileLine::NotifyMobileLineStatusChange completes with with EStatusDisconnecting -> EStatusIdle + expectedMobileLineStatus = RMobileCall::EStatusDisconnecting; + iCallControlTestHelper.WaitForMobileLineNotifyMobileLineStatusChange(voiceLine, + notifyMobileLineChangeStatus, + mobileLineStatus, + expectedMobileLineStatus, + expectedStatus); + + voiceLine.NotifyMobileLineStatusChange(notifyMobileLineChangeStatus, mobileLineStatus); + expectedMobileLineStatus = RMobileCall::EStatusIdle; + iCallControlTestHelper.WaitForMobileLineNotifyMobileLineStatusChange(voiceLine, + notifyMobileLineChangeStatus, + mobileLineStatus, + expectedMobileLineStatus, + expectedStatus); + + // Check RMobileLine::GetMobileLineStatus returns EStatusIdle + ASSERT_EQUALS(voiceLine.GetMobileLineStatus(mobileLineStatus), KErrNone, + _L("RMobileLine::GetMobileLineStatus returned an error")); + ASSERT_EQUALS(mobileLineStatus, RMobileCall::EStatusIdle, + _L("RMobileLine::GetMobileLineStatus did not set the status to EStatusIdle")); + + + //////////////////////////////////////////////////////////////// + // TEST END + //////////////////////////////////////////////////////////////// + + StartCleanup(); + + // Pop + // notifyCallStatusChangeStatus + // notifyMobileCallChangeStatus + // notifyStatusChangeStatus + // notifyMobileLineChangeStatus + // dialStatus + // hangUpStatus + CleanupStack::PopAndDestroy(6,¬ifyCallStatusChangeStatus); + + return TestStepResult(); + } + +TPtrC CCTSYIntegrationTestCallControl0013::GetTestStepName() +/** + * @return The test step name. + */ + { + return _L("CCTSYIntegrationTestCallControl0013"); + } + + + +CCTSYIntegrationTestCallControl0014::CCTSYIntegrationTestCallControl0014(CEtelSessionMgr& aEtelSessionMgr) + : CCTSYIntegrationTestCallControlBase(aEtelSessionMgr) +/** + * Constructor. + */ + { + SetTestStepName(CCTSYIntegrationTestCallControl0014::GetTestStepName()); + } + +CCTSYIntegrationTestCallControl0014::~CCTSYIntegrationTestCallControl0014() +/** + * Destructor. + */ + { + } + +TVerdict CCTSYIntegrationTestCallControl0014::doTestStepL() +/** + * @SYMTestCaseID BA-CTSY-INT-CCON-0014 + * @SYMFssID BA/CTSY/CCON-0014 + * @SYMTestCaseDesc Dial and hang up a call specifying valid call parameters 06. + * @SYMTestPriority High + * @SYMTestActions RMobileCall::NotifyMobileCallStatusChange, RCall::NotifyStatusChange, RLine::NotifyStatusChange, RMobileLine::GetMobileLineStatus, RMobileLine::NotifyMobileLineStatusChange, RLine::GetStatus, RMobileCall::GetMobileCallStatus, RCall::GetCallParams, RCall::GetStatus, RCall::GetCallParams, RCall::GetStatus, RCall::HangUp + * @SYMTestExpectedResults Pass - Call connects and call parameters are correct. + * @SYMTestType CIT + * @SYMTestCaseDependencies live/automatic + * + * Reason for test: Verify call and line statuses and call params are correct. + * + * @return - TVerdict code + */ + { + + //////////////////////////////////////////////////////////////// + // SET UP + //////////////////////////////////////////////////////////////// + + // Check phone supports KCapsVoice + // Get Voice line 1 + RMobileLine& voiceLine = iEtelSessionMgr.GetLineL(KMainServer, KMainPhone, KVoiceLine); + // Get call 1 + RMobileCall& call1 = iEtelSessionMgr.GetCallL(KMainServer, KMainPhone, KVoiceLine, KCall1); + + RLine::TCaps lineCaps; + CHECK_EQUALS_L(voiceLine.GetCaps(lineCaps), KErrNone, + _L("RMobileLine::GetCaps returned an error")); + CHECK_BITS_SET_L(lineCaps.iFlags, RLine::KCapsVoice, KNoUnwantedBits, + _L("RLine::GetCaps returned wrong caps")); + + // Call TNetworkTsyTestHelper::WaitForRegisteredOnHomeNetworkL + RMobilePhone& phone = iEtelSessionMgr.GetPhoneL(KMainServer,KMainPhone); + CHECK_EQUALS_L(iNetworkTestHelper.WaitForRegisteredOnHomeNetworkL(phone), KErrNone, + _L("TNetworkTsyTestHelper::WaitForRegisteredOnHomeNetworkL returned with an error")); + + //////////////////////////////////////////////////////////////// + // SET UP END + //////////////////////////////////////////////////////////////// + + StartTest(); + + //////////////////////////////////////////////////////////////// + // TEST START + //////////////////////////////////////////////////////////////// + + + // Populate RMobileCall::TMobileCallParamsV1 with + RMobileCall::TMobileCallParamsV1 mobileCallParams; + RMobileCall::TMobileCallParamsV1Pckg mobileCallParamsPkg(mobileCallParams); + + // • iSpeakerControl = EMonitorSpeakerControlUnknown + mobileCallParams.iSpeakerControl = RCall::EMonitorSpeakerControlUnknown; + // • iSpeakerVolume = EMonitorSpeakerVolumeHigh + mobileCallParams.iSpeakerVolume = RCall::EMonitorSpeakerVolumeHigh; + // • iInterval = 0x01 + mobileCallParams.iInterval = 0x01; + // • iWaitForDialTone = EDialToneWait + mobileCallParams.iWaitForDialTone = RCall::EDialToneWait; + // • iIdRestrict = EIdRestrictDefault + mobileCallParams.iIdRestrict = RMobileCall::EIdRestrictDefault; + // • iExplicitInvoke = FALSE + mobileCallParams.iCug.iExplicitInvoke = FALSE ; + // • iCugIndex = 0xffff + mobileCallParams.iCug.iCugIndex = 0xffff; + // • iSuppressOA = FALSE + mobileCallParams.iCug.iSuppressOA = FALSE; + // • iSuppressPrefCug = FALSE + mobileCallParams.iCug.iSuppressPrefCug = FALSE; + // • iAutoRedial = FALSE + mobileCallParams.iAutoRedial = FALSE; + + //=========Post Notifiers=============== + + // post notifier for RCall::NotifyStatusChange + TCoreEtelRequestStatus notifyCallStatusChangeStatus (call1,&RCall::NotifyStatusChangeCancel); + CleanupStack::PushL(notifyCallStatusChangeStatus); + RCall::TStatus callStatus; + call1.NotifyStatusChange(notifyCallStatusChangeStatus,callStatus); + + // post a notifier for RMobileCall::NotifyMobileCallStatusChange + TExtEtelRequestStatus notifyMobileCallChangeStatus(call1, EMobileCallNotifyMobileCallStatusChange); + CleanupStack::PushL(notifyMobileCallChangeStatus); + RMobileCall::TMobileCallStatus mobileCallStatus; + call1.NotifyMobileCallStatusChange(notifyMobileCallChangeStatus, mobileCallStatus); + + // post a notifier for RLine::NotifyStatusChange + TCoreEtelRequestStatus notifyStatusChangeStatus (voiceLine,&RLine::NotifyStatusChangeCancel); + CleanupStack::PushL(notifyStatusChangeStatus); + RCall::TStatus lineStatus; + voiceLine.NotifyStatusChange(notifyStatusChangeStatus,lineStatus); + + // post a notifier for RMobileLine::NotifyMobileLineStatusChange + TExtEtelRequestStatus notifyMobileLineChangeStatus(voiceLine, EMobileLineNotifyMobileLineStatusChange); + CleanupStack::PushL(notifyMobileLineChangeStatus); + RMobileCall::TMobileCallStatus mobileLineStatus; + voiceLine.NotifyMobileLineStatusChange(notifyMobileLineChangeStatus, mobileLineStatus); + + // Dial a number which answers using call params. + TCoreEtelRequestStatus dialStatus(call1, &RCall::DialCancel); + CleanupStack::PushL(dialStatus); + TPtrC number; + ASSERT_TRUE(GetStringFromConfig(KIniVoiceNumSection, KIniVoiceNumber1, number) != EFalse, + _L("GetStringFromConfig did not complete as expected")); + call1.Dial(dialStatus,mobileCallParamsPkg, number); + // Wait for completion. + ASSERT_EQUALS(WaitForRequestWithTimeOut(dialStatus, ETimeMedium), KErrNone, + _L("RCall::Dial timed-out")); + ASSERT_EQUALS(dialStatus.Int(), KErrNone, + _L("RCall::Dial returned an error")); + + // === Check line status === + + TInt expectedStatus = KErrNone; + + // Check RLine::NotifyStatusChange completes with EStatusDialling -> EStatusConnecting -> EStatusConnected. + RCall::TStatus expectedLineStatus = RCall::EStatusDialling; + iCallControlTestHelper.WaitForLineNotifyStatusChange(voiceLine, + notifyStatusChangeStatus, + lineStatus, + expectedLineStatus, + expectedStatus); + + expectedLineStatus = RCall::EStatusConnecting; + voiceLine.NotifyStatusChange(notifyStatusChangeStatus, lineStatus); + iCallControlTestHelper.WaitForLineNotifyStatusChange(voiceLine, + notifyStatusChangeStatus, + lineStatus, + expectedLineStatus, + expectedStatus); + + expectedLineStatus = RCall::EStatusConnected; + voiceLine.NotifyStatusChange(notifyStatusChangeStatus, lineStatus); + iCallControlTestHelper.WaitForLineNotifyStatusChange(voiceLine, + notifyStatusChangeStatus, + lineStatus, + expectedLineStatus, + expectedStatus); + + // Check RLine::GetStatus returns EStatusConnected + ASSERT_EQUALS(voiceLine.GetStatus(lineStatus), KErrNone, + _L("RLine::GetStatus returned an error")); + ASSERT_EQUALS(lineStatus, RCall::EStatusConnected, + _L("RLine::GetStatus did not set line status to EStatusConnected as expected")); + + voiceLine.NotifyMobileLineStatusChange(notifyMobileLineChangeStatus, mobileLineStatus); + RMobileCall::TMobileCallStatus expectedMobileLineStatus = RMobileCall::EStatusConnected; + iCallControlTestHelper.WaitForMobileLineNotifyMobileLineStatusChange(voiceLine, + notifyMobileLineChangeStatus, + mobileLineStatus, + expectedMobileLineStatus, + expectedStatus); + + // Check RMobileLine::GetMobileLineStatus returns EStatusConnected + ASSERT_EQUALS(voiceLine.GetMobileLineStatus(mobileLineStatus), KErrNone, + _L("RMobileLine::GetMobileLineStatus returned an error")); + ASSERT_EQUALS(mobileLineStatus, RMobileCall::EStatusConnected, + _L("RMobileLine::GetMobileLineStatus did not set status to EStatusConnected")); + + // === Check call status === + + // Check RCall::NotifyStatusChange completes with EStatusDialling -> EStatusConnecting -> EStatusConnected. + RCall::TStatus expectedCallStatus = RCall::EStatusDialling; + + iCallControlTestHelper.WaitForCallNotifyStatusChange(call1, + notifyCallStatusChangeStatus, + callStatus, + expectedCallStatus, + expectedStatus); + + call1.NotifyStatusChange(notifyCallStatusChangeStatus,callStatus); + expectedCallStatus = RCall::EStatusConnecting; + iCallControlTestHelper.WaitForCallNotifyStatusChange(call1, + notifyCallStatusChangeStatus, + callStatus, + expectedCallStatus, + expectedStatus); + + call1.NotifyStatusChange(notifyCallStatusChangeStatus,callStatus); + expectedCallStatus = RCall::EStatusConnected; + iCallControlTestHelper.WaitForCallNotifyStatusChange(call1, + notifyCallStatusChangeStatus, + callStatus, + expectedCallStatus, + expectedStatus); + + // Check RCall::GetStatus returns EStatusConnected. + ASSERT_EQUALS(voiceLine.GetStatus(callStatus), KErrNone, + _L("RLine::GetStatus returned an error")); + ASSERT_EQUALS(callStatus, RCall::EStatusConnected, + _L("RLine::GetStatus did not return EStatusConnected as expected")); + + // Check RMobileCall::NotifyMobileCallStatusChange completes with EStatusDialling -> EStatusConnecting -> EStatusConnected. + RMobileCall::TMobileCallStatus expectedMobileCallStatus = RMobileCall::EStatusDialling; + iCallControlTestHelper.WaitForMobileCallNotifyMobileCallStatusChange(call1, + notifyMobileCallChangeStatus, + mobileCallStatus, + expectedMobileCallStatus, + expectedStatus); + + expectedMobileCallStatus = RMobileCall::EStatusConnecting; + call1.NotifyMobileCallStatusChange(notifyMobileCallChangeStatus, mobileCallStatus); + iCallControlTestHelper.WaitForMobileCallNotifyMobileCallStatusChange(call1, + notifyMobileCallChangeStatus, + mobileCallStatus, + expectedMobileCallStatus, + expectedStatus); + + expectedMobileCallStatus = RMobileCall::EStatusConnected; + call1.NotifyMobileCallStatusChange(notifyMobileCallChangeStatus, mobileCallStatus); + iCallControlTestHelper.WaitForMobileCallNotifyMobileCallStatusChange(call1, + notifyMobileCallChangeStatus, + mobileCallStatus, + expectedMobileCallStatus, + expectedStatus); + + // Check RMobileCall::GetMobileCallStatus returns status of EStatusConnected. + ASSERT_EQUALS(call1.GetMobileCallStatus(mobileCallStatus), KErrNone, + _L("RMobileCall::GetMobileCallStatus returned an error")); + ASSERT_EQUALS(mobileCallStatus, RMobileCall::EStatusConnected, + _L("RMobileCall::GetMobileCallStatus did not set call status EStatusConnected as expected")); + + // === Get call parameters. === + RMobileCall::TMobileCallParamsV1 checkParams; + RMobileCall::TMobileCallParamsV1Pckg checkParamsPkg(checkParams); + call1.GetCallParams(checkParamsPkg); + + // Check RCall::GetCallParams with aParams as a packaged RMobileCall::TMobileCallParamsV1 returns same iSpeakerControl as that used for Dial. + ASSERT_EQUALS(checkParams.iSpeakerControl, mobileCallParams.iSpeakerControl, + _L("RCall::GetCallParams did not return the same iSpeakerControl as that used for Dial")); + // Check RCall::GetCallParams with aParams as a packaged RMobileCall::TMobileCallParamsV1 returns same iSpeakerVolume as that used for Dial. + ASSERT_EQUALS(checkParams.iSpeakerVolume, mobileCallParams.iSpeakerVolume, + _L("RCall::GetCallParams did not return the same iSpeakerVolume as that used for Dial")); + // Check RCall::GetCallParams with aParams as a packaged RMobileCall::TMobileCallParamsV1 returns same iInterval as that used for Dial. + ASSERT_EQUALS(checkParams.iInterval, mobileCallParams.iInterval, + _L("RCall::GetCallParams did not return the same iInterval as that used for Dial")); + // Check RCall::GetCallParams with aParams as a packaged RMobileCall::TMobileCallParamsV1 returns same iWaitForDialTone as that used for Dial. + ASSERT_EQUALS(checkParams.iWaitForDialTone, mobileCallParams.iWaitForDialTone, + _L("RCall::GetCallParams did not return the same iWaitForDialTone as that used for Dial")); + // Check RCall::GetCallParams with aParams as a packaged RMobileCall::TMobileCallParamsV1 returns same iIdRestrict as that used for Dial. + ASSERT_EQUALS(checkParams.iIdRestrict, mobileCallParams.iIdRestrict, + _L("RCall::GetCallParams did not return the same iIdRestrict as that used for Dial")); + // Check RCall::GetCallParams with aParams as a packaged RMobileCall::TMobileCallParamsV1 returns same iCug.iExplicitInvoke as that used for Dial. + ASSERT_EQUALS(checkParams.iCug.iExplicitInvoke, mobileCallParams.iCug.iExplicitInvoke, + _L("RCall::GetCallParams did not return the same iCug.iExplicitInvoke as that used for Dial")); + // Check RCall::GetCallParams with aParams as a packaged RMobileCall::TMobileCallParamsV1 returns same iCug.iCugIndex as that used for Dial. + ASSERT_EQUALS(checkParams.iCug.iCugIndex, mobileCallParams.iCug.iCugIndex, + _L("RCall::GetCallParams did not return the same iCug.iCugIndex as that used for Dial")); + // Check RCall::GetCallParams with aParams as a packaged RMobileCall::TMobileCallParamsV1 returns same iCug.iSuppressPrefCug as that used for Dial. + ASSERT_EQUALS(checkParams.iCug.iSuppressPrefCug, mobileCallParams.iCug.iSuppressPrefCug, + _L("RCall::GetCallParams did not return the same iCug.iSuppressPrefCug as that used for Dial")); + // Check RCall::GetCallParams with aParams as a packaged RMobileCall::TMobileCallParamsV1 returns same iCug.iSuppressOA as that used for Dial. + ASSERT_EQUALS(checkParams.iCug.iSuppressOA, mobileCallParams.iCug.iSuppressOA, + _L("RCall::GetCallParams did not return the same iCug.iSuppressOA as that used for Dial")); + // Check RCall::GetCallParams with aParams as a packaged RMobileCall::TMobileCallParamsV1 returns same iAutoRedial as that used for Dial. + ASSERT_EQUALS(checkParams.iAutoRedial, mobileCallParams.iAutoRedial, + _L("RCall::GetCallParams did not return the same iAutoRedial as that used for Dial")); + + //------------ Post Notifiers ---------------------------- + call1.NotifyStatusChange(notifyCallStatusChangeStatus,callStatus); + call1.NotifyMobileCallStatusChange(notifyMobileCallChangeStatus, mobileCallStatus); + voiceLine.NotifyStatusChange(notifyStatusChangeStatus,lineStatus); + voiceLine.NotifyMobileLineStatusChange(notifyMobileLineChangeStatus, mobileLineStatus); + + // Hang up call. + TCoreEtelRequestStatus hangUpStatus (call1,&RCall::HangUpCancel); + CleanupStack::PushL(hangUpStatus); + call1.HangUp(hangUpStatus); + ASSERT_EQUALS(WaitForRequestWithTimeOut(hangUpStatus, ETimeMedium), KErrNone, + _L("RCall::HangUp timed-out")); + ASSERT_EQUALS(hangUpStatus.Int(), KErrNone, + _L("RCall::HangUp returned an error")); + + // === Check call status === + // Check RCall::NotifyStatusChange completes with EStatusHangingUp -> EStatusIdle + expectedCallStatus = RCall::EStatusHangingUp; + const TInt wantedStatus = KErrNone; + iCallControlTestHelper.WaitForCallNotifyStatusChange(call1, + notifyStatusChangeStatus, + callStatus, + expectedCallStatus, + wantedStatus); + + call1.NotifyStatusChange(notifyStatusChangeStatus,callStatus); + expectedCallStatus = RCall::EStatusIdle; + iCallControlTestHelper.WaitForCallNotifyStatusChange(call1, + notifyStatusChangeStatus, + callStatus, + expectedCallStatus, + wantedStatus); + // Check RCall::GetStatus returns EStatusIdle. + ASSERT_EQUALS(call1.GetStatus(callStatus),KErrNone, + _L("RCall::GetStatus returned an error")); + ASSERT_EQUALS(callStatus, RCall::EStatusIdle, + _L("RCall::GetStatus returned an unexpected call status")); + + // Check RMobileCall::NotifyMobileCallStatusChange completes with EStatusDisconnecting -> EStatusIdle + expectedMobileCallStatus = RMobileCall::EStatusDisconnecting; + iCallControlTestHelper.WaitForMobileCallNotifyMobileCallStatusChange(call1, + notifyMobileCallChangeStatus, + mobileCallStatus, + expectedMobileCallStatus, + wantedStatus); + + call1.NotifyMobileCallStatusChange(notifyMobileCallChangeStatus, mobileCallStatus); + expectedMobileCallStatus = RMobileCall::EStatusIdle; + iCallControlTestHelper.WaitForMobileCallNotifyMobileCallStatusChange(call1, + notifyMobileCallChangeStatus, + mobileCallStatus, + expectedMobileCallStatus, + wantedStatus); + + // Check RMobileCall::GetMobileCallStatus returns status of EStatusIdle. + ASSERT_EQUALS(call1.GetMobileCallStatus(mobileCallStatus), KErrNone, + _L("RMobileCall::GetMobileStatus returned an error")); + ASSERT_EQUALS(mobileCallStatus, RMobileCall::EStatusIdle, + _L("RMobileCall::GetMobileStatus did not return a status EStatusIdle")); + + // === Check line status === + + // Check RLine::NotifyStatusChange completes with EStatusHangingUp -> EStatusIdle + expectedLineStatus = RCall::EStatusHangingUp; + iCallControlTestHelper.WaitForLineNotifyStatusChange(voiceLine, + notifyStatusChangeStatus, + lineStatus, + expectedLineStatus, + expectedStatus); + + voiceLine.NotifyStatusChange(notifyStatusChangeStatus,lineStatus); + expectedLineStatus = RCall::EStatusIdle; + iCallControlTestHelper.WaitForLineNotifyStatusChange(voiceLine, + notifyStatusChangeStatus, + lineStatus, + expectedLineStatus, + expectedStatus); + + // Check RLine::GetStatus returns EStatusIdle + ASSERT_EQUALS(voiceLine.GetStatus(lineStatus), KErrNone, + _L("RLine::GetStatus returned an error")); + ASSERT_EQUALS(lineStatus, RCall::EStatusIdle, + _L("RLine::GetStatus did not return EStatusIdle as expected")); + + // Check RMobileLine::NotifyMobileLineStatusChange completes with with EStatusDisconnecting -> EStatusIdle + expectedMobileLineStatus = RMobileCall::EStatusDisconnecting; + iCallControlTestHelper.WaitForMobileLineNotifyMobileLineStatusChange(voiceLine, + notifyMobileLineChangeStatus, + mobileLineStatus, + expectedMobileLineStatus, + expectedStatus); + + voiceLine.NotifyMobileLineStatusChange(notifyMobileLineChangeStatus, mobileLineStatus); + expectedMobileLineStatus = RMobileCall::EStatusIdle; + iCallControlTestHelper.WaitForMobileLineNotifyMobileLineStatusChange(voiceLine, + notifyMobileLineChangeStatus, + mobileLineStatus, + expectedMobileLineStatus, + expectedStatus); + + // Check RMobileLine::GetMobileLineStatus returns EStatusIdle + ASSERT_EQUALS(voiceLine.GetMobileLineStatus(mobileLineStatus), KErrNone, + _L("RMobileLine::GetMobileLineStatus returned an error")); + ASSERT_EQUALS(mobileLineStatus, RMobileCall::EStatusIdle, + _L("RMobileLine::GetMobileLineStatus did not set the status to EStatusIdle")); + + + + //////////////////////////////////////////////////////////////// + // TEST END + //////////////////////////////////////////////////////////////// + + StartCleanup(); + + // Pop + // notifyCallStatusChangeStatus + // notifyMobileCallChangeStatus + // notifyStatusChangeStatus + // notifyMobileLineChangeStatus + // dialStatus + // hangUpStatus + CleanupStack::PopAndDestroy(6,¬ifyCallStatusChangeStatus); + + return TestStepResult(); + } + +TPtrC CCTSYIntegrationTestCallControl0014::GetTestStepName() +/** + * @return The test step name. + */ + { + return _L("CCTSYIntegrationTestCallControl0014"); + } + + + +CCTSYIntegrationTestCallControl0015::CCTSYIntegrationTestCallControl0015(CEtelSessionMgr& aEtelSessionMgr) + : CCTSYIntegrationTestCallControlBase(aEtelSessionMgr) +/** + * Constructor. + */ + { + SetTestStepName(CCTSYIntegrationTestCallControl0015::GetTestStepName()); + } + +CCTSYIntegrationTestCallControl0015::~CCTSYIntegrationTestCallControl0015() +/** + * Destructor. + */ + { + } + +TVerdict CCTSYIntegrationTestCallControl0015::doTestStepL() +/** + * @SYMTestCaseID BA-CTSY-INT-CCON-0015 + * @SYMFssID BA/CTSY/CCON-0015 + * @SYMTestCaseDesc Hang up of call by remote user. + * @SYMTestPriority High + * @SYMTestActions RLine::NotifyStatusChange, RMobileLine::NotifyMobileLineStatusChange, RLine::GetCallInfo, RLine::GetStatus, RMobileLine::GetMobileLineStatus, RLine::GetInfo, RMobileCall::GetMobileCallStatus, RMobileCall::NotifyMobileCallCapsChange, RMobileCall::NotifyMobileCallStatusChange + * @SYMTestExpectedResults Pass - Call hung up. Call info correct. + * @SYMTestType CIT + * @SYMTestCaseDependencies live/manual + * + * Reason for test: Verify line status, hook status and line info is correctly reflected by RLine and RMobileLine + * + * This test tests that the line information is correct when the phone dials and the remote + * user hangs up. + * + * @return - TVerdict code + */ + { + + //////////////////////////////////////////////////////////////// + // SET UP + //////////////////////////////////////////////////////////////// + + RMobilePhone& phone = iEtelSessionMgr.GetPhoneL(KMainServer,KMainPhone); + // Check phone supports KCapsVoice + // Get Voice line 1 + RMobileLine& voiceLine = iEtelSessionMgr.GetLineL(KMainServer, KMainPhone, KVoiceLine); + // Get call 1 + RMobileCall& call1 = iEtelSessionMgr.GetCallL(KMainServer, KMainPhone, KVoiceLine, KCall1); + + RLine::TCaps lineCaps; + CHECK_EQUALS_L(voiceLine.GetCaps(lineCaps), KErrNone, + _L("RMobileLine::GetCaps returned an error")); + CHECK_BITS_SET_L(lineCaps.iFlags, RLine::KCapsVoice, KNoUnwantedBits, + _L("RLine::GetCaps returned wrong caps")); + + // Call TNetworkTsyTestHelper::WaitForRegisteredOnHomeNetworkL + CHECK_EQUALS_L(iNetworkTestHelper.WaitForRegisteredOnHomeNetworkL(phone), KErrNone, + _L("TNetworkTsyTestHelper::WaitForRegisteredOnHomeNetworkL returned with an error")); + + //////////////////////////////////////////////////////////////// + // SET UP END + //////////////////////////////////////////////////////////////// + + StartTest(); + + //////////////////////////////////////////////////////////////// + // TEST START + //////////////////////////////////////////////////////////////// + + // post notifier for RLine::NotifyStatusChange + TCoreEtelRequestStatus notifyStatusChangeStatus (voiceLine,&RLine::NotifyStatusChangeCancel); + CleanupStack::PushL(notifyStatusChangeStatus); + RCall::TStatus lineStatus; + voiceLine.NotifyStatusChange(notifyStatusChangeStatus,lineStatus); + + // post a notifier for RMobileLine::NotifyMobileLineStatusChange + TExtEtelRequestStatus notifyMobileLineChangeStatus(voiceLine, EMobileLineNotifyMobileLineStatusChange); + CleanupStack::PushL(notifyMobileLineChangeStatus); + RMobileCall::TMobileCallStatus mobileLineStatus; + voiceLine.NotifyMobileLineStatusChange(notifyMobileLineChangeStatus, mobileLineStatus); + + DisplayUserInteractionPromptL(_L("To run this test correctly, you should have set your own phone number to voice number 1 in the ini file. After you press a key, the test will call your phone, answer the call."), ETimeLong); + + TPtrC number; + ASSERT_TRUE(GetStringFromConfig(KIniVoiceNumSection, KIniVoiceNumber1, number) != EFalse, + _L("CTestStep::GetStringFromConfig did not complete as expected")); + TCoreEtelRequestStatus dialStatus(call1, &RCall::DialCancel); + CleanupStack::PushL(dialStatus); + call1.Dial(dialStatus, number); + ASSERT_EQUALS(WaitForRequestWithTimeOut(dialStatus, ETimeMedium), KErrNone, + _L("RCall::Dial timed-out")); + ASSERT_EQUALS(dialStatus.Int(), KErrNone, + _L("RCall::Dial returned with an error")); + + TEST_CHECK_POINT_L(_L("Couldn't dial a call, no point continuing.")); + + // === Check line status === + // Check RLine::NotifyStatusChange completes with EStatusDialling -> EStatusConnecting -> EStatusConnected. + const TInt expectedStatus = KErrNone; + RCall::TStatus expectedLineStatus = RCall::EStatusDialling; + iCallControlTestHelper.WaitForLineNotifyStatusChange(voiceLine, + notifyStatusChangeStatus, + lineStatus, + expectedLineStatus, + expectedStatus); + + voiceLine.NotifyStatusChange(notifyStatusChangeStatus,lineStatus); + expectedLineStatus = RCall::EStatusConnecting; + iCallControlTestHelper.WaitForLineNotifyStatusChange(voiceLine, + notifyStatusChangeStatus, + lineStatus, + expectedLineStatus, + expectedStatus); + + voiceLine.NotifyStatusChange(notifyStatusChangeStatus,lineStatus); + expectedLineStatus = RCall::EStatusConnected; + iCallControlTestHelper.WaitForLineNotifyStatusChange(voiceLine, + notifyStatusChangeStatus, + lineStatus, + expectedLineStatus, + expectedStatus); + + // Check RLine::GetStatus returns EStatusConnected + ASSERT_EQUALS(voiceLine.GetStatus(lineStatus), KErrNone, + _L("RLine::GetStatus returned an error")); + ASSERT_EQUALS(lineStatus, RCall::EStatusConnected, + _L("RLine::GetStatus did not return EStatusConnected as expected")); + + // Check RMobileLine::NotifyMobileLineStatusChange completes with with EStatusDialling -> EStatusConnecting -> EStatusConnected. + RMobileCall::TMobileCallStatus expectedMobileLineStatus = RMobileCall::EStatusDialling; + iCallControlTestHelper.WaitForMobileLineNotifyMobileLineStatusChange(voiceLine, + notifyMobileLineChangeStatus, + mobileLineStatus, + expectedMobileLineStatus, + expectedStatus); + + voiceLine.NotifyMobileLineStatusChange(notifyMobileLineChangeStatus, mobileLineStatus); + expectedMobileLineStatus = RMobileCall::EStatusConnecting; + iCallControlTestHelper.WaitForMobileLineNotifyMobileLineStatusChange(voiceLine, + notifyMobileLineChangeStatus, + mobileLineStatus, + expectedMobileLineStatus, + expectedStatus); + + voiceLine.NotifyMobileLineStatusChange(notifyMobileLineChangeStatus, mobileLineStatus); + expectedMobileLineStatus = RMobileCall::EStatusConnected; + iCallControlTestHelper.WaitForMobileLineNotifyMobileLineStatusChange(voiceLine, + notifyMobileLineChangeStatus, + mobileLineStatus, + expectedMobileLineStatus, + expectedStatus); + + + // Check RMobileLine::GetMobileLineStatus returns EStatusConnected + ASSERT_EQUALS(voiceLine.GetMobileLineStatus(mobileLineStatus), KErrNone, + _L("RMobileLine::GetMobileLineStatus returned an error")); + ASSERT_EQUALS(mobileLineStatus, RMobileCall::EStatusConnected, + _L("RMobileLine::GetMobileLineStatus did not set line status to EStatusConnected")); + + // === Check line info === + + // Check RLine::GetCallInfo returns valid name. + // Check RLine::GetCallInfo returns caps in set of KCapsHangUp. + // Check RLine::GetCallInfo returns status of EStatusConnected. + RLine::TCallInfo callInfo; + ASSERT_EQUALS(voiceLine.GetCallInfo(0, callInfo), KErrNone, + _L("RLine::GetCallInfo returned an error")); + ASSERT_TRUE(callInfo.iCallName.Length() >0, + _L("RLine::GetCallInfo returned an invalid name")); + ASSERT_BITS_SET(callInfo.iCallCapsFlags, RCall::KCapsHangUp, KNoUnwantedBits, + _L("RLine::GetCallInfo returned wrong caps")); + ASSERT_EQUALS(callInfo.iStatus, RCall::EStatusConnected, + _L("RLine::GetCallInfo wrong iStatus, should be EStatusIdle")); + + // Check RLine::GetInfo returns status of EStatusConnected. + RLine::TLineInfo lineInfo; + ASSERT_EQUALS(voiceLine.GetInfo(lineInfo), KErrNone, + _L("RLine::GetInfo returned an error")); + ASSERT_EQUALS(lineInfo.iStatus, RCall::EStatusConnected, + _L("RLine::GetInfo did not return EStatusConnected")); + + //===== Post notifiers== + voiceLine.NotifyStatusChange(notifyStatusChangeStatus,lineStatus); + voiceLine.NotifyMobileLineStatusChange(notifyMobileLineChangeStatus, mobileLineStatus); + + // Instruct user to hang up the call + DisplayUserInteractionPromptL(_L("Hang up the call now"), ETimeMedium); + + // === Check line status === + + // Check RLine::NotifyStatusChange completes with EStatusHangingUp -> EStatusIdle + expectedLineStatus = RCall::EStatusHangingUp; + iCallControlTestHelper.WaitForLineNotifyStatusChange(voiceLine, + notifyStatusChangeStatus, + lineStatus, + expectedLineStatus, + expectedStatus); + + voiceLine.NotifyStatusChange(notifyStatusChangeStatus,lineStatus); + expectedLineStatus = RCall::EStatusIdle; + iCallControlTestHelper.WaitForLineNotifyStatusChange(voiceLine, + notifyStatusChangeStatus, + lineStatus, + expectedLineStatus, + expectedStatus); + // Check RLine::GetStatus returns EStatusIdle + ASSERT_EQUALS(voiceLine.GetStatus(lineStatus), KErrNone, + _L("RLine::GetStatus returned an error")); + ASSERT_EQUALS(lineStatus, RCall::EStatusIdle, + _L("RLine::GetStatus did not return EStatusConnected as expected")); + + // Check RMobileLine::NotifyMobileLineStatusChange completes with with EStatusDisconnecting -> EStatusIdle + expectedMobileLineStatus = RMobileCall::EStatusDisconnecting; + iCallControlTestHelper.WaitForMobileLineNotifyMobileLineStatusChange(voiceLine, + notifyMobileLineChangeStatus, + mobileLineStatus, + expectedMobileLineStatus, + expectedStatus); + + voiceLine.NotifyMobileLineStatusChange(notifyMobileLineChangeStatus, mobileLineStatus); + expectedMobileLineStatus = RMobileCall::EStatusIdle; + iCallControlTestHelper.WaitForMobileLineNotifyMobileLineStatusChange(voiceLine, + notifyMobileLineChangeStatus, + mobileLineStatus, + expectedMobileLineStatus, + expectedStatus); + // Check RMobileLine::GetMobileLineStatus returns EStatusIdle + ASSERT_EQUALS(voiceLine.GetMobileLineStatus(mobileLineStatus), KErrNone, + _L("RMobileLine::GetMobileLineStatus returned an error")); + ASSERT_EQUALS(mobileLineStatus, RMobileCall::EStatusIdle, + _L("RMobileLine::GetMobileLineStatus did not set line status to EStatusConnected")); + + // === Check line info === + + // Check RLine::GetCallInfo returns valid name. + // Check RLine::GetCallInfo returns caps in set of KCapsVoice | KCapsDial. + // Check RLine::GetCallInfo returns status of EStatusIdle. + ASSERT_EQUALS(voiceLine.GetCallInfo(0, callInfo), KErrNone, + _L("RLine::GetCallInfo returned an error")); + ASSERT_TRUE(callInfo.iCallName.Length() >0, + _L("RLine::GetCallInfo returned an invalid name")); + ASSERT_BITS_SET(callInfo.iCallCapsFlags, RCall::KCapsVoice | RCall::KCapsDial, KNoUnwantedBits, + _L("RLine::GetCallInfo returned wrong caps")); + ASSERT_EQUALS(callInfo.iStatus, RCall::EStatusIdle, + _L("RLine::GetCallInfo wrong iStatus, should be EStatusIdle")); + + // Check RLine::GetInfo returns status of EStatusIdle. + ASSERT_EQUALS(voiceLine.GetInfo(lineInfo), KErrNone, + _L("RLine::GetInfo returned an error")); + ASSERT_EQUALS(lineInfo.iStatus, RCall::EStatusIdle, + _L("RLine::GetInfo did not return EStatusConnected")); + + + //////////////////////////////////////////////////////////////// + // TEST END + //////////////////////////////////////////////////////////////// + + StartCleanup(); + + // hang up the active call + TCoreEtelRequestStatus hangUpStatus (call1,&RCall::HangUpCancel); + CleanupStack::PushL(hangUpStatus); + call1.HangUp(hangUpStatus); + WaitForRequestWithTimeOut(hangUpStatus, ETimeMedium); + + // Pop + // notifyStatusChangeStatus + // notifyMobileLineChangeStatus + // dialStatus + // hangUpStatus + CleanupStack::PopAndDestroy(4,¬ifyStatusChangeStatus); + + return TestStepResult(); + } + +TPtrC CCTSYIntegrationTestCallControl0015::GetTestStepName() +/** + * @return The test step name. + */ + { + return _L("CCTSYIntegrationTestCallControl0015"); + } + + + +CCTSYIntegrationTestCallControl0016::CCTSYIntegrationTestCallControl0016(CEtelSessionMgr& aEtelSessionMgr) + : CCTSYIntegrationTestCallControlBase(aEtelSessionMgr) +/** + * Constructor. + */ + { + SetTestStepName(CCTSYIntegrationTestCallControl0016::GetTestStepName()); + } + +CCTSYIntegrationTestCallControl0016::~CCTSYIntegrationTestCallControl0016() +/** + * Destructor. + */ + { + } + +TVerdict CCTSYIntegrationTestCallControl0016::doTestStepL() +/** + * @SYMTestCaseID BA-CTSY-INT-CCON-0016 + * @SYMFssID BA/CTSY/CCON-0016 + * @SYMTestCaseDesc Hang up of call by remote user. + * @SYMTestPriority High + * @SYMTestActions RCall::GetCaps, RMobileCall::NotifyHookChange, RMobileCall::NotifyMobileCallCapsChange, RMobileCall::GetMobileCallStatus, RMobileCall::GetMobileCallInfo, RCall::GetInfo, RCall::NotifyStatusChange, RMobileCall::NotifyMobileCallStatusChange, RCall::NotifyCapsChange, RCall::GetStatus, RMobileCall::GetMobileCallCaps + * @SYMTestExpectedResults Pass - Call hung up. Line info correct. + * @SYMTestType CIT + * @SYMTestCaseDependencies live/automatic + * + * Reason for test: Verify call status, caps and call info is correctly reflected by RCall and RMobileCall + * + * @return - TVerdict code + */ + { + + //////////////////////////////////////////////////////////////// + // SET UP + //////////////////////////////////////////////////////////////// + + + // Check phone supports KCapsVoice + // Get Voice line 1 + RMobileLine& voiceLine = iEtelSessionMgr.GetLineL(KMainServer, KMainPhone, KVoiceLine); + // Get call 1 + RMobileCall& call1 = iEtelSessionMgr.GetCallL(KMainServer, KMainPhone, KVoiceLine, KCall1); + + RLine::TCaps lineCaps; + CHECK_EQUALS_L(voiceLine.GetCaps(lineCaps), KErrNone, + _L("RMobileLine::GetCaps returned an error")); + CHECK_BITS_SET_L(lineCaps.iFlags, RLine::KCapsVoice, KNoUnwantedBits, + _L("RLine::GetCaps returned wrong caps")); + + // Call TNetworkTsyTestHelper::WaitForRegisteredOnHomeNetworkL + RMobilePhone& phone = iEtelSessionMgr.GetPhoneL(KMainServer,KMainPhone); + CHECK_EQUALS_L(iNetworkTestHelper.WaitForRegisteredOnHomeNetworkL(phone), KErrNone, + _L("TNetworkTsyTestHelper::WaitForRegisteredOnHomeNetworkL returned with an error")); + + //////////////////////////////////////////////////////////////// + // SET UP END + //////////////////////////////////////////////////////////////// + + StartTest(); + + //////////////////////////////////////////////////////////////// + // TEST START + //////////////////////////////////////////////////////////////// + + + // Post Notifier for RCall::NotifyCapsChange + TCoreEtelRequestStatus notifyCapsChangeStatus (call1,&RCall::NotifyCapsChangeCancel); + CleanupStack::PushL(notifyCapsChangeStatus); + RCall::TCaps caps; + call1.NotifyCapsChange(notifyCapsChangeStatus,caps); + + // post a notifier for RMobileCall::NotifyMobileCallCapsChange + TExtEtelRequestStatus notifyMobileCallCapsChangeStatus(call1, EMobileCallNotifyMobileCallCapsChange); + CleanupStack::PushL(notifyMobileCallCapsChangeStatus); + RMobileCall::TMobileCallCapsV1 mobileCallCaps; + RMobileCall::TMobileCallCapsV1Pckg mobileCallCapsPckg(mobileCallCaps); + call1.NotifyMobileCallCapsChange(notifyMobileCallCapsChangeStatus, mobileCallCapsPckg); + + // post notifier for RCall::NotifyStatusChange + TCoreEtelRequestStatus notifyCallStatusChangeStatus (call1,&RCall::NotifyStatusChangeCancel); + CleanupStack::PushL(notifyCallStatusChangeStatus); + RCall::TStatus callStatus; + call1.NotifyStatusChange(notifyCallStatusChangeStatus,callStatus); + + // post a notifier for RMobileCall::NotifyMobileCallStatusChange + TExtEtelRequestStatus notifyMobileCallChangeStatus(call1, EMobileCallNotifyMobileCallStatusChange); + CleanupStack::PushL(notifyMobileCallChangeStatus); + RMobileCall::TMobileCallStatus mobileCallStatus; + call1.NotifyMobileCallStatusChange(notifyMobileCallChangeStatus, mobileCallStatus); + + // Dial RPS which answers + TPtrC number; + GetRPSNumber(EVoiceLine,number); + RPSAnswerNextCallL(EVoiceLine); + + TCoreEtelRequestStatus dialStatus(call1, &RCall::DialCancel); + CleanupStack::PushL(dialStatus); + call1.Dial(dialStatus, number); + ASSERT_EQUALS(WaitForRequestWithTimeOut(dialStatus, ETimeMedium), KErrNone, + _L("RCall::Dial timed-out")); + ASSERT_EQUALS(dialStatus.Int(), KErrNone, + _L("RCall::Dial Expected KErrNone, but an error returned")); + + // === Check call caps === + + // Check RCall::NotifyCapsChange completes with caps in set of KCapsVoice | KCapsHangUp. + RCall::TCaps wantedCaps, unwantedCaps; + wantedCaps.iFlags = RCall::KCapsVoice | RCall::KCapsHangUp; + unwantedCaps.iFlags = 0; + const TInt wantedStatus = KErrNone; + + iCallControlTestHelper.WaitForCallNotifyCapsChange(call1, + notifyCapsChangeStatus, + caps, + wantedCaps, + unwantedCaps, + wantedStatus); + + // Check RCall::GetCaps supports KCapsHangUp | KCapsVoice. + ASSERT_EQUALS(call1.GetCaps(caps), KErrNone, + _L("RCall::GetCaps returned an Error")); + ASSERT_BITS_SET(caps.iFlags, RCall::KCapsHangUp | RCall::KCapsVoice, KNoUnwantedBits, + _L("RCall::GetCaps returned wrong caps")); + + // Check RMobileCall::NotifyMobileCallCapsChange completes with iCallControlCaps in set of KCapsVoice | KCapsHold | KCapsHangUp. + // Check RMobileCall::NotifyMobileCallCapsChange completes with iCallEventCaps in set of KCapsLocalHold | KCapsLocalTransfer | KCapsRemoteHold | KCapsRemoteTerminate | KCapsRemoteConferenceCreate. + RMobileCall::TMobileCallCapsV1 wantedMobileCaps; + wantedMobileCaps.iCallControlCaps = RMobileCall::KCapsVoice | RMobileCall::KCapsHold | RMobileCall::KCapsHangUp; + wantedMobileCaps.iCallEventCaps = RMobileCall::KCapsLocalHold | RMobileCall::KCapsLocalTransfer | RMobileCall::KCapsRemoteHold | RMobileCall::KCapsRemoteTerminate | RMobileCall::KCapsRemoteConferenceCreate; + + TCmpRMobileCallTMobileCallCaps mobileCapsComp(wantedMobileCaps, mobileCallCaps, *this); + iCallControlTestHelper.WaitForMobileCallNotifyMobileCallCapsChange(call1, + notifyMobileCallCapsChangeStatus, + mobileCapsComp, + wantedStatus); + + // Check RMobileCall::GetMobileCallCaps includes iCallControlCaps in set of KCapsVoice | KCapsHold | KCapsHangUp. + // Check RMobileCall::GetMobileCallCaps includes iCallEventCaps in set of KCapsLocalHold | KCapsLocalTransfer | KCapsRemoteHold | KCapsRemoteTerminate | KCapsRemoteConferenceCreate. + ASSERT_EQUALS(call1.GetMobileCallCaps(mobileCallCapsPckg), KErrNone, + _L("RMobileCall::GetMobileCallCaps returned an error")); + wantedMobileCaps.iCallControlCaps = RMobileCall::KCapsVoice | RMobileCall::KCapsHold | RMobileCall::KCapsHangUp; + + ASSERT_BITS_SET(mobileCallCaps.iCallControlCaps, wantedMobileCaps.iCallControlCaps, KNoUnwantedBits, + _L("RMobileCall::GetMobileCallCaps returned unexpected iCallControlCaps")); + + wantedMobileCaps.iCallEventCaps = RMobileCall::KCapsLocalHold | + RMobileCall::KCapsLocalTransfer | + RMobileCall::KCapsRemoteHold | + RMobileCall::KCapsRemoteTerminate | + RMobileCall::KCapsRemoteConferenceCreate; + + ASSERT_BITS_SET(mobileCallCaps.iCallEventCaps, wantedMobileCaps.iCallEventCaps, KNoUnwantedBits, + _L("RMobileCall::GetMobileCallCaps returned unexpected iCallEventCaps")); + + // === Check call status === + + // Check RCall::NotifyStatusChange completes with EStatusDialling -> EStatusConnecting -> EStatusConnected. + RCall::TStatus expectedCallStatus = RCall::EStatusDialling; + iCallControlTestHelper.WaitForCallNotifyStatusChange(call1, + notifyCallStatusChangeStatus, + callStatus, + expectedCallStatus, + wantedStatus); + call1.NotifyStatusChange(notifyCallStatusChangeStatus,callStatus); + expectedCallStatus = RCall::EStatusConnecting; + iCallControlTestHelper.WaitForCallNotifyStatusChange(call1, + notifyCallStatusChangeStatus, + callStatus, + expectedCallStatus, + wantedStatus); + + call1.NotifyStatusChange(notifyCallStatusChangeStatus,callStatus); + expectedCallStatus = RCall::EStatusConnected; + iCallControlTestHelper.WaitForCallNotifyStatusChange(call1, + notifyCallStatusChangeStatus, + callStatus, + expectedCallStatus, + wantedStatus); + + // Check RCall::GetStatus returns EStatusConnected. + ASSERT_EQUALS(call1.GetStatus(callStatus),KErrNone, + _L("RCall::GetStatus returned an error")); + ASSERT_EQUALS(callStatus, RCall::EStatusConnected, + _L("RCall::GetStatus returned an unexpected call status")); + + // Check RMobileCall::NotifyMobileCallStatusChange completes with EStatusDialling -> EStatusConnecting -> EStatusConnected. + RMobileCall::TMobileCallStatus expectedMobileCallStatus = RMobileCall::EStatusDialling; + iCallControlTestHelper.WaitForMobileCallNotifyMobileCallStatusChange(call1, + notifyMobileCallChangeStatus, + mobileCallStatus, + expectedMobileCallStatus, + wantedStatus); + + call1.NotifyMobileCallStatusChange(notifyMobileCallChangeStatus, mobileCallStatus); + expectedMobileCallStatus = RMobileCall::EStatusConnecting; + iCallControlTestHelper.WaitForMobileCallNotifyMobileCallStatusChange(call1, + notifyMobileCallChangeStatus, + mobileCallStatus, + expectedMobileCallStatus, + wantedStatus); + + call1.NotifyMobileCallStatusChange(notifyMobileCallChangeStatus, mobileCallStatus); + expectedMobileCallStatus = RMobileCall::EStatusConnected; + iCallControlTestHelper.WaitForMobileCallNotifyMobileCallStatusChange(call1, + notifyMobileCallChangeStatus, + mobileCallStatus, + expectedMobileCallStatus, + wantedStatus); + + // Check RMobileCall::GetMobileCallStatus returns status of EStatusConnected. + ASSERT_EQUALS(call1.GetMobileCallStatus(mobileCallStatus), KErrNone, + _L("RMobileCall::GetMobileStatus returned an error")); + ASSERT_EQUALS(mobileCallStatus, RMobileCall::EStatusConnected, + _L("RMobileCall::GetMobileStatus did not return a status EStatusConnected")); + + // === Check call info === + + User::After(2000000); // Wait added for call duration + + // Check RCall::GetInfo returns valid call name. + // Check RCall::GetInfo returns valid voice line name. + // Check RCall::GetInfo returns call status of EStatusConnected. + // Check RCall::GetInfo returns call duration of > 0. + RCall::TCallInfo callInfo; + ASSERT_EQUALS(call1.GetInfo(callInfo), KErrNone, + _L("RCall::GetInfo returned an error")); + ASSERT_TRUE(callInfo.iCallName.Length() >0, + _L("RCall::GetInfo returned an invalid name")); + ASSERT_TRUE(callInfo.iLineName.Length() >0, + _L("RCall::GetInfo returned an invalid Line name")); + ASSERT_EQUALS(callInfo.iStatus, RCall::EStatusConnected, + _L("RCall::GetInfo wrong iStatus, should be EStatusConnected")); + ASSERT_TRUE(callInfo.iDuration.Int() > 0, + _L("RCall::GetInfo wrong iDuration, should be >0")); + + // Check RMobileCall::GetMobileCallInfo returns iValid > 0. + // Check RMobileCall::GetMobileCallInfo returns data for attributes makred as valid in iValid. + // Check RMobileCall::GetMobileCallInfo returns valid line name. + RMobileCall::TMobileCallInfoV1 mobileCallInfo; + RMobileCall::TMobileCallInfoV1Pckg mobileCallInfoPckg(mobileCallInfo); + ASSERT_EQUALS(call1.GetMobileCallInfo(mobileCallInfoPckg), KErrNone, + _L("RMobileCall::GetMobileCallInfo returned an error")); + ASSERT_TRUE(mobileCallInfo.iLineName.Length() >0, + _L("RMobileCall::GetMobileCallInfo returned an invalid line name")); + ASSERT_TRUE(mobileCallInfo.iValid > 0, + _L("RMobileCall::GetMobileCallInfo returned unexpected flags in iValid")); + + iCallControlTestHelper.CheckForValidCallInfo(mobileCallInfo, number); + + //==== Post Notifiers ======== + call1.NotifyCapsChange(notifyCapsChangeStatus,caps); + call1.NotifyMobileCallCapsChange(notifyMobileCallCapsChangeStatus, mobileCallCapsPckg); + call1.NotifyStatusChange(notifyCallStatusChangeStatus,callStatus); + call1.NotifyMobileCallStatusChange(notifyMobileCallChangeStatus, mobileCallStatus); + + // RPS hangs up. + ASSERT_EQUALS(RPSHangupL(EVoiceLine,0), KErrNone, _L("CCTSYIntegrationTestSuiteStepBase::RPSHangup returned an error")); + + // === Check call caps === + + // Check RCall::NotifyCapsChange completes with caps in set of KCapsVoice | KCapsDial. + wantedCaps.iFlags = RCall::KCapsVoice | RCall::KCapsDial; + unwantedCaps.iFlags = KNoUnwantedBits; + ERR_PRINTF2(_L("$CTSYKnownFailure: defect id = %d"), 10023); + iCallControlTestHelper.WaitForCallNotifyCapsChange(call1, + notifyCapsChangeStatus, + caps, + wantedCaps, + unwantedCaps, + wantedStatus); + + // Check RCall::GetCaps supports KCapsVoice | KCapsDial. + ASSERT_EQUALS(call1.GetCaps(caps), KErrNone, + _L("RCall::GetCaps returned an Error")); + ASSERT_BITS_SET(caps.iFlags, RCall::KCapsVoice | RCall::KCapsDial, KNoUnwantedBits, + _L("RCall::GetCaps returned wrong caps")); + + // Check RMobileCall::NotifyMobileCallCapsChange completes with iCallControlCaps in set of KCapsVoice | KCapsDial. + // Check RMobileCall::NotifyMobileCallCapsChange completes with iCallEventCaps in set of 0. + wantedMobileCaps.iCallControlCaps = RMobileCall::KCapsVoice | RMobileCall::KCapsDial; + wantedMobileCaps.iCallEventCaps = 0; + TCmpRMobileCallTMobileCallCaps mobileCapsComp2(wantedMobileCaps, mobileCallCaps, *this); + iCallControlTestHelper.WaitForMobileCallNotifyMobileCallCapsChange(call1, + notifyMobileCallCapsChangeStatus, + mobileCapsComp2, + wantedStatus); + + // Check RMobileCall::GetMobileCallCaps includes iCallControlCaps in set of KCapsVoice | KCapsDial. + // Check RMobileCall::GetMobileCallCaps includes iCallEventCaps in set of 0. + ASSERT_EQUALS(call1.GetMobileCallCaps(mobileCallCapsPckg), KErrNone, + _L("RMobileCall::GetMobileCallCaps returned an error")); + wantedMobileCaps.iCallControlCaps = RMobileCall::KCapsVoice | RMobileCall::KCapsDial; + ASSERT_BITS_SET(mobileCallCaps.iCallControlCaps, wantedMobileCaps.iCallControlCaps, KNoUnwantedBits, + _L("RMobileCall::GetMobileCallCaps returned unexpected iCallControlCaps")); + wantedMobileCaps.iCallEventCaps = 0; + ASSERT_BITS_SET(mobileCallCaps.iCallEventCaps, wantedMobileCaps.iCallEventCaps, KNoUnwantedBits, + _L("RMobileCall::GetMobileCallCaps returned unexpected iCallEventCaps")); + + // === Check call status === + + // Check RCall::NotifyStatusChange completes with EStatusHangingUp -> EStatusIdle. + expectedCallStatus = RCall::EStatusHangingUp; + iCallControlTestHelper.WaitForCallNotifyStatusChange(call1, + notifyCallStatusChangeStatus, + callStatus, + expectedCallStatus, + wantedStatus); + + call1.NotifyStatusChange(notifyCallStatusChangeStatus,callStatus); + expectedCallStatus = RCall::EStatusIdle; + iCallControlTestHelper.WaitForCallNotifyStatusChange(call1, + notifyCallStatusChangeStatus, + callStatus, + expectedCallStatus, + wantedStatus); + + // Check RCall::GetStatus returns EStatusIdle. + ASSERT_EQUALS(call1.GetStatus(callStatus),KErrNone, + _L("RCall::GetStatus returned an error")); + ASSERT_EQUALS(callStatus, RCall::EStatusIdle, + _L("RCall::GetStatus returned an unexpected call status")); + + // Check RMobileCall::NotifyMobileCallStatusChange completes with EStatusDisconnecting -> EStatusIdle. + expectedMobileCallStatus = RMobileCall::EStatusDisconnecting; + iCallControlTestHelper.WaitForMobileCallNotifyMobileCallStatusChange(call1, + notifyMobileCallChangeStatus, + mobileCallStatus, + expectedMobileCallStatus, + wantedStatus); + + call1.NotifyMobileCallStatusChange(notifyMobileCallChangeStatus, mobileCallStatus); + expectedMobileCallStatus = RMobileCall::EStatusIdle; + iCallControlTestHelper.WaitForMobileCallNotifyMobileCallStatusChange(call1, + notifyMobileCallChangeStatus, + mobileCallStatus, + expectedMobileCallStatus, + wantedStatus); + + // Check RMobileCall::GetMobileCallStatus returns status of EStatusIdle. + ASSERT_EQUALS(call1.GetMobileCallStatus(mobileCallStatus), KErrNone, + _L("RMobileCall::GetMobileStatus returned an error")); + ASSERT_EQUALS(mobileCallStatus, RMobileCall::EStatusIdle, + _L("RMobileCall::GetMobileStatus did not return a status EStatusIdle")); + + // === Check call info === + + // Check RCall::GetInfo returns valid call name. + // Check RCall::GetInfo returns valid voice line name. + // Check RCall::GetInfo returns call status of EStatusIdle. + // Check RCall::GetInfo returns call duration of > 0. + ASSERT_EQUALS(call1.GetInfo(callInfo), KErrNone, + _L("RCall::GetInfo returned an error")); + ASSERT_TRUE(callInfo.iCallName.Length() >0, + _L("RCall::GetInfo returned an invalid name")); + ASSERT_TRUE(callInfo.iLineName.Length() >0, + _L("RCall::GetInfo returned an invalid Line name")); + ASSERT_EQUALS(callInfo.iStatus, RCall::EStatusIdle, + _L("RCall::GetInfo wrong iStatus, should be EStatusIdle")); + ASSERT_TRUE(callInfo.iDuration.Int() > 0, + _L("RCall::GetInfo wrong iDuration, should be >0")); + + // Check RMobileCall::GetMobileCallInfo returns iValid > 0. + // Check RMobileCall::GetMobileCallInfo returns data for attributes makred as valid in iValid. + // Check RMobileCall::GetMobileCallInfo returns valid line name. + ASSERT_EQUALS(call1.GetMobileCallInfo(mobileCallInfoPckg), KErrNone, + _L("RMobileCall::GetMobileCallInfo returned an error")); + ASSERT_TRUE(mobileCallInfo.iLineName.Length() >0, + _L("RMobileCall::GetMobileCallInfo returned an invalid line name")); + ASSERT_TRUE(mobileCallInfo.iValid > 0, + _L("RMobileCall::GetMobileCallInfo returned unexpected flags in iValid")); + +// iCallControlTestHelper.CheckForValidCallInfo(mobileCallInfo, number); + // Note: not using TCallControlTsyTestHelper::CheckForValidCallInfo() as some checks would fail at this point + ERR_PRINTF2(_L("$CTSYKnownFailure: defect id = %d"), 10017); + if(mobileCallInfo.iValid & RMobileCall::KCallRemoteParty) + { + ASSERT_TRUE(mobileCallInfo.iRemoteParty.iRemoteNumber.iTelNumber.Length() > 0, + _L("RMobileCall::GetMobileCallInfo set bitmask for KCallRemoteParty to true, but iRemoteParty.iRemoteNumber.iTelNumber has invalid length")); + } + if(mobileCallInfo.iValid & RMobileCall::KCallDuration) + { + TTimeIntervalSeconds startTime = 0; + TTimeIntervalSeconds durationTime(mobileCallInfo.iDuration); + ASSERT_TRUE(durationTime > startTime, + _L("RMobileCall::GetMobileCallInfo set bitmask for KCallDuration to true, but set iDuration to an invalid number")); + } + + if(mobileCallInfo.iValid & RMobileCall::KCallId) + { + ASSERT_EQUALS( mobileCallInfo.iCallId, -1, + _L("RMobileCall::GetMobileCallInfo set bitmask for KCallId to true, but set iCallId to an invalid number")); + } + + //////////////////////////////////////////////////////////////// + // TEST END + //////////////////////////////////////////////////////////////// + + StartCleanup(); + + // Pop + // notifyCapsChangeStatus + // notifyMobileCallCapsChangeStatus + // notifyCallStatusChangeStatus + // notifyMobileCallChangeStatus + // dialStatus + CleanupStack::PopAndDestroy(5,¬ifyCapsChangeStatus); + + return TestStepResult(); + } + +TPtrC CCTSYIntegrationTestCallControl0016::GetTestStepName() +/** + * @return The test step name. + */ + { + return _L("CCTSYIntegrationTestCallControl0016"); + } + + + +CCTSYIntegrationTestCallControl0017::CCTSYIntegrationTestCallControl0017(CEtelSessionMgr& aEtelSessionMgr) + : CCTSYIntegrationTestCallControlBase(aEtelSessionMgr) +/** + * Constructor. + */ + { + SetTestStepName(CCTSYIntegrationTestCallControl0017::GetTestStepName()); + } + +CCTSYIntegrationTestCallControl0017::~CCTSYIntegrationTestCallControl0017() +/** + * Destructor. + */ + { + } + +TVerdict CCTSYIntegrationTestCallControl0017::doTestStepL() +/** + * @SYMTestCaseID BA-CTSY-INT-CCON-0017 + * @SYMFssID BA/CTSY/CCON-0017 + * @SYMTestCaseDesc Rejection of an incoming call + * @SYMTestPriority High + * @SYMTestActions RMobileLine::NotifyMobileLineStatusChange, RCall::HangUp, RMobileCall::GetMobileCallStatus, RLine::NotifyIncomingCall, RCall::NotifyStatusChange, RMobileCall::NotifyMobileCallStatusChange, RMobileLine::GetMobileLineStatus, RLine::GetStatus, RLine::NotifyHookChange, RLine::GetHookStatus, RCall::GetStatus + * @SYMTestExpectedResults Pass - Call, line and hook statuses return to idle. + * @SYMTestType CIT + * @SYMTestCaseDependencies live/automatic + * + * Reason for test: Verify call and line statuses return to + * idle. + * + * @return - TVerdict code + */ + { + + //////////////////////////////////////////////////////////////// + // SET UP + //////////////////////////////////////////////////////////////// + + // Check phone supports KCapsVoice + // Get Voice line 1 + RMobileLine& voiceLine = iEtelSessionMgr.GetLineL(KMainServer, KMainPhone, KVoiceLine); + // Get call 1 + RMobileCall& call1 = iEtelSessionMgr.GetCallL(KMainServer, KMainPhone, KVoiceLine, KCall1); + + RLine::TCaps lineCaps; + CHECK_EQUALS_L(voiceLine.GetCaps(lineCaps), KErrNone, + _L("RMobileLine::GetCaps returned an error")); + CHECK_BITS_SET_L(lineCaps.iFlags, RLine::KCapsVoice, KNoUnwantedBits, + _L("RLine::GetCaps returned wrong caps")); + + // Call TNetworkTsyTestHelper::WaitForRegisteredOnHomeNetworkL + RMobilePhone& phone = iEtelSessionMgr.GetPhoneL(KMainServer,KMainPhone); + CHECK_EQUALS_L(iNetworkTestHelper.WaitForRegisteredOnHomeNetworkL(phone), KErrNone, + _L("TNetworkTsyTestHelper::WaitForRegisteredOnHomeNetworkL returned with an error")); + + //////////////////////////////////////////////////////////////// + // SET UP END + //////////////////////////////////////////////////////////////// + + StartTest(); + + //////////////////////////////////////////////////////////////// + // TEST START + //////////////////////////////////////////////////////////////// + + // post notifier for RLine::NotifyIncomingCall + TCoreEtelRequestStatus notifyIncomingCallStatus (voiceLine,&RLine::NotifyIncomingCallCancel); + CleanupStack::PushL(notifyIncomingCallStatus); + TName name; + voiceLine.NotifyIncomingCall(notifyIncomingCallStatus,name); + + // Request incoming call from RPS. + RPSRequestIncomingCallL(EVoiceLine); + + // Check RLine::NotifyIncomingCall completes with call name. + ASSERT_EQUALS(WaitForRequestWithTimeOut(notifyIncomingCallStatus,ETimeMedium),KErrNone, + _L("RLine::NotifyIncomingCall did not complete without error")); + ASSERT_EQUALS(notifyIncomingCallStatus.Int(), KErrNone, + _L("RLine::NotifyIncomingCall set requestStatus to an error")); + ASSERT_TRUE(name.Length() > 0, + _L("RLine::NotifyIncomingCall did not set a line name")); + + // Get the incoming call + TCallId incomingCallId; + call1 = iEtelSessionMgr.GetIncomingCallL(KMainServer, KMainPhone, KVoiceLine, name, incomingCallId); + + // post notifier for RCall::NotifyStatusChange + TCoreEtelRequestStatus notifyCallStatusChangeStatus (call1,&RCall::NotifyStatusChangeCancel); + CleanupStack::PushL(notifyCallStatusChangeStatus); + RCall::TStatus callStatus; + call1.NotifyStatusChange(notifyCallStatusChangeStatus,callStatus); + + // post a notifier for RMobileCall::NotifyMobileCallStatusChange + TExtEtelRequestStatus notifyMobileCallChangeStatus(call1, EMobileCallNotifyMobileCallStatusChange); + CleanupStack::PushL(notifyMobileCallChangeStatus); + RMobileCall::TMobileCallStatus mobileCallStatus; + call1.NotifyMobileCallStatusChange(notifyMobileCallChangeStatus, mobileCallStatus); + + // post notifier for RLine::NotifyStatusChange + TCoreEtelRequestStatus notifyStatusChangeStatus (voiceLine,&RLine::NotifyStatusChangeCancel); + CleanupStack::PushL(notifyStatusChangeStatus); + RCall::TStatus lineStatus; + voiceLine.NotifyStatusChange(notifyStatusChangeStatus,lineStatus); + + // post a notifier for RMobileLine::NotifyMobileLineStatusChange + TExtEtelRequestStatus notifyMobileLineChangeStatus(voiceLine, EMobileLineNotifyMobileLineStatusChange); + CleanupStack::PushL(notifyMobileLineChangeStatus); + RMobileCall::TMobileCallStatus mobileLineStatus; + voiceLine.NotifyMobileLineStatusChange(notifyMobileLineChangeStatus, mobileLineStatus); + + // Reject call with RCall::HangUp + TCoreEtelRequestStatus hangUpStatus (call1,&RCall::HangUpCancel); + CleanupStack::PushL(hangUpStatus); + call1.HangUp(hangUpStatus); + ASSERT_EQUALS(WaitForRequestWithTimeOut(hangUpStatus, ETimeMedium), KErrNone, + _L("RCall::HangUp returned an error")); + ASSERT_EQUALS(hangUpStatus.Int(), KErrNone, + _L("RCall::HangUp returned an error")); + + const TInt expectedStatus = KErrNone; + + // === Check call status === + + // Check RCall::NotifyStatusChange completes with EStatusIdle. + RCall::TStatus expectedCallStatus = RCall::EStatusIdle; + const TInt wantedStatus = KErrNone; + iCallControlTestHelper.WaitForCallNotifyStatusChange(call1, + notifyStatusChangeStatus, + callStatus, + expectedCallStatus, + wantedStatus); + // Check RCall::GetStatus returns EStatusIdle. + ASSERT_EQUALS(call1.GetStatus(callStatus),KErrNone, + _L("RCall::GetStatus returned an error")); + ASSERT_EQUALS(callStatus, RCall::EStatusIdle, + _L("RCall::GetStatus returned an unexpected call status")); + + // Check RMobileCall::NotifyMobileCallStatusChange completes with EStatusIdle. + RMobileCall::TMobileCallStatus expectedMobileCallStatus = RMobileCall::EStatusIdle; + iCallControlTestHelper.WaitForMobileCallNotifyMobileCallStatusChange(call1, + notifyMobileCallChangeStatus, + mobileCallStatus, + expectedMobileCallStatus, + wantedStatus); + + // Check RMobileCall::GetMobileCallStatus returns status of EStatusIdle. + ASSERT_EQUALS(call1.GetMobileCallStatus(mobileCallStatus), KErrNone, + _L("RMobileCall::GetMobileStatus returned an error")); + ASSERT_EQUALS(mobileCallStatus, RMobileCall::EStatusIdle, + _L("RMobileCall::GetMobileStatus did not return a status EStatusIdle")); + + // === Check line status === + + // Check RLine::NotifyStatusChange completes with EStatusIdle + RCall::TStatus expectedLineStatus = RCall::EStatusIdle; + iCallControlTestHelper.WaitForLineNotifyStatusChange(voiceLine, + notifyStatusChangeStatus, + lineStatus, + expectedLineStatus, + expectedStatus); + // Check RLine::GetStatus returns EStatusIdle + ASSERT_EQUALS(voiceLine.GetStatus(lineStatus), KErrNone, + _L("RLine::GetStatus returned an error")); + ASSERT_EQUALS(lineStatus, RCall::EStatusIdle, + _L("RLine::GetStatus did not return EStatusIdle as expected")); + + // Check RMobileLine::NotifyMobileLineStatusChange completes with EStatusIdle + RMobileCall::TMobileCallStatus expectedMobileLineStatus = RMobileCall::EStatusIdle; + iCallControlTestHelper.WaitForMobileLineNotifyMobileLineStatusChange(voiceLine, + notifyMobileLineChangeStatus, + mobileLineStatus, + expectedMobileLineStatus, + expectedStatus); + + // Check RMobileLine::GetMobileLineStatus returns EStatusIdle + ASSERT_EQUALS(voiceLine.GetMobileLineStatus(mobileLineStatus), KErrNone, + _L("RMobileLine::GetMobileLineStatus returned an error")); + ASSERT_EQUALS(mobileLineStatus, RMobileCall::EStatusIdle, + _L("RMobileLine::GetMobileLineStatus did not set line status to EStatusIdle")); + + //////////////////////////////////////////////////////////////// + // TEST END + //////////////////////////////////////////////////////////////// + + StartCleanup(); + + // PopAndDestroy + // hangUpStatus + // notifyMobileLineChangeStatus + // notifyStatusChangeStatus + // notifyMobileCallChangeStatus + // notifyCallStatusChangeStatus + // notifyIncomingCallStatus + + CleanupStack::PopAndDestroy(6,¬ifyIncomingCallStatus); + + return TestStepResult(); + } + +TPtrC CCTSYIntegrationTestCallControl0017::GetTestStepName() +/** + * @return The test step name. + */ + { + return _L("CCTSYIntegrationTestCallControl0017"); + } + + + +CCTSYIntegrationTestCallControl0018::CCTSYIntegrationTestCallControl0018(CEtelSessionMgr& aEtelSessionMgr) + : CCTSYIntegrationTestCallControlBase(aEtelSessionMgr) +/** + * Constructor. + */ + { + SetTestStepName(CCTSYIntegrationTestCallControl0018::GetTestStepName()); + } + +CCTSYIntegrationTestCallControl0018::~CCTSYIntegrationTestCallControl0018() +/** + * Destructor. + */ + { + } + +TVerdict CCTSYIntegrationTestCallControl0018::doTestStepL() +/** + * @SYMTestCaseID BA-CTSY-INT-CCON-0018 + * @SYMFssID BA/CTSY/CCON-0018 + * @SYMTestCaseDesc Answer incoming call and hang up call. + * @SYMTestPriority High + * @SYMTestActions RCall::OpenExistingCall, RCall::AnswerIncomingCall, RCall::HangUp, RCall::NotifyStatusChange, RCall::GetStatus, RMobileCall::NotifyMobileCallStatusChange, RMobileCall::GetMobileCallStatus + * @SYMTestExpectedResults Pass - Call answered and then hung up. + * @SYMTestType CIT + * @SYMTestCaseDependencies live/automatic + * + * Reason for test: Verify call can be answered with specified params and call status, info and caps are correct. + * + * @return - TVerdict code + */ + { + + //////////////////////////////////////////////////////////////// + // SET UP + //////////////////////////////////////////////////////////////// + + // Check phone supports KCapsVoice + // Get Voice line 1 + RMobileLine& voiceLine = iEtelSessionMgr.GetLineL(KMainServer, KMainPhone, KVoiceLine); + + RLine::TCaps lineCaps; + CHECK_EQUALS_L(voiceLine.GetCaps(lineCaps), KErrNone, + _L("RMobileLine::GetCaps returned an error")); + CHECK_BITS_SET_L(lineCaps.iFlags, RLine::KCapsVoice, KNoUnwantedBits, + _L("RLine::GetCaps returned wrong caps")); + + // Call TNetworkTsyTestHelper::WaitForRegisteredOnHomeNetworkL + RMobilePhone& phone = iEtelSessionMgr.GetPhoneL(KMainServer,KMainPhone); + CHECK_EQUALS_L(iNetworkTestHelper.WaitForRegisteredOnHomeNetworkL(phone), KErrNone, + _L("TNetworkTsyTestHelper::WaitForRegisteredOnHomeNetworkL returned with an error")); + + //////////////////////////////////////////////////////////////// + // SET UP END + //////////////////////////////////////////////////////////////// + + StartTest(); + + //////////////////////////////////////////////////////////////// + // TEST START + //////////////////////////////////////////////////////////////// + + // post notifier for RLine::NotifyIncomingCall + TCoreEtelRequestStatus notifyIncomingCallStatus (voiceLine,&RLine::NotifyIncomingCallCancel); + CleanupStack::PushL(notifyIncomingCallStatus); + TName name; + voiceLine.NotifyIncomingCall(notifyIncomingCallStatus,name); + + // Request an incoming call from RPS. + RPSRequestIncomingCallL(EVoiceLine); + + // Check RLine::NotifyIncomingCall completes with valid call name. + ASSERT_EQUALS(WaitForRequestWithTimeOut(notifyIncomingCallStatus,ETimeMedium), KErrNone, + _L("RLine::NotifyIncomingCall did not complete without error")); + ASSERT_EQUALS(notifyIncomingCallStatus.Int(), KErrNone, + _L("RLine::NotifyIncomingCall set requestStatus to an error")); + ASSERT_TRUE(name.Length() > 0, + _L("RLine::NotifyIncomingCall did not set the name")); + + TCallId incomingCallId; + RMobileCall& incomingCall = iEtelSessionMgr.GetIncomingCallL(KMainServer, KMainPhone, KVoiceLine, name, incomingCallId); + + // === Check call caps === + + // Check RCall::GetCaps supports caps in set of KCapsVoice | KCapsAnswer + // Check RCall::GetCaps supports NOT in set of KCapsDial + RCall::TCaps caps; + ASSERT_EQUALS(incomingCall.GetCaps(caps), KErrNone, + _L("RCall::GetCaps returned an Error")); + ASSERT_BITS_SET(caps.iFlags, RCall::KCapsVoice | RCall::KCapsAnswer, RCall::KCapsDial, + _L("RCall::GetCaps returned wrong caps")); + + // Check RMobileCall::GetMobileCallCaps includes iCallControlCaps in set of KCapsVoice | KCapsDeflect | KCapsAnswer + // Check RMobileCall::GetMobileCallCaps includes iCallControlCaps NOT in set of KCapsDial + RMobileCall::TMobileCallCapsV1 mobileCallCaps; + RMobileCall::TMobileCallCapsV1Pckg capsPckg(mobileCallCaps); + RMobileCall::TMobileCallCapsV1 wantedMobileCaps, unWantedMobileCaps; + wantedMobileCaps.iCallControlCaps = RMobileCall::KCapsVoice | RMobileCall::KCapsDeflect | RMobileCall::KCapsAnswer; + unWantedMobileCaps.iCallControlCaps = RMobileCall::KCapsDial; + ASSERT_EQUALS(incomingCall.GetMobileCallCaps(capsPckg), KErrNone, + _L("RMobileCall::GetMobileCallCaps returned an error")); + ASSERT_BITS_SET(mobileCallCaps.iCallControlCaps, wantedMobileCaps.iCallControlCaps, unWantedMobileCaps.iCallControlCaps, + _L("RMobileCall::GetMobileCallCaps returned unexpected iCallControlCaps")); + + // === Check call status === + + // Check RCall::GetStatus returns EStatusRinging + RCall::TStatus callStatus; + ASSERT_EQUALS(incomingCall.GetStatus(callStatus), KErrNone, + _L("RCall::GetStatus returned an error")); + ASSERT_EQUALS(callStatus, RCall::EStatusRinging, + _L("RCall::GetStatus did not return EStatusRinging as expected")); + + // Check RMobileCall::GetMobileCallStatus returns status of EStatusRinging + RMobileCall::TMobileCallStatus mobileCallStatus; + ASSERT_EQUALS(incomingCall.GetMobileCallStatus(mobileCallStatus), KErrNone, + _L("RMobileCall::GetMobileCallStatus returned an error")); + ASSERT_EQUALS(mobileCallStatus, RMobileCall::EStatusRinging, + _L("RMobileCall::GetMobileCallStatus did not set call status EStatusRinging as expected")); + + // === Check call info === + + // Check RCall::GetInfo returns valid call name. + // Check RCall::GetInfo returns valid voice line name. + // Check RCall::GetInfo returns call status of EStatusRinging. + // Check RCall::GetInfo returns call duration of 0. + RCall::TCallInfo callInfo; + ASSERT_EQUALS(incomingCall.GetInfo(callInfo), KErrNone, + _L("RCall::GetInfo returned an error")); + ASSERT_TRUE(callInfo.iCallName.Length() >0, + _L("RCall::GetInfo returned an invalid name")); + ASSERT_TRUE(callInfo.iLineName.Length() >0, + _L("RCall::GetInfo returned an invalid Line name")); + ASSERT_EQUALS(callInfo.iStatus, RCall::EStatusRinging, + _L("RCall::GetInfo wrong iStatus, should be EStatusRinging")); + ASSERT_EQUALS(callInfo.iDuration.Int(), 0, + _L("RCall::GetInfo wrong iDuration, should be 0")); + + // Check RMobileCall::GetMobileCallInfo returns iValid > 0. + // Check RMobileCall::GetMobileCallInfo returns data for attributes makred as valid in iValid. + // Check RMobileCall::GetMobileCallInfo returns valid line name. + RMobileCall::TMobileCallInfoV1 mobileCallInfo; + RMobileCall::TMobileCallInfoV1Pckg mobileCallInfoPckg(mobileCallInfo); + User::After(KOneSecond*2); // Give timers enough time to increment + ASSERT_EQUALS(incomingCall.GetMobileCallInfo(mobileCallInfoPckg), KErrNone, + _L("RMobileCall::GetMobileCallInfo returned an error")); + ASSERT_TRUE(mobileCallInfo.iLineName.Length() > 0, + _L("RMobileCall::GetMobileCallInfo returned an invalid line name")); + ASSERT_TRUE(mobileCallInfo.iValid > 0, + _L("RMobileCall::GetMobileCallInfo returned unexpected flags in iValid")); + + // Check RMobileCall::GetMobileCallInfo returns valid remote number. + // Check RMobileCall::GetMobileCallInfo returns call duration=0 + // Check RMobileCall::GetMobileCallInfo returns valid callId + // Note: not using TCallControlTsyTestHelper::CheckForValidCallInfo() as some checks would fail at this point + if(mobileCallInfo.iValid & RMobileCall::KCallRemoteParty) + { + ASSERT_TRUE(mobileCallInfo.iRemoteParty.iRemoteNumber.iTelNumber.Length() > 0, + _L("RMobileCall::GetMobileCallInfo set bitmask for KCallRemoteParty to true, but iRemoteParty.iRemoteNumber.iTelNumber has invalid length")) + } + if(mobileCallInfo.iValid & RMobileCall::KCallDuration) + { + TTimeIntervalSeconds startTime = 0; + TTimeIntervalSeconds durationTime(mobileCallInfo.iDuration); + ASSERT_EQUALS(durationTime.Int(), startTime.Int(), + _L("RMobileCall::GetMobileCallInfo set bitmask for KCallDuration to true, but set iDuration to an invalid number")) + } + if(mobileCallInfo.iValid & RMobileCall::KCallId) + { + ASSERT_TRUE( mobileCallInfo.iCallId > -1, + _L("RMobileCall::GetMobileCallInfo set bitmask for KCallId to true, but set iCallId to an invalid number")) + DEBUG_PRINTF2(_L("call id=%d"), mobileCallInfo.iCallId); + } + + // Populate a RMobileCall::TMobileCallParamsV1 with: + RMobileCall::TMobileCallParamsV1 mobileCallParams; + // • iSpeakerControl = EMonitorSpeakerControlAlwaysOff + mobileCallParams.iSpeakerControl = RCall::EMonitorSpeakerControlAlwaysOff; + // • iSpeakerVolume = EMonitorSpeakerVolumeOff + mobileCallParams.iSpeakerVolume = RCall::EMonitorSpeakerVolumeOff; + // • iInterval = 0x01 + mobileCallParams.iInterval = 0x01; + // • iWaitForDialTone = EDialToneWait + mobileCallParams.iWaitForDialTone = RCall::EDialToneWait; + // • iIdRestrict = EIdRestrictDefault + mobileCallParams.iIdRestrict = RMobileCall::EIdRestrictDefault; + // • iExplicitInvoke = TRUE + mobileCallParams.iCug.iExplicitInvoke = TRUE ; + // • iCugIndex = 0x0000 + mobileCallParams.iCug.iCugIndex = 0x0000; + // • iSuppressOA = FALSE + mobileCallParams.iCug.iSuppressOA = FALSE; + // • iSuppressPrefCug = FALSE + mobileCallParams.iCug.iSuppressPrefCug = FALSE; + // • iAutoRedial = FALSE + mobileCallParams.iAutoRedial = FALSE; + + RMobileCall::TMobileCallParamsV1Pckg mobileCallParamsPckg(mobileCallParams); + + // ==== Post Notifiers ===== + TCoreEtelRequestStatus notifyCapsChangeStatus (incomingCall,&RCall::NotifyCapsChangeCancel); + CleanupStack::PushL(notifyCapsChangeStatus); + incomingCall.NotifyCapsChange(notifyCapsChangeStatus,caps); + + // post notifier for RMobileCall::NotifyMobileCallCapsChange + TExtEtelRequestStatus notifyMobileCallCapsChangeStatus(incomingCall, EMobileCallNotifyMobileCallCapsChange); + CleanupStack::PushL(notifyMobileCallCapsChangeStatus); + incomingCall.NotifyMobileCallCapsChange(notifyMobileCallCapsChangeStatus, capsPckg); + + // post notifier for RCall::NotifyStatusChange + TCoreEtelRequestStatus notifyCallStatusChangeStatus (incomingCall, &RCall::NotifyStatusChangeCancel); + CleanupStack::PushL(notifyCallStatusChangeStatus); + incomingCall.NotifyStatusChange(notifyCallStatusChangeStatus, callStatus); + + // post notifier for RMobileCall::NotifyMobileCallStatusChange + TExtEtelRequestStatus notifyMobileCallChangeStatus(incomingCall, EMobileCallNotifyMobileCallStatusChange); + CleanupStack::PushL(notifyMobileCallChangeStatus); + incomingCall.NotifyMobileCallStatusChange(notifyMobileCallChangeStatus, mobileCallStatus); + + // Answer incoming call by calling RCall::AnswerIncomingCall and using TMobileCallParamsV1 + ASSERT_EQUALS(incomingCall.AnswerIncomingCall(mobileCallParamsPckg), KErrNone, + _L("RCall::AnswerIncomingCall returned an error")); + + // === Check call caps === + + // Check RCall::NotifyCapsChange completes with caps in set of KCapsVoice | KCapsHangUp. + RCall::TCaps wantedCaps, unwantedCaps; + wantedCaps.iFlags = RCall::KCapsVoice | RCall::KCapsHangUp; + unwantedCaps.iFlags = KNoUnwantedBits; + const TInt wantedStatus = KErrNone; + iCallControlTestHelper.WaitForCallNotifyCapsChange(incomingCall, + notifyCapsChangeStatus, + caps, + wantedCaps, + unwantedCaps, + wantedStatus); + + // Check RCall::GetCaps supports KCapsHangUp | KCapsVoice. + ASSERT_EQUALS(incomingCall.GetCaps(caps), KErrNone, + _L("RCall::GetCaps returned an Error")); + ASSERT_BITS_SET(caps.iFlags, RCall::KCapsHangUp | RCall::KCapsVoice, KNoUnwantedBits, + _L("RCall::GetCaps returned wrong caps")); + + // Check RMobileCall::NotifyMobileCallCapsChange completes with iCallControlCaps in set of KCapsVoice | KCapsHold | KCapsHangUp. + // Check RMobileCall::NotifyMobileCallCapsChange completes with iCallEventCaps in set of KCapsLocalHold | KCapsLocalTransfer | KCapsRemoteHold | KCapsRemoteTerminate | KCapsRemoteConferenceCreate. + wantedMobileCaps.iCallControlCaps = RMobileCall::KCapsVoice | RMobileCall::KCapsHold | RMobileCall::KCapsHangUp; + wantedMobileCaps.iCallEventCaps = RMobileCall::KCapsLocalHold | RMobileCall::KCapsLocalTransfer | RMobileCall::KCapsRemoteHold | RMobileCall::KCapsRemoteTerminate | RMobileCall::KCapsRemoteConferenceCreate; + TCmpRMobileCallTMobileCallCaps mobileCapsComp(wantedMobileCaps, mobileCallCaps, *this); + iCallControlTestHelper.WaitForMobileCallNotifyMobileCallCapsChange(incomingCall, + notifyMobileCallCapsChangeStatus, + mobileCapsComp, + wantedStatus); + + + // Check RMobileCall::GetMobileCallCaps includes iCallControlCaps in set of KCapsVoice | KCapsHold | KCapsHangUp. + // Check RMobileCall::GetMobileCallCaps includes iCallEventCaps in set of KCapsLocalHold | KCapsLocalTransfer | KCapsRemoteHold | KCapsRemoteTerminate | KCapsRemoteConferenceCreate. + ASSERT_EQUALS(incomingCall.GetMobileCallCaps(capsPckg), KErrNone, + _L("RMobileCall::GetMobileCallCaps returned an error")); + wantedMobileCaps.iCallControlCaps = RMobileCall::KCapsVoice | RMobileCall::KCapsHold | RMobileCall::KCapsHangUp; + ASSERT_BITS_SET(mobileCallCaps.iCallControlCaps, wantedMobileCaps.iCallControlCaps, KNoUnwantedBits, + _L("RMobileCall::GetMobileCallCaps returned unexpected iCallControlCaps")); + wantedMobileCaps.iCallEventCaps = RMobileCall::KCapsLocalHold | RMobileCall::KCapsLocalTransfer |RMobileCall::KCapsRemoteHold | RMobileCall::KCapsRemoteTerminate | RMobileCall::KCapsRemoteConferenceCreate; + ASSERT_BITS_SET(mobileCallCaps.iCallEventCaps, wantedMobileCaps.iCallEventCaps, KNoUnwantedBits, + _L("RMobileCall::GetMobileCallCaps returned unexpected iCallEventCaps")); + + // === Check call status === + + // Check RCall::NotifyStatusChange completes with EStatusConnected + RCall::TStatus expectedCallStatus = RCall::EStatusConnected; + iCallControlTestHelper.WaitForCallNotifyStatusChange(incomingCall, + notifyCallStatusChangeStatus, + callStatus, + expectedCallStatus, + wantedStatus); + + // Check RCall::GetStatus returns EStatusConnected + ASSERT_EQUALS(incomingCall.GetStatus(callStatus),KErrNone, + _L("RCall::GetStatus returned an error")); + ASSERT_EQUALS(callStatus, RCall::EStatusConnected, + _L("RCall::GetStatus returned an unexpected call status")); + + // Check RMobileCall::NotifyMobileCallStatusChange completes with EStatusConnected. + RMobileCall::TMobileCallStatus expectedMobileCallStatus = RMobileCall::EStatusConnected; + iCallControlTestHelper.WaitForMobileCallNotifyMobileCallStatusChange(incomingCall, + notifyMobileCallChangeStatus, + mobileCallStatus, + expectedMobileCallStatus, + wantedStatus); + + // Check RMobileCall::GetMobileCallStatus returns status of EStatusConnected. + ASSERT_EQUALS(incomingCall.GetMobileCallStatus(mobileCallStatus), KErrNone, + _L("RMobileCall::GetMobileStatus returned an error")); + ASSERT_EQUALS(mobileCallStatus, RMobileCall::EStatusConnected, + _L("RMobileCall::GetMobileStatus did not return a status EStatusConnected")); + + // === Check call info === + + // Check RCall::GetInfo returns valid call name. + // Check RCall::GetInfo returns valid voice line name. + // Check RCall::GetInfo returns call status of EStatusConnected. + // Check RCall::GetInfo returns call duration of > 0. + User::After(KOneSecond*2); // Give timers enough time to increment + ASSERT_EQUALS(incomingCall.GetInfo(callInfo), KErrNone, + _L("RCall::GetInfo returned an error")); + ASSERT_TRUE(callInfo.iCallName.Length() > 0, + _L("RCall::GetInfo returned an invalid name")); + ASSERT_TRUE(callInfo.iLineName.Length() > 0, + _L("RCall::GetInfo returned an invalid Line name")); + ASSERT_EQUALS(callInfo.iStatus, RCall::EStatusConnected, + _L("RCall::GetInfo wrong iStatus, should be EStatusConnected")); + ASSERT_TRUE(callInfo.iDuration.Int() > 0, + _L("RCall::GetInfo wrong iDuration, should be > 0")); + + // Check RMobileCall::GetMobileCallInfo returns iValid > 0. + // Check RMobileCall::GetMobileCallInfo returns data for attributes makred as valid in iValid. + // Check RMobileCall::GetMobileCallInfo returns valid line name. + ASSERT_EQUALS(incomingCall.GetMobileCallInfo(mobileCallInfoPckg), KErrNone, + _L("RMobileCall::GetMobileCallInfo returned an error")); + ASSERT_TRUE(mobileCallInfo.iLineName.Length() > 0, + _L("RMobileCall::GetMobileCallInfo returned an invalid line name")); + ASSERT_TRUE(mobileCallInfo.iValid > 0, + _L("RMobileCall::GetMobileCallInfo returned unexpected flags in iValid")); + + iCallControlTestHelper.CheckForValidCallInfo(mobileCallInfo); + + //==== Post some notifiers ==== + incomingCall.NotifyCapsChange(notifyCapsChangeStatus,caps); + incomingCall.NotifyMobileCallCapsChange(notifyMobileCallCapsChangeStatus, capsPckg); + incomingCall.NotifyStatusChange(notifyCallStatusChangeStatus,callStatus); + incomingCall.NotifyMobileCallStatusChange(notifyMobileCallChangeStatus, mobileCallStatus); + + // Hang up the call + + TCoreEtelRequestStatus hangUpStatus (incomingCall,&RCall::HangUpCancel); + CleanupStack::PushL(hangUpStatus); + incomingCall.HangUp(hangUpStatus); + ASSERT_EQUALS(WaitForRequestWithTimeOut(hangUpStatus, ETimeMedium), KErrNone, + _L("RCall::HangUp returned an error")); + ASSERT_EQUALS(hangUpStatus.Int(), KErrNone, + _L("RCall::HangUp returned an error")); + + // === Check call caps === + + // Check RCall::NotifyCapsChange completes with caps in set of KCapsVoice | KCapsDial. + wantedCaps.iFlags = RCall::KCapsVoice | RCall::KCapsDial; + iCallControlTestHelper.WaitForCallNotifyCapsChange(incomingCall, + notifyCapsChangeStatus, + caps, + wantedCaps, + unwantedCaps, + wantedStatus); + + // Check RCall::GetCaps supports KCapsVoice | KCapsDial. + ASSERT_EQUALS(incomingCall.GetCaps(caps), KErrNone, + _L("RCall::GetCaps returned an Error")); + ASSERT_BITS_SET(caps.iFlags, RCall::KCapsVoice | RCall::KCapsDial, KNoUnwantedBits, + _L("RCall::GetCaps returned wrong caps")); + + // Check RMobileCall::NotifyMobileCallCapsChange completes with iCallControlCaps in set of KCapsVoice | KCapsDial. + // Check RMobileCall::NotifyMobileCallCapsChange completes with iCallEventCaps in set of 0. + wantedMobileCaps.iCallControlCaps = RMobileCall::KCapsVoice | RMobileCall::KCapsDial; + wantedMobileCaps.iCallEventCaps = 0; + TCmpRMobileCallTMobileCallCaps mobileCapsComp2(wantedMobileCaps, mobileCallCaps, *this); + iCallControlTestHelper.WaitForMobileCallNotifyMobileCallCapsChange(incomingCall, + notifyMobileCallCapsChangeStatus, + mobileCapsComp2, + wantedStatus); + + // Check RMobileCall::GetMobileCallCaps includes iCallControlCaps in set of KCapsVoice | KCapsDial. + // Check RMobileCall::GetMobileCallCaps includes iCallEventCaps in set of 0. + ASSERT_EQUALS(incomingCall.GetMobileCallCaps(capsPckg), KErrNone, + _L("RMobileCall::GetMobileCallCaps returned an error")); + wantedMobileCaps.iCallControlCaps = RMobileCall::KCapsVoice | RMobileCall::KCapsDial; + ASSERT_BITS_SET(mobileCallCaps.iCallControlCaps, wantedMobileCaps.iCallControlCaps,KNoUnwantedBits, + _L("RMobileCall::GetMobileCallCaps returned unexpected iCallControlCaps")); + wantedMobileCaps.iCallEventCaps = 0; + ASSERT_BITS_SET(mobileCallCaps.iCallEventCaps, wantedMobileCaps.iCallEventCaps,KNoUnwantedBits, + _L("RMobileCall::GetMobileCallCaps returned unexpected iCallEventCaps")); + + // === Check call status === + + // Check RCall::NotifyStatusChange completes with EStatusHangingUp -> EStatusIdle. + expectedCallStatus = RCall::EStatusHangingUp; + iCallControlTestHelper.WaitForCallNotifyStatusChange(incomingCall, + notifyCallStatusChangeStatus, + callStatus, + expectedCallStatus, + wantedStatus); + + incomingCall.NotifyStatusChange(notifyCallStatusChangeStatus,callStatus); + expectedCallStatus = RCall::EStatusIdle; + iCallControlTestHelper.WaitForCallNotifyStatusChange(incomingCall, + notifyCallStatusChangeStatus, + callStatus, + expectedCallStatus, + wantedStatus); + + // Check RCall::GetStatus returns EStatusIdle. + ASSERT_EQUALS(incomingCall.GetStatus(callStatus),KErrNone, + _L("RCall::GetStatus returned an error")); + ASSERT_EQUALS(callStatus, RCall::EStatusIdle, + _L("RCall::GetStatus returned an unexpected call status")); + + // Check RMobileCall::NotifyMobileCallStatusChange completes with EStatusDisconnecting -> EStatusIdle. + expectedMobileCallStatus = RMobileCall::EStatusDisconnecting; + iCallControlTestHelper.WaitForMobileCallNotifyMobileCallStatusChange(incomingCall, + notifyMobileCallChangeStatus, + mobileCallStatus, + expectedMobileCallStatus, + wantedStatus); + + incomingCall.NotifyMobileCallStatusChange(notifyMobileCallChangeStatus, mobileCallStatus); + expectedMobileCallStatus = RMobileCall::EStatusIdle; + iCallControlTestHelper.WaitForMobileCallNotifyMobileCallStatusChange(incomingCall, + notifyMobileCallChangeStatus, + mobileCallStatus, + expectedMobileCallStatus, + wantedStatus); + + // Check RMobileCall::GetMobileCallStatus returns status of EStatusIdle. + ASSERT_EQUALS(incomingCall.GetMobileCallStatus(mobileCallStatus), KErrNone, + _L("RMobileCall::GetMobileStatus returned an error")); + ASSERT_EQUALS(mobileCallStatus, RMobileCall::EStatusIdle, + _L("RMobileCall::GetMobileStatus did not return a status EStatusIdle")); + + // === Check call info === + + // Check RCall::GetInfo returns valid call name. + // Check RCall::GetInfo returns valid voice line name. + // Check RCall::GetInfo returns call status of EStatusIdle. + // Check RCall::GetInfo returns call duration of > 0. + ASSERT_EQUALS(incomingCall.GetInfo(callInfo), KErrNone, + _L("RCall::GetInfo returned an error")); + ASSERT_TRUE(callInfo.iCallName.Length() > 0, + _L("RCall::GetInfo returned an invalid name")); + ASSERT_TRUE(callInfo.iLineName.Length() > 0, + _L("RCall::GetInfo returned an invalid Line name")); + ASSERT_EQUALS(callInfo.iStatus, RCall::EStatusIdle, + _L("RCall::GetInfo wrong iStatus, should be EStatusIdle")); + ASSERT_TRUE(callInfo.iDuration.Int() > 0, + _L("RCall::GetInfo wrong iDuration, should be >0")); + + // Check RMobileCall::GetMobileCallInfo returns iValid > 0. + // Check RMobileCall::GetMobileCallInfo returns data for attributes makred as valid in iValid. + // Check RMobileCall::GetMobileCallInfo returns valid line name. + ASSERT_EQUALS(incomingCall.GetMobileCallInfo(mobileCallInfoPckg), KErrNone, + _L("RMobileCall::GetMobileCallInfo returned an error")); + ASSERT_TRUE(mobileCallInfo.iLineName.Length() >0, + _L("RMobileCall::GetMobileCallInfo returned an invalid line name")); + ASSERT_TRUE(mobileCallInfo.iValid > 0, + _L("RMobileCall::GetMobileCallInfo returned unexpected flags in iValid")); + + // Note: not using TCallControlTsyTestHelper::CheckForValidCallInfo() as some checks would fail at this point + if(mobileCallInfo.iValid & RMobileCall::KCallRemoteParty) + { + ASSERT_TRUE(mobileCallInfo.iRemoteParty.iRemoteNumber.iTelNumber.Length() > 0, + _L("RMobileCall::GetMobileCallInfo set bitmask for KCallRemoteParty to true, but iRemoteParty.iRemoteNumber.iTelNumber has invalid length")); + } + if(mobileCallInfo.iValid & RMobileCall::KCallDuration) + { + TTimeIntervalSeconds startTime = 0; + TTimeIntervalSeconds durationTime(mobileCallInfo.iDuration); + ASSERT_TRUE(durationTime > startTime, + _L("RMobileCall::GetMobileCallInfo set bitmask for KCallDuration to true, but set iDuration to an invalid number")); + } + + if(mobileCallInfo.iValid & RMobileCall::KCallId) + { + ASSERT_EQUALS( mobileCallInfo.iCallId, -1, + _L("RMobileCall::GetMobileCallInfo set bitmask for KCallId to true, but set iCallId to an invalid number")); + DEBUG_PRINTF2(_L("RMobileCall::GetMobileCallInfo returns callId of: %d"), mobileCallInfo.iCallId); + } + if(mobileCallInfo.iValid & RMobileCall::KCallExitCode) + { + ASSERT_EQUALS( mobileCallInfo.iExitCode, KErrNone, _L("RMobileCall::GetMobileCallInfo set bitmask for KCallExitCode to true, but did not set iExitCode to KErrNone")) + } + + //////////////////////////////////////////////////////////////// + // TEST END + //////////////////////////////////////////////////////////////// + + StartCleanup(); + + CleanupStack::PopAndDestroy(6,¬ifyIncomingCallStatus); + // notifyIncomingCallStatus + // notifyCapsChangeStatus + // notifyMobileCallCapsChangeStatus + // notifyCallStatusChangeStatus + // notifyMobileCallChangeStatus + // hangUpStatus + + return TestStepResult(); + } + +TPtrC CCTSYIntegrationTestCallControl0018::GetTestStepName() +/** + * @return The test step name. + */ + { + return _L("CCTSYIntegrationTestCallControl0018"); + } + + + +CCTSYIntegrationTestCallControl0019::CCTSYIntegrationTestCallControl0019(CEtelSessionMgr& aEtelSessionMgr) + : CCTSYIntegrationTestCallControlBase(aEtelSessionMgr) +/** + * Constructor. + */ + { + SetTestStepName(CCTSYIntegrationTestCallControl0019::GetTestStepName()); + } + +CCTSYIntegrationTestCallControl0019::~CCTSYIntegrationTestCallControl0019() +/** + * Destructor. + */ + { + } + +TVerdict CCTSYIntegrationTestCallControl0019::doTestStepL() +/** + * @SYMTestCaseID BA-CTSY-INT-CCON-0019 + * @SYMFssID BA/CTSY/CCON-0019 + * @SYMTestCaseDesc Answer incoming call then have remote party hang up. + * @SYMTestPriority High + * @SYMTestActions RCall::OpenExistingCall, RCall::AnswerIncomingCall, RCall::HangUp, RCall::NotifyStatusChange, RCall::GetStatus, RMobileCall::NotifyMobileCallStatusChange, RMobileCall::GetMobileCallStatus + * @SYMTestExpectedResults Pass - Call answered. Mobile call status correct. + * @SYMTestType CIT + * @SYMTestCaseDependencies live/automatic + * + * Reason for test: Verify call can be answered with specified params and call status, info and caps are correct. + * + * @return - TVerdict code + */ + { + + //////////////////////////////////////////////////////////////// + // SET UP + //////////////////////////////////////////////////////////////// + + + // Check phone supports KCapsVoice + + // Get Voice line 1 + RMobileLine& voiceLine = iEtelSessionMgr.GetLineL(KMainServer, KMainPhone, KVoiceLine); + + RLine::TCaps lineCaps; + CHECK_EQUALS_L(voiceLine.GetCaps(lineCaps), KErrNone, + _L("RMobileLine::GetCaps returned an error")); + CHECK_BITS_SET_L(lineCaps.iFlags, RLine::KCapsVoice, KNoUnwantedBits, + _L("RLine::GetCaps returned wrong caps")); + + // Call TNetworkTsyTestHelper::WaitForRegisteredOnHomeNetworkL + RMobilePhone& phone = iEtelSessionMgr.GetPhoneL(KMainServer,KMainPhone); + CHECK_EQUALS_L(iNetworkTestHelper.WaitForRegisteredOnHomeNetworkL(phone), KErrNone, + _L("TNetworkTsyTestHelper::WaitForRegisteredOnHomeNetworkL returned with an error")); + + //////////////////////////////////////////////////////////////// + // SET UP END + //////////////////////////////////////////////////////////////// + + StartTest(); + + //////////////////////////////////////////////////////////////// + // TEST START + //////////////////////////////////////////////////////////////// + + // post notifier for RLine::NotifyIncomingCall + TCoreEtelRequestStatus notifyIncomingCallStatus (voiceLine,&RLine::NotifyIncomingCallCancel); + CleanupStack::PushL(notifyIncomingCallStatus); + TName name; + voiceLine.NotifyIncomingCall(notifyIncomingCallStatus,name); + + // Request an incoming call from RPS. + RPSRequestIncomingCallL(EVoiceLine); + + // Check RLine::NotifyIncomingCall completes. + ASSERT_EQUALS(WaitForRequestWithTimeOut(notifyIncomingCallStatus,ETimeMedium),KErrNone, + _L("RLine::NotifyIncomingCall did not complete without error")); + ASSERT_EQUALS(notifyIncomingCallStatus.Int(), KErrNone, + _L("RLine::NotifyIncomingCall set requestStatus to an error")); + ASSERT_TRUE(name.Length() > 0, + _L("RLine::NotifyIncomingCall did not set the name")); + + TCallId incomingCallId; + RMobileCall& incomingCall = iEtelSessionMgr.GetIncomingCallL(KMainServer, KMainPhone, KVoiceLine, name, incomingCallId); + + // === Check call caps === + + // Check RCall::GetCaps supports caps in set of KCapsVoice | KCapsAnswer + // Check RCall::GetCaps supports NOT in set of KCapsDial + RCall::TCaps caps; + ASSERT_EQUALS(incomingCall.GetCaps(caps), KErrNone, + _L("RCall::GetCaps returned an Error")); + ASSERT_BITS_SET(caps.iFlags, RCall::KCapsVoice | RCall::KCapsAnswer, RCall::KCapsDial, + _L("RCall::GetCaps returned wrong caps")); + + // Check RMobileCall::GetMobileCallCaps includes iCallControlCaps in set of KCapsVoice | KCapsDeflect | KCapsAnswer + // Check RMobileCall::GetMobileCallCaps includes iCallControlCaps NOT in set of KCapsDial + RMobileCall::TMobileCallCapsV1 mobileCallCaps; + RMobileCall::TMobileCallCapsV1Pckg capsPckg(mobileCallCaps); + RMobileCall::TMobileCallCapsV1 wantedMobileCaps, unwantedMobileCaps; + ASSERT_EQUALS(incomingCall.GetMobileCallCaps(capsPckg), KErrNone, + _L("RMobileCall::GetMobileCallCaps returned an error")); + wantedMobileCaps.iCallControlCaps = RMobileCall::KCapsVoice | RMobileCall::KCapsDeflect | RMobileCall::KCapsAnswer; + unwantedMobileCaps.iCallControlCaps = RMobileCall::KCapsDial; + ASSERT_BITS_SET(mobileCallCaps.iCallControlCaps, wantedMobileCaps.iCallControlCaps,unwantedMobileCaps.iCallControlCaps, + _L("RMobileCall::GetMobileCallCaps returned unexpected iCallControlCaps")); + + // === Check call status === + + // Check RCall::GetStatus returns EStatusRinging + RCall::TStatus callStatus; + ASSERT_EQUALS(incomingCall.GetStatus(callStatus),KErrNone, + _L("RCall::GetStatus returned an error")); + ASSERT_EQUALS(callStatus, RCall::EStatusRinging, + _L("RCall::GetStatus returned an unexpected call status")); + + // Check RMobileCall::GetMobileCallStatus returns status of EStatusRinging + RMobileCall::TMobileCallStatus mobileCallStatus; + ASSERT_EQUALS(incomingCall.GetMobileCallStatus(mobileCallStatus), KErrNone, + _L("RMobileCall::GetMobileStatus returned an error")); + ASSERT_EQUALS(mobileCallStatus, RMobileCall::EStatusRinging, + _L("RMobileCall::GetMobileStatus did not return a status EStatusConnected")); + + // === Check call info === + + // Check RCall::GetInfo returns valid call name. + // Check RCall::GetInfo returns valid voice line name. + // Check RCall::GetInfo returns call status of EStatusRinging. + // Check RCall::GetInfo returns call duration of 0. + RCall::TCallInfo callInfo; + ASSERT_EQUALS(incomingCall.GetInfo(callInfo), KErrNone, + _L("RCall::GetInfo returned an error")); + ASSERT_TRUE(callInfo.iCallName.Length() >0, + _L("RCall::GetInfo returned an invalid name")); + ASSERT_TRUE(callInfo.iLineName.Length() >0, + _L("RCall::GetInfo returned an invalid Line name")); + ASSERT_EQUALS(callInfo.iStatus, RCall::EStatusRinging, + _L("RCall::GetInfo wrong iStatus, should be EStatusRinging")); + ASSERT_EQUALS(callInfo.iDuration.Int(), 0, + _L("RCall::GetInfo wrong iDuration, should be 0")); + + // Check RMobileCall::GetMobileCallInfo returns iValid > 0. + // Check RMobileCall::GetMobileCallInfo returns data for attributes makred as valid in iValid. + // Check RMobileCall::GetMobileCallInfo returns valid line name. + RMobileCall::TMobileCallInfoV1 mobileCallInfo; + RMobileCall::TMobileCallInfoV1Pckg mobileCallInfoPckg(mobileCallInfo); + User::After(KOneSecond*2); // Give timers enough time to increment + ASSERT_EQUALS(incomingCall.GetMobileCallInfo(mobileCallInfoPckg), KErrNone, + _L("RMobileCall::GetMobileCallInfo returned an error")); + ASSERT_TRUE(mobileCallInfo.iLineName.Length() > 0, + _L("RMobileCall::GetMobileCallInfo returned an invalid line name")); + ASSERT_TRUE(mobileCallInfo.iValid > 0, + _L("RMobileCall::GetMobileCallInfo returned unexpected flags in iValid")); + + // Check RMobileCall::GetMobileCallInfo returns valid remote number. + // Check RMobileCall::GetMobileCallInfo returns call duration=0 + // Check RMobileCall::GetMobileCallInfo returns valid callId + // Note: not using TCallControlTsyTestHelper::CheckForValidCallInfo() as some checks would fail at this point + if(mobileCallInfo.iValid & RMobileCall::KCallRemoteParty) + { + ASSERT_TRUE(mobileCallInfo.iRemoteParty.iRemoteNumber.iTelNumber.Length() > 0, + _L("RMobileCall::GetMobileCallInfo set bitmask for KCallRemoteParty to true, but iRemoteParty.iRemoteNumber.iTelNumber has invalid length")) + } + if(mobileCallInfo.iValid & RMobileCall::KCallDuration) + { + TTimeIntervalSeconds startTime = 0; + TTimeIntervalSeconds durationTime(mobileCallInfo.iDuration); + ASSERT_EQUALS(durationTime.Int(), startTime.Int(), + _L("RMobileCall::GetMobileCallInfo set bitmask for KCallDuration to true, but set iDuration to an invalid number")) + } + if(mobileCallInfo.iValid & RMobileCall::KCallId) + { + ASSERT_TRUE( mobileCallInfo.iCallId > -1, + _L("RMobileCall::GetMobileCallInfo set bitmask for KCallId to true, but set iCallId to an invalid number")) + } + + // Populate a RMobileCall::TMobileCallParamsV1 with: + RMobileCall::TMobileCallParamsV1 mobileCallParams; + // • iSpeakerControl = EMonitorSpeakerControlAlwaysOff + mobileCallParams.iSpeakerControl = RCall::EMonitorSpeakerControlAlwaysOff; + // • iSpeakerVolume = EMonitorSpeakerVolumeOff + mobileCallParams.iSpeakerVolume = RCall::EMonitorSpeakerVolumeOff; + // • iInterval = 0x01 + mobileCallParams.iInterval = 0x01; + // • iWaitForDialTone = EDialToneWait + mobileCallParams.iWaitForDialTone = RCall::EDialToneWait; + // • iIdRestrict = EIdRestrictDefault + mobileCallParams.iIdRestrict = RMobileCall::EIdRestrictDefault; + // • iExplicitInvoke = TRUE + mobileCallParams.iCug.iExplicitInvoke = TRUE ; + // • iCugIndex = 0x0000 + mobileCallParams.iCug.iCugIndex = 0x0000; + // • iSuppressOA = FALSE + mobileCallParams.iCug.iSuppressOA = FALSE; + // • iSuppressPrefCug = FALSE + mobileCallParams.iCug.iSuppressPrefCug = FALSE; + // • iAutoRedial = FALSE + mobileCallParams.iAutoRedial = FALSE; + + RMobileCall::TMobileCallParamsV1Pckg mobileCallParamsPkg(mobileCallParams); + + // ==== Post Notifiers ===== + + // post notifier for RCall::NotifyCapsChange + TCoreEtelRequestStatus notifyCapsChangeStatus (incomingCall,&RCall::NotifyCapsChangeCancel); + CleanupStack::PushL(notifyCapsChangeStatus); + incomingCall.NotifyCapsChange(notifyCapsChangeStatus,caps); + + // post notifier for RMobileCall::NotifyMobileCallCapsChange + TExtEtelRequestStatus notifyMobileCallCapsChangeStatus(incomingCall, EMobileCallNotifyMobileCallCapsChange); + CleanupStack::PushL(notifyMobileCallCapsChangeStatus); + incomingCall.NotifyMobileCallCapsChange(notifyMobileCallCapsChangeStatus, capsPckg); + + // post notifier for RCall::NotifyStatusChange + TCoreEtelRequestStatus notifyCallStatusChangeStatus (incomingCall,&RCall::NotifyStatusChangeCancel); + CleanupStack::PushL(notifyCallStatusChangeStatus); + incomingCall.NotifyStatusChange(notifyCallStatusChangeStatus,callStatus); + + // post notifier for RMobileCall::NotifyMobileCallStatusChange + TExtEtelRequestStatus notifyMobileCallChangeStatus(incomingCall, EMobileCallNotifyMobileCallStatusChange); + CleanupStack::PushL(notifyMobileCallChangeStatus); + incomingCall.NotifyMobileCallStatusChange(notifyMobileCallChangeStatus, mobileCallStatus); + + // Answer incoming call with call params defined above + ASSERT_EQUALS(incomingCall.AnswerIncomingCall(mobileCallParamsPkg),KErrNone, + _L("RCall::AnswerIncomingCall errored when answering with defined params")); + + // === Check call caps === + + // Check RCall::NotifyCapsChange completes with caps in set of KCapsVoice | KCapsHangUp. + RCall::TCaps wantedCaps, unwantedCaps; + wantedCaps.iFlags = RCall::KCapsVoice | RCall::KCapsHangUp; + unwantedCaps.iFlags = KNoUnwantedBits; + const TInt wantedStatus = KErrNone; + iCallControlTestHelper.WaitForCallNotifyCapsChange(incomingCall, + notifyCapsChangeStatus, + caps, + wantedCaps, + unwantedCaps, + wantedStatus); + + // Check RCall::GetCaps supports KCapsHangUp | KCapsVoice. + ASSERT_EQUALS(incomingCall.GetCaps(caps), KErrNone, + _L("RCall::GetCaps returned an Error")); + ASSERT_BITS_SET(caps.iFlags, RCall::KCapsHangUp | RCall::KCapsVoice, KNoUnwantedBits, + _L("RCall::GetCaps returned wrong caps")); + + // Check RMobileCall::NotifyMobileCallCapsChange completes with iCallControlCaps in set of KCapsVoice | KCapsHold | KCapsHangUp. + // Check RMobileCall::NotifyMobileCallCapsChange completes with iCallEventCaps in set of KCapsLocalHold | KCapsLocalTransfer | KCapsRemoteHold | KCapsRemoteTerminate | KCapsRemoteConferenceCreate. + wantedMobileCaps.iCallControlCaps = RMobileCall::KCapsVoice | RMobileCall::KCapsHold | RMobileCall::KCapsHangUp; + wantedMobileCaps.iCallEventCaps = RMobileCall::KCapsLocalHold | RMobileCall::KCapsLocalTransfer | RMobileCall::KCapsRemoteHold | RMobileCall::KCapsRemoteTerminate | RMobileCall::KCapsRemoteConferenceCreate; + TCmpRMobileCallTMobileCallCaps mobileCapsComp(wantedMobileCaps, mobileCallCaps, *this); + iCallControlTestHelper.WaitForMobileCallNotifyMobileCallCapsChange(incomingCall, + notifyMobileCallCapsChangeStatus, + mobileCapsComp, + wantedStatus); + + // Check RMobileCall::GetMobileCallCaps includes iCallControlCaps in set of KCapsVoice | KCapsHold | KCapsHangUp. + // Check RMobileCall::GetMobileCallCaps includes iCallEventCaps in set of KCapsLocalHold | KCapsLocalTransfer | KCapsRemoteHold | KCapsRemoteTerminate | KCapsRemoteConferenceCreate. + ASSERT_EQUALS(incomingCall.GetMobileCallCaps(capsPckg), KErrNone, + _L("RMobileCall::GetMobileCallCaps returned an error")); + wantedMobileCaps.iCallControlCaps = RMobileCall::KCapsVoice | RMobileCall::KCapsHold | RMobileCall::KCapsHangUp; + ASSERT_BITS_SET(mobileCallCaps.iCallControlCaps, wantedMobileCaps.iCallControlCaps, KNoUnwantedBits, + _L("RMobileCall::GetMobileCallCaps returned unexpected iCallControlCaps")); + wantedMobileCaps.iCallEventCaps = RMobileCall::KCapsLocalHold | RMobileCall::KCapsLocalTransfer |RMobileCall::KCapsRemoteHold | RMobileCall::KCapsRemoteTerminate | RMobileCall::KCapsRemoteConferenceCreate; + ASSERT_BITS_SET(mobileCallCaps.iCallEventCaps, wantedMobileCaps.iCallEventCaps, KNoUnwantedBits, + _L("RMobileCall::GetMobileCallCaps returned unexpected iCallEventCaps")); + + // === Check call status === + + // Check RCall::NotifyStatusChange completes with EStatusConnected + RCall::TStatus expectedCallStatus = RCall::EStatusConnected; + iCallControlTestHelper.WaitForCallNotifyStatusChange(incomingCall, + notifyCallStatusChangeStatus, + callStatus, + expectedCallStatus, + wantedStatus); + + // Check RCall::GetStatus returns EStatusConnected + ASSERT_EQUALS(incomingCall.GetStatus(callStatus),KErrNone, + _L("RCall::GetStatus returned an error")); + ASSERT_EQUALS(callStatus, RCall::EStatusConnected, + _L("RCall::GetStatus returned an unexpected call status")); + + // Check RMobileCall::NotifyMobileCallStatusChange completes with EStatusConnected. + RMobileCall::TMobileCallStatus expectedMobileCallStatus = RMobileCall::EStatusConnected; + iCallControlTestHelper.WaitForMobileCallNotifyMobileCallStatusChange(incomingCall, + notifyMobileCallChangeStatus, + mobileCallStatus, + expectedMobileCallStatus, + wantedStatus); + + // Check RMobileCall::GetMobileCallStatus returns status of EStatusConnected. + ASSERT_EQUALS(incomingCall.GetMobileCallStatus(mobileCallStatus), KErrNone, + _L("RMobileCall::GetMobileStatus returned an error")); + ASSERT_EQUALS(mobileCallStatus, RMobileCall::EStatusConnected, + _L("RMobileCall::GetMobileStatus did not return a status EStatusConnected")); + + // === Check call info === + + // Check RCall::GetInfo returns valid call name. + // Check RCall::GetInfo returns valid voice line name. + // Check RCall::GetInfo returns call status of EStatusConnected. + // Check RCall::GetInfo returns call duration of > 0. + User::After(KOneSecond*2); // Give timers enough time to increment + ASSERT_EQUALS(incomingCall.GetInfo(callInfo), KErrNone, + _L("RCall::GetInfo returned an error")); + ASSERT_TRUE(callInfo.iCallName.Length() > 0, + _L("RCall::GetInfo returned an invalid name")); + ASSERT_TRUE(callInfo.iLineName.Length() > 0, + _L("RCall::GetInfo returned an invalid Line name")); + ASSERT_EQUALS(callInfo.iStatus, RCall::EStatusConnected, + _L("RCall::GetInfo wrong iStatus, should be EStatusConnected")); + ASSERT_TRUE(callInfo.iDuration.Int() > 0, + _L("RCall::GetInfo wrong iDuration, should be > 0")); + + // Check RMobileCall::GetMobileCallInfo returns iValid > 0. + // Check RMobileCall::GetMobileCallInfo returns data for attributes makred as valid in iValid. + // Check RMobileCall::GetMobileCallInfo returns valid line name. + ASSERT_EQUALS(incomingCall.GetMobileCallInfo(mobileCallInfoPckg), KErrNone, + _L("RMobileCall::GetMobileCallInfo returned an error")); + ASSERT_TRUE(mobileCallInfo.iLineName.Length() > 0, + _L("RMobileCall::GetMobileCallInfo returned an invalid line name")); + ASSERT_TRUE(mobileCallInfo.iValid > 0, + _L("RMobileCall::GetMobileCallInfo returned unexpected flags in iValid")); + + iCallControlTestHelper.CheckForValidCallInfo(mobileCallInfo); + + //==== Post some notifiers ==== + incomingCall.NotifyCapsChange(notifyCapsChangeStatus,caps); + incomingCall.NotifyMobileCallCapsChange(notifyMobileCallCapsChangeStatus, capsPckg); + incomingCall.NotifyStatusChange(notifyCallStatusChangeStatus,callStatus); + incomingCall.NotifyMobileCallStatusChange(notifyMobileCallChangeStatus, mobileCallStatus); + + // Post notifier for line status to indicate when hangup completes + TExtEtelRequestStatus notifyMobileLineStatusChangeStatus(voiceLine, EMobileLineNotifyMobileLineStatusChange); + CleanupStack::PushL(notifyMobileLineStatusChangeStatus); + RMobileCall::TMobileCallStatus mobileLineStatus; + voiceLine.NotifyMobileLineStatusChange(notifyMobileLineStatusChangeStatus, mobileLineStatus); + + // RPS hangs up the call. + ASSERT_EQUALS(RPSHangupL(EVoiceLine,0), KErrNone, + _L("CCTSYIntegrationTestSuiteStepBase::RPSHangup returned an error")); + + // Wait for line status to be idle + iCallControlTestHelper.WaitForMobileLineNotifyMobileLineStatusChange(voiceLine, + notifyMobileLineStatusChangeStatus, + mobileLineStatus, + RMobileCall::EStatusDisconnecting, + KErrNone); + + // === Check call caps === + + // Check RCall::NotifyCapsChange completes with caps in set of KCapsVoice | KCapsDial. + wantedCaps.iFlags = RCall::KCapsVoice | RCall::KCapsDial; + ERR_PRINTF2(_L("$CTSYKnownFailure: defect id = %d"), 10023); + iCallControlTestHelper.WaitForCallNotifyCapsChange(incomingCall, + notifyCapsChangeStatus, + caps, + wantedCaps, + unwantedCaps, + wantedStatus); + + // Check RCall::GetCaps supports KCapsVoice | KCapsDial. + ASSERT_EQUALS(incomingCall.GetCaps(caps), KErrNone, + _L("RCall::GetCaps returned an Error")); + ASSERT_BITS_SET(caps.iFlags, RCall::KCapsVoice | RCall::KCapsDial, KNoUnwantedBits, + _L("RCall::GetCaps returned wrong caps")); + + // Check RMobileCall::NotifyMobileCallCapsChange completes with iCallControlCaps in set of KCapsVoice | KCapsDial. + // Check RMobileCall::NotifyMobileCallCapsChange completes with iCallEventCaps in set of 0. + wantedMobileCaps.iCallControlCaps = RMobileCall::KCapsVoice | RMobileCall::KCapsDial; + wantedMobileCaps.iCallEventCaps = 0; + TCmpRMobileCallTMobileCallCaps mobileCapsComp2(wantedMobileCaps, mobileCallCaps, *this); + iCallControlTestHelper.WaitForMobileCallNotifyMobileCallCapsChange(incomingCall, + notifyMobileCallCapsChangeStatus, + mobileCapsComp2, + wantedStatus); + + // Check RMobileCall::GetMobileCallCaps includes iCallControlCaps in set of KCapsVoice | KCapsDial. + // Check RMobileCall::GetMobileCallCaps includes iCallEventCaps in set of 0. + ASSERT_EQUALS(incomingCall.GetMobileCallCaps(capsPckg), KErrNone, + _L("RMobileCall::GetMobileCallCaps returned an error")); + wantedMobileCaps.iCallControlCaps = RMobileCall::KCapsVoice | RMobileCall::KCapsDial; + ASSERT_BITS_SET(mobileCallCaps.iCallControlCaps, wantedMobileCaps.iCallControlCaps,KNoUnwantedBits, + _L("RMobileCall::GetMobileCallCaps returned unexpected iCallControlCaps")); + wantedMobileCaps.iCallEventCaps = 0; + ASSERT_BITS_SET(mobileCallCaps.iCallEventCaps, wantedMobileCaps.iCallEventCaps,KNoUnwantedBits, + _L("RMobileCall::GetMobileCallCaps returned unexpected iCallEventCaps")); + + // === Check call status === + + // Check RCall::NotifyStatusChange completes with EStatusHangingUp -> EStatusIdle. + expectedCallStatus = RCall::EStatusHangingUp; + iCallControlTestHelper.WaitForCallNotifyStatusChange(incomingCall, + notifyCallStatusChangeStatus, + callStatus, + expectedCallStatus, + wantedStatus); + + incomingCall.NotifyStatusChange(notifyCallStatusChangeStatus,callStatus); + expectedCallStatus = RCall::EStatusIdle; + iCallControlTestHelper.WaitForCallNotifyStatusChange(incomingCall, + notifyCallStatusChangeStatus, + callStatus, + expectedCallStatus, + wantedStatus); + + // Check RCall::GetStatus returns EStatusIdle. + ASSERT_EQUALS(incomingCall.GetStatus(callStatus),KErrNone, + _L("RCall::GetStatus returned an error")); + ASSERT_EQUALS(callStatus, RCall::EStatusIdle, + _L("RCall::GetStatus returned an unexpected call status")); + + // Check RMobileCall::NotifyMobileCallStatusChange completes with EStatusDisconnecting -> EStatusIdle. + expectedMobileCallStatus = RMobileCall::EStatusDisconnecting; + iCallControlTestHelper.WaitForMobileCallNotifyMobileCallStatusChange(incomingCall, + notifyMobileCallChangeStatus, + mobileCallStatus, + expectedMobileCallStatus, + wantedStatus); + + incomingCall.NotifyMobileCallStatusChange(notifyMobileCallChangeStatus, mobileCallStatus); + expectedMobileCallStatus = RMobileCall::EStatusIdle; + iCallControlTestHelper.WaitForMobileCallNotifyMobileCallStatusChange(incomingCall, + notifyMobileCallChangeStatus, + mobileCallStatus, + expectedMobileCallStatus, + wantedStatus); + + // Check RMobileCall::GetMobileCallStatus returns status of EStatusIdle. + ASSERT_EQUALS(incomingCall.GetMobileCallStatus(mobileCallStatus), KErrNone, + _L("RMobileCall::GetMobileStatus returned an error")); + ASSERT_EQUALS(mobileCallStatus, RMobileCall::EStatusIdle, + _L("RMobileCall::GetMobileStatus did not return a status EStatusIdle")); + + // === Check call info === + + // Check RCall::GetInfo returns valid call name. + // Check RCall::GetInfo returns valid voice line name. + // Check RCall::GetInfo returns call status of EStatusIdle. + // Check RCall::GetInfo returns call duration of > 0. + ASSERT_EQUALS(incomingCall.GetInfo(callInfo), KErrNone, + _L("RCall::GetInfo returned an error")); + ASSERT_TRUE(callInfo.iCallName.Length() > 0, + _L("RCall::GetInfo returned an invalid name")); + ASSERT_TRUE(callInfo.iLineName.Length() > 0, + _L("RCall::GetInfo returned an invalid Line name")); + ASSERT_EQUALS(callInfo.iStatus, RCall::EStatusIdle, + _L("RCall::GetInfo wrong iStatus, should be EStatusIdle")); + ASSERT_TRUE(callInfo.iDuration.Int() > 0, + _L("RCall::GetInfo wrong iDuration, should be >0")); + + // Check RMobileCall::GetMobileCallInfo returns iValid > 0. + // Check RMobileCall::GetMobileCallInfo returns data for attributes makred as valid in iValid. + // Check RMobileCall::GetMobileCallInfo returns valid line name. + ASSERT_EQUALS(incomingCall.GetMobileCallInfo(mobileCallInfoPckg), KErrNone, + _L("RMobileCall::GetMobileCallInfo returned an error")); + ASSERT_TRUE(mobileCallInfo.iLineName.Length() > 0, + _L("RMobileCall::GetMobileCallInfo returned an invalid line name")); + ASSERT_TRUE(mobileCallInfo.iValid > 0, + _L("RMobileCall::GetMobileCallInfo returned unexpected flags in iValid")); + + // Note: not using TCallControlTsyTestHelper::CheckForValidCallInfo() as some checks would fail at this point + if(mobileCallInfo.iValid & RMobileCall::KCallRemoteParty) + { + ASSERT_TRUE(mobileCallInfo.iRemoteParty.iRemoteNumber.iTelNumber.Length() > 0, + _L("RMobileCall::GetMobileCallInfo set bitmask for KCallRemoteParty to true, but iRemoteParty.iRemoteNumber.iTelNumber has invalid length")); + } + if(mobileCallInfo.iValid & RMobileCall::KCallDuration) + { + TTimeIntervalSeconds startTime = 0; + TTimeIntervalSeconds durationTime(mobileCallInfo.iDuration); + ASSERT_TRUE(durationTime > startTime, + _L("RMobileCall::GetMobileCallInfo set bitmask for KCallDuration to true, but set iDuration to an invalid number")); + } + + ERR_PRINTF2(_L("$CTSYKnownFailure: defect id = %d"), 10017); + if(mobileCallInfo.iValid & RMobileCall::KCallId) + { + ASSERT_EQUALS( mobileCallInfo.iCallId, -1, + _L("RMobileCall::GetMobileCallInfo set bitmask for KCallId to true, but set iCallId to an invalid number")); + } + if(mobileCallInfo.iValid & RMobileCall::KCallExitCode) + { + ASSERT_EQUALS( mobileCallInfo.iExitCode, KErrNone, _L("RMobileCall::GetMobileCallInfo set bitmask for KCallExitCode to true, but did not set iExitCode to KErrNone")) + } + + //////////////////////////////////////////////////////////////// + // TEST END + //////////////////////////////////////////////////////////////// + + StartCleanup(); + + // PopAndDestroy + // notifyIncomingCallStatus + // notifyCapsChangeStatus + // notifyMobileCallCapsChangeStatus + // notifyCallStatusChangeStatus + // notifyMobileCallChangeStatus + // notifyMobileLineStatusChangeStatus + + CleanupStack::PopAndDestroy(6,¬ifyIncomingCallStatus); + + return TestStepResult(); + } + +TPtrC CCTSYIntegrationTestCallControl0019::GetTestStepName() +/** + * @return The test step name. + */ + { + return _L("CCTSYIntegrationTestCallControl0019"); + } + + + +CCTSYIntegrationTestCallControl0020::CCTSYIntegrationTestCallControl0020(CEtelSessionMgr& aEtelSessionMgr) + : CCTSYIntegrationTestCallControlBase(aEtelSessionMgr) +/** + * Constructor. + */ + { + SetTestStepName(CCTSYIntegrationTestCallControl0020::GetTestStepName()); + } + +CCTSYIntegrationTestCallControl0020::~CCTSYIntegrationTestCallControl0020() +/** + * Destructor. + */ + { + } + +TVerdict CCTSYIntegrationTestCallControl0020::doTestStepL() +/** + * @SYMTestCaseID BA-CTSY-INT-CCON-0020 + * @SYMFssID BA/CTSY/CCON-0020 + * @SYMTestCaseDesc Cancel dialling a call. + * @SYMTestPriority High + * @SYMTestActions RMobileCall::GetMobileCallStatus, RCall::Dial, RCall::NotifyStatusChange, RMobileCall::NotifyMobileCallStatusChange, RCall::GetStatus, RCall::DialCancel, RMobileCall::GetMobileCallCaps + * @SYMTestExpectedResults Pass - KErrCancel returned on cancellation of dial. + * @SYMTestType CIT + * @SYMTestCaseDependencies live/automatic + * + * Reason for test: Verify Dial can be cancelled at different periods of time into dialling and caps and status correct. + * + * @return - TVerdict code + */ + { + + //////////////////////////////////////////////////////////////// + // SET UP + //////////////////////////////////////////////////////////////// + + + // Check phone supports KCapsVoice + + // Get Voice line 1 + RMobileLine& voiceLine = iEtelSessionMgr.GetLineL(KMainServer, KMainPhone, KVoiceLine); + // Get call 1 + RMobileCall& call1 = iEtelSessionMgr.GetCallL(KMainServer, KMainPhone, KVoiceLine, KCall1); + + RLine::TCaps lineCaps; + CHECK_EQUALS_L(voiceLine.GetCaps(lineCaps), KErrNone, + _L("RMobileLine::GetCaps returned an error")); + CHECK_BITS_SET_L(lineCaps.iFlags, RLine::KCapsVoice, KNoUnwantedBits, + _L("RLine::GetCaps returned wrong caps")); + + // Call TNetworkTsyTestHelper::WaitForRegisteredOnHomeNetworkL + RMobilePhone& phone = iEtelSessionMgr.GetPhoneL(KMainServer,KMainPhone); + CHECK_EQUALS_L(iNetworkTestHelper.WaitForRegisteredOnHomeNetworkL(phone), KErrNone, + _L("TNetworkTsyTestHelper::WaitForRegisteredOnHomeNetworkL returned with an error")); + + //////////////////////////////////////////////////////////////// + // SET UP END + //////////////////////////////////////////////////////////////// + + StartTest(); + + //////////////////////////////////////////////////////////////// + // TEST START + //////////////////////////////////////////////////////////////// + + // post notifier for RCall::NotifyStatusChange + TCoreEtelRequestStatus notifyStatusChangeStatus (call1,&RCall::NotifyStatusChangeCancel); + CleanupStack::PushL(notifyStatusChangeStatus); + RCall::TStatus callStatus; + call1.NotifyStatusChange(notifyStatusChangeStatus,callStatus); + + // post notifier for RMobileCall::NotifyMobileCallStatusChange + TExtEtelRequestStatus notifyMobileCallStatusChangeStatus(call1, EMobileCallNotifyMobileCallStatusChange); + CleanupStack::PushL(notifyMobileCallStatusChangeStatus); + RMobileCall::TMobileCallStatus mobileCallStatus; + call1.NotifyMobileCallStatusChange(notifyMobileCallStatusChangeStatus, mobileCallStatus); + + // post notifier for RMobileCall::NotifyMobileCallCapsChange + TExtEtelRequestStatus notifyMobileCallCapsChangeStatus(call1, EMobileCallNotifyMobileCallCapsChange); + CleanupStack::PushL(notifyMobileCallCapsChangeStatus); + RMobileCall::TMobileCallCapsV1 mobileCallCaps; + RMobileCall::TMobileCallCapsV1Pckg capsPckg(mobileCallCaps); + call1.NotifyMobileCallCapsChange(notifyMobileCallCapsChangeStatus,capsPckg); + + // post notifier for RCall::NotifyCapsChange + TCoreEtelRequestStatus notifyCapsChangeStatus (call1,&RCall::NotifyCapsChangeCancel); + CleanupStack::PushL(notifyCapsChangeStatus); + RCall::TCaps callCaps; + call1.NotifyCapsChange(notifyCapsChangeStatus,callCaps); + + // === Dial then cancel after 3 seconds === + + DisplayUserInteractionPromptL( + _L("Ensure your own phone number has already been set in the ini file.\nAfter you press a key, the test will call this phone."), ETimeLong); + + // Dial RPS which won't answer. + TPtrC RPSnumber; + + // Dialling own phone instead of the RPS + /* + ASSERT_EQUALS(RPSIgnoreNextCallL(EVoiceLine), KErrNone, + _L("cctsyintegraiontestsuitebase::RPSIgnoreNextCallL returned an error")); + GetRPSNumber(EVoiceLine, RPSnumber); + */ + DEBUG_PRINTF1(_L("Voice mail must be switched off for this test to pass!")); + + ASSERT_TRUE(GetStringFromConfig(KIniOwnNumSection, KIniOwnVoiceNumber1, RPSnumber) != EFalse, + _L("CTestStep::GetStringFromConfig did not complete as expected")); + + DEBUG_PRINTF1(_L("Board Now Dialling (1)")); + TCoreEtelRequestStatus dialStatus(call1, &RCall::DialCancel); + CleanupStack::PushL(dialStatus); + call1.Dial(dialStatus, RPSnumber); + + // Wait for 3 seconds. + User::After(3*KOneSecond); + + // === Check call status and caps === + + // Check RCall::NotifyStatusChange completes with EStatusDialling + RCall::TStatus expectedCallStatus = RCall::EStatusDialling; + const TInt wantedStatus = KErrNone; + iCallControlTestHelper.WaitForCallNotifyStatusChange(call1, + notifyStatusChangeStatus, + callStatus, + expectedCallStatus, + wantedStatus); + + // Check RCall::GetStatus returns EStatusDialling. + ASSERT_EQUALS(call1.GetStatus(callStatus),KErrNone, + _L("RCall::GetStatus returned an error")); + ASSERT_EQUALS(callStatus, RCall::EStatusDialling, + _L("RCall::GetStatus returned an unexpected call status")); + + // Check RMobileCall::NotifyMobileCallStatusChange completes with EStatusDialling + RMobileCall::TMobileCallStatus expectedMobileCallStatus = RMobileCall::EStatusDialling; + iCallControlTestHelper.WaitForMobileCallNotifyMobileCallStatusChange(call1, + notifyMobileCallStatusChangeStatus, + mobileCallStatus, + expectedMobileCallStatus, + wantedStatus); + + // Check RMobileCall::GetMobileCallStatus returns status of EStatusDialling + ASSERT_EQUALS(call1.GetMobileCallStatus(mobileCallStatus), KErrNone, + _L("RMobileCall::GetMobileStatus returned an error")); + ASSERT_EQUALS(mobileCallStatus, RMobileCall::EStatusDialling, + _L("RMobileCall::GetMobileStatus did not return a status EStatusDialling")); + + // Check RMobileCall::NotifyMobileCallCapsChange completes with iCallControlCaps in set of KCapsVoice + // Check RMobileCall::NotifyMobileCallCapsChange completes with iCallControlCaps NOT in set of KCapsDial + + RMobileCall::TMobileCallCapsV1 wantedMobileCaps, unwantedMobileCaps; + wantedMobileCaps.iCallControlCaps = RMobileCall::KCapsVoice; + wantedMobileCaps.iCallEventCaps = KNoWantedBits; + TCmpRMobileCallTMobileCallCaps mobileCapsComp(wantedMobileCaps,mobileCallCaps, *this); + iCallControlTestHelper.WaitForMobileCallNotifyMobileCallCapsChange(call1, + notifyMobileCallCapsChangeStatus, + mobileCapsComp, + wantedStatus); + + unwantedMobileCaps.iCallControlCaps = RMobileCall::KCapsDial; + + ASSERT_BITS_SET(mobileCallCaps.iCallControlCaps, wantedMobileCaps.iCallControlCaps, unwantedMobileCaps.iCallControlCaps, + _L("RMobileCall::NotifyMobileCallCapsChange did not set expected iCallControlCaps")); + + // Check RMobileCall::GetMobileCallCaps includes iCallControlCaps in set of KCapsVoice + // Check RMobileCall::GetMobileCallCaps includes iCallControlCaps in NOT set of KCapsDial + ASSERT_EQUALS(call1.GetMobileCallCaps(capsPckg), KErrNone, + _L("RMobileCall::GetMobileCallCaps returned an error")); + wantedMobileCaps.iCallControlCaps = RMobileCall::KCapsVoice; + unwantedMobileCaps.iCallControlCaps = RMobileCall::KCapsDial; + ASSERT_BITS_SET(mobileCallCaps.iCallControlCaps, wantedMobileCaps.iCallControlCaps,unwantedMobileCaps.iCallControlCaps, + _L("RMobileCall::GetMobileCallCaps returned unexpected iCallControlCaps")); + + // === Post Notifiers ====== + call1.NotifyMobileCallCapsChange(notifyMobileCallCapsChangeStatus,capsPckg); + call1.NotifyStatusChange(notifyStatusChangeStatus,callStatus); + call1.NotifyMobileCallStatusChange(notifyMobileCallStatusChangeStatus, mobileCallStatus); + + // Cancel dialling with RCall::DialCancel + call1.DialCancel(); + + // Check RCall::Dial request completes with KErrCancel + ASSERT_EQUALS(WaitForRequestWithTimeOut(dialStatus, ETimeShort), KErrNone, + _L("RCall::DialCancel timed-out")); + ASSERT_EQUALS(dialStatus.Int(), KErrCancel, + _L("RCall::Dial Request status was not set to KErrCancel")); + + // === Check call status and caps === + + // Check RMobileCall::NotifyMobileCallCapsChange completes with iCallControlCaps in set of KCapsVoice | KCapsDial. + // Check RMobileCall::NotifyMobileCallCapsChange completes with iCallEventCaps in set of 0. + wantedMobileCaps.iCallControlCaps = RMobileCall::KCapsVoice | RMobileCall::KCapsDial; + wantedMobileCaps.iCallEventCaps = 0; + TCmpRMobileCallTMobileCallCaps mobileCapsComp2(wantedMobileCaps,mobileCallCaps, *this); + iCallControlTestHelper.WaitForMobileCallNotifyMobileCallCapsChange(call1, + notifyMobileCallCapsChangeStatus, + mobileCapsComp2, + wantedStatus); + + // Check RMobileCall::GetMobileCallCaps includes iCallControlCaps in set of KCapsVoice | KCapsDial. + ASSERT_EQUALS(call1.GetMobileCallCaps(capsPckg), KErrNone, + _L("RMobileCall::GetMobileCallCaps returned an error")); + wantedMobileCaps.iCallControlCaps = RMobileCall::KCapsVoice | RMobileCall::KCapsDial; + ASSERT_BITS_SET(mobileCallCaps.iCallControlCaps, wantedMobileCaps.iCallControlCaps,KNoUnwantedBits, + _L("RMobileCall::GetMobileCallCaps returned unexpected iCallControlCaps")); + + // Check RMobileCall::GetMobileCallCaps includes iCallEventCaps in set of 0. + wantedMobileCaps.iCallEventCaps = 0; + ASSERT_BITS_SET(mobileCallCaps.iCallEventCaps, wantedMobileCaps.iCallEventCaps,KNoUnwantedBits, + _L("RMobileCall::GetMobileCallCaps returned unexpected iCallEventCaps")); + + // Check RCall::NotifyStatusChange completes with EStatusIdle. + expectedCallStatus = RCall::EStatusIdle; + iCallControlTestHelper.WaitForCallNotifyStatusChange(call1, + notifyStatusChangeStatus, + callStatus, + expectedCallStatus, + wantedStatus); + // Check RCall::GetStatus returns EStatusIdle. + ASSERT_EQUALS(call1.GetStatus(callStatus),KErrNone, + _L("RCall::GetStatus returned an error")); + ASSERT_EQUALS(callStatus, RCall::EStatusIdle, + _L("RCall::GetStatus returned an unexpected call status")); + + // Check RMobileCall::NotifyMobileCallStatusChange completes with EStatusIdle. + expectedMobileCallStatus = RMobileCall::EStatusIdle; + iCallControlTestHelper.WaitForMobileCallNotifyMobileCallStatusChange(call1, + notifyMobileCallStatusChangeStatus, + mobileCallStatus, + expectedMobileCallStatus, + wantedStatus); + + // Check RMobileCall::GetMobileCallStatus returns status of EStatusIdle. + ASSERT_EQUALS(call1.GetMobileCallStatus(mobileCallStatus), KErrNone, + _L("RMobileCall::GetMobileStatus returned an error")); + ASSERT_EQUALS(mobileCallStatus, RMobileCall::EStatusIdle, + _L("RMobileCall::GetMobileStatus did not return a status EStatusIdle")); + + // Wait for 2 seconds + User::After(2*KOneSecond); + + // Release call 1. + iEtelSessionMgr.ReleaseCall(KMainServer,KMainPhone,KVoiceLine,KCall1); + + // Get call 1. + call1 = iEtelSessionMgr.GetCallL(KMainServer, KMainPhone, KVoiceLine, KCall1); + + // === Dial then cancel after 5 seconds === + + // -- Post Notifiers --- + call1.NotifyStatusChange(notifyStatusChangeStatus,callStatus); + call1.NotifyMobileCallStatusChange(notifyMobileCallStatusChangeStatus, mobileCallStatus); + call1.NotifyMobileCallCapsChange(notifyMobileCallCapsChangeStatus,capsPckg); + + // Dial RPS which won't answer. + // Dialling own phone instead of the RPS + /* + ASSERT_EQUALS(RPSIgnoreNextCallL(EVoiceLine), KErrNone, + _L("cctsyintegraiontestsuitebase::RPSIgnoreNextCallL returned an error")); + */ + DEBUG_PRINTF1(_L("Board Now Dialling: ")); + call1.Dial(dialStatus, RPSnumber); + + // Wait for 5 seconds. + User::After(5*KOneSecond); + + // === Check call status and caps === + + // Check RCall::NotifyStatusChange completes with EStatusDialling + expectedCallStatus = RCall::EStatusDialling; + iCallControlTestHelper.WaitForCallNotifyStatusChange(call1, + notifyStatusChangeStatus, + callStatus, + expectedCallStatus, + wantedStatus); + + // Check RCall::GetStatus returns EStatusDialling. + ASSERT_EQUALS(call1.GetStatus(callStatus),KErrNone, + _L("RCall::GetStatus returned an error")); + ASSERT_EQUALS(callStatus, RCall::EStatusDialling, + _L("RCall::GetStatus returned an unexpected call status")); + + // Check RMobileCall::NotifyMobileCallStatusChange completes with EStatusDialling + expectedMobileCallStatus = RMobileCall::EStatusDialling; + iCallControlTestHelper.WaitForMobileCallNotifyMobileCallStatusChange(call1, + notifyMobileCallStatusChangeStatus, + mobileCallStatus, + expectedMobileCallStatus, + wantedStatus); + + // Check RMobileCall::GetMobileCallStatus returns status of EStatusDialling + ASSERT_EQUALS(call1.GetMobileCallStatus(mobileCallStatus), KErrNone, + _L("RMobileCall::GetMobileStatus returned an error")); + ASSERT_EQUALS(mobileCallStatus, RMobileCall::EStatusDialling, + _L("RMobileCall::GetMobileStatus did not return a status EStatusDialling")); + + // Check RMobileCall::NotifyMobileCallCapsChange completes with iCallControlCaps in set of KCapsVoice + // Check RMobileCall::NotifyMobileCallCapsChange completes with iCallControlCaps NOT in set of KCapsDial + wantedMobileCaps.iCallControlCaps = RMobileCall::KCapsVoice; + wantedMobileCaps.iCallEventCaps = KNoWantedBits; + iCallControlTestHelper.WaitForMobileCallNotifyMobileCallCapsChange(call1, + notifyMobileCallCapsChangeStatus, + mobileCapsComp, + wantedStatus); + + unwantedMobileCaps.iCallControlCaps = RMobileCall::KCapsDial; + ASSERT_BITS_SET(mobileCallCaps.iCallControlCaps, wantedMobileCaps.iCallControlCaps, unwantedMobileCaps.iCallControlCaps, + _L("RMobileCall::NotifyMobileCallCapsChange did not set expected iCallControlCaps")); + + // Check RMobileCall::GetMobileCallCaps includes iCallControlCaps in set of KCapsVoice + // Check RMobileCall::GetMobileCallCaps includes iCallControlCaps in NOT set of KCapsDial + ASSERT_EQUALS(call1.GetMobileCallCaps(capsPckg), KErrNone, + _L("RMobileCall::GetMobileCallCaps returned an error")); + wantedMobileCaps.iCallControlCaps = RMobileCall::KCapsVoice; + unwantedMobileCaps.iCallControlCaps = RMobileCall::KCapsDial; + ASSERT_BITS_SET(mobileCallCaps.iCallControlCaps, wantedMobileCaps.iCallControlCaps,unwantedMobileCaps.iCallControlCaps, + _L("RMobileCall::GetMobileCallCaps returned unexpected iCallControlCaps")); + + // -- Post Notifiers --- + call1.NotifyMobileCallCapsChange(notifyMobileCallCapsChangeStatus,capsPckg); + call1.NotifyStatusChange(notifyStatusChangeStatus,callStatus); + call1.NotifyMobileCallStatusChange(notifyMobileCallStatusChangeStatus, mobileCallStatus); + + // Cancel dialling with RCall::DialCancel + call1.DialCancel(); + + // Check RCall::Dial request completes with KErrCancel + ASSERT_EQUALS(WaitForRequestWithTimeOut(dialStatus, ETimeShort), KErrNone, + _L("RCall::DialCancel timed-out")); + ASSERT_EQUALS(dialStatus.Int(), KErrCancel, + _L("RCall::Dial Request status was not set to KErrCancel")); + + // === Check call status and caps === + + // Check RMobileCall::NotifyMobileCallCapsChange completes with iCallControlCaps in set of KCapsVoice | KCapsDial. + // Check RMobileCall::NotifyMobileCallCapsChange completes with iCallEventCaps in set of 0. + wantedMobileCaps.iCallControlCaps = RMobileCall::KCapsVoice | RMobileCall::KCapsDial; + wantedMobileCaps.iCallEventCaps = 0; + TCmpRMobileCallTMobileCallCaps mobileCapsComp3(wantedMobileCaps,mobileCallCaps, *this); + iCallControlTestHelper.WaitForMobileCallNotifyMobileCallCapsChange(call1, + notifyMobileCallCapsChangeStatus, + mobileCapsComp3, + wantedStatus); + + ASSERT_BITS_SET(mobileCallCaps.iCallControlCaps, wantedMobileCaps.iCallControlCaps, KNoUnwantedBits, + _L("RMobileCall::NotifyMobileCallCapsChange did not set expected iCallControlCaps")); + ASSERT_BITS_SET(mobileCallCaps.iCallEventCaps, wantedMobileCaps.iCallEventCaps, KNoUnwantedBits, + _L("RMobileCall::NotifyMobileCallCapsChange did not set expected iCallEventCaps")); + + // Check RMobileCall::GetMobileCallCaps includes iCallControlCaps in set of KCapsVoice | KCapsDial. + // Check RMobileCall::GetMobileCallCaps includes iCallEventCaps in set of 0. + ASSERT_EQUALS(call1.GetMobileCallCaps(capsPckg), KErrNone, + _L("RMobileCall::GetMobileCallCaps returned an error")); + wantedMobileCaps.iCallControlCaps = RMobileCall::KCapsVoice| RMobileCall::KCapsDial; + ASSERT_BITS_SET(mobileCallCaps.iCallControlCaps, wantedMobileCaps.iCallControlCaps,KNoUnwantedBits, + _L("RMobileCall::GetMobileCallCaps returned unexpected iCallControlCaps")); + wantedMobileCaps.iCallEventCaps = 0; + ASSERT_BITS_SET(mobileCallCaps.iCallEventCaps, wantedMobileCaps.iCallEventCaps,KNoUnwantedBits, + _L("RMobileCall::GetMobileCallCaps returned unexpected iCallEventCaps")); + + // Check RCall::NotifyStatusChange completes with EStatusIdle. + expectedCallStatus = RCall::EStatusIdle; + iCallControlTestHelper.WaitForCallNotifyStatusChange(call1, + notifyStatusChangeStatus, + callStatus, + expectedCallStatus, + wantedStatus); + + // Check RCall::GetStatus returns EStatusIdle. + ASSERT_EQUALS(call1.GetStatus(callStatus),KErrNone, + _L("RCall::GetStatus returned an error")); + ASSERT_EQUALS(callStatus, RCall::EStatusIdle, + _L("RCall::GetStatus returned an unexpected call status")); + + // Check RMobileCall::NotifyMobileCallStatusChange completes with EStatusIdle. + expectedMobileCallStatus = RMobileCall::EStatusIdle; + iCallControlTestHelper.WaitForMobileCallNotifyMobileCallStatusChange(call1, + notifyMobileCallStatusChangeStatus, + mobileCallStatus, + expectedMobileCallStatus, + wantedStatus); + + // Check RMobileCall::GetMobileCallStatus returns status of EStatusIdle. + ASSERT_EQUALS(call1.GetMobileCallStatus(mobileCallStatus), KErrNone, + _L("RMobileCall::GetMobileStatus returned an error")); + ASSERT_EQUALS(mobileCallStatus, RMobileCall::EStatusIdle, + _L("RMobileCall::GetMobileStatus did not return a status EStatusIdle")); + + // Wait for 2 seconds + User::After(2*KOneSecond); + + // Release call 1. + iEtelSessionMgr.ReleaseCall(KMainServer,KMainPhone,KVoiceLine,KCall1); + + // Get call 1. + call1 = iEtelSessionMgr.GetCallL(KMainServer, KMainPhone, KVoiceLine, KCall1); + + // === Dial then cancel after 15 seconds === + + // -- Post Notifiers --- + call1.NotifyStatusChange(notifyStatusChangeStatus,callStatus); + call1.NotifyMobileCallStatusChange(notifyMobileCallStatusChangeStatus, mobileCallStatus); + call1.NotifyMobileCallCapsChange(notifyMobileCallCapsChangeStatus,capsPckg); + + // Dial RPS which won't answer. + // Dialling own phone instead of the RPS + /* + ASSERT_EQUALS(RPSIgnoreNextCallL(EVoiceLine), KErrNone, + _L("cctsyintegraiontestsuitebase::RPSIgnoreNextCallL returned an error")); + */ + DEBUG_PRINTF1(_L("Board Now Dialling")); + call1.Dial(dialStatus, RPSnumber); + + // Wait for 15 seconds. + User::After(15*KOneSecond); + + // === Check call status and caps === + + // Check RCall::NotifyStatusChange completes with EStatusDialling + expectedCallStatus = RCall::EStatusDialling; + iCallControlTestHelper.WaitForCallNotifyStatusChange(call1, + notifyStatusChangeStatus, + callStatus, + expectedCallStatus, + wantedStatus); + // Check RCall::GetStatus returns EStatusDialling. + ERR_PRINTF2(_L("$CTSYKnownFailure: defect id = %d"), 10025); + ASSERT_EQUALS(call1.GetStatus(callStatus),KErrNone, + _L("RCall::GetStatus returned an error")); + ASSERT_EQUALS(callStatus, RCall::EStatusDialling, + _L("RCall::GetStatus returned an unexpected call status")); + + // Check RMobileCall::NotifyMobileCallStatusChange completes with EStatusDialling + expectedMobileCallStatus = RMobileCall::EStatusDialling; + iCallControlTestHelper.WaitForMobileCallNotifyMobileCallStatusChange(call1, + notifyMobileCallStatusChangeStatus, + mobileCallStatus, + expectedMobileCallStatus, + wantedStatus); + + // Check RMobileCall::GetMobileCallStatus returns status of EStatusDialling + ERR_PRINTF2(_L("$CTSYKnownFailure: defect id = %d"), 10025); + ASSERT_EQUALS(call1.GetMobileCallStatus(mobileCallStatus), KErrNone, + _L("RMobileCall::GetMobileStatus returned an error")); + ASSERT_EQUALS(mobileCallStatus, RMobileCall::EStatusDialling, + _L("RMobileCall::GetMobileStatus did not return a status EStatusDialling")); + + // Check RMobileCall::NotifyMobileCallCapsChange completes with iCallControlCaps in set of KCapsVoice + // Check RMobileCall::NotifyMobileCallCapsChange completes with iCallControlCaps NOT in set of KCapsDial + wantedMobileCaps.iCallControlCaps = RMobileCall::KCapsVoice; + wantedMobileCaps.iCallEventCaps = KNoWantedBits; + TCmpRMobileCallTMobileCallCaps mobileCapsComp4(wantedMobileCaps,mobileCallCaps, *this); + iCallControlTestHelper.WaitForMobileCallNotifyMobileCallCapsChange(call1, + notifyMobileCallCapsChangeStatus, + mobileCapsComp4, + wantedStatus); + + unwantedMobileCaps.iCallControlCaps = RMobileCall::KCapsDial; + ASSERT_BITS_SET(mobileCallCaps.iCallControlCaps, wantedMobileCaps.iCallControlCaps, unwantedMobileCaps.iCallControlCaps, + _L("RMobileCall::NotifyMobileCallCapsChange did not set expected iCallControlCaps")); + + // Check RMobileCall::GetMobileCallCaps includes iCallControlCaps in set of KCapsVoice + // Check RMobileCall::GetMobileCallCaps includes iCallControlCaps in NOT set of KCapsDial + ASSERT_EQUALS(call1.GetMobileCallCaps(capsPckg), KErrNone, + _L("RMobileCall::GetMobileCallCaps returned an error")); + wantedMobileCaps.iCallControlCaps = RMobileCall::KCapsVoice; + unwantedMobileCaps.iCallControlCaps = RMobileCall::KCapsDial; + ASSERT_BITS_SET(mobileCallCaps.iCallControlCaps, wantedMobileCaps.iCallControlCaps,unwantedMobileCaps.iCallControlCaps, + _L("RMobileCall::GetMobileCallCaps returned unexpected iCallControlCaps")); + + // -- Post Notifiers --- + call1.NotifyMobileCallCapsChange(notifyMobileCallCapsChangeStatus,capsPckg); + call1.NotifyStatusChange(notifyStatusChangeStatus,callStatus); + call1.NotifyMobileCallStatusChange(notifyMobileCallStatusChangeStatus, mobileCallStatus); + + // Cancel dialling with RCall::DialCancel + call1.DialCancel(); + + // Check RCall::Dial request completes with KErrCancel + ASSERT_EQUALS(WaitForRequestWithTimeOut(dialStatus, ETimeShort), KErrNone, + _L("RCall::DialCancel timed-out")); + ASSERT_EQUALS(dialStatus.Int(), KErrCancel, + _L("RCall::Dial REequest status was not set to KErrCancel")); + + // === Check call status and caps === + + // Check RMobileCall::NotifyMobileCallCapsChange completes with iCallControlCaps in set of KCapsVoice | KCapsDial. + // Check RMobileCall::NotifyMobileCallCapsChange completes with iCallEventCaps in set of 0. + wantedMobileCaps.iCallControlCaps = RMobileCall::KCapsVoice | RMobileCall::KCapsDial; + wantedMobileCaps.iCallEventCaps = 0; + TCmpRMobileCallTMobileCallCaps mobileCapsComp5(wantedMobileCaps,mobileCallCaps, *this); + iCallControlTestHelper.WaitForMobileCallNotifyMobileCallCapsChange(call1, + notifyMobileCallCapsChangeStatus, + mobileCapsComp5, + wantedStatus); + + ASSERT_BITS_SET(mobileCallCaps.iCallControlCaps, wantedMobileCaps.iCallControlCaps, KNoUnwantedBits, + _L("RMobileCall::NotifyMobileCallCapsChange did not set expected iCallControlCaps")); + ASSERT_BITS_SET(mobileCallCaps.iCallEventCaps, wantedMobileCaps.iCallEventCaps, KNoUnwantedBits, + _L("RMobileCall::NotifyMobileCallCapsChange did not set expected iCallEventCaps")); + + // Check RMobileCall::GetMobileCallCaps includes iCallControlCaps in set of KCapsVoice | KCapsDial. + // Check RMobileCall::GetMobileCallCaps includes iCallEventCaps in set of 0. + ASSERT_EQUALS(call1.GetMobileCallCaps(capsPckg), KErrNone, + _L("RMobileCall::GetMobileCallCaps returned an error")); + wantedMobileCaps.iCallControlCaps = RMobileCall::KCapsVoice| RMobileCall::KCapsDial; + ASSERT_BITS_SET(mobileCallCaps.iCallControlCaps, wantedMobileCaps.iCallControlCaps,KNoUnwantedBits, + _L("RMobileCall::GetMobileCallCaps returned unexpected iCallControlCaps")); + wantedMobileCaps.iCallEventCaps = 0; + ASSERT_BITS_SET(mobileCallCaps.iCallEventCaps, wantedMobileCaps.iCallEventCaps,KNoUnwantedBits, + _L("RMobileCall::GetMobileCallCaps returned unexpected iCallEventCaps")); + + // Check RCall::NotifyStatusChange completes with EStatusIdle. + expectedCallStatus = RCall::EStatusIdle; + iCallControlTestHelper.WaitForCallNotifyStatusChange(call1, + notifyStatusChangeStatus, + callStatus, + expectedCallStatus, + wantedStatus); + + // Check RCall::GetStatus returns EStatusIdle. + ASSERT_EQUALS(call1.GetStatus(callStatus),KErrNone, + _L("RCall::GetStatus returned an error")); + ASSERT_EQUALS(callStatus, RCall::EStatusIdle, + _L("RCall::GetStatus returned an unexpected call status")); + + // Check RMobileCall::NotifyMobileCallStatusChange completes with EStatusIdle. + expectedMobileCallStatus = RMobileCall::EStatusIdle; + iCallControlTestHelper.WaitForMobileCallNotifyMobileCallStatusChange(call1, + notifyMobileCallStatusChangeStatus, + mobileCallStatus, + expectedMobileCallStatus, + wantedStatus); + + // Check RMobileCall::GetMobileCallStatus returns status of EStatusIdle. + ASSERT_EQUALS(call1.GetMobileCallStatus(mobileCallStatus), KErrNone, + _L("RMobileCall::GetMobileStatus returned an error")); + ASSERT_EQUALS(mobileCallStatus, RMobileCall::EStatusIdle, + _L("RMobileCall::GetMobileStatus did not return a status EStatusIdle")); + + + //////////////////////////////////////////////////////////////// + // TEST END + //////////////////////////////////////////////////////////////// + + StartCleanup(); + + // PopAndDestroy + // dialStatus + // notifyCapsChangeStatus + // notifyMobileCallCapsChangeStatus + // notifyMobileCallStatusChangeStatus + // notifyStatusChangeStatus + + CleanupStack::PopAndDestroy(5, ¬ifyStatusChangeStatus); + + return TestStepResult(); + } + +TPtrC CCTSYIntegrationTestCallControl0020::GetTestStepName() +/** + * @return The test step name. + */ + { + return _L("CCTSYIntegrationTestCallControl0020"); + } + + + +CCTSYIntegrationTestCallControl0021::CCTSYIntegrationTestCallControl0021(CEtelSessionMgr& aEtelSessionMgr) + : CCTSYIntegrationTestCallControlBase(aEtelSessionMgr) +/** + * Constructor. + */ + { + SetTestStepName(CCTSYIntegrationTestCallControl0021::GetTestStepName()); + } + +CCTSYIntegrationTestCallControl0021::~CCTSYIntegrationTestCallControl0021() +/** + * Destructor. + */ + { + } + +TVerdict CCTSYIntegrationTestCallControl0021::doTestStepL() +/** + * @SYMTestCaseID BA-CTSY-INT-CCON-0021 + * @SYMFssID BA/CTSY/CCON-0021 + * @SYMTestCaseDesc Hang up MO call before it gets connected. + * @SYMTestPriority High + * @SYMTestActions RCall::GetCaps, RMobileCall::NotifyMobileCallCapsChange, RMobileCall::GetMobileCallStatus, RMobileCall::GetMobileCallInfo, RLine::NotifyIncomingCall, RCall::GetInfo, RCall::NotifyStatusChange, RMobileCall::NotifyMobileCallStatusChange, RCall::OpenExistingCall, RCall::NotifyCapsChange, RCall::GetStatus, RMobileCall::GetMobileCallCaps + * @SYMTestExpectedResults Pass - Call is hung up and call status returns to idle. + * @SYMTestType CIT + * @SYMTestCaseDependencies live/automatic + * + * Reason for test: Verify call caps and call status correct and call is hung up. + * + * @return - TVerdict code + */ + { + + //////////////////////////////////////////////////////////////// + // SET UP + //////////////////////////////////////////////////////////////// + + // Check phone supports KCapsVoice + + // Get Voice line 1 + RMobileLine& voiceLine = iEtelSessionMgr.GetLineL(KMainServer, KMainPhone, KVoiceLine); + // Get call 1 + RMobileCall& call1 = iEtelSessionMgr.GetCallL(KMainServer, KMainPhone, KVoiceLine, KCall1); + + RLine::TCaps lineCaps; + CHECK_EQUALS_L(voiceLine.GetCaps(lineCaps), KErrNone, + _L("RMobileLine::GetCaps returned an error.")); + CHECK_BITS_SET_L(lineCaps.iFlags, RLine::KCapsVoice, KNoUnwantedBits, + _L("RLine::GetCaps did not return KCapsVoice.")); + + // Call TNetworkTsyTestHelper::WaitForRegisteredOnHomeNetworkL + RMobilePhone& phone = iEtelSessionMgr.GetPhoneL(KMainServer,KMainPhone); + CHECK_EQUALS_L(iNetworkTestHelper.WaitForRegisteredOnHomeNetworkL(phone), KErrNone, + _L("TNetworkTsyTestHelper::WaitForRegisteredOnHomeNetworkL returned with an error")); + + //////////////////////////////////////////////////////////////// + // SET UP END + //////////////////////////////////////////////////////////////// + + StartTest(); + + //////////////////////////////////////////////////////////////// + // TEST START + //////////////////////////////////////////////////////////////// + + // Post notification for RCall::NotifyStatusChange + TCoreEtelRequestStatus notifyStatusChangeStatus(call1, &RCall::NotifyStatusChangeCancel); + CleanupStack::PushL(notifyStatusChangeStatus); + RCall::TStatus callStatus; + call1.NotifyStatusChange(notifyStatusChangeStatus, callStatus); + + // Post notification for RMobileCall::NotifyMobileCallStatusChange + TExtEtelRequestStatus notifyMobileCallChangeStatus(call1, EMobileCallNotifyMobileCallStatusChange); + CleanupStack::PushL(notifyMobileCallChangeStatus); + RMobileCall::TMobileCallStatus mobileCallStatus; + call1.NotifyMobileCallStatusChange(notifyMobileCallChangeStatus, mobileCallStatus); + + // Post notifier for RMobileCall::NotifyMobileCallCapsChange + TExtEtelRequestStatus notifyMobileCallCapsChangeStatus(call1, EMobileCallNotifyMobileCallCapsChange); + CleanupStack::PushL(notifyMobileCallCapsChangeStatus); + RMobileCall::TMobileCallCapsV1 mobileCallCaps; + RMobileCall::TMobileCallCapsV1Pckg mobileCallCapsPckg(mobileCallCaps); + call1.NotifyMobileCallCapsChange(notifyMobileCallCapsChangeStatus, mobileCallCapsPckg); + + // Dial RPS which will not answer. + TPtrC rpsNumber; + + GetRPSNumber(EVoiceLine, rpsNumber); + + TCoreEtelRequestStatus dialStatus(call1, &RCall::DialCancel); + CleanupStack::PushL(dialStatus); + call1.Dial(dialStatus, rpsNumber); + + // Wait for 3000ms. NB: Using 3000 microSeconds + User::After(3000); + + // === Check call status and caps === + + // Check RCall::NotifyStatusChange completes with EStatusDialling + RCall::TStatus expectedCallStatus = RCall::EStatusDialling; + const TInt wantedStatus = KErrNone; + iCallControlTestHelper.WaitForCallNotifyStatusChange(call1, + notifyStatusChangeStatus, + callStatus, + expectedCallStatus, + wantedStatus); + + // Check RCall::GetStatus returns EStatusDialling. + ASSERT_EQUALS(call1.GetStatus(callStatus), KErrNone, + _L("RCall::GetStatus returned an error.")); + ASSERT_EQUALS(callStatus, RCall::EStatusDialling, + _L("RCall::GetStatus did not return EStatusDialling.")); + + // Check RMobileCall::NotifyMobileCallStatusChange completes with EStatusDialling + RMobileCall::TMobileCallStatus expectedMobileCallStatus = RMobileCall::EStatusDialling; + iCallControlTestHelper.WaitForMobileCallNotifyMobileCallStatusChange(call1, + notifyMobileCallChangeStatus, + mobileCallStatus, + expectedMobileCallStatus, + wantedStatus); + + // Check RMobileCall::GetMobileCallStatus returns status of EStatusDialling + ASSERT_EQUALS(call1.GetMobileCallStatus(mobileCallStatus), KErrNone, + _L("RMobileCall::GetMobileCallStatus returned error.")); + ASSERT_EQUALS(mobileCallStatus, RMobileCall::EStatusDialling, + _L("RMobileCall::GetMobileCallStatus's status did not return EStatusDialling.")); + + //*** NB: NotifyMobileCallCapsChange and GetMobileCallCaps not returning correct values on H2 + // Check RMobileCall::NotifyMobileCallCapsChange completes with iCallControlCaps in set of KCapsVoice + // Check RMobileCall::NotifyMobileCallCapsChange completes with iCallControlCaps NOT in set of KCapsDial + RMobileCall::TMobileCallCapsV1 wantedMobileCaps, unwantedMobileCaps; + wantedMobileCaps.iCallControlCaps = RMobileCall::KCapsVoice; + wantedMobileCaps.iCallEventCaps = KNoWantedBits; + TCmpRMobileCallTMobileCallCaps mobileCapsComp(wantedMobileCaps, mobileCallCaps, *this); + iCallControlTestHelper.WaitForMobileCallNotifyMobileCallCapsChange(call1, + notifyMobileCallCapsChangeStatus, + mobileCapsComp, + wantedStatus); + + unwantedMobileCaps.iCallControlCaps = RMobileCall::KCapsDial; + + ASSERT_BITS_SET(mobileCallCaps.iCallControlCaps, wantedMobileCaps.iCallControlCaps, unwantedMobileCaps.iCallControlCaps, + _L("RMobileCall::NotifyMobileCallCapsChange did not set expected iCallControlCaps")); + + // Check RMobileCall::GetMobileCallCaps includes iCallControlCaps in set of KCapsVoice | KCapsHangUp + // Check RMobileCall::GetMobileCallCaps includes iCallControlCaps in NOT set of KCapsDial + ASSERT_EQUALS(call1.GetMobileCallCaps(mobileCallCapsPckg), KErrNone, + _L("RMobileCall::GetMobileCallCaps returned error.")); + ASSERT_BITS_SET(mobileCallCaps.iCallControlCaps, RCall::KCapsVoice | RCall::KCapsHangUp, RCall::KCapsDial, + _L("RMobileCall::GetMobileCallCaps returned wrong caps.")); + + // Hang up call. + + // Post notifier for RMobileCall::NotifyMobileCallCapsChange + call1.NotifyMobileCallCapsChange(notifyMobileCallCapsChangeStatus, mobileCallCapsPckg); + + // Post notification for RCall::NotifyStatusChange + call1.NotifyStatusChange(notifyStatusChangeStatus, callStatus); + + // Post notification for RMobileCall::NotifyMobileCallStatusChange + call1.NotifyMobileCallStatusChange(notifyMobileCallChangeStatus, mobileCallStatus); + + ASSERT_EQUALS(call1.HangUp(), KErrNone, _L("RMobileCall::HangUp returned error.")); + +//******** DO WE NEED TO WAIT FOR dialStatus TO change at this point ?? ************// + + // === Check call status and caps === + + // Check RMobileCall::NotifyMobileCallCapsChange completes with iCallControlCaps in set of KCapsVoice | KCapsDial. + // Check RMobileCall::NotifyMobileCallCapsChange completes with iCallEventCaps in set of 0. + wantedMobileCaps.iCallControlCaps = RMobileCall::KCapsVoice | RMobileCall::KCapsDial; + wantedMobileCaps.iCallEventCaps = KNoUnwantedBits; + TCmpRMobileCallTMobileCallCaps mobileCapsComp2(wantedMobileCaps,mobileCallCaps, *this); + iCallControlTestHelper.WaitForMobileCallNotifyMobileCallCapsChange(call1, + notifyMobileCallCapsChangeStatus, + mobileCapsComp2, + wantedStatus); + + // Check RMobileCall::GetMobileCallCaps includes iCallControlCaps in set of KCapsVoice | KCapsDial. + // Check RMobileCall::GetMobileCallCaps includes iCallEventCaps in set of 0. + ASSERT_EQUALS(call1.GetMobileCallCaps(mobileCallCapsPckg), KErrNone, + _L("RMobileCall::GetMobileCallCaps returned error.")); + ASSERT_BITS_SET(mobileCallCaps.iCallControlCaps, RCall::KCapsVoice | RCall::KCapsDial, KNoUnwantedBits, + _L("RMobileCall::GetMobileCallCaps returned wrong caps.")); + + // Check RCall::NotifyStatusChange completes with EStatusIdle. + expectedCallStatus = RCall::EStatusIdle; + iCallControlTestHelper.WaitForCallNotifyStatusChange(call1, + notifyStatusChangeStatus, + callStatus, + expectedCallStatus, + wantedStatus); + + // Check RCall::GetStatus returns EStatusIdle. + ASSERT_EQUALS(call1.GetStatus(callStatus), KErrNone, + _L("RCall::GetStatus returned an error.")); + ASSERT_EQUALS(callStatus, RCall::EStatusIdle, + _L("RCall::GetStatus did not return EStatusIdle.")); + + // Check RMobileCall::NotifyMobileCallStatusChange completes with EStatusIdle. + expectedMobileCallStatus = RMobileCall::EStatusIdle; + iCallControlTestHelper.WaitForMobileCallNotifyMobileCallStatusChange(call1, + notifyMobileCallChangeStatus, + mobileCallStatus, + expectedMobileCallStatus, + wantedStatus); + + // Check RMobileCall::GetMobileCallStatus returns status of EStatusIdle. + ASSERT_EQUALS(call1.GetMobileCallStatus(mobileCallStatus), KErrNone, + _L("RMobileCall::GetMobileCallStatus returned error.")); + ASSERT_EQUALS(mobileCallStatus, RMobileCall::EStatusIdle, + _L("RMobileCall::GetMobileCallStatus's status did not return EStatusIdle.")); + + // Release call 1. + iEtelSessionMgr.ReleaseCall(KMainServer, KMainPhone, KVoiceLine, KCall1); + + // Get call 1. + call1 = iEtelSessionMgr.GetCallL(KMainServer, KMainPhone, KVoiceLine, KCall1); + + // Post notification for RCall::NotifyStatusChange + call1.NotifyStatusChange(notifyStatusChangeStatus, callStatus); + + // Post notification for RMobileCall::NotifyMobileCallStatusChange + call1.NotifyMobileCallStatusChange(notifyMobileCallChangeStatus, mobileCallStatus); + + // Post notifier for RMobileCall::NotifyMobileCallCapsChange + call1.NotifyMobileCallCapsChange(notifyMobileCallCapsChangeStatus, mobileCallCapsPckg); + + // Dial RPS which will not answer. + call1.Dial(dialStatus, rpsNumber); + + // Wait for 6000ms. + User::After(6000); + + // === Check call status and caps === + + // Check RCall::NotifyStatusChange completes with EStatusDialling + expectedCallStatus = RCall::EStatusDialling; + iCallControlTestHelper.WaitForCallNotifyStatusChange(call1, + notifyStatusChangeStatus, + callStatus, + expectedCallStatus, + wantedStatus); + + // Check RCall::GetStatus returns EStatusDialling. + ASSERT_EQUALS(call1.GetStatus(callStatus), KErrNone, + _L("RCall::GetStatus returned an error.")); + ASSERT_EQUALS(callStatus, RCall::EStatusDialling, + _L("RCall::GetStatus did not return EStatusDialling.")); + + // Check RMobileCall::NotifyMobileCallStatusChange completes with EStatusDialling + expectedMobileCallStatus = RMobileCall::EStatusDialling; + iCallControlTestHelper.WaitForMobileCallNotifyMobileCallStatusChange(call1, + notifyMobileCallChangeStatus, + mobileCallStatus, + expectedMobileCallStatus, + wantedStatus); + + // Check RMobileCall::GetMobileCallStatus returns status of EStatusDialling + ASSERT_EQUALS(call1.GetMobileCallStatus(mobileCallStatus), KErrNone, + _L("RMobileCall::GetMobileCallStatus returned error.")); + ASSERT_EQUALS(mobileCallStatus, RMobileCall::EStatusDialling, + _L("RMobileCall::GetMobileCallStatus's status did not return EStatusDialling.")); + + // Check RMobileCall::NotifyMobileCallCapsChange completes with iCallControlCaps in set of KCapsVoice + // Check RMobileCall::NotifyMobileCallCapsChange completes with iCallControlCaps NOT in set of KCapsDial + wantedMobileCaps.iCallControlCaps = RMobileCall::KCapsVoice; + wantedMobileCaps.iCallEventCaps = KNoWantedBits; + TCmpRMobileCallTMobileCallCaps mobileCapsComp1(wantedMobileCaps, mobileCallCaps, *this); + iCallControlTestHelper.WaitForMobileCallNotifyMobileCallCapsChange(call1, + notifyMobileCallCapsChangeStatus, + mobileCapsComp1, + wantedStatus); + + unwantedMobileCaps.iCallControlCaps = RMobileCall::KCapsDial; + + ASSERT_BITS_SET(mobileCallCaps.iCallControlCaps, wantedMobileCaps.iCallControlCaps, unwantedMobileCaps.iCallControlCaps, + _L("RMobileCall::NotifyMobileCallCapsChange did not set expected iCallControlCaps")); + + // Check RMobileCall::GetMobileCallCaps includes iCallControlCaps in set of KCapsVoice | KCapsHangUp + // Check RMobileCall::GetMobileCallCaps includes iCallControlCaps in NOT set of KCapsDial + ASSERT_EQUALS(call1.GetMobileCallCaps(mobileCallCapsPckg), KErrNone, + _L("RMobileCall::GetMobileCallCaps returned error.")); + ASSERT_BITS_SET(mobileCallCaps.iCallControlCaps, RCall::KCapsVoice | RCall::KCapsHangUp, RCall::KCapsDial, + _L("RMobileCall::GetMobileCallCaps returned wrong caps.")); + + // Hang up call. + + // Post notifier for RMobileCall::NotifyMobileCallCapsChange + call1.NotifyMobileCallCapsChange(notifyMobileCallCapsChangeStatus, mobileCallCapsPckg); + + // Post notification for RCall::NotifyStatusChange + call1.NotifyStatusChange(notifyStatusChangeStatus, callStatus); + + // Post notification for RMobileCall::NotifyMobileCallStatusChange + call1.NotifyMobileCallStatusChange(notifyMobileCallChangeStatus, mobileCallStatus); + + ASSERT_EQUALS(call1.HangUp(), KErrNone, _L("RMobileCall::HangUp returned error.")); + + // === Check call status and caps === + + // Check RMobileCall::NotifyMobileCallCapsChange completes with iCallControlCaps in set of KCapsVoice | KCapsDial. + // Check RMobileCall::NotifyMobileCallCapsChange completes with iCallEventCaps in set of 0. + wantedMobileCaps.iCallControlCaps = RMobileCall::KCapsVoice | RMobileCall::KCapsDial; + wantedMobileCaps.iCallEventCaps = KNoUnwantedBits; + TCmpRMobileCallTMobileCallCaps mobileCapsComp3(wantedMobileCaps,mobileCallCaps, *this); + iCallControlTestHelper.WaitForMobileCallNotifyMobileCallCapsChange(call1, + notifyMobileCallCapsChangeStatus, + mobileCapsComp3, + wantedStatus); + + // Check RMobileCall::GetMobileCallCaps includes iCallControlCaps in set of KCapsVoice | KCapsDial. + // Check RMobileCall::GetMobileCallCaps includes iCallEventCaps in set of 0. + ASSERT_EQUALS(call1.GetMobileCallCaps(mobileCallCapsPckg), KErrNone, + _L("RMobileCall::GetMobileCallCaps returned error.")); + ASSERT_BITS_SET(mobileCallCaps.iCallControlCaps, RCall::KCapsVoice | RCall::KCapsDial, KNoUnwantedBits, + _L("RMobileCall::GetMobileCallCaps returned wrong caps.")); + + // Check RCall::NotifyStatusChange completes with EStatusIdle. + expectedCallStatus = RCall::EStatusIdle; + iCallControlTestHelper.WaitForCallNotifyStatusChange(call1, + notifyStatusChangeStatus, + callStatus, + expectedCallStatus, + wantedStatus); + + // Check RCall::GetStatus returns EStatusIdle. + ASSERT_EQUALS(call1.GetStatus(callStatus), KErrNone, + _L("RCall::GetStatus returned an error.")); + ASSERT_EQUALS(callStatus, RCall::EStatusIdle, + _L("RCall::GetStatus did not return EStatusIdle.")); + + // Check RMobileCall::NotifyMobileCallStatusChange completes with EStatusIdle. + expectedMobileCallStatus = RMobileCall::EStatusIdle; + iCallControlTestHelper.WaitForMobileCallNotifyMobileCallStatusChange(call1, + notifyMobileCallChangeStatus, + mobileCallStatus, + expectedMobileCallStatus, + wantedStatus); + + // Check RMobileCall::GetMobileCallStatus returns status of EStatusIdle. + ASSERT_EQUALS(call1.GetMobileCallStatus(mobileCallStatus), KErrNone, + _L("RMobileCall::GetMobileCallStatus returned error.")); + ASSERT_EQUALS(mobileCallStatus, RMobileCall::EStatusIdle, + _L("RMobileCall::GetMobileCallStatus's status did not return EStatusIdle.")); + + // Release call 1. + iEtelSessionMgr.ReleaseCall(KMainServer, KMainPhone, KVoiceLine, KCall1); + + // Get call 1. + call1 = iEtelSessionMgr.GetCallL(KMainServer, KMainPhone, KVoiceLine, KCall1); + + // Post notification for RCall::NotifyStatusChange + call1.NotifyStatusChange(notifyStatusChangeStatus, callStatus); + + // Post notification for RMobileCall::NotifyMobileCallStatusChange + call1.NotifyMobileCallStatusChange(notifyMobileCallChangeStatus, mobileCallStatus); + + // Post notifier for RMobileCall::NotifyMobileCallCapsChange + call1.NotifyMobileCallCapsChange(notifyMobileCallCapsChangeStatus, mobileCallCapsPckg); + + // Dial RPS which will not answer. + call1.Dial(dialStatus, rpsNumber); + + // Wait for 15000ms. + User::After(15000); + + // === Check call status and caps === + + // Check RCall::NotifyStatusChange completes with EStatusDialling + expectedCallStatus = RCall::EStatusDialling; + iCallControlTestHelper.WaitForCallNotifyStatusChange(call1, + notifyStatusChangeStatus, + callStatus, + expectedCallStatus, + wantedStatus); + + // Check RCall::GetStatus returns EStatusDialling. + ASSERT_EQUALS(call1.GetStatus(callStatus), KErrNone, + _L("RCall::GetStatus returned an error.")); + ASSERT_EQUALS(callStatus, RCall::EStatusDialling, + _L("RCall::GetStatus did not return EStatusDialling.")); + + // Check RMobileCall::NotifyMobileCallStatusChange completes with EStatusDialling + expectedMobileCallStatus = RMobileCall::EStatusDialling; + iCallControlTestHelper.WaitForMobileCallNotifyMobileCallStatusChange(call1, + notifyMobileCallChangeStatus, + mobileCallStatus, + expectedMobileCallStatus, + wantedStatus); + + // Check RMobileCall::GetMobileCallStatus returns status of EStatusDialling + ASSERT_EQUALS(call1.GetMobileCallStatus(mobileCallStatus), KErrNone, + _L("RMobileCall::GetMobileCallStatus returned error.")); + ASSERT_EQUALS(mobileCallStatus, RMobileCall::EStatusDialling, + _L("RMobileCall::GetMobileCallStatus's status did not return EStatusDialling.")); + + // Check RMobileCall::NotifyMobileCallCapsChange completes with iCallControlCaps in set of KCapsVoice + // Check RMobileCall::NotifyMobileCallCapsChange completes with iCallControlCaps NOT in set of KCapsDial + wantedMobileCaps.iCallControlCaps = RMobileCall::KCapsVoice; + wantedMobileCaps.iCallEventCaps = KNoWantedBits; + TCmpRMobileCallTMobileCallCaps mobileCapsComp4(wantedMobileCaps, mobileCallCaps, *this); + iCallControlTestHelper.WaitForMobileCallNotifyMobileCallCapsChange(call1, + notifyMobileCallCapsChangeStatus, + mobileCapsComp4, + wantedStatus); + + unwantedMobileCaps.iCallControlCaps = RMobileCall::KCapsDial; + + ASSERT_BITS_SET(mobileCallCaps.iCallControlCaps, wantedMobileCaps.iCallControlCaps, unwantedMobileCaps.iCallControlCaps, + _L("RMobileCall::NotifyMobileCallCapsChange did not set expected iCallControlCaps")); + + // Check RMobileCall::GetMobileCallCaps includes iCallControlCaps in set of KCapsVoice | KCapsHangUp + // Check RMobileCall::GetMobileCallCaps includes iCallControlCaps in NOT set of KCapsDial + ASSERT_EQUALS(call1.GetMobileCallCaps(mobileCallCapsPckg), KErrNone, + _L("RMobileCall::GetMobileCallCaps returned error.")); + ASSERT_BITS_SET(mobileCallCaps.iCallControlCaps, RCall::KCapsVoice | RCall::KCapsHangUp, RCall::KCapsDial, + _L("RMobileCall::GetMobileCallCaps returned wrong caps.")); + + // Hang up call. + + // Post notifier for RMobileCall::NotifyMobileCallCapsChange + call1.NotifyMobileCallCapsChange(notifyMobileCallCapsChangeStatus, mobileCallCapsPckg); + + // Post notification for RCall::NotifyStatusChange + call1.NotifyStatusChange(notifyStatusChangeStatus, callStatus); + + // Post notification for RMobileCall::NotifyMobileCallStatusChange + call1.NotifyMobileCallStatusChange(notifyMobileCallChangeStatus, mobileCallStatus); + + ASSERT_EQUALS(call1.HangUp(), KErrNone, _L("RMobileCall::HangUp returned error.")); + + // === Check call status and caps === + + // Check RMobileCall::NotifyMobileCallCapsChange completes with iCallControlCaps in set of KCapsVoice | KCapsDial. + // Check RMobileCall::NotifyMobileCallCapsChange completes with iCallEventCaps in set of 0. + wantedMobileCaps.iCallControlCaps = RMobileCall::KCapsVoice | RMobileCall::KCapsDial; + wantedMobileCaps.iCallEventCaps = KNoUnwantedBits; + TCmpRMobileCallTMobileCallCaps mobileCapsComp5(wantedMobileCaps,mobileCallCaps, *this); + iCallControlTestHelper.WaitForMobileCallNotifyMobileCallCapsChange(call1, + notifyMobileCallCapsChangeStatus, + mobileCapsComp5, + wantedStatus); + + // Check RMobileCall::GetMobileCallCaps includes iCallControlCaps in set of KCapsVoice | KCapsDial. + // Check RMobileCall::GetMobileCallCaps includes iCallEventCaps in set of 0. + ASSERT_EQUALS(call1.GetMobileCallCaps(mobileCallCapsPckg), KErrNone, + _L("RMobileCall::GetMobileCallCaps returned error.")); + ASSERT_BITS_SET(mobileCallCaps.iCallControlCaps, RCall::KCapsVoice | RCall::KCapsDial, KNoUnwantedBits, + _L("RMobileCall::GetMobileCallCaps returned wrong caps.")); + + // Check RCall::NotifyStatusChange completes with EStatusIdle. + expectedCallStatus = RCall::EStatusIdle; + iCallControlTestHelper.WaitForCallNotifyStatusChange(call1, + notifyStatusChangeStatus, + callStatus, + expectedCallStatus, + wantedStatus); + + // Check RCall::GetStatus returns EStatusIdle. + ASSERT_EQUALS(call1.GetStatus(callStatus), KErrNone, + _L("RCall::GetStatus returned an error.")); + ASSERT_EQUALS(callStatus, RCall::EStatusIdle, + _L("RCall::GetStatus did not return EStatusIdle.")); + + // Check RMobileCall::NotifyMobileCallStatusChange completes with EStatusIdle. + expectedMobileCallStatus = RMobileCall::EStatusIdle; + iCallControlTestHelper.WaitForMobileCallNotifyMobileCallStatusChange(call1, + notifyMobileCallChangeStatus, + mobileCallStatus, + expectedMobileCallStatus, + wantedStatus); + + // Check RMobileCall::GetMobileCallStatus returns status of EStatusIdle. + ASSERT_EQUALS(call1.GetMobileCallStatus(mobileCallStatus), KErrNone, + _L("RMobileCall::GetMobileCallStatus returned error.")); + ASSERT_EQUALS(mobileCallStatus, RMobileCall::EStatusIdle, + _L("RMobileCall::GetMobileCallStatus's status did not return EStatusIdle.")); + + + //////////////////////////////////////////////////////////////// + // TEST END + //////////////////////////////////////////////////////////////// + + StartCleanup(); + + CleanupStack::PopAndDestroy(4); + // dialStatus + // notifyMobileCallCapsChangeStatus + // notifyMobileCallChangeStatus + // notifyStatusChangeStatus + + + return TestStepResult(); + } + +TPtrC CCTSYIntegrationTestCallControl0021::GetTestStepName() +/** + * @return The test step name. + */ + { + return _L("CCTSYIntegrationTestCallControl0021"); + } + + + +CCTSYIntegrationTestCallControl0022::CCTSYIntegrationTestCallControl0022(CEtelSessionMgr& aEtelSessionMgr) + : CCTSYIntegrationTestCallControlBase(aEtelSessionMgr) +/** + * Constructor. + */ + { + SetTestStepName(CCTSYIntegrationTestCallControl0022::GetTestStepName()); + } + +CCTSYIntegrationTestCallControl0022::~CCTSYIntegrationTestCallControl0022() +/** + * Destructor. + */ + { + } + +TVerdict CCTSYIntegrationTestCallControl0022::doTestStepL() +/** + * @SYMTestCaseID BA-CTSY-INT-CCON-0022 + * @SYMFssID BA/CTSY/CCON-0022 + * @SYMTestCaseDesc Hang up MT call before it gets connected. + * @SYMTestPriority High + * @SYMTestActions RCall::GetCaps, RMobileCall::NotifyMobileCallCapsChange, RMobileCall::GetMobileCallStatus, RMobileCall::GetMobileCallInfo, RLine::NotifyIncomingCall, RCall::GetInfo, RCall::NotifyStatusChange, RMobileCall::NotifyMobileCallStatusChange, RCall::OpenExistingCall, RCall::NotifyCapsChange, RCall::GetStatus, RMobileCall::GetMobileCallCaps + * @SYMTestExpectedResults Pass - Call hung up. + * @SYMTestType CIT + * @SYMTestCaseDependencies live/automatic + * + * Reason for test: Create a mobile terminated call and hang it up 3000 ms, 5000 ms, and 10000 ms after the mobile terminated call notification. + * + * @return - TVerdict code + */ + { + + //////////////////////////////////////////////////////////////// + // SET UP + //////////////////////////////////////////////////////////////// + + // Check phone supports KCapsVoice + + // Get Voice line 1 + RMobileLine& voiceLine = iEtelSessionMgr.GetLineL(KMainServer, KMainPhone, KVoiceLine); + + RLine::TCaps lineCaps; + CHECK_EQUALS_L(voiceLine.GetCaps(lineCaps), KErrNone, + _L("RMobileLine::GetCaps returned an error")); + CHECK_BITS_SET_L(lineCaps.iFlags, RLine::KCapsVoice, KNoUnwantedBits, + _L("RLine::GetCaps returned wrong caps")); + + // Call TNetworkTsyTestHelper::WaitForRegisteredOnHomeNetworkL + RMobilePhone& phone = iEtelSessionMgr.GetPhoneL(KMainServer,KMainPhone); + CHECK_EQUALS_L(iNetworkTestHelper.WaitForRegisteredOnHomeNetworkL(phone), KErrNone, + _L("TNetworkTsyTestHelper::WaitForRegisteredOnHomeNetworkL returned with an error")); + + //////////////////////////////////////////////////////////////// + // SET UP END + //////////////////////////////////////////////////////////////// + + StartTest(); + + //////////////////////////////////////////////////////////////// + // TEST START + //////////////////////////////////////////////////////////////// + + // Post notifier for RLine::NotifyIncomingCall + TCoreEtelRequestStatus notifyIncomingCallStatus(voiceLine, &RLine::NotifyIncomingCallCancel); + CleanupStack::PushL(notifyIncomingCallStatus); + TName name; + voiceLine.NotifyIncomingCall(notifyIncomingCallStatus, name); + + // Request for incoming call from RPS. + ASSERT_EQUALS(RPSRequestIncomingCallL(EVoiceLine), KErrNone, _L("RPSRequestIncomingCallL returned error.")); + + // Check RLine::NotifyIncomingCall completes with valid call name. + ASSERT_EQUALS(WaitForRequestWithTimeOut(notifyIncomingCallStatus, ETimeMedium), KErrNone, + _L("RLine::NotifyIncomingCall timed out.")); + ASSERT_EQUALS(notifyIncomingCallStatus.Int(), KErrNone, + _L("RLine::NotifyIncomingCall returned with error status.")); + ASSERT_TRUE(name.Length() > 0, + _L("RLine::NotifyIncomingCall did not set a line name")); + + // Get the incoming call + TCallId incomingCallId; + RMobileCall& incomingCall = iEtelSessionMgr.GetIncomingCallL(KMainServer, KMainPhone, KVoiceLine, name, incomingCallId); + + // === Check call caps === + + /************************* NOTE ************************ + The following notifications will not be checked, since you + can not post notifications on an unassigned call object. + + // Check RCall::NotifyCapsChange completes with caps in set of KCapsVoice | KCapsAnswer. + // Check RMobileCall::NotifyMobileCallCapsChange completes with iCallControlCaps in set of KCapsVoice | KCapsHold | KCapsAnswer | KCapsTransfer. + // Check RCall::NotifyStatusChange completes with EStatusRinging + // Check RMobileCall::NotifyMobileCallStatusChange completes with EStatusRinging + ********************************************************/ + + + // Check RCall::GetCaps supports KCapsAnswer | KCapsVoice. + //*** Note: H2 returns the KCapsHangUp bit as well as KCapsAnswer | KCapsVoice. + RCall::TCaps callCaps; + ASSERT_EQUALS(incomingCall.GetCaps(callCaps), KErrNone, + _L("RMobileCall::GetCaps returned error.")); + ASSERT_BITS_SET(callCaps.iFlags, RCall::KCapsAnswer | RCall::KCapsVoice, KNoUnwantedBits, + _L("RCall::GetCaps returned wrong caps")); + + // Check RMobileCall::GetMobileCallCaps includes iCallControlCaps in set of KCapsVoice | KCapsHold | KCapsAnswer | KCapsTransfer. + TUint32 wantedCallControlCaps = RMobileCall::KCapsVoice | + RMobileCall::KCapsHold | + RMobileCall::KCapsAnswer | + RMobileCall::KCapsTransfer; + TUint32 wantedCallEventCaps = 0; + RMobileCall::TMobileCallCapsV1 mobileCallCaps; + RMobileCall::TMobileCallCapsV1Pckg mobileCallCapsPckg(mobileCallCaps); + + ASSERT_EQUALS(incomingCall.GetMobileCallCaps(mobileCallCapsPckg), KErrNone, + _L("RMobileCall::GetMobileCallCaps returned an error")); + ASSERT_BITS_SET(mobileCallCaps.iCallControlCaps, wantedCallControlCaps, KNoUnwantedBits, + _L("RMobileCall::GetMobileCallCaps returned wrong caps")); + ASSERT_BITS_SET(mobileCallCaps.iCallEventCaps, wantedCallEventCaps, KNoUnwantedBits, + _L("RMobileCall::GetMobileCallCaps returned wrong caps")); + + // === Check call status === + + // Check RCall::GetStatus returns EStatusRinging + RCall::TStatus callStatus; + ASSERT_EQUALS(incomingCall.GetStatus(callStatus), KErrNone, + _L("RCall::GetStatus returned an error.")); + ASSERT_EQUALS(callStatus, RCall::EStatusRinging, + _L("RCall::GetStatus did not return EStatusRinging.")); + + // Check RMobileCall::GetMobileCallStatus returns status of EStatusRinging + RMobileCall::TMobileCallStatus mobileCallStatus; + ASSERT_EQUALS(incomingCall.GetMobileCallStatus(mobileCallStatus), KErrNone, _L("RMobileCall::GetMobileCallStatus returned error.")); + ASSERT_EQUALS(mobileCallStatus, RMobileCall::EStatusRinging, _L("RMobileCall::GetMobileCallStatus returned error.")); + + // === Check call info === + + // Check RCall::GetInfo returns valid call name. + // Check RCall::GetInfo returns valid voice line name. + // Check RCall::GetInfo returns call status of EStatusRinging. + // Check RCall::GetInfo returns call duration of 0. + RCall::TCallInfo callInfo; + ASSERT_EQUALS(incomingCall.GetInfo(callInfo), KErrNone, + _L("RCall::GetInfo returned an error.")); + ASSERT_TRUE(callInfo.iCallName.Length() >0, + _L("RCall::GetInfo returned an invalid Call name.")); + ASSERT_TRUE(callInfo.iLineName.Length() >0, + _L("RCall::GetInfo returned an invalid Line name.")); + ASSERT_EQUALS(callInfo.iStatus, RCall::EStatusRinging, + _L("RCall::GetInfo did not return iStatus of EStatusRinging.")); + ASSERT_EQUALS(callInfo.iDuration.Int(), 0, + _L("RCall::GetInfo did not return iDuration of 0.")); + + // Check RMobileCall::GetMobileCallInfo returns iValid > 0. + // Check RMobileCall::GetMobileCallInfo returns data for attributes makred as valid in iValid. ** How to do this? ** + // Check RMobileCall::GetMobileCallInfo returns valid line name. + RMobileCall::TMobileCallInfoV1 mobileCallInfo; + RMobileCall::TMobileCallInfoV1Pckg callInfoPckg(mobileCallInfo); + ASSERT_EQUALS(incomingCall.GetMobileCallInfo(callInfoPckg), KErrNone, + _L("RMobileCall::GetMobileCallInfo returned an error")); + ASSERT_TRUE(mobileCallInfo.iLineName.Length() > 0, + _L("RMobileCall::GetMobileCallInfo returned an invalid line name")); + ASSERT_TRUE(mobileCallInfo.iValid > 0, + _L("RMobileCall::GetMobileCallInfo returned unexpected flags in iValid")); + + iCallControlTestHelper.CheckForValidCallInfo(mobileCallInfo); + + // Wait for 3000ms. + User::After(3000); // Note assuming microseconds, not milliseconds + + // Hang up call. + + // Post notification for RCall::NotifyCapsChange + TCoreEtelRequestStatus notifyCapsChangeStatus(incomingCall, &RCall::NotifyCapsChangeCancel); + CleanupStack::PushL(notifyCapsChangeStatus); + RCall::TCaps caps; + incomingCall.NotifyCapsChange(notifyCapsChangeStatus, caps); + + // Post notification for RMobileCall::NotifyMobileCallCapsChange + TExtEtelRequestStatus notifyMobileCallCapsChangeStatus(incomingCall, EMobileCallNotifyMobileCallCapsChange); + CleanupStack::PushL(notifyMobileCallCapsChangeStatus); + incomingCall.NotifyMobileCallCapsChange(notifyMobileCallCapsChangeStatus, mobileCallCapsPckg); + + // Post notification for RCall::NotifyStatusChange + TCoreEtelRequestStatus notifyCallStatusChangeStatus(incomingCall, &RCall::NotifyStatusChangeCancel); + CleanupStack::PushL(notifyCallStatusChangeStatus); + incomingCall.NotifyStatusChange(notifyCallStatusChangeStatus, callStatus); + + // Post notification for RMobileCall::NotifyMobileCallStatusChange + TExtEtelRequestStatus notifyMobileCallChangeStatus(incomingCall, EMobileCallNotifyMobileCallStatusChange); + CleanupStack::PushL(notifyMobileCallChangeStatus); + incomingCall.NotifyMobileCallStatusChange(notifyMobileCallChangeStatus, mobileCallStatus); + + + //*************** NOTE ******************* + // As we have not answered the call, I seem to recall TRP TSY does not allow you to hang up locally. + // So (assuming the network hasn't answered the call yet) we need to request RPS to hang up. + // Note: The new CTSY & board combo *may* allow you to hang up locally. + // +/* ASSERT_EQUALS(RPSHangupL(EVoiceLine, 0), KErrNone, _L("RPSHangupL returned an error")); */ + + //*************** BUT ******************* + // Are WE supposed to hang-up the call? ie NOT Rps ?? If so have to see if CTSY allows us to use HangUp, or if we have to + // answer the call first before calling HangUp !!! + // + TCoreEtelRequestStatus hangUpStatus(incomingCall, &RCall::HangUpCancel); // If HangUp fails, try Answering the call first !! + CleanupStack::PushL(hangUpStatus); + incomingCall.HangUp(hangUpStatus); + ASSERT_EQUALS(WaitForRequestWithTimeOut(hangUpStatus, ETimeMedium), KErrNone, + _L("RCall::HangUp timed-out")); + ASSERT_EQUALS(hangUpStatus.Int(), KErrNone, + _L("RCall::HangUp returned and error")); + + + // === Check call caps === + + // Check RCall::NotifyCapsChange completes with caps in set of KCapsVoice | KCapsDial. + RCall::TCaps wantedCaps, unwantedCaps; + wantedCaps.iFlags = RCall::KCapsVoice | RCall::KCapsDial; + unwantedCaps.iFlags = 0; + const TInt wantedStatus = KErrNone; + + iCallControlTestHelper.WaitForCallNotifyCapsChange(incomingCall, + notifyCapsChangeStatus, + caps, + wantedCaps, + unwantedCaps, + wantedStatus); + + // Check RCall::GetCaps supports KCapsVoice | KCapsHangUp. + ASSERT_EQUALS(incomingCall.GetCaps(caps), KErrNone, + _L("RCall::GetCaps returned an Error")); + ASSERT_BITS_SET(caps.iFlags, RCall::KCapsHangUp | RCall::KCapsVoice, KNoUnwantedBits, + _L("RCall::GetCaps returned wrong caps")); + + // Check RMobileCall::NotifyMobileCallCapsChange completes with iCallControlCaps in set of KCapsVoice | KCapsDial. + // Check RMobileCall::NotifyMobileCallCapsChange completes with iCallEventCaps in set of 0. + RMobileCall::TMobileCallCapsV1 wantedMobileCaps; + wantedMobileCaps.iCallControlCaps = RMobileCall::KCapsVoice | RMobileCall::KCapsDial; + wantedMobileCaps.iCallEventCaps = 0; + + TCmpRMobileCallTMobileCallCaps mobileCapsComp(wantedMobileCaps, mobileCallCaps, *this); + iCallControlTestHelper.WaitForMobileCallNotifyMobileCallCapsChange(incomingCall, + notifyMobileCallCapsChangeStatus, + mobileCapsComp, + wantedStatus); + + // Check RMobileCall::GetMobileCallCaps includes iCallControlCaps in set of KCapsVoice | KCapsDial. + // Check RMobileCall::GetMobileCallCaps includes iCallEventCaps in set of 0. + ASSERT_EQUALS(incomingCall.GetMobileCallCaps(mobileCallCapsPckg), KErrNone, + _L("RMobileCall::GetMobileCallCaps returned an error")); + wantedMobileCaps.iCallControlCaps = RMobileCall::KCapsVoice | RMobileCall::KCapsDial; + + + // === Check call status === + + // Check RCall::NotifyStatusChange completes with EStatusHangingUp -> EStatusIdle. + RCall::TStatus expectedCallStatus = RCall::EStatusHangingUp; + iCallControlTestHelper.WaitForCallNotifyStatusChange(incomingCall, + notifyCallStatusChangeStatus, + callStatus, + expectedCallStatus, + wantedStatus); + + incomingCall.NotifyStatusChange(notifyCallStatusChangeStatus, callStatus); + expectedCallStatus = RCall::EStatusIdle; + iCallControlTestHelper.WaitForCallNotifyStatusChange(incomingCall, + notifyCallStatusChangeStatus, + callStatus, + expectedCallStatus, + wantedStatus); + + // Check RCall::GetStatus returns EStatusIdle. + ASSERT_EQUALS(incomingCall.GetStatus(callStatus),KErrNone, + _L("RCall::GetStatus returned an error.")); + ASSERT_EQUALS(callStatus, RCall::EStatusIdle, + _L("RCall::GetStatus did not return EStatusIdle.")); + + // Check RMobileCall::NotifyMobileCallStatusChange completes with EStatusDisconnecting -> EStatusIdle. + RMobileCall::TMobileCallStatus expectedMobileCallStatus = RMobileCall::EStatusDisconnecting; + iCallControlTestHelper.WaitForMobileCallNotifyMobileCallStatusChange(incomingCall, + notifyMobileCallChangeStatus, + mobileCallStatus, + expectedMobileCallStatus, + wantedStatus); + + incomingCall.NotifyMobileCallStatusChange(notifyMobileCallChangeStatus, mobileCallStatus); + expectedMobileCallStatus = RMobileCall::EStatusIdle; + iCallControlTestHelper.WaitForMobileCallNotifyMobileCallStatusChange(incomingCall, + notifyMobileCallChangeStatus, + mobileCallStatus, + expectedMobileCallStatus, + wantedStatus); + + // Check RMobileCall::GetMobileCallStatus returns status of EStatusIdle. + ASSERT_EQUALS(incomingCall.GetMobileCallStatus(mobileCallStatus), KErrNone, + _L("RMobileCall::GetMobileStatus returned an error.")); + ASSERT_EQUALS(mobileCallStatus, RMobileCall::EStatusIdle, + _L("RMobileCall::GetMobileStatus did not return a status EStatusIdle.")); + + // === Check call info === + + // Check RCall::GetInfo returns valid call name. + // Check RCall::GetInfo returns valid voice line name. + // Check RCall::GetInfo returns call status of EStatusConnected. *** Is this correct ? should be EStatusIdle *** + // Check RCall::GetInfo returns call duration of > 0. + ASSERT_EQUALS(incomingCall.GetInfo(callInfo), KErrNone, + _L("RCall::GetInfo returned an error")); + ASSERT_TRUE(callInfo.iCallName.Length() > 0, + _L("RCall::GetInfo returned an invalid name")); + ASSERT_TRUE(callInfo.iLineName.Length() > 0, + _L("RCall::GetInfo returned an invalid Line name")); + ASSERT_EQUALS(callInfo.iStatus, RCall::EStatusConnected, + _L("RCall::GetInfo wrong iStatus, should be EStatusConnected")); + ASSERT_TRUE(callInfo.iDuration.Int() > 0, + _L("RCall::GetInfo wrong iDuration, should be >0")); + + // Check RMobileCall::GetMobileCallInfo returns iValid > 0. + // Check RMobileCall::GetMobileCallInfo returns data for attributes makred as valid in iValid. + // Check RMobileCall::GetMobileCallInfo returns valid line name. + RMobileCall::TMobileCallInfoV1Pckg mobileCallInfoPckg(mobileCallInfo); + ASSERT_EQUALS(incomingCall.GetMobileCallInfo(mobileCallInfoPckg), KErrNone, + _L("RMobileCall::GetMobileCallInfo returned an error")); + ASSERT_TRUE(mobileCallInfo.iLineName.Length() > 0, + _L("RMobileCall::GetMobileCallInfo returned an invalid line name")); + ASSERT_TRUE(mobileCallInfo.iValid > 0, + _L("RMobileCall::GetMobileCallInfo returned unexpected flags in iValid")); + + iCallControlTestHelper.CheckForValidCallInfo(mobileCallInfo); + + // Release call 1. *** No *** - Release the incoming call + iEtelSessionMgr.ReleaseCall(KMainServer, KMainPhone, KVoiceLine, incomingCallId); + + // Get call 1. ** No need ** +// call1 = iEtelSessionMgr.GetCallL(KMainServer, KMainPhone, KVoiceLine, KCall1); + + // Repeat test pausing for 5000ms and 10000ms instead. + + // === Repeating test with 5000ms pause === + + // Post notifier for RLine::NotifyIncomingCall + voiceLine.NotifyIncomingCall(notifyIncomingCallStatus, name); + + // Request for incoming call from RPS. + ASSERT_EQUALS(RPSRequestIncomingCallL(EVoiceLine), KErrNone, _L("RPSRequestIncomingCallL returned error.")); + + // Check RLine::NotifyIncomingCall completes with valid call name. + ASSERT_EQUALS(WaitForRequestWithTimeOut(notifyIncomingCallStatus, ETimeMedium), KErrNone, + _L("RLine::NotifyIncomingCall timed out.")); + ASSERT_EQUALS(notifyIncomingCallStatus.Int(), KErrNone, + _L("RLine::NotifyIncomingCall returned with error status.")); + ASSERT_TRUE(name.Length() > 0, + _L("RLine::NotifyIncomingCall did not set a line name")); + + // Get the call + incomingCall = iEtelSessionMgr.GetIncomingCallL(KMainServer, KMainPhone, KVoiceLine, name, incomingCallId); + + // === Check call caps === + + /************************* NOTE ************************ + As commented above, notifications will not to checked. + ********************************************************/ + + // Check RCall::GetCaps supports KCapsAnswer | KCapsVoice. + //*** Note: H2 returns the KCapsHangUp bit as well as KCapsAnswer | KCapsVoice. + ASSERT_EQUALS(incomingCall.GetCaps(callCaps), KErrNone, + _L("RMobileCall::GetCaps returned error.")); + ASSERT_BITS_SET(callCaps.iFlags, RCall::KCapsAnswer | RCall::KCapsVoice, KNoUnwantedBits, + _L("RCall::GetCaps returned wrong caps")); + + // Check RMobileCall::GetMobileCallCaps includes iCallControlCaps in set of KCapsVoice | KCapsHold | KCapsAnswer | KCapsTransfer. + wantedCallControlCaps = RMobileCall::KCapsVoice | + RMobileCall::KCapsHold | + RMobileCall::KCapsAnswer | + RMobileCall::KCapsTransfer; + wantedCallEventCaps = 0; + ASSERT_EQUALS(incomingCall.GetMobileCallCaps(mobileCallCapsPckg), KErrNone, + _L("RMobileCall::GetMobileCallCaps returned an error")); + ASSERT_BITS_SET(mobileCallCaps.iCallControlCaps, wantedCallControlCaps, KNoUnwantedBits, + _L("RMobileCall::GetMobileCallCaps returned wrong caps")); + ASSERT_BITS_SET(mobileCallCaps.iCallEventCaps, wantedCallEventCaps, KNoUnwantedBits, + _L("RMobileCall::GetMobileCallCaps returned wrong caps")); + + // === Check call status === + + // Check RCall::GetStatus returns EStatusRinging + ASSERT_EQUALS(incomingCall.GetStatus(callStatus), KErrNone, + _L("RCall::GetStatus returned an error.")); + ASSERT_EQUALS(callStatus, RCall::EStatusRinging, + _L("RCall::GetStatus did not return EStatusRinging.")); + + // Check RMobileCall::GetMobileCallStatus returns status of EStatusRinging + ASSERT_EQUALS(incomingCall.GetMobileCallStatus(mobileCallStatus), KErrNone, _L("RMobileCall::GetMobileCallStatus returned error.")); + ASSERT_EQUALS(mobileCallStatus, RMobileCall::EStatusRinging, _L("RMobileCall::GetMobileCallStatus returned error.")); + + // === Check call info === + + // Check RCall::GetInfo returns valid call name. + // Check RCall::GetInfo returns valid voice line name. + // Check RCall::GetInfo returns call status of EStatusRinging. + // Check RCall::GetInfo returns call duration of 0. + ASSERT_EQUALS(incomingCall.GetInfo(callInfo), KErrNone, + _L("RCall::GetInfo returned an error.")); + ASSERT_TRUE(callInfo.iCallName.Length() >0, + _L("RCall::GetInfo returned an invalid Call name.")); + ASSERT_TRUE(callInfo.iLineName.Length() >0, + _L("RCall::GetInfo returned an invalid Line name.")); + ASSERT_EQUALS(callInfo.iStatus, RCall::EStatusRinging, + _L("RCall::GetInfo did not return iStatus of EStatusRinging.")); + ASSERT_EQUALS(callInfo.iDuration.Int(), 0, + _L("RCall::GetInfo did not return iDuration of 0.")); + + // Check RMobileCall::GetMobileCallInfo returns iValid > 0. + // Check RMobileCall::GetMobileCallInfo returns data for attributes makred as valid in iValid. ** How to do this? ** + // Check RMobileCall::GetMobileCallInfo returns valid line name. + ASSERT_EQUALS(incomingCall.GetMobileCallInfo(callInfoPckg), KErrNone, + _L("RMobileCall::GetMobileCallInfo returned an error")); + ASSERT_TRUE(mobileCallInfo.iLineName.Length() > 0, + _L("RMobileCall::GetMobileCallInfo returned an invalid line name")); + ASSERT_TRUE(mobileCallInfo.iValid > 0, + _L("RMobileCall::GetMobileCallInfo returned unexpected flags in iValid")); + + iCallControlTestHelper.CheckForValidCallInfo(mobileCallInfo); + + // Wait for 5000ms. + User::After(5000); // Note assuming microseconds, not milliseconds + + // Hang up call. + + // Post notification for RCall::NotifyCapsChange + incomingCall.NotifyCapsChange(notifyCapsChangeStatus, caps); + + // Post notification for RMobileCall::NotifyMobileCallCapsChange + incomingCall.NotifyMobileCallCapsChange(notifyMobileCallCapsChangeStatus, mobileCallCapsPckg); + + // Post notification for RCall::NotifyStatusChange + incomingCall.NotifyStatusChange(notifyCallStatusChangeStatus, callStatus); + + // Post notification for RMobileCall::NotifyMobileCallStatusChange + incomingCall.NotifyMobileCallStatusChange(notifyMobileCallChangeStatus, mobileCallStatus); + + + + //*************** NOTE ******************* + // As we have not answered the call, I seem to recall TRP TSY does not allow you to hang up locally. + // So (assuming the network hasn't answered the call yet) we need to request RPS to hang up. + // Note: The new CTSY board combo *may* allow you to hang up locally. + // +/* ASSERT_EQUALS(RPSHangupL(EVoiceLine, 0), KErrNone, _L("RPSHangupL returned an error")); */ + + //*************** BUT ******************* + // Are WE supposed to hang-up the call? ie NOT Rps ?? If so have to see if CTSY allows us to use HangUp, or if we have to + // answer the call first before calling HangUp !!! + // + incomingCall.HangUp(hangUpStatus); // If HangUp fails, try Answering the call first !! + ASSERT_EQUALS(WaitForRequestWithTimeOut(hangUpStatus, ETimeMedium), KErrNone, + _L("RCall::HangUp timed-out")); + ASSERT_EQUALS(hangUpStatus.Int(), KErrNone, + _L("RCall::HangUp returned and error")); + + + // === Check call caps === + + // Check RCall::NotifyCapsChange completes with caps in set of KCapsVoice | KCapsDial. + wantedCaps.iFlags = RCall::KCapsVoice | RCall::KCapsDial; + unwantedCaps.iFlags = 0; + + iCallControlTestHelper.WaitForCallNotifyCapsChange(incomingCall, + notifyCapsChangeStatus, + caps, + wantedCaps, + unwantedCaps, + wantedStatus); + + // Check RCall::GetCaps supports KCapsVoice | KCapsHangUp. + ASSERT_EQUALS(incomingCall.GetCaps(caps), KErrNone, + _L("RCall::GetCaps returned an Error")); + ASSERT_BITS_SET(caps.iFlags, RCall::KCapsHangUp | RCall::KCapsVoice, KNoUnwantedBits, + _L("RCall::GetCaps returned wrong caps")); + + // Check RMobileCall::NotifyMobileCallCapsChange completes with iCallControlCaps in set of KCapsVoice | KCapsDial. + // Check RMobileCall::NotifyMobileCallCapsChange completes with iCallEventCaps in set of 0. + wantedMobileCaps.iCallControlCaps = RMobileCall::KCapsVoice | RMobileCall::KCapsDial; + wantedMobileCaps.iCallEventCaps = 0; + + iCallControlTestHelper.WaitForMobileCallNotifyMobileCallCapsChange(incomingCall, + notifyMobileCallCapsChangeStatus, + mobileCapsComp, + wantedStatus); + + // Check RMobileCall::GetMobileCallCaps includes iCallControlCaps in set of KCapsVoice | KCapsDial. + // Check RMobileCall::GetMobileCallCaps includes iCallEventCaps in set of 0. + ASSERT_EQUALS(incomingCall.GetMobileCallCaps(mobileCallCapsPckg), KErrNone, + _L("RMobileCall::GetMobileCallCaps returned an error")); + wantedMobileCaps.iCallControlCaps = RMobileCall::KCapsVoice | RMobileCall::KCapsDial; + + // === Check call status === + + // Check RCall::NotifyStatusChange completes with EStatusHangingUp -> EStatusIdle. + expectedCallStatus = RCall::EStatusHangingUp; + iCallControlTestHelper.WaitForCallNotifyStatusChange(incomingCall, + notifyCallStatusChangeStatus, + callStatus, + expectedCallStatus, + wantedStatus); + + incomingCall.NotifyStatusChange(notifyCallStatusChangeStatus, callStatus); + expectedCallStatus = RCall::EStatusIdle; + iCallControlTestHelper.WaitForCallNotifyStatusChange(incomingCall, + notifyCallStatusChangeStatus, + callStatus, + expectedCallStatus, + wantedStatus); + + // Check RCall::GetStatus returns EStatusIdle. + ASSERT_EQUALS(incomingCall.GetStatus(callStatus),KErrNone, + _L("RCall::GetStatus returned an error.")); + ASSERT_EQUALS(callStatus, RCall::EStatusIdle, + _L("RCall::GetStatus did not return EStatusIdle.")); + + // Check RMobileCall::NotifyMobileCallStatusChange completes with EStatusDisconnecting -> EStatusIdle. + expectedMobileCallStatus = RMobileCall::EStatusDisconnecting; + iCallControlTestHelper.WaitForMobileCallNotifyMobileCallStatusChange(incomingCall, + notifyMobileCallChangeStatus, + mobileCallStatus, + expectedMobileCallStatus, + wantedStatus); + + incomingCall.NotifyMobileCallStatusChange(notifyMobileCallChangeStatus, mobileCallStatus); + expectedMobileCallStatus = RMobileCall::EStatusIdle; + iCallControlTestHelper.WaitForMobileCallNotifyMobileCallStatusChange(incomingCall, + notifyMobileCallChangeStatus, + mobileCallStatus, + expectedMobileCallStatus, + wantedStatus); + + // Check RMobileCall::GetMobileCallStatus returns status of EStatusIdle. + ASSERT_EQUALS(incomingCall.GetMobileCallStatus(mobileCallStatus), KErrNone, + _L("RMobileCall::GetMobileStatus returned an error.")); + ASSERT_EQUALS(mobileCallStatus, RMobileCall::EStatusIdle, + _L("RMobileCall::GetMobileStatus did not return a status EStatusIdle.")); + + // === Check call info === + + // Check RCall::GetInfo returns valid call name. + // Check RCall::GetInfo returns valid voice line name. + // Check RCall::GetInfo returns call status of EStatusConnected. *** Is this correct ? should be EStatusIdle *** + // Check RCall::GetInfo returns call duration of > 0. + ASSERT_EQUALS(incomingCall.GetInfo(callInfo), KErrNone, + _L("RCall::GetInfo returned an error")); + ASSERT_TRUE(callInfo.iCallName.Length() > 0, + _L("RCall::GetInfo returned an invalid name")); + ASSERT_TRUE(callInfo.iLineName.Length() > 0, + _L("RCall::GetInfo returned an invalid Line name")); + ASSERT_EQUALS(callInfo.iStatus, RCall::EStatusConnected, + _L("RCall::GetInfo wrong iStatus, should be EStatusConnected")); + ASSERT_TRUE(callInfo.iDuration.Int() > 0, + _L("RCall::GetInfo wrong iDuration, should be >0")); + + // Check RMobileCall::GetMobileCallInfo returns iValid > 0. + // Check RMobileCall::GetMobileCallInfo returns data for attributes makred as valid in iValid. + // Check RMobileCall::GetMobileCallInfo returns valid line name. + ASSERT_EQUALS(incomingCall.GetMobileCallInfo(mobileCallInfoPckg), KErrNone, + _L("RMobileCall::GetMobileCallInfo returned an error")); + ASSERT_TRUE(mobileCallInfo.iLineName.Length() > 0, + _L("RMobileCall::GetMobileCallInfo returned an invalid line name")); + ASSERT_TRUE(mobileCallInfo.iValid > 0, + _L("RMobileCall::GetMobileCallInfo returned unexpected flags in iValid")); + + iCallControlTestHelper.CheckForValidCallInfo(mobileCallInfo); + + // Release call 1. *** No *** - Release the incoming call + iEtelSessionMgr.ReleaseCall(KMainServer, KMainPhone, KVoiceLine, incomingCallId); + + // Get call 1. ** No need ** +// call1 = iEtelSessionMgr.GetCallL(KMainServer, KMainPhone, KVoiceLine, KCall1); + + // === Repeating test with 10000ms pause === + + // Post notifier for RLine::NotifyIncomingCall + voiceLine.NotifyIncomingCall(notifyIncomingCallStatus, name); + + // Request for incoming call from RPS. + ASSERT_EQUALS(RPSRequestIncomingCallL(EVoiceLine), KErrNone, _L("RPSRequestIncomingCallL returned error.")); + + // Check RLine::NotifyIncomingCall completes with valid call name. + ASSERT_EQUALS(WaitForRequestWithTimeOut(notifyIncomingCallStatus, ETimeMedium), KErrNone, + _L("RLine::NotifyIncomingCall timed out.")); + ASSERT_EQUALS(notifyIncomingCallStatus.Int(), KErrNone, + _L("RLine::NotifyIncomingCall returned with error status.")); + ASSERT_TRUE(name.Length() > 0, + _L("RLine::NotifyIncomingCall did not set a line name")); + + // Get the call + incomingCall = iEtelSessionMgr.GetIncomingCallL(KMainServer, KMainPhone, KVoiceLine, name, incomingCallId); + + // === Check call caps === + + /************************* NOTE ************************ + As commented above, notifications will not to checked. + ********************************************************/ + + // Check RCall::GetCaps supports KCapsAnswer | KCapsVoice. + //*** Note: H2 returns the KCapsHangUp bit as well as KCapsAnswer | KCapsVoice. + ASSERT_EQUALS(incomingCall.GetCaps(callCaps), KErrNone, + _L("RMobileCall::GetCaps returned error.")); + ASSERT_BITS_SET(callCaps.iFlags, RCall::KCapsAnswer | RCall::KCapsVoice, KNoUnwantedBits, + _L("RCall::GetCaps returned wrong caps")); + + // Check RMobileCall::GetMobileCallCaps includes iCallControlCaps in set of KCapsVoice | KCapsHold | KCapsAnswer | KCapsTransfer. + wantedCallControlCaps = RMobileCall::KCapsVoice | + RMobileCall::KCapsHold | + RMobileCall::KCapsAnswer | + RMobileCall::KCapsTransfer; + wantedCallEventCaps = 0; + ASSERT_EQUALS(incomingCall.GetMobileCallCaps(mobileCallCapsPckg), KErrNone, + _L("RMobileCall::GetMobileCallCaps returned an error")); + ASSERT_BITS_SET(mobileCallCaps.iCallControlCaps, wantedCallControlCaps, KNoUnwantedBits, + _L("RMobileCall::GetMobileCallCaps returned wrong caps")); + ASSERT_BITS_SET(mobileCallCaps.iCallEventCaps, wantedCallEventCaps, KNoUnwantedBits, + _L("RMobileCall::GetMobileCallCaps returned wrong caps")); + + // === Check call status === + + // Check RCall::GetStatus returns EStatusRinging + ASSERT_EQUALS(incomingCall.GetStatus(callStatus), KErrNone, + _L("RCall::GetStatus returned an error.")); + ASSERT_EQUALS(callStatus, RCall::EStatusRinging, + _L("RCall::GetStatus did not return EStatusRinging.")); + + // Check RMobileCall::GetMobileCallStatus returns status of EStatusRinging + ASSERT_EQUALS(incomingCall.GetMobileCallStatus(mobileCallStatus), KErrNone, _L("RMobileCall::GetMobileCallStatus returned error.")); + ASSERT_EQUALS(mobileCallStatus, RMobileCall::EStatusRinging, _L("RMobileCall::GetMobileCallStatus returned error.")); + + // === Check call info === + + // Check RCall::GetInfo returns valid call name. + // Check RCall::GetInfo returns valid voice line name. + // Check RCall::GetInfo returns call status of EStatusRinging. + // Check RCall::GetInfo returns call duration of 0. + ASSERT_EQUALS(incomingCall.GetInfo(callInfo), KErrNone, + _L("RCall::GetInfo returned an error.")); + ASSERT_TRUE(callInfo.iCallName.Length() >0, + _L("RCall::GetInfo returned an invalid Call name.")); + ASSERT_TRUE(callInfo.iLineName.Length() >0, + _L("RCall::GetInfo returned an invalid Line name.")); + ASSERT_EQUALS(callInfo.iStatus, RCall::EStatusRinging, + _L("RCall::GetInfo did not return iStatus of EStatusRinging.")); + ASSERT_EQUALS(callInfo.iDuration.Int(), 0, + _L("RCall::GetInfo did not return iDuration of 0.")); + + // Check RMobileCall::GetMobileCallInfo returns iValid > 0. + // Check RMobileCall::GetMobileCallInfo returns data for attributes makred as valid in iValid. ** How to do this? ** + // Check RMobileCall::GetMobileCallInfo returns valid line name. + ASSERT_EQUALS(incomingCall.GetMobileCallInfo(callInfoPckg), KErrNone, + _L("RMobileCall::GetMobileCallInfo returned an error")); + ASSERT_TRUE(mobileCallInfo.iLineName.Length() > 0, + _L("RMobileCall::GetMobileCallInfo returned an invalid line name")); + ASSERT_TRUE(mobileCallInfo.iValid > 0, + _L("RMobileCall::GetMobileCallInfo returned unexpected flags in iValid")); + + iCallControlTestHelper.CheckForValidCallInfo(mobileCallInfo); + + // Wait for 10000ms. + User::After(10000); // Note assuming microseconds, not milliseconds + + // Hang up call. + + // Post notification for RCall::NotifyCapsChange + incomingCall.NotifyCapsChange(notifyCapsChangeStatus, caps); + + // Post notification for RMobileCall::NotifyMobileCallCapsChange + incomingCall.NotifyMobileCallCapsChange(notifyMobileCallCapsChangeStatus, mobileCallCapsPckg); + + // Post notification for RCall::NotifyStatusChange + incomingCall.NotifyStatusChange(notifyCallStatusChangeStatus, callStatus); + + // Post notification for RMobileCall::NotifyMobileCallStatusChange + incomingCall.NotifyMobileCallStatusChange(notifyMobileCallChangeStatus, mobileCallStatus); + + //*************** NOTE ******************* + // As we have not answered the call, I seem to recall TRP TSY does not allow you to hang up locally. + // So (assuming the network hasn't answered the call yet) we need to request RPS to hang up. + // Note: The new CTSY & board combo *may* allow you to hang up locally. + // +/* ASSERT_EQUALS(RPSHangupL(EVoiceLine, 0), KErrNone, _L("RPSHangupL returned an error")); */ + + //*************** BUT ******************* + // Are WE supposed to hang-up the call? ie NOT Rps ?? If so have to see if CTSY allows us to use HangUp, or if we have to + // answer the call first before calling HangUp !!! + // + incomingCall.HangUp(hangUpStatus); // If HangUp fails, try Answering the call first !! + ASSERT_EQUALS(WaitForRequestWithTimeOut(hangUpStatus, ETimeMedium), KErrNone, + _L("RCall::HangUp timed-out")); + ASSERT_EQUALS(hangUpStatus.Int(), KErrNone, + _L("RCall::HangUp returned and error")); + + + // === Check call caps === + + // Check RCall::NotifyCapsChange completes with caps in set of KCapsVoice | KCapsDial. + wantedCaps.iFlags = RCall::KCapsVoice | RCall::KCapsDial; + unwantedCaps.iFlags = 0; + + iCallControlTestHelper.WaitForCallNotifyCapsChange(incomingCall, + notifyCapsChangeStatus, + caps, + wantedCaps, + unwantedCaps, + wantedStatus); + + // Check RCall::GetCaps supports KCapsVoice | KCapsHangUp. + ASSERT_EQUALS(incomingCall.GetCaps(caps), KErrNone, + _L("RCall::GetCaps returned an Error")); + ASSERT_BITS_SET(caps.iFlags, RCall::KCapsHangUp | RCall::KCapsVoice, KNoUnwantedBits, + _L("RCall::GetCaps returned wrong caps")); + + // Check RMobileCall::NotifyMobileCallCapsChange completes with iCallControlCaps in set of KCapsVoice | KCapsDial. + // Check RMobileCall::NotifyMobileCallCapsChange completes with iCallEventCaps in set of 0. + wantedMobileCaps.iCallControlCaps = RMobileCall::KCapsVoice | RMobileCall::KCapsDial; + wantedMobileCaps.iCallEventCaps = 0; + + iCallControlTestHelper.WaitForMobileCallNotifyMobileCallCapsChange(incomingCall, + notifyMobileCallCapsChangeStatus, + mobileCapsComp, + wantedStatus); + + // Check RMobileCall::GetMobileCallCaps includes iCallControlCaps in set of KCapsVoice | KCapsDial. + // Check RMobileCall::GetMobileCallCaps includes iCallEventCaps in set of 0. + ASSERT_EQUALS(incomingCall.GetMobileCallCaps(mobileCallCapsPckg), KErrNone, + _L("RMobileCall::GetMobileCallCaps returned an error")); + wantedMobileCaps.iCallControlCaps = RMobileCall::KCapsVoice | RMobileCall::KCapsDial; + + // === Check call status === + + // Check RCall::NotifyStatusChange completes with EStatusHangingUp -> EStatusIdle. + expectedCallStatus = RCall::EStatusHangingUp; + iCallControlTestHelper.WaitForCallNotifyStatusChange(incomingCall, + notifyCallStatusChangeStatus, + callStatus, + expectedCallStatus, + wantedStatus); + + incomingCall.NotifyStatusChange(notifyCallStatusChangeStatus, callStatus); + expectedCallStatus = RCall::EStatusIdle; + iCallControlTestHelper.WaitForCallNotifyStatusChange(incomingCall, + notifyCallStatusChangeStatus, + callStatus, + expectedCallStatus, + wantedStatus); + + // Check RCall::GetStatus returns EStatusIdle. + ASSERT_EQUALS(incomingCall.GetStatus(callStatus),KErrNone, + _L("RCall::GetStatus returned an error.")); + ASSERT_EQUALS(callStatus, RCall::EStatusIdle, + _L("RCall::GetStatus did not return EStatusIdle.")); + + // Check RMobileCall::NotifyMobileCallStatusChange completes with EStatusDisconnecting -> EStatusIdle. + expectedMobileCallStatus = RMobileCall::EStatusDisconnecting; + iCallControlTestHelper.WaitForMobileCallNotifyMobileCallStatusChange(incomingCall, + notifyMobileCallChangeStatus, + mobileCallStatus, + expectedMobileCallStatus, + wantedStatus); + + incomingCall.NotifyMobileCallStatusChange(notifyMobileCallChangeStatus, mobileCallStatus); + expectedMobileCallStatus = RMobileCall::EStatusIdle; + iCallControlTestHelper.WaitForMobileCallNotifyMobileCallStatusChange(incomingCall, + notifyMobileCallChangeStatus, + mobileCallStatus, + expectedMobileCallStatus, + wantedStatus); + + // Check RMobileCall::GetMobileCallStatus returns status of EStatusIdle. + ASSERT_EQUALS(incomingCall.GetMobileCallStatus(mobileCallStatus), KErrNone, + _L("RMobileCall::GetMobileStatus returned an error.")); + ASSERT_EQUALS(mobileCallStatus, RMobileCall::EStatusIdle, + _L("RMobileCall::GetMobileStatus did not return a status EStatusIdle.")); + + // === Check call info === + + // Check RCall::GetInfo returns valid call name. + // Check RCall::GetInfo returns valid voice line name. + // Check RCall::GetInfo returns call status of EStatusConnected. *** Is this correct ? should be EStatusIdle *** + // Check RCall::GetInfo returns call duration of > 0. + ASSERT_EQUALS(incomingCall.GetInfo(callInfo), KErrNone, + _L("RCall::GetInfo returned an error")); + ASSERT_TRUE(callInfo.iCallName.Length() > 0, + _L("RCall::GetInfo returned an invalid name")); + ASSERT_TRUE(callInfo.iLineName.Length() > 0, + _L("RCall::GetInfo returned an invalid Line name")); + ASSERT_EQUALS(callInfo.iStatus, RCall::EStatusConnected, + _L("RCall::GetInfo wrong iStatus, should be EStatusConnected")); + ASSERT_TRUE(callInfo.iDuration.Int() > 0, + _L("RCall::GetInfo wrong iDuration, should be >0")); + + // Check RMobileCall::GetMobileCallInfo returns iValid > 0. + // Check RMobileCall::GetMobileCallInfo returns data for attributes makred as valid in iValid. + // Check RMobileCall::GetMobileCallInfo returns valid line name. + ASSERT_EQUALS(incomingCall.GetMobileCallInfo(mobileCallInfoPckg), KErrNone, + _L("RMobileCall::GetMobileCallInfo returned an error")); + ASSERT_TRUE(mobileCallInfo.iLineName.Length() > 0, + _L("RMobileCall::GetMobileCallInfo returned an invalid line name")); + ASSERT_TRUE(mobileCallInfo.iValid > 0, + _L("RMobileCall::GetMobileCallInfo returned unexpected flags in iValid")); + + iCallControlTestHelper.CheckForValidCallInfo(mobileCallInfo); + + // Release call 1. *** No *** - Release the incoming call + iEtelSessionMgr.ReleaseCall(KMainServer, KMainPhone, KVoiceLine, incomingCallId); + + //////////////////////////////////////////////////////////////// + // TEST END + //////////////////////////////////////////////////////////////// + + StartCleanup(); + + CleanupStack::PopAndDestroy(6); + // hangUpStatus + // notifyMobileCallChangeStatus + // notifyCallStatusChangeStatus + // notifyMobileCallCapsChangeStatus + // notifyCapsChangeStatus + // notifyIncomingCallStatus + + return TestStepResult(); + } + +TPtrC CCTSYIntegrationTestCallControl0022::GetTestStepName() +/** + * @return The test step name. + */ + { + return _L("CCTSYIntegrationTestCallControl0022"); + } + + + +CCTSYIntegrationTestCallControl0023::CCTSYIntegrationTestCallControl0023(CEtelSessionMgr& aEtelSessionMgr) + : CCTSYIntegrationTestCallControlBase(aEtelSessionMgr) +/** + * Constructor. + */ + { + SetTestStepName(CCTSYIntegrationTestCallControl0023::GetTestStepName()); + } + +CCTSYIntegrationTestCallControl0023::~CCTSYIntegrationTestCallControl0023() +/** + * Destructor. + */ + { + } + +TVerdict CCTSYIntegrationTestCallControl0023::doTestStepL() +/** + * @SYMTestCaseID BA-CTSY-INT-CCON-0023 + * @SYMFssID BA/CTSY/CCON-0023 + * @SYMTestCaseDesc Hold a call then dial a second call. + * @SYMTestPriority High + * @SYMTestActions RMobileCall::NotifyMobileCallStatusChange, RMobileCall::GetMobileCallStatus, RMobileCall::Hold, RCall::HangUp, RMobileCall::NotifyCallEvent, RCall::NotifyStatusChange, RCall::GetStatus + * @SYMTestExpectedResults Pass - Call 2 is can be made when call 1 is held + * @SYMTestType CIT + * @SYMTestCaseDependencies live/automatic + * + * Reason for test: Verify second call can be made when first one is held and call statuses is correct. + * + * @return - TVerdict code + */ + { + + //////////////////////////////////////////////////////////////// + // SET UP + //////////////////////////////////////////////////////////////// + + + // Check phone supports KCapsVoice + + // Get Voice line 1 + RMobileLine& voiceLine = iEtelSessionMgr.GetLineL(KMainServer, KMainPhone, KVoiceLine); + // Get call 1 + RMobileCall& call1 = iEtelSessionMgr.GetCallL(KMainServer, KMainPhone, KVoiceLine, KCall1); + + RLine::TCaps lineCaps; + CHECK_EQUALS_L(voiceLine.GetCaps(lineCaps), KErrNone, + _L("RMobileLine::GetCaps returned an error.")); + CHECK_BITS_SET_L(lineCaps.iFlags, RLine::KCapsVoice, KNoUnwantedBits, + _L("RLine::GetCaps did not return KCapsVoice.")); + + // Get call 2 + RMobileCall& call2 = iEtelSessionMgr.GetCallL(KMainServer, KMainPhone, KVoiceLine, KCall2); + + // Call TNetworkTsyTestHelper::WaitForRegisteredOnHomeNetworkL + RMobilePhone& phone = iEtelSessionMgr.GetPhoneL(KMainServer,KMainPhone); + CHECK_EQUALS_L(iNetworkTestHelper.WaitForRegisteredOnHomeNetworkL(phone), KErrNone, + _L("TNetworkTsyTestHelper::WaitForRegisteredOnHomeNetworkL returned with an error")); + + //////////////////////////////////////////////////////////////// + // SET UP END + //////////////////////////////////////////////////////////////// + + StartTest(); + + //////////////////////////////////////////////////////////////// + // TEST START + //////////////////////////////////////////////////////////////// + + // Post Notifier for RCall::NotifyStatusChange + TCoreEtelRequestStatus notifyStatusChangeStatus(call1, &RCall::NotifyStatusChangeCancel); + CleanupStack::PushL(notifyStatusChangeStatus); + RCall::TStatus callStatus; + call1.NotifyStatusChange(notifyStatusChangeStatus, callStatus); + + // Post Notifier for RMobileCall::NotifyMobileCallStatusChange + TExtEtelRequestStatus notifyMobileCallStatusChangeStatus(call1, EMobileCallNotifyMobileCallStatusChange); + CleanupStack::PushL(notifyMobileCallStatusChangeStatus); + RMobileCall::TMobileCallStatus mobileCallStatus; + call1.NotifyMobileCallStatusChange(notifyMobileCallStatusChangeStatus, mobileCallStatus); + + // Dial a number that answers with call 1. + TPtrC number; + ASSERT_TRUE(GetStringFromConfig(KIniVoiceNumSection, KIniVoiceNumber1, number) != EFalse, + _L("GetStringFromConfig did not complete as expected")); + DEBUG_PRINTF1(_L("Board Now Dialling: ")); + TCoreEtelRequestStatus dialStatus(call1, &RCall::DialCancel); + CleanupStack::PushL(dialStatus); + call1.Dial(dialStatus, number); + ASSERT_EQUALS(WaitForRequestWithTimeOut(dialStatus, ETimeMedium), KErrNone, _L("RCall::Dial timed-out")); + ASSERT_EQUALS(dialStatus.Int(), KErrNone, _L("RCall::Dial returned with an error")); + + // Check RCall::NotifyStatusChange for call 1 completes with EStatusDialling -> EStatusConnecting -> EStatusConnected. + TInt expectedStatus = KErrNone; + RCall::TStatus expectedCallStatus = RCall::EStatusDialling; + iCallControlTestHelper.WaitForCallNotifyStatusChange(call1, + notifyStatusChangeStatus, + callStatus, + expectedCallStatus, + expectedStatus); + + call1.NotifyStatusChange(notifyStatusChangeStatus, callStatus); + expectedCallStatus = RCall::EStatusConnecting; + iCallControlTestHelper.WaitForCallNotifyStatusChange(call1, + notifyStatusChangeStatus, + callStatus, + expectedCallStatus, + expectedStatus); + + call1.NotifyStatusChange(notifyStatusChangeStatus, callStatus); + expectedCallStatus = RCall::EStatusConnected; + iCallControlTestHelper.WaitForCallNotifyStatusChange(call1, + notifyStatusChangeStatus, + callStatus, + expectedCallStatus, + expectedStatus); + + // Check RCall::GetStatus for call 1 returns EStatusConnected. + ASSERT_EQUALS(call1.GetStatus(callStatus), KErrNone, + _L("RCall::GetStatus returned an error.")); + ASSERT_EQUALS(callStatus, RCall::EStatusConnected, + _L("RCall::GetStatus did not return EStatusConnected.")); + + // Check RMobileCall::NotifyMobileCallStatusChange for call 1 completes with EStatusDialling->EStatusConnecting->EStatusConnected + const TInt wantedStatus = KErrNone; + RMobileCall::TMobileCallStatus expectedMobileCallStatus = RMobileCall::EStatusDialling; + iCallControlTestHelper.WaitForMobileCallNotifyMobileCallStatusChange(call1, + notifyMobileCallStatusChangeStatus, + mobileCallStatus, + expectedMobileCallStatus, + wantedStatus); + + call1.NotifyMobileCallStatusChange(notifyMobileCallStatusChangeStatus, mobileCallStatus); + expectedMobileCallStatus = RMobileCall::EStatusConnecting; + iCallControlTestHelper.WaitForMobileCallNotifyMobileCallStatusChange(call1, + notifyMobileCallStatusChangeStatus, + mobileCallStatus, + expectedMobileCallStatus, + wantedStatus); + + call1.NotifyMobileCallStatusChange(notifyMobileCallStatusChangeStatus, mobileCallStatus); + expectedMobileCallStatus = RMobileCall::EStatusConnected; + iCallControlTestHelper.WaitForMobileCallNotifyMobileCallStatusChange(call1, + notifyMobileCallStatusChangeStatus, + mobileCallStatus, + expectedMobileCallStatus, + wantedStatus); + + // Check RMobileCall::GetMobileCallStatus for call 1 returns EStatusConnected + ASSERT_EQUALS(call1.GetMobileCallStatus(mobileCallStatus), KErrNone, + _L("RMobileCall::GetMobileStatus returned an error.")); + ASSERT_EQUALS(mobileCallStatus, RMobileCall::EStatusConnected, + _L("RMobileCall::GetMobileStatus did not return a status EStatusConnected.")); + + + // Post notifier for RMobileCall::NotifyCallEvent + TExtEtelRequestStatus notifyCallEventStatus(call1, EMobileCallNotifyCallEvent); + CleanupStack::PushL(notifyCallEventStatus); + RMobileCall::TMobileCallEvent event; + call1.NotifyCallEvent(notifyCallEventStatus, event); + + // Post Notifier for RMobileCall::NotifyMobileCallStatusChange + call1.NotifyMobileCallStatusChange(notifyMobileCallStatusChangeStatus, mobileCallStatus); + + // Hold call 1. + TExtEtelRequestStatus holdStatus(call1, EMobileCallHold); + CleanupStack::PushL(holdStatus); + call1.Hold(holdStatus); + + // Wait for hold completion. + ASSERT_EQUALS(WaitForRequestWithTimeOut(holdStatus, ETimeShort), KErrNone, + _L("RMobileCall::Hold timed-out.")); + ASSERT_EQUALS(dialStatus.Int(), KErrNone, + _L("RMobileCall::Hold problem holding the call.")); + + // Check RMobileCall::NotifyCallEvent for call 1 completes with ELocalHold + iCallControlTestHelper.WaitForMobileCallNotifyCallEvent( + call1, + notifyCallEventStatus, + event, + RMobileCall::ELocalHold, + wantedStatus); + + // Check RMobileCall::NotifyMobileCallStatusChange for call 1 completes with EStatusHold + expectedMobileCallStatus = RMobileCall::EStatusHold; + iCallControlTestHelper.WaitForMobileCallNotifyMobileCallStatusChange(call1, + notifyMobileCallStatusChangeStatus, + mobileCallStatus, + expectedMobileCallStatus, + wantedStatus); + + // Check RMobileCall::GetMobileCallStatus for call 1 returns status of EStatusHold + ASSERT_EQUALS(call1.GetMobileCallStatus(mobileCallStatus), KErrNone, + _L("RMobileCall::GetMobileCallStatus returned an error")); + ASSERT_EQUALS(mobileCallStatus, RMobileCall::EStatusHold, + _L("RMobileCall::GetMobileCallStatus did not return EStatusHold")); + + + // Post Notifier for RCall::NotifyStatusChange for call2 + TCoreEtelRequestStatus notifyStatusChangeStatus2(call2, &RCall::NotifyStatusChangeCancel); + CleanupStack::PushL(notifyStatusChangeStatus2); + call2.NotifyStatusChange(notifyStatusChangeStatus2, callStatus); + + // Post Notifier for RMobileCall::NotifyMobileCallStatusChange for call2 + TExtEtelRequestStatus notifyMobileCallStatusChangeStatus2(call2, EMobileCallNotifyMobileCallStatusChange); + CleanupStack::PushL(notifyMobileCallStatusChangeStatus2); + call2.NotifyMobileCallStatusChange(notifyMobileCallStatusChangeStatus2, mobileCallStatus); + + // Dial a number that answers with call 2. + DEBUG_PRINTF1(_L("Board Now Dialling: ")); + call2.Dial(dialStatus, number); + ASSERT_EQUALS(WaitForRequestWithTimeOut(dialStatus, ETimeMedium), KErrNone, _L("RCall::Dial timed-out")); + ASSERT_EQUALS(dialStatus.Int(), KErrNone, _L("RCall::Dial returned with an error")); + + // Check RCall::NotifyStatusChange for call 2 completes with EStatusDialling -> EStatusConnecting -> EStatusConnected. + expectedCallStatus = RCall::EStatusDialling; + iCallControlTestHelper.WaitForCallNotifyStatusChange(call2, + notifyStatusChangeStatus2, + callStatus, + expectedCallStatus, + expectedStatus); + + call2.NotifyStatusChange(notifyStatusChangeStatus2, callStatus); + expectedCallStatus = RCall::EStatusConnecting; + iCallControlTestHelper.WaitForCallNotifyStatusChange(call2, + notifyStatusChangeStatus2, + callStatus, + expectedCallStatus, + expectedStatus); + + call2.NotifyStatusChange(notifyStatusChangeStatus2, callStatus); + expectedCallStatus = RCall::EStatusConnected; + iCallControlTestHelper.WaitForCallNotifyStatusChange(call2, + notifyStatusChangeStatus2, + callStatus, + expectedCallStatus, + expectedStatus); + + // Check RCall::GetStatus for call 2 returns EStatusConnected. + ASSERT_EQUALS(call2.GetStatus(callStatus), KErrNone, + _L("RCall::GetStatus returned an Error")); + ASSERT_EQUALS(callStatus, RCall::EStatusConnected, + _L("RCall::GetStatus did not return EStatusConnected")); + + // Check RMobileCall::NotifyMobileCallStatusChange for call 2 completes with EStatusDialling->EStatusConnecting->EStatusConnected + expectedMobileCallStatus = RMobileCall::EStatusDialling; + iCallControlTestHelper.WaitForMobileCallNotifyMobileCallStatusChange(call2, + notifyMobileCallStatusChangeStatus2, + mobileCallStatus, + expectedMobileCallStatus, + wantedStatus); + + call2.NotifyMobileCallStatusChange(notifyMobileCallStatusChangeStatus2, mobileCallStatus); + expectedMobileCallStatus = RMobileCall::EStatusConnecting; + iCallControlTestHelper.WaitForMobileCallNotifyMobileCallStatusChange(call2, + notifyMobileCallStatusChangeStatus2, + mobileCallStatus, + expectedMobileCallStatus, + wantedStatus); + + call2.NotifyMobileCallStatusChange(notifyMobileCallStatusChangeStatus2, mobileCallStatus); + expectedMobileCallStatus = RMobileCall::EStatusConnected; + iCallControlTestHelper.WaitForMobileCallNotifyMobileCallStatusChange(call2, + notifyMobileCallStatusChangeStatus2, + mobileCallStatus, + expectedMobileCallStatus, + wantedStatus); + + // Check RMobileCall::GetMobileCallStatus for call 2 returns EStatusConnected + ASSERT_EQUALS(call2.GetMobileCallStatus(mobileCallStatus), KErrNone, + _L("RMobileCall::GetMobileStatus returned an error.")); + ASSERT_EQUALS(mobileCallStatus, RMobileCall::EStatusConnected, + _L("RMobileCall::GetMobileStatus did not return a status EStatusConnected.")); + + // Check RMobileCall::GetMobileCallStatus for call 1 returns status of EStatusHold + ASSERT_EQUALS(call1.GetMobileCallStatus(mobileCallStatus), KErrNone, + _L("RMobileCall::GetMobileCallStatus returned an error")); + ASSERT_EQUALS(mobileCallStatus, RMobileCall::EStatusHold, + _L("RMobileCall::GetMobileCallStatus did not return EStatusHold")); + + + // Post Notifier for RMobileCall::NotifyMobileCallStatusChange + call1.NotifyMobileCallStatusChange(notifyMobileCallStatusChangeStatus, mobileCallStatus); + + // Hang up call 1. + ASSERT_EQUALS(call1.HangUp(), KErrNone, _L("RMobileCall::HangUp returned error.")); + + // Check RMobileCall::NotifyMobileCallStatusChange for call 1 completes with EStatusDisconnecting->EStatusIdle + expectedMobileCallStatus = RMobileCall::EStatusDisconnecting; + iCallControlTestHelper.WaitForMobileCallNotifyMobileCallStatusChange(call1, + notifyMobileCallStatusChangeStatus, + mobileCallStatus, + expectedMobileCallStatus, + wantedStatus); + + call1.NotifyMobileCallStatusChange(notifyMobileCallStatusChangeStatus, mobileCallStatus); + expectedMobileCallStatus = RMobileCall::EStatusIdle; + iCallControlTestHelper.WaitForMobileCallNotifyMobileCallStatusChange(call1, + notifyMobileCallStatusChangeStatus, + mobileCallStatus, + expectedMobileCallStatus, + wantedStatus); + + // Check RMobileCall::GetMobileCallStatus for call 1 returns EStatusIdle + ASSERT_EQUALS(call1.GetMobileCallStatus(mobileCallStatus), KErrNone, + _L("RMobileCall::GetMobileCallStatus returned an error")); + ASSERT_EQUALS(mobileCallStatus, RMobileCall::EStatusIdle, + _L("RMobileCall::GetMobileCallStatus did not return EStatusIdle")); + + // Check RMobileCall::GetMobileCallStatus for call 2 returns EStatusConnected + ASSERT_EQUALS(call2.GetMobileCallStatus(mobileCallStatus), KErrNone, + _L("RMobileCall::GetMobileCallStatus returned an error")); + ASSERT_EQUALS(mobileCallStatus, RMobileCall::EStatusConnected, + _L("RMobileCall::GetMobileCallStatus did not return EStatusConnected")); + + + // Post Notifier for RMobileCall::NotifyMobileCallStatusChange for call2 + call2.NotifyMobileCallStatusChange(notifyMobileCallStatusChangeStatus2, mobileCallStatus); + + // Hang up call 2. + ASSERT_EQUALS(call2.HangUp(), KErrNone, _L("RMobileCall::HangUp returned error.")); + + // Check RMobileCall::NotifyMobileCallStatusChange for call 2 completes with EStatusDisconnecting->EStatusIdle + expectedMobileCallStatus = RMobileCall::EStatusDisconnecting; + iCallControlTestHelper.WaitForMobileCallNotifyMobileCallStatusChange(call2, + notifyMobileCallStatusChangeStatus2, + mobileCallStatus, + expectedMobileCallStatus, + wantedStatus); + + call2.NotifyMobileCallStatusChange(notifyMobileCallStatusChangeStatus2, mobileCallStatus); + expectedMobileCallStatus = RMobileCall::EStatusIdle; + iCallControlTestHelper.WaitForMobileCallNotifyMobileCallStatusChange(call2, + notifyMobileCallStatusChangeStatus2, + mobileCallStatus, + expectedMobileCallStatus, + wantedStatus); + + // Check RMobileCall::GetMobileCallStatus for call 2 returns EStatusIdle + ASSERT_EQUALS(call2.GetMobileCallStatus(mobileCallStatus), KErrNone, + _L("RMobileCall::GetMobileStatus returned an error.")); + ASSERT_EQUALS(mobileCallStatus, RMobileCall::EStatusIdle, + _L("RMobileCall::GetMobileStatus did not return a status EStatusIdle.")); + + //////////////////////////////////////////////////////////////// + // TEST END + //////////////////////////////////////////////////////////////// + + StartCleanup(); + + CleanupStack::PopAndDestroy(7); + // notifyMobileCallStatusChangeStatus2 + // notifyStatusChangeStatus2 + // holdStatus + // notifyCallEventStatus + // dialStatus + // notifyMobileCallStatusChangeStatus + // notifyStatusChangeStatus + + return TestStepResult(); + } + +TPtrC CCTSYIntegrationTestCallControl0023::GetTestStepName() +/** + * @return The test step name. + */ + { + return _L("CCTSYIntegrationTestCallControl0023"); + } + + + +CCTSYIntegrationTestCallControl0024::CCTSYIntegrationTestCallControl0024(CEtelSessionMgr& aEtelSessionMgr) + : CCTSYIntegrationTestCallControlBase(aEtelSessionMgr) +/** + * Constructor. + */ + { + SetTestStepName(CCTSYIntegrationTestCallControl0024::GetTestStepName()); + } + +CCTSYIntegrationTestCallControl0024::~CCTSYIntegrationTestCallControl0024() +/** + * Destructor. + */ + { + } + +TVerdict CCTSYIntegrationTestCallControl0024::doTestStepL() +/** + * @SYMTestCaseID BA-CTSY-INT-CCON-0024 + * @SYMFssID BA/CTSY/CCON-0024 + * @SYMTestCaseDesc Hold a call then resume it. + * @SYMTestPriority High + * @SYMTestActions RMobileCall::NotifyMobileCallCapsChange, RMobileCall::NotifyCallEvent, RMobileCall::NotifyRemotePartyInfoChange, RCall::Dial, RMobileCall::GetMobileCallCaps, RMobileCall::Hold, RMobileCall::Resume, RMobileCall::GetMobileCallStatus, RMobilePhone::NotifyStopInDTMFString, RMobilePhone::NotifyDTMFCapsChange + * @SYMTestExpectedResults Pass - Call held and resumed. Call event, caps and status correct. + * @SYMTestType CIT + * @SYMTestCaseDependencies live/automatic + * + * Reason for test: Verify call status, call event, call caps, remote party info and DTMF caps correct. + * + * @return - TVerdict code + */ + { + + //////////////////////////////////////////////////////////////// + // SET UP + //////////////////////////////////////////////////////////////// + + // Check phone supports KCapsVoice + + // Get phone + RMobilePhone& mobilePhone = iEtelSessionMgr.GetPhoneL(KMainServer, KMainPhone); + + // Get Voice line 1 + RMobileLine& voiceLine = iEtelSessionMgr.GetLineL(KMainServer, KMainPhone, KVoiceLine); + // Get call 1 + RMobileCall& call1 = iEtelSessionMgr.GetCallL(KMainServer, KMainPhone, KVoiceLine, KCall1); + + RLine::TCaps lineCaps; + CHECK_EQUALS_L(voiceLine.GetCaps(lineCaps), KErrNone, + _L("RMobileLine::GetCaps returned an error.")); + CHECK_BITS_SET_L(lineCaps.iFlags, RLine::KCapsVoice, KNoUnwantedBits, + _L("RLine::GetCaps did not return KCapsVoice.")); + + // Call TNetworkTsyTestHelper::WaitForRegisteredOnHomeNetworkL + RMobilePhone& phone = iEtelSessionMgr.GetPhoneL(KMainServer,KMainPhone); + CHECK_EQUALS_L(iNetworkTestHelper.WaitForRegisteredOnHomeNetworkL(phone), KErrNone, + _L("TNetworkTsyTestHelper::WaitForRegisteredOnHomeNetworkL returned with an error")); + + //////////////////////////////////////////////////////////////// + // SET UP END + //////////////////////////////////////////////////////////////// + + StartTest(); + + //////////////////////////////////////////////////////////////// + // TEST START + //////////////////////////////////////////////////////////////// + + // Post Notifier for RCall::NotifyCapsChange + TCoreEtelRequestStatus notifyCapsChangeStatus(call1, &RCall::NotifyCapsChangeCancel); + CleanupStack::PushL(notifyCapsChangeStatus); + RCall::TCaps caps; + call1.NotifyCapsChange(notifyCapsChangeStatus, caps); + + // post a notifier for RMobileCall::NotifyMobileCallCapsChange + TExtEtelRequestStatus notifyMobileCallCapsChangeStatus(call1, EMobileCallNotifyMobileCallCapsChange); + CleanupStack::PushL(notifyMobileCallCapsChangeStatus); + RMobileCall::TMobileCallCapsV1 mobileCallCaps; + RMobileCall::TMobileCallCapsV1Pckg mobileCallCapsPckg(mobileCallCaps); + call1.NotifyMobileCallCapsChange(notifyMobileCallCapsChangeStatus, mobileCallCapsPckg); + + // Post notifier for RCall::NotifyStatusChange + TCoreEtelRequestStatus notifyCallStatusChangeStatus (call1, &RCall::NotifyStatusChangeCancel); + CleanupStack::PushL(notifyCallStatusChangeStatus); + RCall::TStatus callStatus; + call1.NotifyStatusChange(notifyCallStatusChangeStatus, callStatus); + + // post a notifier for RMobileCall::NotifyMobileCallStatusChange + TExtEtelRequestStatus notifyMobileCallChangeStatus(call1, EMobileCallNotifyMobileCallStatusChange); + CleanupStack::PushL(notifyMobileCallChangeStatus); + RMobileCall::TMobileCallStatus mobileCallStatus; + call1.NotifyMobileCallStatusChange(notifyMobileCallChangeStatus, mobileCallStatus); + + // Post a notifier for RMobileCall::NotifyRemotePartyInfoChange + TExtEtelRequestStatus notifyRemotePartyInfoChangeStatus(call1, EMobileCallNotifyRemotePartyInfoChange); + CleanupStack::PushL(notifyRemotePartyInfoChangeStatus); + RMobileCall::TMobileCallRemotePartyInfoV1 rpInfo; + + RMobileCall::TMobileCallRemotePartyInfoV1Pckg rpInfoPckg(rpInfo); + call1.NotifyRemotePartyInfoChange(notifyRemotePartyInfoChangeStatus, rpInfoPckg); + + // Dial a number that answers + TPtrC number; + ASSERT_TRUE(GetStringFromConfig(KIniVoiceNumSection, KIniVoiceNumber1, number) != EFalse, + _L("GetStringFromConfig did not complete as expected")); + DEBUG_PRINTF1(_L("Board Now Dialling: ")); + TCoreEtelRequestStatus dialStatus(call1, &RCall::DialCancel); + CleanupStack::PushL(dialStatus); + call1.Dial(dialStatus, number); + ASSERT_EQUALS(WaitForRequestWithTimeOut(dialStatus, ETimeMedium), KErrNone, _L("RCall::Dial timed-out")); + ASSERT_EQUALS(dialStatus.Int(), KErrNone, _L("RCall::Dial returned with an error")); + + // === Check call caps === + + // Check RCall::NotifyCapsChange completes with caps in set of KCapsVoice | KCapsHangUp. + RCall::TCaps wantedCaps, unwantedCaps; + wantedCaps.iFlags = RCall::KCapsVoice | RCall::KCapsHangUp; + unwantedCaps.iFlags = 0; + const TInt wantedStatus = KErrNone; + iCallControlTestHelper.WaitForCallNotifyCapsChange(call1, + notifyCapsChangeStatus, + caps, + wantedCaps, + unwantedCaps, + wantedStatus); + + // Check RCall::GetCaps supports KCapsHangUp | KCapsVoice. + ASSERT_EQUALS(call1.GetCaps(caps), KErrNone, + _L("RCall::GetCaps returned an Error")); + ASSERT_BITS_SET(caps.iFlags, RCall::KCapsHangUp | RCall::KCapsVoice, KNoUnwantedBits, + _L("RCall::GetCaps returned wrong caps")); + + // Check RMobileCall::NotifyMobileCallCapsChange completes with iCallControlCaps in set of KCapsVoice | KCapsHold | KCapsHangUp + // Check RMobileCall::NotifyMobileCallCapsChange completes with iCallEventCaps in set of KCapsLocalHold | KCapsRemoteHold | KCapsRemoteTerminate | KCapsRemoteConferenceCreate. + RMobileCall::TMobileCallCapsV1 wantedMobileCaps; + wantedMobileCaps.iCallControlCaps = RMobileCall::KCapsVoice | RMobileCall::KCapsHold | RMobileCall::KCapsHangUp; + wantedMobileCaps.iCallEventCaps = RMobileCall::KCapsLocalHold | RMobileCall::KCapsRemoteHold | RMobileCall::KCapsRemoteTerminate | RMobileCall::KCapsRemoteConferenceCreate; + + TCmpRMobileCallTMobileCallCaps mobileCapsComp(wantedMobileCaps, mobileCallCaps, *this); + iCallControlTestHelper.WaitForMobileCallNotifyMobileCallCapsChange(call1, + notifyMobileCallCapsChangeStatus, + mobileCapsComp, + wantedStatus); + + // Check RMobileCall::GetMobileCallCaps includes iCallControlCaps in set of KCapsVoice | KCapsHold | KCapsHangUp. + // Check RMobileCall::GetMobileCallCaps includes iCallEventCaps in set of KCapsLocalHold | KCapsRemoteHold | KCapsRemoteTerminate | KCapsRemoteConferenceCreate. + ASSERT_EQUALS(call1.GetMobileCallCaps(mobileCallCapsPckg), KErrNone, + _L("RMobileCall::GetMobileCallCaps returned an error")); + wantedMobileCaps.iCallControlCaps = RMobileCall::KCapsVoice | + RMobileCall::KCapsHold | + RMobileCall::KCapsHangUp; + + ASSERT_BITS_SET(mobileCallCaps.iCallControlCaps, wantedMobileCaps.iCallControlCaps, KNoUnwantedBits, + _L("RMobileCall::GetMobileCallCaps returned unexpected iCallControlCaps")); + + wantedMobileCaps.iCallEventCaps = RMobileCall::KCapsLocalHold | + RMobileCall::KCapsRemoteHold | + RMobileCall::KCapsRemoteTerminate | + RMobileCall::KCapsRemoteConferenceCreate; + + ASSERT_BITS_SET(mobileCallCaps.iCallEventCaps, wantedMobileCaps.iCallEventCaps, KNoUnwantedBits, + _L("RMobileCall::GetMobileCallCaps returned unexpected iCallEventCaps")); + + // === Check call status === + + // Check RCall::NotifyStatusChange completes with EStatusDialling -> EStatusConnecting -> EStatusConnected. + RCall::TStatus expectedCallStatus = RCall::EStatusDialling; + iCallControlTestHelper.WaitForCallNotifyStatusChange(call1, + notifyCallStatusChangeStatus, + callStatus, + expectedCallStatus, + wantedStatus); + + call1.NotifyStatusChange(notifyCallStatusChangeStatus, callStatus); + expectedCallStatus = RCall::EStatusConnecting; + iCallControlTestHelper.WaitForCallNotifyStatusChange(call1, + notifyCallStatusChangeStatus, + callStatus, + expectedCallStatus, + wantedStatus); + + call1.NotifyStatusChange(notifyCallStatusChangeStatus, callStatus); + expectedCallStatus = RCall::EStatusConnected; + iCallControlTestHelper.WaitForCallNotifyStatusChange(call1, + notifyCallStatusChangeStatus, + callStatus, + expectedCallStatus, + wantedStatus); + + // Check RCall::GetStatus returns EStatusConnected. + ASSERT_EQUALS(call1.GetStatus(callStatus), KErrNone, + _L("RCall::GetStatus returned an error")); + ASSERT_EQUALS(callStatus, RCall::EStatusConnected, + _L("RCall::GetStatus returned an unexpected call status")); + + // Check RMobileCall::NotifyMobileCallStatusChange completes with EStatusDialling -> EStatusConnecting -> EStatusConnected. + RMobileCall::TMobileCallStatus expectedMobileCallStatus = RMobileCall::EStatusDialling; + iCallControlTestHelper.WaitForMobileCallNotifyMobileCallStatusChange(call1, + notifyMobileCallChangeStatus, + mobileCallStatus, + expectedMobileCallStatus, + wantedStatus); + + call1.NotifyMobileCallStatusChange(notifyMobileCallChangeStatus, mobileCallStatus); + expectedMobileCallStatus = RMobileCall::EStatusConnecting; + iCallControlTestHelper.WaitForMobileCallNotifyMobileCallStatusChange(call1, + notifyMobileCallChangeStatus, + mobileCallStatus, + expectedMobileCallStatus, + wantedStatus); + + call1.NotifyMobileCallStatusChange(notifyMobileCallChangeStatus, mobileCallStatus); + expectedMobileCallStatus = RMobileCall::EStatusConnected; + iCallControlTestHelper.WaitForMobileCallNotifyMobileCallStatusChange(call1, + notifyMobileCallChangeStatus, + mobileCallStatus, + expectedMobileCallStatus, + wantedStatus); + + // Check RMobileCall::GetMobileCallStatus returns status of EStatusConnected. + ASSERT_EQUALS(call1.GetMobileCallStatus(mobileCallStatus), KErrNone, + _L("RMobileCall::GetMobileStatus returned an error")); + ASSERT_EQUALS(mobileCallStatus, RMobileCall::EStatusConnected, + _L("RMobileCall::GetMobileStatus did not return a status EStatusConnected")); + + // === Check remote party info === + + // Check RMobileCall::NotifyRemotePartyInfoChange completes with direction of EMobileOriginated + RMobileCall::TMobileCallRemotePartyInfoV1 wanted; + wanted.iDirection = RMobileCall::EMobileOriginated; + TCmpRMobileCallTMobileCallRemotePartyInfo rpInfoComp(wanted, rpInfo, *this); + iCallControlTestHelper.WaitForMobileCallNotifyRemotePartyInfoChange( + call1, + notifyRemotePartyInfoChangeStatus, + rpInfoComp, + wantedStatus); + + // post a notifier for RMobileCall::NotifyMobileCallCapsChange + call1.NotifyMobileCallCapsChange(notifyMobileCallCapsChangeStatus, mobileCallCapsPckg); + + // Post a notifier for RMobileCall::NotifyMobileCallStatusChange + call1.NotifyMobileCallStatusChange(notifyMobileCallChangeStatus, mobileCallStatus); + + // Post notifier for RMobileCall::NotifyCallEvent + TExtEtelRequestStatus notifyCallEventStatus(call1, EMobileCallNotifyCallEvent); + CleanupStack::PushL(notifyCallEventStatus); + RMobileCall::TMobileCallEvent event; + call1.NotifyCallEvent(notifyCallEventStatus, event); + + // Post notification RMobilePhone::NotifyDTMFCapsChange + TExtEtelRequestStatus notifyDTMFCapsChangeStatus(mobilePhone, EMobilePhoneNotifyDTMFCapsChange); + CleanupStack::PushL(notifyDTMFCapsChangeStatus); + TUint32 dTMFcaps; + mobilePhone.NotifyDTMFCapsChange(notifyDTMFCapsChangeStatus, dTMFcaps); + + // Hold the call + TExtEtelRequestStatus holdStatus(call1, EMobileCallHold); + CleanupStack::PushL(holdStatus); + call1.Hold(holdStatus); + ASSERT_EQUALS(WaitForRequestWithTimeOut(holdStatus, ETimeMedium), KErrNone, + _L("RMobileCall::Hold timed-out")); + ASSERT_EQUALS(holdStatus.Int(), KErrNone, + _L("RMobileCall::Hold did not set status to KErrNone")); + + // === Check call caps === + + // Check RMobileCall::NotifyMobileCallCapsChange completes with iCallControlCaps in set of KCapsVoice | KCapsResume | KCapsHangUp + // Check RMobileCall::NotifyMobileCallCapsChange completes with iCallControlCaps NOT in set of KCapsOneToOne | KCapsHold + // Check RMobileCall::NotifyMobileCallCapsChange completes with iCallEventCaps in set of KCapsLocalResume | KCapsRemoteHold | KCapsRemoteTerminate | KCapsRemoteConferenceCreate. + TUint32 wantedMobCallControlCaps = RMobileCall::KCapsVoice | RMobileCall::KCapsResume | RMobileCall::KCapsHangUp; + TUint32 unWantedMobCallControlCaps = RMobileCall::KCapsOneToOne | RMobileCall::KCapsHold; + TUint32 wantedMobCallEventCaps = RMobileCall::KCapsLocalResume | RMobileCall::KCapsRemoteHold | RMobileCall::KCapsRemoteTerminate | RMobileCall::KCapsRemoteConferenceCreate; + ASSERT_EQUALS(WaitForRequestWithTimeOut(notifyMobileCallCapsChangeStatus, ETimeShort), KErrNone, + _L("RMobileCall::NotifyMobileCallCapsChange timed out.")); + ASSERT_EQUALS(notifyMobileCallCapsChangeStatus.Int(), KErrNone, + _L("RMobileCall::NotifyMobileCallCapsChange returned with error status.")); + ASSERT_BITS_SET(mobileCallCaps.iCallControlCaps, wantedMobCallControlCaps, unWantedMobCallControlCaps, + _L("RMobileCall::NotifyMobileCallCapsChange returned wrong control caps.")); + ASSERT_BITS_SET(mobileCallCaps.iCallEventCaps, wantedMobCallEventCaps, KNoUnwantedBits, + _L("RMobileCall::NotifyMobileCallCapsChange returned wrong event caps.")); + + // Check RMobileCall::GetMobileCallCaps includes iCallControlCaps in set of KCapsVoice | KCapsResume | KCapsHangUp + // Check RMobileCall::GetMobileCallCaps includes iCallControlCaps NOT in set of KCapsOneToOne | KCapsHold + // Check RMobileCall::GetMobileCallCaps includes iCallEventCaps in set of KCapsLocalResume | KCapsRemoteHold | KCapsRemoteTerminate | KCapsRemoteConferenceCreate. + ASSERT_EQUALS(call1.GetMobileCallCaps(mobileCallCapsPckg), KErrNone, + _L("RMobileCall::GetMobileCallCaps returned an error")); + + wantedMobileCaps.iCallControlCaps = RMobileCall::KCapsVoice | + RMobileCall::KCapsResume | + RMobileCall::KCapsHangUp; + RMobileCall::TMobileCallCapsV1 unWantedMobileCaps; + unWantedMobileCaps.iCallControlCaps = RMobileCall::KCapsOneToOne | + RMobileCall::KCapsHold; + ASSERT_BITS_SET(mobileCallCaps.iCallControlCaps, wantedMobileCaps.iCallControlCaps, unWantedMobileCaps.iCallControlCaps, + _L("RMobileCall::GetMobileCallCaps returned unexpected iCallControlCaps")); + + wantedMobileCaps.iCallEventCaps = RMobileCall::KCapsLocalResume | + RMobileCall::KCapsRemoteHold | + RMobileCall::KCapsRemoteTerminate | + RMobileCall::KCapsRemoteConferenceCreate; + + ASSERT_BITS_SET(mobileCallCaps.iCallEventCaps, wantedMobileCaps.iCallEventCaps, KNoUnwantedBits, + _L("RMobileCall::GetMobileCallCaps returned unexpected iCallEventCaps")); + + + // === Check call status === + + // Check RMobileCall::NotifyMobileCallStatusChange completes with EStatusHold + expectedMobileCallStatus = RMobileCall::EStatusHold; + iCallControlTestHelper.WaitForMobileCallNotifyMobileCallStatusChange(call1, + notifyMobileCallChangeStatus, + mobileCallStatus, + expectedMobileCallStatus, + wantedStatus); + + // Check RMobileCall::GetMobileCallStatus returns status of EStatusHold + ASSERT_EQUALS(call1.GetMobileCallStatus(mobileCallStatus), KErrNone, + _L("RMobileCall::GetMobileStatus returned an error")); + ASSERT_EQUALS(mobileCallStatus, RMobileCall::EStatusHold, + _L("RMobileCall::GetMobileStatus did not return a status EStatusHold")); + + // === Check call event completes === + + // Check RMobileCall::NotifyCallEvent completes with ELocalHold + iCallControlTestHelper.WaitForMobileCallNotifyCallEvent( + call1, + notifyCallEventStatus, + event, + RMobileCall::ELocalHold, + wantedStatus); + + // === Check DTMF caps === + + // Check RMobilePhone::NotifyDTMFCapsChange completes with of 0 + iCallControlTestHelper.WaitForMobilePhoneNotifyDTMFCapsChange( + mobilePhone, + notifyDTMFCapsChangeStatus, + dTMFcaps, + KNoWantedBits, + KNoUnwantedBits, + wantedStatus); + + // Check RMobilePhone::GetDTMFCaps returns 0 + TUint32 dtmfCaps2; + ASSERT_EQUALS(mobilePhone.GetDTMFCaps(dtmfCaps2), KErrNone, _L("RMobilePhone::GetDTMFCaps returned with an error")); + ASSERT_BITS_SET(dtmfCaps2, KNoWantedBits, KNoUnwantedBits, _L("RMobilePhone::GetDTMFCaps returned wrong dynamic caps")); + + // post a notifier for RMobileCall::NotifyMobileCallCapsChange + call1.NotifyMobileCallCapsChange(notifyMobileCallCapsChangeStatus, mobileCallCapsPckg); + + // Post a notifier for RMobileCall::NotifyMobileCallStatusChange + call1.NotifyMobileCallStatusChange(notifyMobileCallChangeStatus, mobileCallStatus); + + // Post notifier for RMobileCall::NotifyCallEvent + call1.NotifyCallEvent(notifyCallEventStatus, event); + + // Post notification RMobilePhone::NotifyDTMFCapsChange + mobilePhone.NotifyDTMFCapsChange(notifyDTMFCapsChangeStatus, dTMFcaps); + + // Post notifier for RCall::NotifyStatusChange + call1.NotifyStatusChange(notifyCallStatusChangeStatus, callStatus); + + // Resume the call + TExtEtelRequestStatus resumeStatus(call1, EMobileCallResume); + CleanupStack::PushL(resumeStatus); + call1.Resume(resumeStatus); + ASSERT_EQUALS(WaitForRequestWithTimeOut(resumeStatus, ETimeMedium), KErrNone, + _L("RMobileCall::Resume timed-out")); + ASSERT_EQUALS(resumeStatus.Int(), KErrNone, + _L("RMobileCall::Resume did not set status to KErrNone")); + + // === Check call caps === + + // Check RMobileCall::NotifyMobileCallCapsChange completes with iCallControlCaps in set of KCapsVoice | KCapsHold | KCapsHangUp + // Check RMobileCall::NotifyMobileCallCapsChange completes with iCallEventCaps in set of KCapsLocalHold | KCapsRemoteHold | KCapsRemoteTerminate | KCapsRemoteConferenceCreate. + wantedMobCallControlCaps = RMobileCall::KCapsVoice | + RMobileCall::KCapsHold | + RMobileCall::KCapsHangUp; + wantedMobCallEventCaps = RMobileCall::KCapsLocalHold | + RMobileCall::KCapsRemoteHold | + RMobileCall::KCapsRemoteTerminate | + RMobileCall::KCapsRemoteConferenceCreate; + ASSERT_EQUALS(WaitForRequestWithTimeOut(notifyMobileCallCapsChangeStatus, ETimeShort), KErrNone, + _L("RMobileCall::NotifyMobileCallCapsChange timed out.")); + ASSERT_EQUALS(notifyMobileCallCapsChangeStatus.Int(), KErrNone, + _L("RMobileCall::NotifyMobileCallCapsChange returned with error status.")); + ASSERT_BITS_SET(mobileCallCaps.iCallControlCaps, wantedMobCallControlCaps, KNoUnwantedBits, + _L("RMobileCall::NotifyMobileCallCapsChange returned wrong control caps.")); + ASSERT_BITS_SET(mobileCallCaps.iCallEventCaps, wantedMobCallEventCaps, KNoUnwantedBits, + _L("RMobileCall::NotifyMobileCallCapsChange returned wrong event caps.")); + + // Check RMobileCall::GetMobileCallCaps includes iCallControlCaps in set of KCapsVoice | KCapsHold | KCapsHangUp. + // Check RMobileCall::GetMobileCallCaps includes iCallEventCaps in set of KCapsLocalHold | KCapsRemoteHold | KCapsRemoteTerminate | KCapsRemoteConferenceCreate. + ASSERT_EQUALS(call1.GetMobileCallCaps(mobileCallCapsPckg), KErrNone, + _L("RMobileCall::GetMobileCallCaps returned an error")); + wantedMobileCaps.iCallControlCaps = RMobileCall::KCapsVoice | + RMobileCall::KCapsHold | + RMobileCall::KCapsHangUp; + ASSERT_BITS_SET(mobileCallCaps.iCallControlCaps, wantedMobileCaps.iCallControlCaps, KNoUnwantedBits, + _L("RMobileCall::GetMobileCallCaps returned unexpected iCallControlCaps")); + + wantedMobileCaps.iCallEventCaps = RMobileCall::KCapsLocalHold | + RMobileCall::KCapsRemoteHold | + RMobileCall::KCapsRemoteTerminate | + RMobileCall::KCapsRemoteConferenceCreate; + ASSERT_BITS_SET(mobileCallCaps.iCallEventCaps, wantedMobileCaps.iCallEventCaps, KNoUnwantedBits, + _L("RMobileCall::GetMobileCallCaps returned unexpected iCallEventCaps")); + + // === Check call status === + + // Check RCall::NotifyStatusChange completes with EStatusConnected. + expectedCallStatus = RCall::EStatusConnected; + iCallControlTestHelper.WaitForCallNotifyStatusChange(call1, + notifyCallStatusChangeStatus, + callStatus, + expectedCallStatus, + wantedStatus); + + // Check RCall::GetStatus returns EStatusConnected. + ASSERT_EQUALS(call1.GetStatus(callStatus), KErrNone, + _L("RCall::GetStatus returned an error")); + ASSERT_EQUALS(callStatus, RCall::EStatusConnected, + _L("RCall::GetStatus returned an unexpected call status")); + + // Check RMobileCall::NotifyMobileCallStatusChange completes with EStatusConnected. + iCallControlTestHelper.WaitForMobileCallNotifyMobileCallStatusChange(call1, + notifyMobileCallChangeStatus, + mobileCallStatus, + RMobileCall::EStatusConnected, + wantedStatus); + + // Check RMobileCall::GetMobileCallStatus returns status of EStatusConnected. + ASSERT_EQUALS(call1.GetMobileCallStatus(mobileCallStatus), KErrNone, + _L("RMobileCall::GetMobileStatus returned an error")); + ASSERT_EQUALS(mobileCallStatus, RMobileCall::EStatusConnected, + _L("RMobileCall::GetMobileStatus did not return a status EStatusConnected")); + + // === Check call event completes === + + // Check RMobileCall::NotifyCallEvent completes with ELocalResume + iCallControlTestHelper.WaitForMobileCallNotifyCallEvent( + call1, + notifyCallEventStatus, + event, + RMobileCall::ELocalResume, + wantedStatus); + + // === Check DTMF caps === + + // Check RMobilePhone::NotifyDTMFCapsChange completes with caps in set of KCapsSendDTMFString | KCapsSendDTMFSingleTone + TUint32 wantedDtmfCaps = RMobilePhone::KCapsSendDTMFString | RMobilePhone::KCapsSendDTMFSingleTone; + iCallControlTestHelper.WaitForMobilePhoneNotifyDTMFCapsChange( + mobilePhone, + notifyDTMFCapsChangeStatus, + dTMFcaps, + wantedDtmfCaps, + KNoUnwantedBits, + wantedStatus); + + // Check RMobilePhone::GetDTMFCaps returns KCapsSendDTMFString | KCapsSendDTMFSingleTone + ASSERT_EQUALS(mobilePhone.GetDTMFCaps(dtmfCaps2), KErrNone, _L("RMobilePhone::GetDTMFCaps returned with an error")); + ASSERT_BITS_SET(dtmfCaps2, wantedDtmfCaps, KNoUnwantedBits, _L("RMobilePhone::GetDTMFCaps returned wrong dynamic caps")); + + + // Post Notifier for RCall::NotifyCapsChange + call1.NotifyCapsChange(notifyCapsChangeStatus, caps); + + // post a notifier for RMobileCall::NotifyMobileCallCapsChange + call1.NotifyMobileCallCapsChange(notifyMobileCallCapsChangeStatus, mobileCallCapsPckg); + + // Post notifier for RCall::NotifyStatusChange + call1.NotifyStatusChange(notifyCallStatusChangeStatus, callStatus); + + // Post a notifier for RMobileCall::NotifyMobileCallStatusChange + call1.NotifyMobileCallStatusChange(notifyMobileCallChangeStatus, mobileCallStatus); + + // Post notification RMobilePhone::NotifyDTMFCapsChange + mobilePhone.NotifyDTMFCapsChange(notifyDTMFCapsChangeStatus, dTMFcaps); + + // Hang up call + ASSERT_EQUALS(call1.HangUp(), KErrNone, _L("RMobileCall::HangUp returned error.")); + + // === Check call caps === + + // Check RCall::NotifyCapsChange completes with caps in set of KCapsVoice | KCapsDial. + wantedCaps.iFlags = RCall::KCapsVoice | RCall::KCapsDial; + unwantedCaps.iFlags = 0; + iCallControlTestHelper.WaitForCallNotifyCapsChange(call1, + notifyCapsChangeStatus, + caps, + wantedCaps, + unwantedCaps, + wantedStatus); + + // Check RCall::GetCaps supports KCapsVoice | KCapsDial. + ASSERT_EQUALS(call1.GetCaps(caps), KErrNone, + _L("RCall::GetCaps returned an Error")); + ASSERT_BITS_SET(caps.iFlags, RCall::KCapsVoice | RCall::KCapsDial, KNoUnwantedBits, + _L("RCall::GetCaps returned wrong caps")); + + // Check RMobileCall::NotifyMobileCallCapsChange completes with iCallControlCaps in set of KCapsVoice | KCapsDial. + wantedMobileCaps.iCallControlCaps = RMobileCall::KCapsVoice | RMobileCall::KCapsDial; + wantedMobileCaps.iCallEventCaps = 0; + TCmpRMobileCallTMobileCallCaps mobileCapsComp2(wantedMobileCaps, mobileCallCaps, *this); + iCallControlTestHelper.WaitForMobileCallNotifyMobileCallCapsChange(call1, + notifyMobileCallCapsChangeStatus, + mobileCapsComp2, + KErrNone); + + // Check RMobileCall::GetMobileCallCaps includes iCallControlCaps in set of KCapsVoice | KCapsDial. + ASSERT_EQUALS(call1.GetMobileCallCaps(mobileCallCapsPckg), KErrNone, + _L("RMobileCall::GetMobileCallCaps returned an error")); + wantedMobileCaps.iCallControlCaps = RMobileCall::KCapsVoice | RMobileCall::KCapsDial; + ASSERT_BITS_SET(mobileCallCaps.iCallControlCaps, wantedMobileCaps.iCallControlCaps, KNoUnwantedBits, + _L("RMobileCall::GetMobileCallCaps returned unexpected iCallControlCaps")); + + // === Check call status === + + // Check RCall::NotifyStatusChange completes with EStatusHangingUp -> EStatusIdle. + expectedCallStatus = RCall::EStatusHangingUp; + iCallControlTestHelper.WaitForCallNotifyStatusChange(call1, + notifyCallStatusChangeStatus, + callStatus, + expectedCallStatus, + wantedStatus); + + call1.NotifyStatusChange(notifyCallStatusChangeStatus, callStatus); + expectedCallStatus = RCall::EStatusIdle; + iCallControlTestHelper.WaitForCallNotifyStatusChange(call1, + notifyCallStatusChangeStatus, + callStatus, + expectedCallStatus, + wantedStatus); + + // Check RCall::GetStatus returns EStatusIdle. + ASSERT_EQUALS(call1.GetStatus(callStatus), KErrNone, + _L("RCall::GetStatus returned an error")); + ASSERT_EQUALS(callStatus, RCall::EStatusIdle, + _L("RCall::GetStatus returned an unexpected call status")); + + // Check RMobileCall::NotifyMobileCallStatusChange completes with EStatusDisconnecting -> EStatusIdle. + iCallControlTestHelper.WaitForMobileCallNotifyMobileCallStatusChange(call1, + notifyMobileCallChangeStatus, + mobileCallStatus, + RMobileCall::EStatusDisconnecting, + wantedStatus); + + call1.NotifyMobileCallStatusChange(notifyMobileCallChangeStatus, mobileCallStatus); + iCallControlTestHelper.WaitForMobileCallNotifyMobileCallStatusChange(call1, + notifyMobileCallChangeStatus, + mobileCallStatus, + RMobileCall::EStatusIdle, + wantedStatus); + + // Check RMobileCall::GetMobileCallStatus returns status of EStatusIdle. + ASSERT_EQUALS(call1.GetMobileCallStatus(mobileCallStatus), KErrNone, + _L("RMobileCall::GetMobileStatus returned an error")); + ASSERT_EQUALS(mobileCallStatus, RMobileCall::EStatusIdle, + _L("RMobileCall::GetMobileStatus did not return a status EStatusIdle")); + + // === Check DTMF caps === + + // Check RMobilePhone::NotifyDTMFCapsChange completes with caps equal to 0 + iCallControlTestHelper.WaitForMobilePhoneNotifyDTMFCapsChange( + mobilePhone, + notifyDTMFCapsChangeStatus, + dTMFcaps, + KNoWantedBits, + KNoUnwantedBits, + wantedStatus); + + // Check RMobilePhone::GetDTMFCaps returns caps of 0 + ASSERT_EQUALS(mobilePhone.GetDTMFCaps(dtmfCaps2), KErrNone, _L("RMobilePhone::GetDTMFCaps returned with an error")); + ASSERT_BITS_SET(dtmfCaps2, KNoWantedBits, KNoUnwantedBits, _L("RMobilePhone::GetDTMFCaps returned wrong dynamic caps")); + + //////////////////////////////////////////////////////////////// + // TEST END + //////////////////////////////////////////////////////////////// + + StartCleanup(); + + CleanupStack::PopAndDestroy(10); + // resumeStatus + // holdStatus + // notifyDTMFCapsChangeStatus + // notifyCallEventStatus + // dialStatus + // notifyRemotePartyInfoChangeStatus + // notifyMobileCallChangeStatus + // notifyCallStatusChangeStatus + // notifyMobileCallCapsChangeStatus + // notifyCapsChangeStatus + + return TestStepResult(); + } + +TPtrC CCTSYIntegrationTestCallControl0024::GetTestStepName() +/** + * @return The test step name. + */ + { + return _L("CCTSYIntegrationTestCallControl0024"); + } + + + +CCTSYIntegrationTestCallControl0025::CCTSYIntegrationTestCallControl0025(CEtelSessionMgr& aEtelSessionMgr) + : CCTSYIntegrationTestCallControlBase(aEtelSessionMgr) +/** + * Constructor. + */ + { + SetTestStepName(CCTSYIntegrationTestCallControl0025::GetTestStepName()); + } + +CCTSYIntegrationTestCallControl0025::~CCTSYIntegrationTestCallControl0025() +/** + * Destructor. + */ + { + } + +TVerdict CCTSYIntegrationTestCallControl0025::doTestStepL() +/** + * @SYMTestCaseID BA-CTSY-INT-CCON-0025 + * @SYMFssID BA/CTSY/CCON-0025 + * @SYMTestCaseDesc Swap between an active call and a held call + * @SYMTestPriority High + * @SYMTestActions RMobileCall::NotifyMobileCallCapsChange, RMobileCall::GetMobileCallStatus, RMobileCall::NotifyCallEvent, RCall::NotifyStatusChange, RMobileCall::NotifyMobileCallStatusChange, RCall::NotifyCapsChange, RMobileCall::NotifyRemotePartyInfoChange, RCall::GetStatus,RMobileCall::GetMobileCallCaps, RCall::Dial, RCall::HangUp, RCall::GetCallDuration, RMobileCall::Swap + * @SYMTestExpectedResults Pass - Active call goes on hold and held call becomes active. + * @SYMTestType CIT + * @SYMTestCaseDependencies live/automatic + * + * Reason for test: Verify call status, call event, call caps, remote party info , call duration and DTMF caps correct. + * + * @return - TVerdict code + */ + { + + //////////////////////////////////////////////////////////////// + // SET UP + //////////////////////////////////////////////////////////////// + + RMobilePhone& phone = iEtelSessionMgr.GetPhoneL(KMainServer, KMainPhone); + // Call TNetworkTsyTestHelper::WaitForRegisteredOnHomeNetworkL + CHECK_EQUALS_L(iNetworkTestHelper.WaitForRegisteredOnHomeNetworkL(phone), KErrNone, + _L("TNetworkTsyTestHelper::WaitForRegisteredOnHomeNetworkL returned with an error")); + + // Get Voice line 1 + RMobileLine& voiceLine1 = iEtelSessionMgr.GetLineL(KMainServer, KMainPhone, KVoiceLine); + + // Get call 1 + RMobileCall& call1 = iEtelSessionMgr.GetCallL(KMainServer, KMainPhone, KVoiceLine, KCall1); + + // Check phone supports KCapsVoice + RLine::TCaps lineCaps; + CHECK_EQUALS_L(voiceLine1.GetCaps(lineCaps), KErrNone, _L("RMobileLine::GetCaps returned with an error")); + CHECK_BITS_SET_L(lineCaps.iFlags, RLine::KCapsVoice, 0, _L("RLine::GetCaps returned wrong caps")); + + // Get call 2 + RMobileCall& call2 = iEtelSessionMgr.GetCallL(KMainServer, KMainPhone, KVoiceLine, KCall2); + + // Dial a number that answers on call 1 + TPtrC number1; + CHECK_TRUE_L(GetStringFromConfig(KIniVoiceNumSection, KIniVoiceNumber1, number1) != EFalse, _L("GetStringFromConfig did not complete as expected")); + DEBUG_PRINTF1(_L("Board Now Dialling: ")); + TCoreEtelRequestStatus dialStatus(call1, &RCall::DialCancel); + CleanupStack::PushL(dialStatus); + call1.Dial(dialStatus, number1); + CHECK_EQUALS_L(WaitForRequestWithTimeOut(dialStatus, ETimeMedium), KErrNone, _L("RCall::Dial timed-out")); + CHECK_EQUALS_L(dialStatus.Int(), KErrNone, _L("RCall::Dial returned with an error")); + + // Hold call 1 + TExtEtelRequestStatus holdStatus(call1, EMobileCallHold); + CleanupStack::PushL(holdStatus); + call1.Hold(holdStatus); + CHECK_EQUALS_L(WaitForRequestWithTimeOut(holdStatus, ETimeMedium),KErrNone, _L("RMobileCall::Hold timed out")); + CHECK_EQUALS_L(holdStatus.Int(), KErrNone, _L("RMobileCall::Hold returned with an error")); + + // Ensure RMobileCall::GetMobileCallStatus for call 1 is EStatusHold + RMobileCall::TMobileCallStatus status; + CHECK_EQUALS_L(call1.GetMobileCallStatus(status), KErrNone, _L("RMobileCall::GetMobileCallStatus returned with an error")); + CHECK_EQUALS_L(status, RMobileCall::EStatusHold, _L("RMobileCall::GetMobileCallStatus did not return EStatusHold as expected")); + + //////////////////////////////////////////////////////////////// + // SET UP END + //////////////////////////////////////////////////////////////// + + StartTest(); + + //////////////////////////////////////////////////////////////// + // TEST START + //////////////////////////////////////////////////////////////// + + // Post notifier for RCall::NotifyCapsChange + RCall::TCaps callCaps; + TCoreEtelRequestStatus notifyCapsChangeStatus (call2,&RCall::NotifyCapsChangeCancel); + CleanupStack::PushL(notifyCapsChangeStatus); + call2.NotifyCapsChange(notifyCapsChangeStatus,callCaps); + + // Post notifier for RMobileCall::NotifyMobileCallCapsChange + RMobileCall::TMobileCallCapsV1 mobileCallCaps; + RMobileCall::TMobileCallCapsV1Pckg mobileCallCapsPckg(mobileCallCaps); + TExtEtelRequestStatus notifyMobileCallCapsChangeStatus(call2, EMobileCallNotifyMobileCallCapsChange); + CleanupStack::PushL(notifyMobileCallCapsChangeStatus); + call2.NotifyMobileCallCapsChange(notifyMobileCallCapsChangeStatus,mobileCallCapsPckg); + + // Post notifier for RCall::NotifyStatusChange + RCall::TStatus callStatus; + TCoreEtelRequestStatus notifyStatusChangeStatus (call2,&RCall::NotifyStatusChangeCancel); + CleanupStack::PushL(notifyStatusChangeStatus); + call2.NotifyStatusChange(notifyStatusChangeStatus,callStatus); + + // Post notifier for RMobileCall::NotifyMobileCallStatusChange + RMobileCall::TMobileCallStatus mobileCallStatus2; + TExtEtelRequestStatus notifyMobileCallStatusChangeStatus2(call2, EMobileCallNotifyMobileCallStatusChange); + CleanupStack::PushL(notifyMobileCallStatusChangeStatus2); + call2.NotifyMobileCallStatusChange(notifyMobileCallStatusChangeStatus2, mobileCallStatus2); + + // Post notifier for RMobileCall::NotifyRemotePartyInfoChange + RMobileCall:: TMobileCallRemotePartyInfoV1 rpInfo; + RMobileCall:: TMobileCallRemotePartyInfoV1Pckg rpInfoPkg(rpInfo); + TExtEtelRequestStatus notifyRemotePartyInfoChangeStatus(call2, EMobileCallNotifyRemotePartyInfoChange); + CleanupStack::PushL(notifyRemotePartyInfoChangeStatus); + call2.NotifyRemotePartyInfoChange(notifyRemotePartyInfoChangeStatus, rpInfoPkg); + + // Dial a number that answers on call 2 + TPtrC number2; + ASSERT_TRUE(GetStringFromConfig(KIniVoiceNumSection, KIniVoiceNumber1, number2) != EFalse, _L("GetStringFromConfig did not complete as expected")); + DEBUG_PRINTF1(_L("Board Now Dialling Call 2: ")); + TCoreEtelRequestStatus dialStatus2(call2, &RCall::DialCancel); + CleanupStack::PushL(dialStatus2); + call2.Dial(dialStatus2, number2); + ASSERT_EQUALS(WaitForRequestWithTimeOut(dialStatus2, ETimeMedium), KErrNone, _L("RCall::Dial timed-out")); + ASSERT_EQUALS(dialStatus2.Int(), KErrNone, _L("RCall::Dial returned with an error")); + + // === Check call caps === + + // Check RCall::NotifyCapsChange on call 2 completes with caps in set of KCapsVoice | KCapsHangUp. + RCall::TCaps wantedCallCaps, unwantedCallCaps; + wantedCallCaps.iFlags = RCall::KCapsVoice | RCall::KCapsHangUp; + unwantedCallCaps.iFlags = 0; + const TInt wantedStatus = KErrNone; + iCallControlTestHelper.WaitForCallNotifyCapsChange(call2, + notifyCapsChangeStatus, + callCaps, + wantedCallCaps, + unwantedCallCaps, + wantedStatus); + + // Check RCall::GetCaps on call 2 supports KCapsHangUp | KCapsVoice. + ASSERT_EQUALS(call2.GetCaps(callCaps), KErrNone, _L("RCall::GetCaps returned an error")); + ASSERT_BITS_SET(callCaps.iFlags, wantedCallCaps.iFlags, KNoUnwantedBits, _L("RCall::GetCaps returned wrong caps")); + + // Check RMobileCall::NotifyMobileCallCapsChange on call 2 completes with iCallControlCaps in set of KCapsVoice | KCapsSwap | KCapsHangUp | KCapsTransfer | KCapsJoin. + // Check RMobileCall::NotifyMobileCallCapsChange on call 2 completes with iCallEventCaps in set of KCapsLocalHold | KCapsLocalTransfer | KCapsRemoteHold | KCapsRemoteTerminate | KCapsRemoteConferenceCreate. + RMobileCall::TMobileCallCapsV1 wantedMobileCaps; + wantedMobileCaps.iCallControlCaps = RMobileCall::KCapsVoice | + RMobileCall::KCapsSwap | + RMobileCall::KCapsHangUp | + RMobileCall::KCapsTransfer | + RMobileCall::KCapsJoin; + wantedMobileCaps.iCallEventCaps = RMobileCall::KCapsLocalHold | + RMobileCall::KCapsLocalTransfer | + RMobileCall::KCapsRemoteHold | + RMobileCall::KCapsRemoteTerminate | + RMobileCall::KCapsRemoteConferenceCreate; + TCmpRMobileCallTMobileCallCaps mobileCapsComp(wantedMobileCaps,mobileCallCaps, *this); + iCallControlTestHelper.WaitForMobileCallNotifyMobileCallCapsChange(call2, + notifyMobileCallCapsChangeStatus, + mobileCapsComp, + wantedStatus); + + + // Check RMobileCall::GetMobileCallCaps on call 2 includes iCallControlCaps in set of KCapsVoice | KCapsSwap | KCapsHangUp | KCapsTransfer | KCapsJoin. + // Check RMobileCall::GetMobileCallCaps on call 2 includes iCallEventCaps in set of KCapsLocalHold | KCapsLocalTransfer | KCapsRemoteHold | KCapsRemoteTerminate | KCapsRemoteConferenceCreate. + ASSERT_EQUALS(call2.GetMobileCallCaps(mobileCallCapsPckg), KErrNone, _L("RMobileCall::GetMobileCallCaps returned with an error")) + wantedMobileCaps.iCallControlCaps = RMobileCall::KCapsVoice | + RMobileCall::KCapsSwap | + RMobileCall::KCapsHangUp | + RMobileCall::KCapsTransfer| + RMobileCall::KCapsJoin; + ASSERT_BITS_SET(mobileCallCaps.iCallControlCaps, wantedMobileCaps.iCallControlCaps,KNoUnwantedBits, + _L("RMobileCall::GetMobileCallCaps returned unexpected iCallControlCaps")); + + wantedMobileCaps.iCallEventCaps = RMobileCall::KCapsLocalHold | + RMobileCall::KCapsLocalTransfer | + RMobileCall::KCapsRemoteHold | + RMobileCall::KCapsRemoteTerminate | + RMobileCall::KCapsRemoteConferenceCreate; + ASSERT_BITS_SET(mobileCallCaps.iCallEventCaps, wantedMobileCaps.iCallEventCaps,KNoUnwantedBits, + _L("RMobileCall::GetMobileCallCaps returned unexpected iCallEventCaps")) + + // === Check call status === + + // Check RCall::NotifyStatusChange on call 2 completes with EStatusDialling -> EStatusConnecting -> EStatusConnected. + RCall::TStatus expectedCallStatus = RCall::EStatusDialling; + iCallControlTestHelper.WaitForCallNotifyStatusChange(call2, + notifyStatusChangeStatus, + callStatus, + expectedCallStatus, + wantedStatus); + + call2.NotifyStatusChange(notifyStatusChangeStatus,callStatus); + expectedCallStatus = RCall::EStatusConnecting; + iCallControlTestHelper.WaitForCallNotifyStatusChange(call2, + notifyStatusChangeStatus, + callStatus, + expectedCallStatus, + wantedStatus); + + call2.NotifyStatusChange(notifyStatusChangeStatus,callStatus); + expectedCallStatus = RCall::EStatusConnected; + iCallControlTestHelper.WaitForCallNotifyStatusChange(call2, + notifyStatusChangeStatus, + callStatus, + expectedCallStatus, + wantedStatus); + + // Check RCall::GetStatus on call 2 returns EStatusConnected. + ASSERT_EQUALS(call2.GetStatus(callStatus),KErrNone, _L("RCall::GetStatus returned an error")); + ASSERT_EQUALS(callStatus, RCall::EStatusConnected, _L("RCall::GetStatus returned an unexpected call status")); + + + // Check RMobileCall::NotifyMobileCallStatusChange on call 2 completes with EStatusDialling -> EStatusConnecting -> EStatusConnected. + RMobileCall::TMobileCallStatus expectedMobileCallStatus = RMobileCall::EStatusDialling; + iCallControlTestHelper.WaitForMobileCallNotifyMobileCallStatusChange(call2, + notifyMobileCallStatusChangeStatus2, + mobileCallStatus2, + expectedMobileCallStatus, + wantedStatus); + + call2.NotifyMobileCallStatusChange(notifyMobileCallStatusChangeStatus2, mobileCallStatus2); + expectedMobileCallStatus = RMobileCall::EStatusConnecting; + iCallControlTestHelper.WaitForMobileCallNotifyMobileCallStatusChange(call2, + notifyMobileCallStatusChangeStatus2, + mobileCallStatus2, + expectedMobileCallStatus, + wantedStatus); + + call2.NotifyMobileCallStatusChange(notifyMobileCallStatusChangeStatus2, mobileCallStatus2); + expectedMobileCallStatus = RMobileCall::EStatusConnected; + iCallControlTestHelper.WaitForMobileCallNotifyMobileCallStatusChange(call2, + notifyMobileCallStatusChangeStatus2, + mobileCallStatus2, + expectedMobileCallStatus, + wantedStatus); + + // Check RMobileCall::GetMobileCallStatus on call 2 returns status of EStatusConnected. + ASSERT_EQUALS(call2.GetMobileCallStatus(mobileCallStatus2), KErrNone, _L("RMobileCall::GetMobileStatus returned an error")); + ASSERT_EQUALS(mobileCallStatus2, RMobileCall::EStatusConnected, _L("RMobileCall::GetMobileStatus did not return a status EStatusConnected")); + + // === Check remote party info === + + // Check RMobileCall::NotifyRemotePartyInfoChange on call 2 completes with direction of EMobileOriginated + TPtrC remoteNumber; + RMobileCall:: TMobileCallRemotePartyInfoV1 wantedRpInfo; + wantedRpInfo.iDirection= RMobileCall::EMobileOriginated ; + TCmpRMobileCallTMobileCallRemotePartyInfo rpInfoComp(wantedRpInfo,rpInfo, *this); + iCallControlTestHelper.WaitForMobileCallNotifyRemotePartyInfoChange(call2, + notifyRemotePartyInfoChangeStatus, + rpInfoComp, + wantedStatus); + + // Post notifier for Call2 RMobileCall::NotifyMobileCallStatusChange + call2.NotifyMobileCallStatusChange(notifyMobileCallStatusChangeStatus2, mobileCallStatus2); + + // Post notifier for Call1 RMobileCall::NotifyMobileCallStatusChange + RMobileCall::TMobileCallStatus mobileCallStatus; + TExtEtelRequestStatus notifyMobileCallStatusChangeStatus(call1, EMobileCallNotifyMobileCallStatusChange); + CleanupStack::PushL(notifyMobileCallStatusChangeStatus); + call1.NotifyMobileCallStatusChange(notifyMobileCallStatusChangeStatus, mobileCallStatus); + + // Post notifier for event2 RMobileCall::NotifyCallEvent + RMobileCall::TMobileCallEvent event2; + TExtEtelRequestStatus notifyCallEventStatus2(call2, EMobileCallNotifyCallEvent); + CleanupStack::PushL(notifyCallEventStatus2); + call2.NotifyCallEvent(notifyCallEventStatus2,event2); + + // Post notifier for event1 RMobileCall::NotifyCallEvent + RMobileCall::TMobileCallEvent event; + TExtEtelRequestStatus notifyCallEventStatus(call1, EMobileCallNotifyCallEvent); + CleanupStack::PushL(notifyCallEventStatus); + call1.NotifyCallEvent(notifyCallEventStatus,event); + + // Swap call 2 + TExtEtelRequestStatus swapStatus(call2, EMobileCallSwap); + CleanupStack::PushL(swapStatus); + call2.Swap(swapStatus); + ASSERT_EQUALS(WaitForRequestWithTimeOut(swapStatus, ETimeMedium),KErrNone, _L("RMobileCall::Swap timed out")); + ASSERT_EQUALS(swapStatus.Int(), KErrNone, _L("RMobileCall::Swap returned with an error")); + + // === Check call status for calls 1 and 2 === + + // Check RMobileCall::NotifyMobileCallStatusChange on call 2 completes with EStatusHold + expectedMobileCallStatus = RMobileCall::EStatusHold; + iCallControlTestHelper.WaitForMobileCallNotifyMobileCallStatusChange(call2, + notifyMobileCallStatusChangeStatus2, + mobileCallStatus2, + expectedMobileCallStatus, + wantedStatus); + + // Check RMobileCall::GetMobileCallStatus on call 2 returns status of EStatusHold + ASSERT_EQUALS(call2.GetMobileCallStatus(mobileCallStatus2), KErrNone, _L("RMobileCall::GetMobileStatus returned an error")); + ASSERT_EQUALS(mobileCallStatus2, RMobileCall::EStatusHold, _L("RMobileCall::GetMobileStatus did not return a status EStatusHold")); + + // Check RMobileCall::NotifyMobileCallStatusChange on call 1 completes with EStatusResume + expectedMobileCallStatus = RMobileCall::EStatusConnected; + iCallControlTestHelper.WaitForMobileCallNotifyMobileCallStatusChange(call1, + notifyMobileCallStatusChangeStatus, + mobileCallStatus, + expectedMobileCallStatus, + wantedStatus); + + // Check RMobileCall::GetMobileCallStatus on call 1 returns status of EStatusResume + ASSERT_EQUALS(call1.GetMobileCallStatus(mobileCallStatus), KErrNone, _L("RMobileCall::GetMobileStatus returned an error")) + ASSERT_EQUALS(mobileCallStatus, RMobileCall::EStatusConnected, _L("RMobileCall::GetMobileStatus did not return a status EStatusResume")) + + // === Check call event completes === + + // Check RMobileCall::NotifyCallEvent on call 2 completes with ELocalHold + RMobileCall::TMobileCallEvent expectedEvent= RMobileCall::ELocalHold; + iCallControlTestHelper.WaitForMobileCallNotifyCallEvent(call2, + notifyCallEventStatus2, + event2, + expectedEvent, + wantedStatus); + + // Check RMobileCall::NotifyCallEvent on call 1 completes with ELocalResume + expectedEvent= RMobileCall::ELocalResume; + iCallControlTestHelper.WaitForMobileCallNotifyCallEvent(call1, + notifyCallEventStatus, + event, + expectedEvent, + wantedStatus); + // Pause so that the call durations have time to increase from 0 + User::After(KOneSecond*2); + + // Get call duration of call 1 + TTimeIntervalSeconds duration1; + ASSERT_EQUALS(call1.GetCallDuration(duration1), KErrNone, _L("RCall::GetCallDuration returned with an error")); + + // Get call duration of call 2 + TTimeIntervalSeconds duration2; + ASSERT_EQUALS(call2.GetCallDuration(duration2), KErrNone, _L("RCall::GetCallDuration returned with an error")); + + // Check call duration of call 1 > duration of call 2 + ASSERT_TRUE(duration1.Int()>duration2.Int(), _L("RCall::GetCallDuration duration of call1 is not greater than the duration of call2")); + + // Hang up call 1 + ASSERT_EQUALS(call1.HangUp(), KErrNone,_L("RMobileCall::HangUp returned with an error")); + + // Hang up call 2 + ASSERT_EQUALS(call2.HangUp(), KErrNone,_L("RMobileCall::HangUp returned with an error")); + + //////////////////////////////////////////////////////////////// + // TEST END + //////////////////////////////////////////////////////////////// + + StartCleanup(); + // Pop: + // dialStatus + // holdStatus + // notifyCapsChangeStatus + // notifyMobileCallCapsChangeStatus + // notifyStatusChangeStatus + // notifyMobileCallStatusChangeStatus2 + // notifyRemotePartyInfoChangeStatus + // dialStatus2 + // notifyMobileCallStatusChangeStatus + // notifyCallEventStatus2 + // notifyCallEventStatus + // swapStatus + CleanupStack::PopAndDestroy(12, &dialStatus); + + + return TestStepResult(); + } + +TPtrC CCTSYIntegrationTestCallControl0025::GetTestStepName() +/** + * @return The test step name. + */ + { + return _L("CCTSYIntegrationTestCallControl0025"); + } + + + +CCTSYIntegrationTestCallControl0026::CCTSYIntegrationTestCallControl0026(CEtelSessionMgr& aEtelSessionMgr) + : CCTSYIntegrationTestCallControlBase(aEtelSessionMgr) +/** + * Constructor. + */ + { + SetTestStepName(CCTSYIntegrationTestCallControl0026::GetTestStepName()); + } + +CCTSYIntegrationTestCallControl0026::~CCTSYIntegrationTestCallControl0026() +/** + * Destructor. + */ + { + } + +TVerdict CCTSYIntegrationTestCallControl0026::doTestStepL() +/** + * @SYMTestCaseID BA-CTSY-INT-CCON-0026 + * @SYMFssID BA/CTSY/CCON-0026 + * @SYMTestCaseDesc Swap between a held call and an ongoing call + * @SYMTestPriority High + * @SYMTestActions RMobileCall::NotifyMobileCallCapsChange, RMobileCall::GetMobileCallStatus, RMobileCall::NotifyCallEvent, RCall::NotifyStatusChange, RMobileCall::NotifyMobileCallStatusChange,RCall::NotifyCapsChange, RMobileCall::NotifyRemotePartyInfoChange, RCall::GetStatus,RMobileCall::GetMobileCallCaps, RCall::Dial, RCall::HangUp, RCall::GetCallDuration, RMobileCall::Swap + * @SYMTestExpectedResults Pass - Active call goes on hold and held call becomes active. + * @SYMTestType CIT + * @SYMTestCaseDependencies live/automatic + * + * Reason for test: Verify call status, call event, call caps, remote party info , call duration and DTMF caps correct. + * + * @return - TVerdict code + */ + { + + //////////////////////////////////////////////////////////////// + // SET UP + //////////////////////////////////////////////////////////////// + RMobilePhone& phone = iEtelSessionMgr.GetPhoneL(KMainServer, KMainPhone); + // Call TNetworkTsyTestHelper::WaitForRegisteredOnHomeNetworkL + CHECK_EQUALS_L(iNetworkTestHelper.WaitForRegisteredOnHomeNetworkL(phone), KErrNone, _L("TNetworkTsyTestHelper::WaitForRegisteredOnHomeNetworkL returned with an error")); + + // Get Voice line 1 + RMobileLine& voiceLine1 = iEtelSessionMgr.GetLineL(KMainServer, KMainPhone, KVoiceLine); + + // Get call 1 + RMobileCall& call1 = iEtelSessionMgr.GetCallL(KMainServer, KMainPhone, KVoiceLine, KCall1); + + // Check phone supports KCapsVoice + RLine::TCaps lineCaps; + CHECK_EQUALS_L(voiceLine1.GetCaps(lineCaps) , KErrNone, _L("RMobileLine::GetCaps returned with an error")); + CHECK_BITS_SET_L(lineCaps.iFlags, RLine::KCapsVoice, 0, _L("RLine::GetCaps returned wrong caps")); + + // Get Voice line 2 + RMobileLine& voiceLine2 = iEtelSessionMgr.GetLineL(KMainServer, KMainPhone, KVoiceLine); + + // Get call 2 + RMobileCall& call2 = iEtelSessionMgr.GetCallL(KMainServer, KMainPhone, KVoiceLine, KCall2); + + // Dial a number that answers on call 1 + TPtrC number1; + CHECK_TRUE_L(GetStringFromConfig(KIniVoiceNumSection, KIniVoiceNumber1, number1) != EFalse, _L("GetStringFromConfig did not complete as expected")); + DEBUG_PRINTF1(_L("Board Now Dialling: ")); + TCoreEtelRequestStatus dialStatus(call1, &RCall::DialCancel); + CleanupStack::PushL(dialStatus); + call1.Dial(dialStatus, number1); + CHECK_EQUALS_L(WaitForRequestWithTimeOut(dialStatus, ETimeMedium), KErrNone, _L("RCall::Dial timed-out")); + CHECK_EQUALS_L(dialStatus.Int(), KErrNone, _L("RCall::Dial returned with an error")); + + // Hold call 1 + TExtEtelRequestStatus holdStatus(call1, EMobileCallHold); + CleanupStack::PushL(holdStatus); + call1.Hold(holdStatus); + CHECK_EQUALS_L(WaitForRequestWithTimeOut(holdStatus, ETimeMedium),KErrNone, _L("RMobileCall::Hold timed out")); + CHECK_EQUALS_L(holdStatus.Int(), KErrNone, _L("RMobileCall::Hold returned with an error")); + + // Ensure RMobileCall::GetMobileCallStatus for call 1 is EStatusHold + RMobileCall::TMobileCallStatus status; + CHECK_EQUALS_L(call1.GetMobileCallStatus(status), KErrNone, _L("RMobileCall::GetMobileCallStatus returned with an error")); + CHECK_EQUALS_L(status, RMobileCall::EStatusHold, _L("RMobileCall::GetMobileCallStatus did not return EStatusHold as expected")); + + //////////////////////////////////////////////////////////////// + // SET UP END + //////////////////////////////////////////////////////////////// + + StartTest(); + + //////////////////////////////////////////////////////////////// + // TEST START + //////////////////////////////////////////////////////////////// + + + // Post notifier for RCall::NotifyCapsChange + RCall::TCaps callCaps; + TCoreEtelRequestStatus notifyCapsChangeStatus (call2,&RCall::NotifyCapsChangeCancel); + CleanupStack::PushL(notifyCapsChangeStatus); + call2.NotifyCapsChange(notifyCapsChangeStatus,callCaps); + + // Post notifier for RMobileCall::NotifyMobileCallCapsChange + RMobileCall::TMobileCallCapsV1 mobileCallCaps; + RMobileCall::TMobileCallCapsV1Pckg mobileCallCapsPckg(mobileCallCaps); + TExtEtelRequestStatus notifyMobileCallCapsChangeStatus(call2, EMobileCallNotifyMobileCallCapsChange); + CleanupStack::PushL(notifyMobileCallCapsChangeStatus); + call2.NotifyMobileCallCapsChange(notifyMobileCallCapsChangeStatus,mobileCallCapsPckg); + + // Post notifier for RCall::NotifyStatusChange + RCall::TStatus callStatus; + TCoreEtelRequestStatus notifyStatusChangeStatus (call2,&RCall::NotifyStatusChangeCancel); + CleanupStack::PushL(notifyStatusChangeStatus); + call2.NotifyStatusChange(notifyStatusChangeStatus,callStatus); + + // Post notifier for RMobileCall::NotifyMobileCallStatusChange + RMobileCall::TMobileCallStatus mobileCallStatus2; + TExtEtelRequestStatus notifyMobileCallStatusChangeStatus2(call2, EMobileCallNotifyMobileCallStatusChange); + CleanupStack::PushL(notifyMobileCallStatusChangeStatus2); + call2.NotifyMobileCallStatusChange(notifyMobileCallStatusChangeStatus2, mobileCallStatus2); + + // Post notifier for RMobileCall::NotifyRemotePartyInfoChange + RMobileCall:: TMobileCallRemotePartyInfoV1 rpInfo; + RMobileCall:: TMobileCallRemotePartyInfoV1Pckg rpInfoPkg(rpInfo); + TExtEtelRequestStatus notifyRemotePartyInfoChangeStatus(call2, EMobileCallNotifyRemotePartyInfoChange); + CleanupStack::PushL(notifyRemotePartyInfoChangeStatus); + call2.NotifyRemotePartyInfoChange(notifyRemotePartyInfoChangeStatus, rpInfoPkg); + + // Dial a number that answers on call 2 + TPtrC number2; + ASSERT_TRUE(GetStringFromConfig(KIniVoiceNumSection, KIniVoiceNumber1, number2) != EFalse, _L("GetStringFromConfig did not complete as expected")); + DEBUG_PRINTF1(_L("Board Now Dialling: ")); + TCoreEtelRequestStatus dialStatus2(call2, &RCall::DialCancel); + CleanupStack::PushL(dialStatus2); + call2.Dial(dialStatus2, number2); + ASSERT_EQUALS(WaitForRequestWithTimeOut(dialStatus2, ETimeMedium), KErrNone, _L("RCall::Dial timed-out")); + ASSERT_EQUALS(dialStatus2.Int(), KErrNone, _L("RCall::Dial returned with an error")); + + // === Check call caps === + + // Check RCall::NotifyCapsChange on call 2 completes with caps in set of KCapsVoice | KCapsHangUp. + RCall::TCaps wantedCallCaps, unwantedCallCaps; + wantedCallCaps.iFlags = RCall::KCapsVoice | RCall::KCapsHangUp; + unwantedCallCaps.iFlags = 0; + const TInt wantedStatus = KErrNone; + iCallControlTestHelper.WaitForCallNotifyCapsChange(call2, + notifyCapsChangeStatus, + callCaps, + wantedCallCaps, + unwantedCallCaps, + wantedStatus); + + // Check RCall::GetCaps on call 2 supports KCapsHangUp | KCapsVoice. + ASSERT_EQUALS(call2.GetCaps(callCaps), KErrNone, _L("RCall::GetCaps returned an error")); + ASSERT_BITS_SET(callCaps.iFlags, wantedCallCaps.iFlags, KNoUnwantedBits, _L("RCall::GetCaps returned wrong caps")) + + // Check RMobileCall::NotifyMobileCallCapsChange on call 2 completes with iCallControlCaps in set of KCapsVoice | KCapsSwap | KCapsHangUp | KCapsTransfer | KCapsJoin. + // Check RMobileCall::NotifyMobileCallCapsChange on call 2 completes with iCallEventCaps in set of KCapsLocalHold | KCapsLocalTransfer | KCapsRemoteHold | KCapsRemoteTerminate | KCapsRemoteConferenceCreate. + RMobileCall::TMobileCallCapsV1 wantedMobileCaps; + wantedMobileCaps.iCallControlCaps = RMobileCall::KCapsVoice | + RMobileCall::KCapsSwap | + RMobileCall::KCapsHangUp | + RMobileCall::KCapsTransfer | + RMobileCall::KCapsJoin; + wantedMobileCaps.iCallEventCaps = RMobileCall::KCapsLocalHold | + RMobileCall::KCapsLocalTransfer | + RMobileCall::KCapsRemoteHold | + RMobileCall::KCapsRemoteTerminate | + RMobileCall::KCapsRemoteConferenceCreate; + TCmpRMobileCallTMobileCallCaps mobileCapsComp(wantedMobileCaps,mobileCallCaps, *this); + iCallControlTestHelper.WaitForMobileCallNotifyMobileCallCapsChange(call2, + notifyMobileCallCapsChangeStatus, + mobileCapsComp, + wantedStatus); + + // Check RMobileCall::GetMobileCallCaps on call 2 includes iCallControlCaps in set of KCapsVoice | KCapsSwap | KCapsHangUp | KCapsTransfer | KCapsJoin. + // Check RMobileCall::GetMobileCallCaps on call 2 includes iCallEventCaps in set of KCapsLocalHold | KCapsLocalTransfer | KCapsRemoteHold | KCapsRemoteTerminate | KCapsRemoteConferenceCreate. + ASSERT_EQUALS(call2.GetMobileCallCaps(mobileCallCapsPckg), KErrNone, _L("RMobileCall::GetMobileCallCaps returned with an error")) + wantedMobileCaps.iCallControlCaps = RMobileCall::KCapsVoice | + RMobileCall::KCapsSwap | + RMobileCall::KCapsHangUp | + RMobileCall::KCapsTransfer| + RMobileCall::KCapsJoin; + ASSERT_BITS_SET(mobileCallCaps.iCallControlCaps, wantedMobileCaps.iCallControlCaps,KNoUnwantedBits, + _L("RMobileCall::GetMobileCallCaps returned unexpected iCallControlCaps")) + + wantedMobileCaps.iCallEventCaps = RMobileCall::KCapsLocalHold | + RMobileCall::KCapsLocalTransfer | + RMobileCall::KCapsRemoteHold | + RMobileCall::KCapsRemoteTerminate | + RMobileCall::KCapsRemoteConferenceCreate; + ASSERT_BITS_SET(mobileCallCaps.iCallEventCaps, wantedMobileCaps.iCallEventCaps,KNoUnwantedBits, + _L("RMobileCall::GetMobileCallCaps returned unexpected iCallEventCaps")) + + + + // === Check call status === + + // Check RCall::NotifyStatusChange on call 2 completes with EStatusDialling -> EStatusConnecting -> EStatusConnected. + RCall::TStatus expectedCallStatus = RCall::EStatusDialling; + iCallControlTestHelper.WaitForCallNotifyStatusChange(call2, + notifyStatusChangeStatus, + callStatus, + expectedCallStatus, + wantedStatus); + + call2.NotifyStatusChange(notifyStatusChangeStatus,callStatus); + expectedCallStatus = RCall::EStatusConnecting; + iCallControlTestHelper.WaitForCallNotifyStatusChange(call2, + notifyStatusChangeStatus, + callStatus, + expectedCallStatus, + wantedStatus); + + call2.NotifyStatusChange(notifyStatusChangeStatus,callStatus); + expectedCallStatus = RCall::EStatusConnected; + iCallControlTestHelper.WaitForCallNotifyStatusChange(call2, + notifyStatusChangeStatus, + callStatus, + expectedCallStatus, + wantedStatus); + + // Check RCall::GetStatus on call 2 returns EStatusConnected. + ASSERT_EQUALS(call2.GetStatus(callStatus),KErrNone, _L("RCall::GetStatus returned an error")); + ASSERT_EQUALS(callStatus, RCall::EStatusConnected, _L("RCall::GetStatus did not return RCall::EStatusConnected")); + + // Check RMobileCall::NotifyMobileCallStatusChange on call 2 completes with EStatusDialling -> EStatusConnecting -> EStatusConnected. + RMobileCall::TMobileCallStatus expectedMobileCallStatus = RMobileCall::EStatusDialling; + iCallControlTestHelper.WaitForMobileCallNotifyMobileCallStatusChange(call2, + notifyMobileCallStatusChangeStatus2, + mobileCallStatus2, + expectedMobileCallStatus, + wantedStatus); + + call2.NotifyMobileCallStatusChange(notifyMobileCallStatusChangeStatus2, mobileCallStatus2); + expectedMobileCallStatus = RMobileCall::EStatusConnecting; + iCallControlTestHelper.WaitForMobileCallNotifyMobileCallStatusChange(call2, + notifyMobileCallStatusChangeStatus2, + mobileCallStatus2, + expectedMobileCallStatus, + wantedStatus); + + call2.NotifyMobileCallStatusChange(notifyMobileCallStatusChangeStatus2, mobileCallStatus2); + expectedMobileCallStatus = RMobileCall::EStatusConnected; + iCallControlTestHelper.WaitForMobileCallNotifyMobileCallStatusChange(call2, + notifyMobileCallStatusChangeStatus2, + mobileCallStatus2, + expectedMobileCallStatus, + wantedStatus); + + // Check RMobileCall::GetMobileCallStatus on call 2 returns status of EStatusConnected. + ASSERT_EQUALS(call2.GetMobileCallStatus(mobileCallStatus2), KErrNone, _L("RMobileCall::GetMobileStatus returned an error")) + ASSERT_EQUALS(mobileCallStatus2, RMobileCall::EStatusConnected, _L("RMobileCall::GetMobileStatus did not return a status EStatusConnected")) + + // === Check remote party info === + + // Check RMobilePhone::NotifyRemotePartyInfoChange on call 2 completes with direction of EMobileOriginated + TPtrC remoteNumber; + RMobileCall:: TMobileCallRemotePartyInfoV1 wantedRpInfo; + wantedRpInfo.iDirection= RMobileCall::EMobileOriginated; + TCmpRMobileCallTMobileCallRemotePartyInfo rpInfoComp(wantedRpInfo,rpInfo, *this); + iCallControlTestHelper.WaitForMobileCallNotifyRemotePartyInfoChange(call2, + notifyRemotePartyInfoChangeStatus, + rpInfoComp, + wantedStatus); + + // Post notifier for Call2 RMobileCall::NotifyMobileCallStatusChange + call2.NotifyMobileCallStatusChange(notifyMobileCallStatusChangeStatus2, mobileCallStatus2); + + // Post notifier for Call1 RMobileCall::NotifyMobileCallStatusChange + RMobileCall::TMobileCallStatus mobileCallStatus; + TExtEtelRequestStatus notifyMobileCallStatusChangeStatus(call1, EMobileCallNotifyMobileCallStatusChange); + CleanupStack::PushL(notifyMobileCallStatusChangeStatus); + call1.NotifyMobileCallStatusChange(notifyMobileCallStatusChangeStatus, mobileCallStatus); + + // Post notifier for event2 RMobileCall::NotifyCallEvent + RMobileCall::TMobileCallEvent event2; + TExtEtelRequestStatus notifyCallEventStatus2(call2, EMobileCallNotifyCallEvent); + CleanupStack::PushL(notifyCallEventStatus2); + call2.NotifyCallEvent(notifyCallEventStatus2,event2); + + // Post notifier for event1 RMobileCall::NotifyCallEvent + RMobileCall::TMobileCallEvent event; + TExtEtelRequestStatus notifyCallEventStatus(call1, EMobileCallNotifyCallEvent); + CleanupStack::PushL(notifyCallEventStatus); + call1.NotifyCallEvent(notifyCallEventStatus,event); + + // Swap call 1 + TExtEtelRequestStatus swapStatus(call1, EMobileCallSwap); + CleanupStack::PushL(swapStatus); + call1.Swap(swapStatus); + ASSERT_EQUALS(WaitForRequestWithTimeOut(swapStatus, ETimeMedium),KErrNone, _L("RMobileCall::Swap timed out")); + ASSERT_EQUALS(swapStatus.Int(), KErrNone, _L("RMobileCall::Swap returned with an error")); + + // === Check call status for calls 1 and 2 === + + // Check RMobileCall::NotifyMobileCallStatusChange on call 2 completes with EStatusHold + expectedMobileCallStatus = RMobileCall::EStatusHold; + iCallControlTestHelper.WaitForMobileCallNotifyMobileCallStatusChange(call2, + notifyMobileCallStatusChangeStatus2, + mobileCallStatus2, + expectedMobileCallStatus, + wantedStatus); + + // Check RMobileCall::GetMobileCallStatus on call 2 returns status of EStatusHold + ASSERT_EQUALS(call2.GetMobileCallStatus(mobileCallStatus2), KErrNone, _L("RMobileCall::GetMobileStatus returned an error")); + ASSERT_EQUALS(mobileCallStatus2, RMobileCall::EStatusHold, _L("RMobileCall::GetMobileStatus did not return a status EStatusHold")); + + // Check RMobileCall::NotifyMobileCallStatusChange on call 1 completes with EStatusResume + expectedMobileCallStatus = RMobileCall::EStatusConnected; + iCallControlTestHelper.WaitForMobileCallNotifyMobileCallStatusChange(call1, + notifyMobileCallStatusChangeStatus, + mobileCallStatus, + expectedMobileCallStatus, + wantedStatus); + + // Check RMobileCall::GetMobileCallStatus on call 1 returns status of EStatusResume + ASSERT_EQUALS(call1.GetMobileCallStatus(mobileCallStatus), KErrNone, _L("RMobileCall::GetMobileStatus returned an error")); + ASSERT_EQUALS(mobileCallStatus, RMobileCall::EStatusConnected, _L("RMobileCall::GetMobileStatus did not return a status EStatusResume")); + + // === Check call event completes === + + // Check RMobileCall::NotifyCallEvent on call 2 completes with ELocalHold + RMobileCall::TMobileCallEvent expectedEvent= RMobileCall::ELocalHold; + iCallControlTestHelper.WaitForMobileCallNotifyCallEvent(call2, + notifyCallEventStatus2, + event2, + expectedEvent, + wantedStatus); + + // Check RMobileCall::NotifyCallEvent on call 1 completes with ELocalResume + expectedEvent= RMobileCall::ELocalResume; + iCallControlTestHelper.WaitForMobileCallNotifyCallEvent(call1, + notifyCallEventStatus, + event, + expectedEvent, + wantedStatus); + + // Wait so that call duration increases + User::After(KOneSecond * 2); + + // Get call duration of call 1 + TTimeIntervalSeconds duration1; + ASSERT_EQUALS(call1.GetCallDuration(duration1), KErrNone, _L("RCall::GetCallDuration returned with an error")); + + // Get call duration of call 2 + TTimeIntervalSeconds duration2; + ASSERT_EQUALS(call2.GetCallDuration(duration2), KErrNone, _L("RCall::GetCallDuration returned with an error")); + + // Check call duration of call 1 > duration of call 2 + ASSERT_TRUE(duration1.Int()>duration2.Int(), _L("RCall::GetCallDuration duration of call1 is not greater than the duration of call2")); + + // Hang up call 1 + ASSERT_EQUALS(call1.HangUp(), KErrNone,_L("RMobileCall::HangUp returned with an error")); + + // Hang up call 2 + ASSERT_EQUALS(call2.HangUp(), KErrNone,_L("RMobileCall::HangUp returned with an error")); + + //////////////////////////////////////////////////////////////// + // TEST END + //////////////////////////////////////////////////////////////// + + StartCleanup(); + + // Pop: + // dialStatus + // holdStatus + // notifyCapsChangeStatus + // notifyMobileCallCapsChangeStatus + // notifyStatusChangeStatus + // notifyMobileCallStatusChangeStatus2 + // notifyRemotePartyInfoChangeStatus + // dialStatus2 + // notifyMobileCallStatusChangeStatus + // notifyCallEventStatus2 + // notifyCallEventStatus + // swapStatus + CleanupStack::PopAndDestroy(12, &dialStatus); + + return TestStepResult(); + } + +TPtrC CCTSYIntegrationTestCallControl0026::GetTestStepName() +/** + * @return The test step name. + */ + { + return _L("CCTSYIntegrationTestCallControl0026"); + } + + + +CCTSYIntegrationTestCallControl0027::CCTSYIntegrationTestCallControl0027(CEtelSessionMgr& aEtelSessionMgr) + : CCTSYIntegrationTestCallControlBase(aEtelSessionMgr) +/** + * Constructor. + */ + { + SetTestStepName(CCTSYIntegrationTestCallControl0027::GetTestStepName()); + } + +CCTSYIntegrationTestCallControl0027::~CCTSYIntegrationTestCallControl0027() +/** + * Destructor. + */ + { + } + +TVerdict CCTSYIntegrationTestCallControl0027::doTestStepL() +/** + * @SYMTestCaseID BA-CTSY-INT-CCON-0027 + * @SYMFssID BA/CTSY/CCON-0027 + * @SYMTestCaseDesc Hold an MO call then answer an MT call. + * @SYMTestPriority High + * @SYMTestActions RMobileCall::NotifyMobileCallCapsChange, + * RMobileCall::GetMobileCallStatus, + * RMobileCall::NotifyCallEvent, RCall::GetInfo, + * RCall::NotifyStatusChange, + * RCall::NotifyCapsChange, + * RMobilePhone::NotifyDTMFCapsChange, + * RMobileCall::GetMobileCallCaps, + * RLine::NotifyStatusChange, + * RMobileCall::GetMobileCallInfo, + * RMobileCall::NotifyMobileCallStatusChange, + * RMobilePhone::GetDTMFCaps + * @SYMTestExpectedResults Pass - Second call is answered without affecting held call. + * @SYMTestType CIT + * @SYMTestCaseDependencies live/manual + * + * Reason for test: Verify call status, call caps, line status are correct. + * + * @return - TVerdict code + */ + { + //////////////////////////////////////////////////////////////// + // SET UP + //////////////////////////////////////////////////////////////// + + // Call TNetworkTsyTestHelper::WaitForRegisteredOnHomeNetworkL + RMobilePhone& phone = iEtelSessionMgr.GetPhoneL(KMainServer,KMainPhone); + CHECK_EQUALS_L(iNetworkTestHelper.WaitForRegisteredOnHomeNetworkL(phone), KErrNone, + _L("TNetworkTsyTestHelper::WaitForRegisteredOnHomeNetworkL returned with an error")); + + // Check phone supports KCapsVoice + RMobilePhone& mobilePhone=iEtelSessionMgr.GetPhoneL(KMainServer, KMainPhone); + RMobilePhone::TCaps caps; + CHECK_EQUALS_L(mobilePhone.GetCaps(caps), KErrNone, _L("RMobilePhone::GetCaps return value is not KErrNone")); + TUint32 expectedServiceCaps=RMobilePhone::KCapsVoice; + CHECK_BITS_SET_L(caps.iFlags, expectedServiceCaps, KNoUnwantedBits, _L("RMobilePhone::GetCaps returned wrong caps")); + + // Get Voice line 1 + RMobileLine& mobileLine1=iEtelSessionMgr.GetLineL(KMainServer, KMainPhone, KVoiceLine); + + // Get call 1 + RMobileCall& mobileCall1=iEtelSessionMgr.GetCallL(KMainServer, KMainPhone, KVoiceLine, KCall1); + + // Dial a number that answers on call 1 + TPtrC number; + CHECK_TRUE_L(GetStringFromConfig(KIniVoiceNumSection, KIniVoiceNumber1, number) != EFalse, _L("GetStringFromConfig did not complete as expected")); + DEBUG_PRINTF2(_L("Board Now Dialling: %S"), &number); + TCoreEtelRequestStatus dialStatus(mobileCall1, &RCall::DialCancel); + CleanupStack::PushL(dialStatus); + mobileCall1.Dial(dialStatus, number); + CHECK_EQUALS_L(WaitForRequestWithTimeOut(dialStatus, ETimeMedium), KErrNone, _L("RCall::Dial timed-out")); + CHECK_EQUALS_L(dialStatus.Int(), KErrNone, _L("RCall::Dial problem dialling")); + + // Hold call 1 + TExtEtelRequestStatus holdStatus(mobileCall1, EMobileCallHold); + CleanupStack::PushL(holdStatus); + mobileCall1.Hold(holdStatus); + CHECK_EQUALS_L(WaitForRequestWithTimeOut(holdStatus, ETimeMedium), KErrNone, _L("RMobileCall::Hold timed-out")); + CHECK_EQUALS_L(holdStatus.Int(), KErrNone, _L("RMobileCall::Hold problem holding call")); + + // Ensure RMobileCall::GetMobileCallStatus for call 1 is EStatusHold + RMobileCall::TMobileCallStatus getMobileCallStatus; + CHECK_EQUALS_L(mobileCall1.GetMobileCallStatus(getMobileCallStatus), KErrNone, _L("RMobileCall::GetMobileCallStatus return code is not KErrNone")); + CHECK_EQUALS_L(getMobileCallStatus, RMobileCall::EStatusHold, _L("RMobileCall::GetMobileCallStatus getMobileCallStatus incorrect error")); + + //////////////////////////////////////////////////////////////// + // SET UP END + //////////////////////////////////////////////////////////////// + + StartTest(); + + //////////////////////////////////////////////////////////////// + // TEST START + //////////////////////////////////////////////////////////////// + + // Post notifier for RLine::NotifyIncomingCall + TCoreEtelRequestStatus notifyIncomingCallStatus (mobileLine1,&RLine::NotifyIncomingCallCancel); + CleanupStack::PushL(notifyIncomingCallStatus); + TName name; + mobileLine1.NotifyIncomingCall(notifyIncomingCallStatus,name); + + // Request incoming call from RPS. + RPSRequestIncomingCallL(EVoiceLine); + + // Check RLine::NotifyIncomingCall completes with call name. + ASSERT_EQUALS(WaitForRequestWithTimeOut(notifyIncomingCallStatus,ETimeMedium),KErrNone, + _L("RLine::NotifyIncomingCall did not complete without error")); + ASSERT_EQUALS(notifyIncomingCallStatus.Int(), KErrNone, + _L("RLine::NotifyIncomingCall set requestStatus to an error")); + ASSERT_TRUE(name.Length() > 0, + _L("RLine::NotifyIncomingCall did not set a line name")); + + // === Check call caps === + + // Get the incoming call + TCallId incomingCallId; + RMobileCall& incomingCall = iEtelSessionMgr.GetIncomingCallL(KMainServer, KMainPhone, KVoiceLine, name, incomingCallId); + + // Post notification RMobileCall::NotifyCapsChange for call 2 + TCoreEtelRequestStatus notifyCapsChangeStatus2(incomingCall, &RMobileCall::NotifyCapsChangeCancel); + CleanupStack::PushL(notifyCapsChangeStatus2); + RMobileCall::TCaps notifyCapsChangeCaps2; + incomingCall.NotifyCapsChange(notifyCapsChangeStatus2, notifyCapsChangeCaps2); + + // Post notification RMobileCall::NotifyMobileCallCapsChange for call 2 + TExtEtelRequestStatus notifyMobileCallCapsChangeStatus2(incomingCall, EMobileCallNotifyMobileCallCapsChange); + CleanupStack::PushL(notifyMobileCallCapsChangeStatus2); + RMobileCall::TMobileCallCapsV1 pkgType2; + RMobileCall::TMobileCallCapsV1Pckg pkgArg2(pkgType2); + incomingCall.NotifyMobileCallCapsChange(notifyMobileCallCapsChangeStatus2, pkgArg2); + + // Post notification RMobileCall::NotifyStatusChange for call 2 + TCoreEtelRequestStatus notifyStatusChangeStatus2(incomingCall, &RMobileCall::NotifyStatusChangeCancel); + CleanupStack::PushL(notifyStatusChangeStatus2); + RCall::TStatus callStatus2; + incomingCall.NotifyStatusChange(notifyStatusChangeStatus2, callStatus2); + + // Post notification RMobileCall::NotifyMobileCallStatusChange for call 2 + TExtEtelRequestStatus notifyMobileCallStatusChangeStatus2(incomingCall, EMobileCallNotifyMobileCallStatusChange); + CleanupStack::PushL(notifyMobileCallStatusChangeStatus2); + RMobileCall::TMobileCallStatus mobileCallState2; + incomingCall.NotifyMobileCallStatusChange(notifyMobileCallStatusChangeStatus2, mobileCallState2); + + // Answer incoming call on call 2. + TCoreEtelRequestStatus answerIncomingStatus(incomingCall, &RCall::AnswerIncomingCallCancel); + CleanupStack::PushL(answerIncomingStatus); + incomingCall.AnswerIncomingCall(answerIncomingStatus); + ASSERT_EQUALS(WaitForRequestWithTimeOut(answerIncomingStatus, ETimeLong), KErrNone, _L("RCall::AnswerIncomingCall timed out")); + ASSERT_EQUALS(answerIncomingStatus.Int(), KErrNone, _L("RCall::AnswerIncomingCall returned an error")); + + // === Check call caps === + + // Check RCall::NotifyCapsChange on call 2 completes with caps in set of KCapsVoice | KCapsHangUp. + // Check RCall::NotifyCapsChange on call 2 completes with caps NOT in set of KCapsAnswer | KCapsDial. + RCall::TCaps wantedCaps; + RCall::TCaps unwantedCaps; + wantedCaps.iFlags=RCall::KCapsVoice | RCall::KCapsHangUp; + unwantedCaps.iFlags=RCall::KCapsAnswer | RCall::KCapsDial; + iCallControlTestHelper.WaitForCallNotifyCapsChange(incomingCall, + notifyCapsChangeStatus2, + notifyCapsChangeCaps2, + wantedCaps, + unwantedCaps, + KErrNone); + + // Check RCall::GetCaps on call 2 supports caps in set of KCapsHangUp | KCapsVoice. + // Check RCall::GetCaps on call 2 supports caps NOT in set of KCapsAnswer | KCapsDial. + RCall::TCaps getcaps; + TUint32 expectedGetCaps=RCall::KCapsHangUp | RCall::KCapsVoice; + TUint32 unexpectedGetCaps=RCall::KCapsAnswer | RCall::KCapsDial; + ASSERT_EQUALS(incomingCall.GetCaps(getcaps), KErrNone, _L("RCall::GetCaps did not return KErrNone")); + ASSERT_BITS_SET(getcaps.iFlags, expectedGetCaps, unexpectedGetCaps, _L("RMobilePhone::GetCaps returned wrong caps")); + + // Check RMobileCall::NotifyMobileCallCapsChange on call 2 completes with iCallControlCaps in set of KCapsVoice | KCapsHangUp | KCapsJoin. + // Check RMobileCall::NotifyMobileCallCapsChange on call 2 completes with iCallEventCaps in set of KCapsLocalHold | KCapsRemoteHold | KCapsRemoteTerminate | KCapsRemoteConferenceCreate. + RMobileCall::TMobileCallCapsV1 expected; + expected.iCallControlCaps=RMobileCall::KCapsVoice | RMobileCall::KCapsHangUp | RMobileCall::KCapsJoin; + expected.iCallEventCaps=RMobileCall::KCapsLocalHold | RMobileCall::KCapsRemoteHold | RMobileCall::KCapsRemoteTerminate | RMobileCall::KCapsRemoteConferenceCreate; + TCmpRMobileCallTMobileCallCaps aMobileCallCapsV1Call2(expected, pkgType2, *this); + iCallControlTestHelper.WaitForMobileCallNotifyMobileCallCapsChange(incomingCall, + notifyMobileCallCapsChangeStatus2, + aMobileCallCapsV1Call2, + KErrNone); + + // Check RMobileCall::GetMobileCallCaps on call 2 includes iCallControlCaps in set of KCapsVoice | KCapsHangUp | KCapsJoin. + RMobileCall::TMobileCallCapsV1 getMobileCallCapsPkgType; + RMobileCall::TMobileCallCapsV1Pckg getMobileCallCapsPkgArg(getMobileCallCapsPkgType); + ASSERT_EQUALS(incomingCall.GetMobileCallCaps(getMobileCallCapsPkgArg), KErrNone, _L("RMobileCall::GetMobileCallCaps return code is not KErrNone")); + TUint32 expectedCallCaps=RMobileCall::KCapsVoice | RMobileCall::KCapsJoin | RMobileCall::KCapsHangUp; + ASSERT_BITS_SET(getMobileCallCapsPkgType.iCallControlCaps, expectedCallCaps, KNoUnwantedBits, _L("RMobilePhone::GetMobileCallCaps returned wrong caps")); + + // Check RMobileCall::GetMobileCallCaps on call 2 includes iCallEventCaps in set of KCapsRemoteHold | KCapsRemoteTerminate | KCapsRemoteConferenceCreate. + expectedCallCaps=RMobileCall::KCapsRemoteHold | RMobileCall::KCapsRemoteTerminate | RMobileCall::KCapsRemoteConferenceCreate; + ASSERT_BITS_SET(getMobileCallCapsPkgType.iCallEventCaps, expectedCallCaps, KNoUnwantedBits, _L("RMobilePhone::GetMobileCallCaps returned wrong caps")); + + // === Check call status === + + // Check RCall::NotifyStatusChange on call 2 completes with EStatusAnswering -> EStatusConnected. + RCall::TStatus expectedCallStatus; + expectedCallStatus=RCall::EStatusAnswering; + iCallControlTestHelper.WaitForCallNotifyStatusChange(incomingCall, + notifyStatusChangeStatus2, + callStatus2, + expectedCallStatus, + KErrNone); + + incomingCall.NotifyStatusChange(notifyStatusChangeStatus2, callStatus2); + + expectedCallStatus=RCall::EStatusConnected; + iCallControlTestHelper.WaitForCallNotifyStatusChange(incomingCall, + notifyStatusChangeStatus2, + callStatus2, + expectedCallStatus, + KErrNone); + + incomingCall.NotifyStatusChange(notifyStatusChangeStatus2, callStatus2); + + // Check RCall::GetStatus on call 2 returns EStatusConnected. + RCall::TStatus getStatus; + ASSERT_EQUALS(incomingCall.GetStatus(getStatus), KErrNone, _L("RMobileCall::GetStatus return code is not KErrNone")); + ASSERT_EQUALS(getStatus, RCall::EStatusConnected, _L("RMobileCall::GetStatus getStatus incorrect error")); + + // Check RMobileCall::NotifyMobileCallStatusChange on call 2 completes with EStatusAnswering -> EStatusConnected. + RMobileCall::TMobileCallStatus expectedMobileCallState; + expectedMobileCallState=RMobileCall::EStatusAnswering; + iCallControlTestHelper.WaitForMobileCallNotifyMobileCallStatusChange(incomingCall, + notifyMobileCallStatusChangeStatus2, + mobileCallState2, + expectedMobileCallState, + KErrNone); + + incomingCall.NotifyMobileCallStatusChange(notifyMobileCallStatusChangeStatus2, mobileCallState2); + + expectedMobileCallState=RMobileCall::EStatusConnected; + iCallControlTestHelper.WaitForMobileCallNotifyMobileCallStatusChange(incomingCall, + notifyMobileCallStatusChangeStatus2, + mobileCallState2, + expectedMobileCallState, + KErrNone); + + // Check RMobileCall::GetMobileCallStatus on call 2 returns status of EStatusConnected. + ASSERT_EQUALS(incomingCall.GetMobileCallStatus(getMobileCallStatus), KErrNone, _L("RMobileCall::GetMobileCallStatus return code is not KErrNone")); + ASSERT_EQUALS(getMobileCallStatus,RMobileCall::EStatusConnected, _L("RMobileCall::GetMobileCallStatus getMobileCallStatus incorrect error")); + + // Check RMobileCall::GetMobileCallStatus on call 1 returns status of EStatusHold. + ASSERT_EQUALS(mobileCall1.GetMobileCallStatus(getMobileCallStatus), KErrNone, _L("RMobileCall::GetMobileCallStatus return code is not KErrNone")); + ASSERT_EQUALS(getMobileCallStatus, RMobileCall::EStatusHold, _L("RMobileCall::GetMobileCallStatus getMobileCallStatus incorrect error")); + + // === Check call info === + + // Check RCall::GetInfo on call 2 returns valid call name. + User::After(KOneSecond*2); // So that the call duration is not 0, check later that it has a value > 0 + RCall::TCallInfo callInfo; + ASSERT_EQUALS(incomingCall.GetInfo(callInfo), KErrNone, _L("RMobileCall::GetInfo return code is not KErrNone")); + ASSERT_TRUE(callInfo.iCallName.Length()>0, _L("RMobileCall::GetInfo iCallName.Length() not greater than 0")); + + // Check RCall::GetInfo on call 2 returns valid voice line name. + ASSERT_TRUE(callInfo.iLineName.Length()>0, _L("RMobileCall::GetInfo iLineName.Length() not greater than 0")); + + // Check RCall::GetInfo on call 2 returns call status of EStatusConnected. + ASSERT_EQUALS(callInfo.iStatus, RCall::EStatusConnected, _L("RMobileCall::GetInfo iStatus incorrect error")); + + // Check RCall::GetInfo on call 2 returns call duration of > 0. + TTimeIntervalSeconds time = 0; + ASSERT_TRUE(callInfo.iDuration>time, _L("RMobileCall::GetInfo iDuration incorrect error")); + + // Check RMobileCall::GetMobileCallInfo on call 2 returns iValid > 0. + RMobileCall::TMobileCallInfoV1 getMobileCallInfoPkgType; + RMobileCall::TMobileCallInfoV1Pckg getMobileCallInfoPkgArg(getMobileCallInfoPkgType); + ASSERT_EQUALS(incomingCall.GetMobileCallInfo(getMobileCallInfoPkgArg), KErrNone, _L("RMobileCall::GetMobileCallInfo return code is not KErrNone")); + + // Check RMobileCall::GetMobileCallInfo on call 2 returns data for attributes makred as valid in iValid. + ASSERT_TRUE(getMobileCallInfoPkgType.iValid>0, _L("RMobileCall::GetMobileCallInfo iValid is not > 0")); + + // Check RMobileCall::GetMobileCallInfo on call 2 returns valid line name. + ASSERT_TRUE(getMobileCallInfoPkgType.iLineName.Length()>0, _L("RMobileCall::GetMobileCallInfo iLineName.Length() is not > 0")); + + // Hang up call 2. + ASSERT_EQUALS(incomingCall.HangUp(), KErrNone, _L("RMobileCall::HangUp return code is not KErrNone")); + + // Post notification RMobileCall::NotifyStatusChange + TCoreEtelRequestStatus notifyStatusChangeStatus(mobileCall1, &RMobileCall::NotifyStatusChangeCancel); + CleanupStack::PushL(notifyStatusChangeStatus); + RCall::TStatus callStatus; + mobileCall1.NotifyStatusChange(notifyStatusChangeStatus, callStatus); + + // Post notification RMobileCall::NotifyMobileCallStatusChange + TExtEtelRequestStatus notifyMobileCallStatusChangeStatus(mobileCall1, EMobileCallNotifyMobileCallStatusChange); + CleanupStack::PushL(notifyMobileCallStatusChangeStatus); + RMobileCall::TMobileCallStatus mobileCallState; + mobileCall1.NotifyMobileCallStatusChange(notifyMobileCallStatusChangeStatus, mobileCallState); + + // Post notification RMobileCall::NotifyCallEvent + TExtEtelRequestStatus notifyCallEventStatus(mobileCall1, EMobileCallNotifyCallEvent); + CleanupStack::PushL(notifyCallEventStatus); + RMobileCall::TMobileCallEvent mobileCallEvent; + mobileCall1.NotifyCallEvent(notifyCallEventStatus, mobileCallEvent); + + // Post notification RMobilePhone::NotifyDTMFCapsChange + TExtEtelRequestStatus notifyDTMFCapsChangeStatus(mobilePhone, EMobilePhoneNotifyDTMFCapsChange); + CleanupStack::PushL(notifyDTMFCapsChangeStatus); + TUint32 notifyDTMFCapsChangeCaps; + mobilePhone.NotifyDTMFCapsChange(notifyDTMFCapsChangeStatus, notifyDTMFCapsChangeCaps); + + // Resume call 1. + TExtEtelRequestStatus resumeStatus(mobileCall1, EMobileCallResume); + CleanupStack::PushL(resumeStatus); + + mobileCall1.Resume(resumeStatus); + + ASSERT_EQUALS(WaitForRequestWithTimeOut(resumeStatus, ETimeMedium), KErrNone, _L("RMobileCall::Resume timed-out")); + ASSERT_EQUALS(resumeStatus.Int(), KErrNone, _L("RMobileCall::Resume resumeStatus completed with incorrect error")); + + // === Check call status === + + // Check RCall::NotifyStatusChange on call 1 completes with EStatusConnected. + expectedCallStatus=RCall::EStatusConnected; + iCallControlTestHelper.WaitForCallNotifyStatusChange(mobileCall1, + notifyStatusChangeStatus, + callStatus, + expectedCallStatus, + KErrNone); + + // Check RCall::GetStatus on call 1 returns EStatusConnected. + ASSERT_EQUALS(mobileCall1.GetStatus(getStatus), KErrNone, _L("RMobileCall::GetStatus return code is not KErrNone")); + ASSERT_EQUALS(getStatus, RCall::EStatusConnected, _L("RMobileCall::GetStatus getStatus incorrect error")); + + // Check RMobileCall::NotifyMobileCallStatusChange on call 1 completes with EStatusConnected. + expectedMobileCallState=RMobileCall::EStatusConnected; + iCallControlTestHelper.WaitForMobileCallNotifyMobileCallStatusChange(mobileCall1, + notifyMobileCallStatusChangeStatus, + mobileCallState, + expectedMobileCallState, + KErrNone); + + // Check RMobileCall::GetMobileCallStatus on call 1 returns status of EStatusConnected. + ASSERT_EQUALS(mobileCall1.GetMobileCallStatus(getMobileCallStatus), KErrNone, _L("RMobileCall::GetMobileCallStatus return code is not KErrNone")); + ASSERT_EQUALS(getMobileCallStatus, RMobileCall::EStatusConnected, _L("RMobileCall::GetMobileCallStatus getMobileCallStatus incorrect error")); + + // === Check call event and DTMF caps === + + // Check RMobileCall::NotifyCallEvent on call 1 completes with ELocalResume + RMobileCall::TMobileCallEvent expectedMobileCallEvent=RMobileCall::ELocalResume; + iCallControlTestHelper.WaitForMobileCallNotifyCallEvent(mobileCall1, + notifyCallEventStatus, + mobileCallEvent, + expectedMobileCallEvent, + KErrNone); + + // Check RMobilePhone::NotifyDTMFCapsChange on call 1 completes with caps in set of KCapsSendDTMFString | KCapsSendDTMFSingleTone + TUint32 notifyDTMFCapsChangeWantedCaps=RMobilePhone::KCapsSendDTMFString | RMobilePhone::KCapsSendDTMFSingleTone; + iCallControlTestHelper.WaitForMobilePhoneNotifyDTMFCapsChange(mobilePhone, + notifyDTMFCapsChangeStatus, + notifyDTMFCapsChangeCaps, + notifyDTMFCapsChangeWantedCaps, + KNoUnwantedBits, + KErrNone); + + // Check RMobilePhone::GetDTMFCaps on call 1 returns caps in set of KCapsSendDTMFString | KCapsSendDTMFSingleTone + TUint32 getDTMFCaps; + ASSERT_EQUALS(mobilePhone.GetDTMFCaps(getDTMFCaps), KErrNone, _L("RMobilePhone::GetDTMFCaps return code is not KErrNone")); + ASSERT_BITS_SET(getDTMFCaps, notifyDTMFCapsChangeWantedCaps, KNoUnwantedBits, _L("RMobilePhone::GetDTMFCaps returned wrong caps")); + + // Hang up call 1 + ASSERT_EQUALS(mobileCall1.HangUp(), KErrNone, _L("RMobileCall::HangUp return code is not KErrNone")); + + //////////////////////////////////////////////////////////////// + // TEST END + //////////////////////////////////////////////////////////////// + + StartCleanup(); + + // dialStatus + // holdStatus + // notifyIncomingCallStatus + // notifyCapsChangeStatus2 + // notifyMobileCallCapsChangeStatus2 + // notifyStatusChangeStatus2 + // notifyMobileCallStatusChangeStatus2 + // answerIncomingStatus + // notifyStatusChangeStatus + // notifyMobileCallStatusChangeStatus + // notifyCallEventStatus + // notifyDTMFCapsChangeStatus + // resumeStatus + CleanupStack::PopAndDestroy(13, &dialStatus); + + + return TestStepResult(); + } + +TPtrC CCTSYIntegrationTestCallControl0027::GetTestStepName() +/** + * @return The test step name. + */ + { + return _L("CCTSYIntegrationTestCallControl0027"); + } + + + +CCTSYIntegrationTestCallControl0028::CCTSYIntegrationTestCallControl0028(CEtelSessionMgr& aEtelSessionMgr) + : CCTSYIntegrationTestCallControlBase(aEtelSessionMgr) +/** + * Constructor. + */ + { + SetTestStepName(CCTSYIntegrationTestCallControl0028::GetTestStepName()); + } + +CCTSYIntegrationTestCallControl0028::~CCTSYIntegrationTestCallControl0028() +/** + * Destructor. + */ + { + } + +TVerdict CCTSYIntegrationTestCallControl0028::doTestStepL() +/** + * @SYMTestCaseID BA-CTSY-INT-CCON-0028 + * @SYMFssID BA/CTSY/CCON-0028 + * @SYMTestCaseDesc Hold call which remote party then hangs up. + * @SYMTestPriority High + * @SYMTestActions RCall::NotifyStatusChange, RMobileCall::NotifyMobileCallStatusChange, RLine::NotifyStatusChange, RMobileLine::GetMobileLineStatus, RMobileLine::NotifyMobileLineStatusChange, RLine::GetStatus, RMobileCall::GetMobileCallStatus, RMobileCall::NotifyCallEvent, RCall::GetStatus + * @SYMTestExpectedResults Pass - Calls can be held and resumed. + * @SYMTestType CIT + * @SYMTestCaseDependencies live/automatic + * + * Reason for test: Verify call and line status are correct and call event completes. + * + * @return - TVerdict code + */ + { + + //////////////////////////////////////////////////////////////// + // SET UP + //////////////////////////////////////////////////////////////// + + + // Call TNetworkTsyTestHelper::WaitForRegisteredOnHomeNetworkL + RMobilePhone& phone = iEtelSessionMgr.GetPhoneL(KMainServer, KMainPhone); + CHECK_EQUALS_L(iNetworkTestHelper.WaitForRegisteredOnHomeNetworkL(phone), KErrNone, + _L("TNetworkTsyTestHelper::WaitForRegisteredOnHomeNetworkL returned with an error")); + + // Check phone supports KCapsVoice. + RMobilePhone::TCaps caps; + CHECK_EQUALS_L(phone.GetCaps(caps), KErrNone, _L("RMobilePhone::GetCaps returned with an error.")); + CHECK_BITS_SET_L(caps.iFlags, RMobilePhone::KCapsVoice, KNoUnwantedBits, _L("RMobilePhone::GetCaps returned wrong caps.")); + + // Get Voice line 1. + RMobileLine& mobileLine1=iEtelSessionMgr.GetLineL(KMainServer, KMainPhone, KVoiceLine); + + // Get call 1. + RMobileCall& mobileCall1=iEtelSessionMgr.GetCallL(KMainServer, KMainPhone, KVoiceLine, KCall1); + + // Dial RPS which answers. + TCoreEtelRequestStatus dialStatus(mobileCall1, &RCall::DialCancel); + CleanupStack::PushL(dialStatus); + TPtrC rpsNumber; + GetRPSNumber(EVoiceLine, rpsNumber); + CHECK_EQUALS_L(RPSAnswerNextCallL(EVoiceLine), KErrNone, _L("CCTSYIntegrationTestSuiteStepBase::RPSAnswerNextCallL returned with an error")); + mobileCall1.Dial(dialStatus, rpsNumber); + CHECK_EQUALS_L(WaitForRequestWithTimeOut(dialStatus, ETimeMedium), KErrNone, _L("RCall::Dial timed-out")); + CHECK_EQUALS_L(dialStatus.Int(), KErrNone, _L("RCall::Dial returned an error")); + + + //////////////////////////////////////////////////////////////// + // SET UP END + //////////////////////////////////////////////////////////////// + + StartTest(); + + //////////////////////////////////////////////////////////////// + // TEST START + //////////////////////////////////////////////////////////////// + + + // Post notifier for RMobileCall::NotifyCallEvent + TExtEtelRequestStatus notifyCallEventStatus(mobileCall1, EMobileCallNotifyCallEvent); + CleanupStack::PushL(notifyCallEventStatus); + RMobileCall::TMobileCallEvent mobileCallEvent; + mobileCall1.NotifyCallEvent(notifyCallEventStatus, mobileCallEvent); + + // Post notifier for RMobileCall::NotifyMobileCallStatusChange + TExtEtelRequestStatus notifyMobileCallStatusChangeStatus(mobileCall1, EMobileCallNotifyMobileCallStatusChange); + CleanupStack::PushL(notifyMobileCallStatusChangeStatus); + RMobileCall::TMobileCallStatus mobileCallStatus; + mobileCall1.NotifyMobileCallStatusChange(notifyMobileCallStatusChangeStatus, mobileCallStatus); + + // Hold call 1. + TExtEtelRequestStatus holdStatus(mobileCall1, EMobileCallHold); + CleanupStack::PushL(holdStatus); + mobileCall1.Hold(holdStatus); + ASSERT_EQUALS(WaitForRequestWithTimeOut(holdStatus, ETimeMedium),KErrNone, _L("RMobileCall::Hold timed out")); + ASSERT_EQUALS(holdStatus.Int(), KErrNone, _L("RMobileCall::Hold returned with an error")); + + // Check RMobileCall::NotifyCallEvent completes with ELocalHold + TInt wantedStatus = KErrNone; + RMobileCall::TMobileCallEvent expectedMobileCallEvent = RMobileCall::ELocalHold; + iCallControlTestHelper.WaitForMobileCallNotifyCallEvent( + mobileCall1, + notifyCallEventStatus, + mobileCallEvent, + expectedMobileCallEvent, + wantedStatus); + + // Check RMobileCall::NotifyMobileCallStatusChange completes with EStatusHold + RMobileCall::TMobileCallStatus expectedMobileCallStatus = RMobileCall::EStatusHold; + iCallControlTestHelper.WaitForMobileCallNotifyMobileCallStatusChange(mobileCall1, + notifyMobileCallStatusChangeStatus, + mobileCallStatus, + expectedMobileCallStatus, + wantedStatus); + + // Check RMobileCall::GetMobileCallStatus completes with EStatusHold + ASSERT_EQUALS(mobileCall1.GetMobileCallStatus(mobileCallStatus), KErrNone, _L("RMobileCall::GetMobileCallStatus returned an error")); + ASSERT_EQUALS(mobileCallStatus, RMobileCall::EStatusHold, _L("RMobileCall::GetMobileCallStatus did not return EStatusHold as expected")); + + // Post notifier for RCall::NotifyStatusChange + RCall::TStatus callStatus; + TCoreEtelRequestStatus notifyCallStatusChangeStatus(mobileCall1, &RCall::NotifyStatusChangeCancel); + CleanupStack::PushL(notifyCallStatusChangeStatus); + mobileCall1.NotifyStatusChange(notifyCallStatusChangeStatus, callStatus); + + // Post notifier for RLine::NotifyStatusChange + TCoreEtelRequestStatus notifyStatusChangeStatus(mobileLine1, &RLine::NotifyStatusChangeCancel); + CleanupStack::PushL(notifyStatusChangeStatus); + RCall::TStatus lineStatus; + mobileLine1.NotifyStatusChange(notifyStatusChangeStatus, lineStatus); + + // Post notifier for RLine::NotifyMobileLineStatusChange + TExtEtelRequestStatus notifyMobileLineChangeStatus(mobileLine1, EMobileLineNotifyMobileLineStatusChange); + CleanupStack::PushL(notifyMobileLineChangeStatus); + RMobileCall::TMobileCallStatus mobileLineStatus; + mobileLine1.NotifyMobileLineStatusChange(notifyMobileLineChangeStatus, mobileLineStatus); + + // repost notifier for RMobileCall::NotifyCallEvent + mobileCall1.NotifyCallEvent(notifyCallEventStatus, mobileCallEvent); + + // repost a notifier for RMobileCall::NotifyMobileCallStatusChange + mobileCall1.NotifyMobileCallStatusChange(notifyMobileCallStatusChangeStatus, mobileCallStatus); + + // RPS hangs up the call. + ASSERT_EQUALS(RPSHangupL(EVoiceLine, ETimeShort), KErrNone, _L("CCTSYIntegrationTestSuiteStepBase::RPSHangup returned an error")); + + // Check RMobileCall::NotifyCallEvent completes with ERemoteTerminated + expectedMobileCallEvent = RMobileCall::ERemoteTerminated; + iCallControlTestHelper.WaitForMobileCallNotifyCallEvent( + mobileCall1, + notifyCallEventStatus, + mobileCallEvent, + expectedMobileCallEvent, + wantedStatus); + + // Check RCall::NotifyStatusChange completes with EStatusIdle. + RCall::TStatus expectedCallStatus = RCall::EStatusIdle; + iCallControlTestHelper.WaitForCallNotifyStatusChange(mobileCall1, + notifyCallStatusChangeStatus, + callStatus, + expectedCallStatus, + wantedStatus); + + // Check RCall::GetStatus returns EStatusIdle. + ASSERT_EQUALS(mobileCall1.GetStatus(callStatus),KErrNone, _L("RCall::GetStatus returned an error")); + ASSERT_EQUALS(callStatus, RCall::EStatusIdle, _L("RCall::GetStatus did not return EStatusIdle as expected")); + + // Check RMobileCall::NotifyMobileCallStatusChange completes with EStatusIdle + expectedMobileCallStatus = RMobileCall::EStatusIdle; + iCallControlTestHelper.WaitForMobileCallNotifyMobileCallStatusChange(mobileCall1, + notifyMobileCallStatusChangeStatus, + mobileCallStatus, + expectedMobileCallStatus, + wantedStatus); + + // Check RMobileCall::GetMobileCallStatus completes with EStatusIdle + ASSERT_EQUALS(mobileCall1.GetMobileCallStatus(mobileCallStatus), KErrNone, _L("RMobileCall::GetMobileStatus returned an error")); + ASSERT_EQUALS(mobileCallStatus, RMobileCall::EStatusIdle, _L("RMobileCall::GetMobileStatus did not return EStatusIdle as expected")); + + // Check RLine::NotifyStatusChange completes with EStatusIdle + RCall::TStatus expectedLineStatus = RCall::EStatusIdle; + iCallControlTestHelper.WaitForLineNotifyStatusChange(mobileLine1, + notifyStatusChangeStatus, + lineStatus, + expectedLineStatus, + wantedStatus); + + // Check RLine::GetStatus returns EStatusIdle + ASSERT_EQUALS(mobileLine1.GetStatus(callStatus), KErrNone, _L("RLine::GetStatus returned with an error")); + ASSERT_EQUALS(callStatus, RCall::EStatusIdle, _L("RLine::GetStatus did not return EStatusIdle as expected")); + + // Check RMobileLine::NotifyMobileLineStatusChange completes with EStatusIdle; + RMobileCall::TMobileCallStatus expectedMobileLineStatus = RMobileCall::EStatusIdle; + iCallControlTestHelper.WaitForMobileLineNotifyMobileLineStatusChange(mobileLine1, + notifyMobileLineChangeStatus, + mobileLineStatus, + expectedMobileLineStatus, + wantedStatus); + + // Check RMobileLine::GetMobileLineStatus returns EStatusIdle + ASSERT_EQUALS(mobileLine1.GetMobileLineStatus(mobileLineStatus), KErrNone, _L("RMobileLine::GetMobileLineStatus returned with an error")); + ASSERT_EQUALS(mobileLineStatus, RMobileCall::EStatusIdle, _L("RMobileLine::GetMobileLineStatus did not return EStatusIdle as expected")); + + + //////////////////////////////////////////////////////////////// + // TEST END + //////////////////////////////////////////////////////////////// + + StartCleanup(); + + // Pop + // dialStatus + // notifyCallEventStatus + // notifyMobileCallStatusChangeStatus + // holdStatus + // notifyCallStatusChangeStatus + // notifyStatusChangeStatus + // notifyMobileLineChangeStatus + CleanupStack::PopAndDestroy(7, &dialStatus); + + return TestStepResult(); + } + +TPtrC CCTSYIntegrationTestCallControl0028::GetTestStepName() +/** + * @return The test step name. + */ + { + return _L("CCTSYIntegrationTestCallControl0028"); + } + + + +CCTSYIntegrationTestCallControl0029::CCTSYIntegrationTestCallControl0029(CEtelSessionMgr& aEtelSessionMgr) + : CCTSYIntegrationTestCallControlBase(aEtelSessionMgr) +/** + * Constructor. + */ + { + SetTestStepName(CCTSYIntegrationTestCallControl0029::GetTestStepName()); + } + +CCTSYIntegrationTestCallControl0029::~CCTSYIntegrationTestCallControl0029() +/** + * Destructor. + */ + { + } + +TVerdict CCTSYIntegrationTestCallControl0029::doTestStepL() +/** + * @SYMTestCaseID BA-CTSY-INT-CCON-0029 + * @SYMFssID BA/CTSY/CCON-0029 + * @SYMTestCaseDesc Resume held call but remote party hangs up before resume complete. + * @SYMTestPriority High + * @SYMTestActions RMobileCall::NotifyMobileCallStatusChange, RLine::NotifyStatusChange, RMobileLine::GetMobileLineStatus, RMobileLine::NotifyMobileLineStatusChange, RLine::GetStatus, RMobileCall::GetMobileCallStatus, RMobileCall::NotifyCallEvent, RCall::GetStatus, RMobileCall::Hold, RMobileCall::Resume + * @SYMTestExpectedResults Pass - Call ends when remote party hangs up. + * @SYMTestType CIT + * @SYMTestCaseDependencies live/manual + * + * Reason for test: Verify call and line status are correct and call event completes. + * + * @return - TVerdict code + */ + { + + //////////////////////////////////////////////////////////////// + // SET UP + //////////////////////////////////////////////////////////////// + + // Call TNetworkTsyTestHelper::WaitForRegisteredOnHomeNetworkL + RMobilePhone& phone = iEtelSessionMgr.GetPhoneL(KMainServer,KMainPhone); + CHECK_EQUALS_L(iNetworkTestHelper.WaitForRegisteredOnHomeNetworkL(phone), KErrNone, + _L("TNetworkTsyTestHelper::WaitForRegisteredOnHomeNetworkL returned with an error")); + + // Check phone supports KCapsVoice. + RMobilePhone::TCaps caps; + CHECK_EQUALS_L(phone.GetCaps(caps), KErrNone, _L("RMobilePhone::GetCaps return value is not KErrNone")); + CHECK_BITS_SET_L(caps.iFlags, RMobilePhone::KCapsVoice, KNoUnwantedBits, _L("RMobilePhone::GetCaps returned wrong caps")); + + // Get Voice line 1. + RMobileLine& voiceLine = iEtelSessionMgr.GetLineL(KMainServer, KMainPhone, KVoiceLine); + + // Get call 1. + RMobileCall& call1 = iEtelSessionMgr.GetCallL(KMainServer, KMainPhone, KVoiceLine, KCall1); + + //////////////////////////////////////////////////////////////// + // SET UP END + //////////////////////////////////////////////////////////////// + + StartTest(); + + //////////////////////////////////////////////////////////////// + // TEST START + //////////////////////////////////////////////////////////////// + + // Dial a number. Tester should answer the call. + TPtrC number; + ASSERT_TRUE(GetStringFromConfig(KIniVoiceNumSection, KIniVoiceNumber1, number) != EFalse, + _L("GetStringFromConfig did not complete as expected")); + TCoreEtelRequestStatus dialStatus(call1, &RCall::DialCancel); + CleanupStack::PushL(dialStatus); + DEBUG_PRINTF1(_L("Board Now Dialling...")); + call1.Dial(dialStatus, number); + ASSERT_EQUALS(WaitForRequestWithTimeOut(dialStatus, ETimeMedium), KErrNone, _L("RCall::Dial timed-out")); + ASSERT_EQUALS(dialStatus.Int(), KErrNone, _L("RCall::Dial returned with an error")); + + // Post notifier for RMobileCall::NotifyCallEvent + TExtEtelRequestStatus notifyCallEventStatus(call1, EMobileCallNotifyCallEvent); + CleanupStack::PushL(notifyCallEventStatus); + RMobileCall::TMobileCallEvent mobileCallEvent; + call1.NotifyCallEvent(notifyCallEventStatus, mobileCallEvent); + + // post a notifier for RMobileCall::NotifyMobileCallStatusChange + RMobileCall::TMobileCallStatus mobileCallStatus; + TExtEtelRequestStatus notifyMobileCallChangeStatus(call1, EMobileCallNotifyMobileCallStatusChange); + CleanupStack::PushL(notifyMobileCallChangeStatus); + call1.NotifyMobileCallStatusChange(notifyMobileCallChangeStatus, mobileCallStatus); + + // Hold call 1 + TExtEtelRequestStatus holdStatus (call1,EMobileCallHold); + CleanupStack::PushL(holdStatus); + call1.Hold(holdStatus); + ASSERT_EQUALS(WaitForRequestWithTimeOut(holdStatus, ETimeMedium), KErrNone, _L("RMobileCall::Hold timed-out")); + ASSERT_EQUALS(dialStatus.Int(), KErrNone, _L("RMobileCall::Hold returned an error")); + + // Check RMobileCall::NotifyCallEvent completes with ELocalHold + RMobileCall::TMobileCallEvent expectedMobileCallEvent = RMobileCall::ELocalHold; + iCallControlTestHelper.WaitForMobileCallNotifyCallEvent( + call1, + notifyCallEventStatus, + mobileCallEvent, + expectedMobileCallEvent, + KErrNone); + + // Check RMobileCall::NotifyMobileCallStatusChange completes with EStatusHold + RMobileCall::TMobileCallStatus expectedMobileCallStatus = RMobileCall::EStatusHold; + iCallControlTestHelper.WaitForMobileCallNotifyMobileCallStatusChange( + call1, + notifyMobileCallChangeStatus, + mobileCallStatus, + expectedMobileCallStatus, + KErrNone); + + // Check RMobileCall::GetMobileCallStatus completes with EStatusHold + ASSERT_EQUALS(call1.GetMobileCallStatus(mobileCallStatus), KErrNone, _L("RMobileCall::GetMobileCallStatus returned an error")); + ASSERT_EQUALS(mobileCallStatus, RMobileCall::EStatusHold, _L("RMobileCall::GetMobileCallStatus did not return EStatusHold")); + + // post notifier for RLine::NotifyStatusChange + TCoreEtelRequestStatus notifyStatusChangeStatus (voiceLine,&RLine::NotifyStatusChangeCancel); + CleanupStack::PushL(notifyStatusChangeStatus); + RCall::TStatus lineStatus; + voiceLine.NotifyStatusChange(notifyStatusChangeStatus,lineStatus); + + // post a notifier for RMobileLine::NotifyMobileLineStatusChange + TExtEtelRequestStatus notifyMobileLineChangeStatus(voiceLine, EMobileLineNotifyMobileLineStatusChange); + CleanupStack::PushL(notifyMobileLineChangeStatus); + RMobileCall::TMobileCallStatus mobileLineStatus; + voiceLine.NotifyMobileLineStatusChange(notifyMobileLineChangeStatus, mobileLineStatus); + + // post notifier for RCall::NotifyStatusChange + RCall::TStatus callStatus; + TCoreEtelRequestStatus notifyCallStatusChangeStatus (call1,&RCall::NotifyStatusChangeCancel); + CleanupStack::PushL(notifyCallStatusChangeStatus); + call1.NotifyStatusChange(notifyCallStatusChangeStatus,callStatus); + + // repost notifier for RMobileCall::NotifyCallEvent + call1.NotifyCallEvent(notifyCallEventStatus, mobileCallEvent); + + // repost a notifier for RMobileCall::NotifyMobileCallStatusChange + call1.NotifyMobileCallStatusChange(notifyMobileCallChangeStatus, mobileCallStatus); + + // Resume call 1. Tester should hang up the call before Resume completes. + DisplayUserInteractionPromptL(_L("Remote party should hang up the call now."), ETimeLong); + TExtEtelRequestStatus resumeStatus(call1, EMobileCallResume); + CleanupStack::PushL(resumeStatus); + call1.Resume(resumeStatus); + ASSERT_EQUALS(WaitForRequestWithTimeOut(resumeStatus, ETimeMedium), KErrNone, _L("RMobileCall::Resume timed-out")); + ASSERT_TRUE(resumeStatus.Int() != KErrNone, _L("RMobileCall::Resume did not return error code as expected.")); + + // Check RMobileCall::NotifyCallEvent completes with ERemoteTerminated + expectedMobileCallEvent = RMobileCall::ERemoteTerminated; + iCallControlTestHelper.WaitForMobileCallNotifyCallEvent( + call1, + notifyCallEventStatus, + mobileCallEvent, + expectedMobileCallEvent, + KErrNone); + + // Check RCall::NotifyStatusChange completes with EStatusIdle. + RCall::TStatus expectedCallStatus = RCall::EStatusIdle; + iCallControlTestHelper.WaitForCallNotifyStatusChange(call1, + notifyCallStatusChangeStatus, + callStatus, + expectedCallStatus, + KErrNone); + + // Check RCall::GetStatus returns EStatusIdle. + ASSERT_EQUALS(call1.GetStatus(callStatus), KErrNone, _L("RCall::GetStatus returned an Error")); + ASSERT_EQUALS(callStatus, RCall::EStatusIdle, _L("RCall::GetStatus did not return EStatusIdle")); + + // Check RMobileCall::NotifyMobileCallStatusChange completes with EStatusIdle + expectedMobileCallStatus = RMobileCall::EStatusIdle; + iCallControlTestHelper.WaitForMobileCallNotifyMobileCallStatusChange(call1, + notifyMobileCallChangeStatus, + mobileCallStatus, + expectedMobileCallStatus, + KErrNone); + + // Check RMobileCall::GetMobileCallStatus completes with EStatusIdle + ASSERT_EQUALS(call1.GetMobileCallStatus(mobileCallStatus), KErrNone, _L("RMobileCall::GetMobileCallStatus returned an error")); + ASSERT_EQUALS(mobileCallStatus, RMobileCall::EStatusIdle, _L("RMobileCall::GetMobileCallStatus did not return EStatusIdle")); + + // Check RLine::NotifyStatusChange completes with EStatusIdle + RCall::TStatus expectedLineStatus = RCall::EStatusIdle; + iCallControlTestHelper.WaitForLineNotifyStatusChange(voiceLine, + notifyStatusChangeStatus, + lineStatus, + expectedLineStatus, + KErrNone); + + // Check RLine::GetStatus returns EStatusIdle + ASSERT_EQUALS(voiceLine.GetStatus(lineStatus), KErrNone, _L("RLine::GetStatus returned an error")); + ASSERT_EQUALS(lineStatus, RCall::EStatusIdle, _L("RLine::GetStatus did not return EStatusConnected as expected")); + + // Check RMobileLine::NotifyMobileLineStatusChange completes with EStatusIdle + RMobileCall::TMobileCallStatus expectedMobileLineStatus = RMobileCall::EStatusIdle; + iCallControlTestHelper.WaitForMobileLineNotifyMobileLineStatusChange(voiceLine, + notifyMobileLineChangeStatus, + mobileLineStatus, + expectedMobileLineStatus, + KErrNone); + + // Check RMobileLine::GetMobileLineStatus returns EStatusIdle + ASSERT_EQUALS(voiceLine.GetMobileLineStatus(mobileLineStatus), KErrNone, _L("RMobileLine::GetMobileLineStatus returned an error")); + ASSERT_EQUALS(mobileLineStatus, RMobileCall::EStatusIdle, _L("RMobileLine::GetMobileLineStatus did not set line status to EStatusIdle")); + + //////////////////////////////////////////////////////////////// + // TEST END + //////////////////////////////////////////////////////////////// + + StartCleanup(); + + // dialStatus + // notifyCallEventStatus + // notifyCallStatusChangeStatus + // notifyMobileCallChangeStatus + // notifyStatusChangeStatus + // notifyMobileLineChangeStatus + // holdStatus + // resumeStatus + CleanupStack::PopAndDestroy(8, &dialStatus); + + return TestStepResult(); + } + +TPtrC CCTSYIntegrationTestCallControl0029::GetTestStepName() +/** + * @return The test step name. + */ + { + return _L("CCTSYIntegrationTestCallControl0029"); + } + + + +CCTSYIntegrationTestCallControl0030::CCTSYIntegrationTestCallControl0030(CEtelSessionMgr& aEtelSessionMgr) + : CCTSYIntegrationTestCallControlBase(aEtelSessionMgr) +/** + * Constructor. + */ + { + SetTestStepName(CCTSYIntegrationTestCallControl0030::GetTestStepName()); + } + +CCTSYIntegrationTestCallControl0030::~CCTSYIntegrationTestCallControl0030() +/** + * Destructor. + */ + { + } + +TVerdict CCTSYIntegrationTestCallControl0030::doTestStepL() +/** + * @SYMTestCaseID BA-CTSY-INT-CCON-0030 + * @SYMFssID BA/CTSY/CCON-0030 + * @SYMTestCaseDesc Hold a call then make and hang up another call. + * @SYMTestPriority High + * @SYMTestActions RCall::NotifyStatusChange, RMobileCall::GetMobileCallStatus, RMobileCall::NotifyCallEvent, RCall::GetStatus, RCall::Dial, RCall::HangUp, RMobileCall::Resume + * @SYMTestExpectedResults Pass - Call 1 resumed successfully. + * @SYMTestType CIT + * @SYMTestCaseDependencies live/automatic + * + * Reason for test: Verify call status and call event is correct. + * + * @return - TVerdict code + */ + { + + //////////////////////////////////////////////////////////////// + // SET UP + //////////////////////////////////////////////////////////////// + + + // Call TNetworkTsyTestHelper::WaitForRegisteredOnHomeNetworkL + RMobilePhone& phone = iEtelSessionMgr.GetPhoneL(KMainServer,KMainPhone); + CHECK_EQUALS_L(iNetworkTestHelper.WaitForRegisteredOnHomeNetworkL(phone), KErrNone, + _L("TNetworkTsyTestHelper::WaitForRegisteredOnHomeNetworkL returned with an error")); + + // Check phone supports KCapsVoice. + RMobilePhone::TCaps caps; + CHECK_EQUALS_L(phone.GetCaps(caps), KErrNone, _L("RMobilePhone::GetCaps return value is not KErrNone")); + CHECK_BITS_SET_L(caps.iFlags, RMobilePhone::KCapsVoice, KNoUnwantedBits, _L("RMobilePhone::GetCaps returned wrong caps")); + + // Get Voice line 1. + RMobileLine& voiceLine=iEtelSessionMgr.GetLineL(KMainServer, KMainPhone, KVoiceLine); + + // Get call 1. + RMobileCall& call1=iEtelSessionMgr.GetCallL(KMainServer, KMainPhone, KVoiceLine, KCall1); + + // Dial a number that answers on call 1. + TPtrC number; + CHECK_TRUE_L(GetStringFromConfig(KIniVoiceNumSection, KIniVoiceNumber1, number) != EFalse, _L("GetStringFromConfig did not complete as expected")); + DEBUG_PRINTF1(_L("Board Now Dialling: ")); + TCoreEtelRequestStatus dialStatus(call1, &RCall::DialCancel); + CleanupStack::PushL(dialStatus); + call1.Dial(dialStatus, number); + CHECK_EQUALS_L(WaitForRequestWithTimeOut(dialStatus, ETimeLong), KErrNone, _L("RCall::Dial timed-out")); + CHECK_EQUALS_L(dialStatus.Int(), KErrNone, _L("RCall::Dial returned with an error")); + + // Hold call 1. + TExtEtelRequestStatus holdStatus(call1, EMobileCallHold); + CleanupStack::PushL(holdStatus); + call1.Hold(holdStatus); + CHECK_EQUALS_L(WaitForRequestWithTimeOut(holdStatus, ETimeMedium),KErrNone, _L("RMobileCall::Hold timed out")); + CHECK_EQUALS_L(holdStatus.Int(), KErrNone, _L("RMobileCall::Hold returned with an error")); + + // Get call 2. + RMobileCall& call2 = iEtelSessionMgr.GetCallL(KMainServer, KMainPhone, KVoiceLine, KCall2); + + + //////////////////////////////////////////////////////////////// + // SET UP END + //////////////////////////////////////////////////////////////// + + StartTest(); + + //////////////////////////////////////////////////////////////// + // TEST START + //////////////////////////////////////////////////////////////// + + + // Post notifier for RCall::NotifyStatusChange for call 2 + RCall::TStatus callStatus2; + TCoreEtelRequestStatus notifyStatusChangeStatus2(call2, &RCall::NotifyStatusChangeCancel); + CleanupStack::PushL(notifyStatusChangeStatus2); + call2.NotifyStatusChange(notifyStatusChangeStatus2, callStatus2); + + // Post notification RMobileCall::NotifyMobileCallStatusChange for call 2 + TExtEtelRequestStatus notifyMobileCallStatusChangeStatus2(call2, EMobileCallNotifyMobileCallStatusChange); + CleanupStack::PushL(notifyMobileCallStatusChangeStatus2); + RMobileCall::TMobileCallStatus mobileCallStatus2; + call2.NotifyMobileCallStatusChange(notifyMobileCallStatusChangeStatus2, mobileCallStatus2); + + // Dial a RPS on call 2. + TCoreEtelRequestStatus dialStatus2(call2, &RCall::DialCancel); + CleanupStack::PushL(dialStatus2); + TPtrC rpsNumber; + GetRPSNumber(EVoiceLine, rpsNumber); + ASSERT_EQUALS(RPSAnswerNextCallL(EVoiceLine), KErrNone, _L("CCTSYIntegrationTestSuiteStepBase::RPSAnswerNextCallL")); + call2.Dial(dialStatus2, rpsNumber); + ASSERT_EQUALS(WaitForRequestWithTimeOut(dialStatus2, ETimeMedium), KErrNone, _L("RCall::Dial timed-out")); + ASSERT_EQUALS(dialStatus2.Int(), KErrNone, _L("RCall::Dial returned an error")); + + // === Check call status === + + // Check RCall::NotifyStatusChange for call 2 completes with EStatusDialling -> EStatusConnecting -> EStatusConnected. + const TInt wantedStatus = KErrNone; + RCall::TStatus expectedCallStatus2 = RCall::EStatusDialling; + iCallControlTestHelper.WaitForCallNotifyStatusChange(call2, + notifyStatusChangeStatus2, + callStatus2, + expectedCallStatus2, + wantedStatus); + + call2.NotifyStatusChange(notifyStatusChangeStatus2, callStatus2); + expectedCallStatus2 = RCall::EStatusConnecting; + iCallControlTestHelper.WaitForCallNotifyStatusChange(call2, + notifyStatusChangeStatus2, + callStatus2, + expectedCallStatus2, + wantedStatus); + + call2.NotifyStatusChange(notifyStatusChangeStatus2, callStatus2); + expectedCallStatus2 = RCall::EStatusConnected; + iCallControlTestHelper.WaitForCallNotifyStatusChange(call2, + notifyStatusChangeStatus2, + callStatus2, + expectedCallStatus2, + wantedStatus); + + // Check RCall::GetStatus for call 2 returns EStatusConnected. + ASSERT_EQUALS(call2.GetStatus(callStatus2), KErrNone, _L("RCall::GetStatus returned an Error")); + ASSERT_EQUALS(callStatus2, RCall::EStatusConnected, _L("RCall::GetStatus did not return EStatusConnected")); + + // Check RMobileCall::NotifyMobileCallStatusChange for call 2 completes with EStatusDialling->EStatusConnecting->EStatusConnected + RMobileCall::TMobileCallStatus expectedMobileCallStatus2 = RMobileCall::EStatusDialling; + iCallControlTestHelper.WaitForMobileCallNotifyMobileCallStatusChange(call2, + notifyMobileCallStatusChangeStatus2, + mobileCallStatus2, + expectedMobileCallStatus2, + wantedStatus); + + call2.NotifyMobileCallStatusChange(notifyMobileCallStatusChangeStatus2, mobileCallStatus2); + expectedMobileCallStatus2 = RMobileCall::EStatusConnecting; + iCallControlTestHelper.WaitForMobileCallNotifyMobileCallStatusChange(call2, + notifyMobileCallStatusChangeStatus2, + mobileCallStatus2, + expectedMobileCallStatus2, + wantedStatus); + + call2.NotifyMobileCallStatusChange(notifyMobileCallStatusChangeStatus2, mobileCallStatus2); + expectedMobileCallStatus2 = RMobileCall::EStatusConnected; + iCallControlTestHelper.WaitForMobileCallNotifyMobileCallStatusChange(call2, + notifyMobileCallStatusChangeStatus2, + mobileCallStatus2, + expectedMobileCallStatus2, + wantedStatus); + + // Check RMobileCall::GetMobileCallStatus for call 2 returns EStatusConnected + ASSERT_EQUALS(call2.GetMobileCallStatus(mobileCallStatus2), KErrNone, _L("RMobileCall::GetMobileCallStatus returned an error")); + ASSERT_EQUALS(mobileCallStatus2, RMobileCall::EStatusConnected, _L("RMobileCall::GetMobileCallStatus did not return a status EStatusConnected")); + + // Post notifier for RMobileCall::NotifyCallEvent for call 2 + TExtEtelRequestStatus notifyCallEventStatus2(call2, EMobileCallNotifyCallEvent); + CleanupStack::PushL(notifyCallEventStatus2); + RMobileCall::TMobileCallEvent mobileCallEvent2; + call2.NotifyCallEvent(notifyCallEventStatus2, mobileCallEvent2); + + // RPS hangs up call 2. + ASSERT_EQUALS(RPSHangupL(EVoiceLine,0), KErrNone, _L("CCTSYIntegrationTestSuiteStepBase::RPSHangup returned an error")); + + // Check RMobileCall::NotifyCallEvent for call 2 completes with ERemoteTerminated + RMobileCall::TMobileCallEvent expectedMobileCallEvent2 = RMobileCall::ERemoteTerminated; + iCallControlTestHelper.WaitForMobileCallNotifyCallEvent( + call2, + notifyCallEventStatus2, + mobileCallEvent2, + expectedMobileCallEvent2, + wantedStatus); + + // === Check call statuses === + + // Check RCall::NotifyStatusChange for call 2 completes with EStatusIdle + expectedCallStatus2 = RCall::EStatusIdle; + call2.NotifyStatusChange(notifyStatusChangeStatus2, callStatus2); + iCallControlTestHelper.WaitForCallNotifyStatusChange(call2, + notifyStatusChangeStatus2, + callStatus2, + expectedCallStatus2, + wantedStatus); + + // Check RCall::GetStatus for call 2 returns EStatusIdle + ASSERT_EQUALS(call2.GetStatus(callStatus2), KErrNone, _L("RCall::GetStatus returned an Error")); + ASSERT_EQUALS(callStatus2, RCall::EStatusIdle, _L("RCall::GetStatus did not return EStatusIdle")); + + // Check RMobileCall::NotifyMobileCallStatusChange for call 2 completes with EStatusIdle + call2.NotifyMobileCallStatusChange(notifyMobileCallStatusChangeStatus2, mobileCallStatus2); + expectedMobileCallStatus2 = RMobileCall::EStatusIdle; + iCallControlTestHelper.WaitForMobileCallNotifyMobileCallStatusChange(call2, + notifyMobileCallStatusChangeStatus2, + mobileCallStatus2, + expectedMobileCallStatus2, + wantedStatus); + + // Check RMobileCall::GetMobileCallStatus for call 2 returns EStatusIdle + ASSERT_EQUALS(call2.GetMobileCallStatus(mobileCallStatus2), KErrNone, _L("RMobileCall::GetMobileCallStatus returned an error")); + ASSERT_EQUALS(mobileCallStatus2, RMobileCall::EStatusIdle, _L("RMobileCall::GetMobileCallStatus did not return a status EStatusIdle")); + + + // Check RMobileCall::GetMobileCallStatus for call 1 returns EStatusHold + RMobileCall::TMobileCallStatus mobileCallStatus; + ASSERT_EQUALS(call1.GetMobileCallStatus(mobileCallStatus), KErrNone, _L("RMobileCall::GetMobileCallStatus returned an error")); + ASSERT_EQUALS(mobileCallStatus, RMobileCall::EStatusHold, _L("RMobileCall::GetMobileCallStatus did not return a status EStatusHold")); + + // Post notifier for RMobileCall::NotifyCallEvent for call 1 + TExtEtelRequestStatus notifyCallEventStatus(call1, EMobileCallNotifyCallEvent); + CleanupStack::PushL(notifyCallEventStatus); + RMobileCall::TMobileCallEvent mobileCallEvent; + call1.NotifyCallEvent(notifyCallEventStatus, mobileCallEvent); + + + // Post notification RMobileCall::NotifyMobileCallStatusChange for call 1 + TExtEtelRequestStatus notifyMobileCallStatusChangeStatus(call1, EMobileCallNotifyMobileCallStatusChange); + CleanupStack::PushL(notifyMobileCallStatusChangeStatus); + call1.NotifyMobileCallStatusChange(notifyMobileCallStatusChangeStatus, mobileCallStatus); + + // Resume call 1. + TExtEtelRequestStatus resumeStatus(call1, EMobileCallResume); + CleanupStack::PushL(resumeStatus); + call1.Resume(resumeStatus); + ASSERT_EQUALS(WaitForRequestWithTimeOut(resumeStatus, ETimeMedium), KErrNone, _L("RMobileCall::Resume timed-out")); + ASSERT_EQUALS(resumeStatus.Int(), KErrNone, _L("RMobileCall::Resume returned an error")); + + // Check RCall::NotifyCallEvent for call 1 completes with ELocalResume + RMobileCall::TMobileCallEvent expectedMobileCallEvent = RMobileCall::ELocalResume; + iCallControlTestHelper.WaitForMobileCallNotifyCallEvent( + call1, + notifyCallEventStatus, + mobileCallEvent, + expectedMobileCallEvent, + wantedStatus); + // === Check call status === + + // Check RMobileCall::NotifyMobileCallStatusChange for call 1 completes with EStatusConnected + RMobileCall::TMobileCallStatus expectedMobileCallStatus = RMobileCall::EStatusConnected; + iCallControlTestHelper.WaitForMobileCallNotifyMobileCallStatusChange(call1, + notifyMobileCallStatusChangeStatus, + mobileCallStatus, + expectedMobileCallStatus, + wantedStatus); + + // Check RMobileCall::GetMobileCallStatus for call 1 returns EStatusConnected + ASSERT_EQUALS(call1.GetMobileCallStatus(mobileCallStatus), KErrNone, _L("RMobileCall::GetMobileCallStatus returned an error")); + ASSERT_EQUALS(mobileCallStatus, RMobileCall::EStatusConnected, _L("RMobileCall::GetMobileCallStatus did not return a status EStatusConnected")); + + // Hangup call 1. + TCoreEtelRequestStatus hangUpStatus (call1,&RCall::HangUpCancel); + CleanupStack::PushL(hangUpStatus); + call1.HangUp(hangUpStatus); + ASSERT_EQUALS(WaitForRequestWithTimeOut(hangUpStatus, ETimeMedium), KErrNone, _L("RCall::HangUp timed-out")); + ASSERT_EQUALS(hangUpStatus.Int(), KErrNone, _L("RCall::HangUp returned an error")); + + + //////////////////////////////////////////////////////////////// + // TEST END + //////////////////////////////////////////////////////////////// + + StartCleanup(); + + // Pop + // dialStatus + // holdStatus + // notifyStatusChangeStatus2 + // notifyMobileCallStatusChangeStatus2 + // dialStatus2 + // notifyCallEventStatus2 + // notifyCallEventStatus + // notifyMobileCallStatusChangeStatus + // resumeStatus + // hangUpStatus + CleanupStack::PopAndDestroy(10, &dialStatus); + + return TestStepResult(); + } + +TPtrC CCTSYIntegrationTestCallControl0030::GetTestStepName() +/** + * @return The test step name. + */ + { + return _L("CCTSYIntegrationTestCallControl0030"); + } + + + +CCTSYIntegrationTestCallControl0031::CCTSYIntegrationTestCallControl0031(CEtelSessionMgr& aEtelSessionMgr) + : CCTSYIntegrationTestCallControlBase(aEtelSessionMgr) +/** + * Constructor. + */ + { + SetTestStepName(CCTSYIntegrationTestCallControl0031::GetTestStepName()); + } + +CCTSYIntegrationTestCallControl0031::~CCTSYIntegrationTestCallControl0031() +/** + * Destructor. + */ + { + } + +TVerdict CCTSYIntegrationTestCallControl0031::doTestStepL() +/** + * @SYMTestCaseID BA-CTSY-INT-CCON-0031 + * @SYMFssID BA/CTSY/CCON-0031 + * @SYMTestCaseDesc Attempt to hold a call when there is already one on hold. + * @SYMTestPriority High + * @SYMTestActions RMobileCall::NotifyMobileCallCapsChange, RMobileCall::GetMobileCallStatus, RCall::NotifyStatusChange, RMobileCall::NotifyMobileCallStatusChange, RCall::NotifyCapsChange, RCall::GetStatus, RMobileCall::GetMobileCallCaps, RCall::Dial, RMobileCall::Hold + * @SYMTestExpectedResults Pass - Error returned on attempt to hold a second call. + * @SYMTestType CIT + * @SYMTestCaseDependencies live/automatic + * + * Reason for test: Verify error is returned on attempt to hold and call stays connected. + * + * @return - TVerdict code + */ + { + + //////////////////////////////////////////////////////////////// + // SET UP + //////////////////////////////////////////////////////////////// + + // Call TNetworkTsyTestHelper::WaitForRegisteredOnHomeNetworkL + RMobilePhone& phone = iEtelSessionMgr.GetPhoneL(KMainServer,KMainPhone); + CHECK_EQUALS_L(iNetworkTestHelper.WaitForRegisteredOnHomeNetworkL(phone), KErrNone, + _L("TNetworkTsyTestHelper::WaitForRegisteredOnHomeNetworkL returned with an error")); + + // Check phone supports KCapsVoice. + RPhone::TCaps phoneCaps; + CHECK_EQUALS_L(phone.GetCaps(phoneCaps), KErrNone, _L("RPhone::GetCaps returned an error")); + CHECK_BITS_SET_L(phoneCaps.iFlags, RPhone::KCapsVoice, KNoUnwantedBits, _L("RPhone::GetCaps returned wrong caps")); + + // Get Voice line 1. + RMobileLine& voiceLine = iEtelSessionMgr.GetLineL(KMainServer, KMainPhone, KVoiceLine); + + // Get call 1 + RMobileCall& call1 = iEtelSessionMgr.GetCallL(KMainServer, KMainPhone, KVoiceLine, KCall1); + + // Dial a number that answers on call 1. + TPtrC number; + CHECK_TRUE_L(GetStringFromConfig(KIniVoiceNumSection, KIniVoiceNumber1, number) != EFalse, _L("GetStringFromConfig did not complete as expected")); + DEBUG_PRINTF1(_L("Board Now Dialling: ")); + TCoreEtelRequestStatus dialStatus(call1, &RCall::DialCancel); + CleanupStack::PushL(dialStatus); + + call1.Dial(dialStatus, number); + CHECK_EQUALS_L(WaitForRequestWithTimeOut(dialStatus, ETimeLong), KErrNone, _L("RCall::Dial timed-out")); + CHECK_EQUALS_L(dialStatus.Int(), KErrNone, _L("RCall::Dial returned with an error")); + + // Hold call 1. + TExtEtelRequestStatus holdStatus(call1, EMobileCallHold); + CleanupStack::PushL(holdStatus); + call1.Hold(holdStatus); + CHECK_EQUALS_L(WaitForRequestWithTimeOut(holdStatus, ETimeMedium),KErrNone, _L("RMobileCall::Hold timed out")); + CHECK_EQUALS_L(holdStatus.Int(), KErrNone, _L("RMobileCall::Hold returned with an error")); + + // Ensure mobile call status of call 1 is EStatusHold + RMobileCall::TMobileCallStatus mobileCallStatus; + CHECK_EQUALS_L(call1.GetMobileCallStatus(mobileCallStatus), KErrNone, _L("RMobileCall::GetMobileCallStatus returned with an error")); + CHECK_EQUALS_L(mobileCallStatus, RMobileCall::EStatusHold, _L("RMobileCall::GetMobileCallStatus did not return EStatusHold as expected")); + + // Get call 2. + RMobileCall& call2 = iEtelSessionMgr.GetCallL(KMainServer, KMainPhone, KVoiceLine, KCall2); + + + //////////////////////////////////////////////////////////////// + // SET UP END + //////////////////////////////////////////////////////////////// + + StartTest(); + + //////////////////////////////////////////////////////////////// + // TEST START + //////////////////////////////////////////////////////////////// + + // post notifier RCall::NotifyCapsChange for call 2 + RCall::TCaps callCaps; + TCoreEtelRequestStatus notifyCapsChangeStatus (call2, &RCall::NotifyCapsChangeCancel); + CleanupStack::PushL(notifyCapsChangeStatus); + call2.NotifyCapsChange(notifyCapsChangeStatus,callCaps); + + // post a notifier RMobileCall::NotifyMobileCallCapsChange for call 2 + TExtEtelRequestStatus notifyMobileCallCapsChangeStatus(call2, EMobileCallNotifyMobileCallCapsChange); + CleanupStack::PushL(notifyMobileCallCapsChangeStatus); + RMobileCall::TMobileCallCapsV1 mobileCallCaps; + RMobileCall::TMobileCallCapsV1Pckg mobileCallCapsPckg(mobileCallCaps); + call2.NotifyMobileCallCapsChange(notifyMobileCallCapsChangeStatus, mobileCallCapsPckg); + + // post notifier for RCall::NotifyStatusChange for call 2 + RCall::TStatus callStatus; + TCoreEtelRequestStatus notifyStatusChangeStatus(call2, &RCall::NotifyStatusChangeCancel); + CleanupStack::PushL(notifyStatusChangeStatus); + call2.NotifyStatusChange(notifyStatusChangeStatus, callStatus); + + // post notifier for RMobileCall::NotifyMobileCallStatusChange + RMobileCall::TMobileCallStatus notifyMobileCallStatus; + TExtEtelRequestStatus notifyMobileCallStatusChangeStatus(call2, EMobileCallNotifyMobileCallStatusChange); + CleanupStack::PushL(notifyMobileCallStatusChangeStatus); + call2.NotifyMobileCallStatusChange(notifyMobileCallStatusChangeStatus, notifyMobileCallStatus); + + // Dial a number that answers on call 2. + ASSERT_TRUE(GetStringFromConfig(KIniVoiceNumSection, KIniVoiceNumber2, number) != EFalse, _L("GetStringFromConfig did not complete as expected")); + DEBUG_PRINTF1(_L("Board Now Dialling: ")); + TCoreEtelRequestStatus dialStatus2(call2, &RCall::DialCancel); + CleanupStack::PushL(dialStatus2); + call2.Dial(dialStatus2, number); + ASSERT_EQUALS(WaitForRequestWithTimeOut(dialStatus2, ETimeLong), KErrNone, _L("RCall::Dial timed-out")); + ASSERT_EQUALS(dialStatus2.Int(), KErrNone, _L("RCall::Dial returned with an error")); + + // === Check call caps === + + // Check RCall::NotifyCapsChange for call 2 completes with caps in set of KCapsVoice | KCapsHangUp. + RCall::TCaps wantedCaps; + RCall::TCaps unwantedCaps; + wantedCaps.iFlags = RCall::KCapsVoice | RCall::KCapsHangUp; + unwantedCaps.iFlags = 0; + const TInt wantedStatus = KErrNone; + iCallControlTestHelper.WaitForCallNotifyCapsChange(call2, + notifyCapsChangeStatus, + callCaps, + wantedCaps, + unwantedCaps, + wantedStatus); + + // Check RCall::GetCaps for call 2 supports KCapsHangUp | KCapsVoice. + TUint32 wantedCaps2 = RCall::KCapsHangUp | RCall::KCapsVoice; + ASSERT_EQUALS(call2.GetCaps(callCaps), KErrNone, _L("RCall::GetCaps returned an Error")); + ASSERT_BITS_SET(callCaps.iFlags, wantedCaps2, KNoUnwantedBits, _L("RCall::GetCaps returned unexpected Caps")); + + // Check RMobileCall::NotifyMobileCallCapsChange for call 2 completes with iCallControlCaps in set of KCapsVoice | KCapsSwap | KCapsHangUp | KCapsJoin | KCapsTransfer + // Check RMobileCall::NotifyMobileCallCapsChange for call 2 completes with iCallControlCaps NOT in set of KCapsHold + // Check RMobileCall::NotifyMobileCallCapsChange for call 2 completes with iCallEventCaps in set of KCapsRemoteHold | KCapsRemoteTerminate | KCapsRemoteConferenceCreate + RMobileCall::TMobileCallCapsV1 wantedMobileCaps; + RMobileCall::TMobileCallCapsV1 unWantedMobileCaps; + wantedMobileCaps.iCallControlCaps = RMobileCall::KCapsVoice | + RMobileCall::KCapsSwap | + RMobileCall::KCapsHangUp | + RMobileCall::KCapsJoin| + RMobileCall::KCapsTransfer; + + wantedMobileCaps.iCallEventCaps = RMobileCall::KCapsRemoteHold | + RMobileCall::KCapsRemoteTerminate | + RMobileCall::KCapsRemoteConferenceCreate; + TCmpRMobileCallTMobileCallCaps mobileCapsComp(wantedMobileCaps,mobileCallCaps, *this); + iCallControlTestHelper.WaitForMobileCallNotifyMobileCallCapsChange(call2, + notifyMobileCallCapsChangeStatus, + mobileCapsComp, + wantedStatus); + unWantedMobileCaps.iCallControlCaps = RMobileCall::KCapsHold; + ASSERT_BITS_SET(wantedMobileCaps.iCallControlCaps, wantedMobileCaps.iCallControlCaps, unWantedMobileCaps.iCallControlCaps, + _L("RMobileCall::NotifyMobileCallCapsChange returned unexpected iCallControlCaps")); + + // Check RMobileCall::GetMobileCallCaps for call 2 includes iCallControlCaps in set of KCapsVoice | KCapsSwap | KCapsHangUp | KCapsJoin | KCapsTransfer + // Check RMobileCall::GetMobileCallCaps for call 2 includes iCallControlCaps NOT in set of KCapsHold + // Check RMobileCall::GetMobileCallCaps for call 2 includes iCallEventCaps in set of KCapsRemoteHold | KCapsRemoteTerminate | KCapsRemoteConferenceCreate. + ASSERT_EQUALS(call2.GetMobileCallCaps(mobileCallCapsPckg), KErrNone, + _L("RMobileCall::GetMobileCallCaps returned an error")); + wantedMobileCaps.iCallControlCaps = RMobileCall::KCapsVoice | + RMobileCall::KCapsSwap | + RMobileCall::KCapsHangUp | + RMobileCall::KCapsJoin| + RMobileCall::KCapsTransfer; + + unWantedMobileCaps.iCallControlCaps = RMobileCall::KCapsHold; + ASSERT_BITS_SET(mobileCallCaps.iCallControlCaps, wantedMobileCaps.iCallControlCaps,unWantedMobileCaps.iCallControlCaps, + _L("RMobileCall::GetMobileCallCaps returned unexpected iCallControlCaps")); + + wantedMobileCaps.iCallEventCaps = RMobileCall::KCapsRemoteHold | + RMobileCall::KCapsRemoteTerminate | + RMobileCall::KCapsRemoteConferenceCreate; + ASSERT_BITS_SET(mobileCallCaps.iCallEventCaps, wantedMobileCaps.iCallEventCaps, KNoUnwantedBits, + _L("RMobileCall::GetMobileCallCaps returned unexpected iCallEventCaps")); + + // === Check call status === + + // Check RCall::NotifyStatusChange for call 2 completes with EStatusDialling -> EStatusConnecting -> EStatusConnected. + RCall::TStatus expectedCallStatus = RCall::EStatusDialling; + iCallControlTestHelper.WaitForCallNotifyStatusChange(call2, + notifyStatusChangeStatus, + callStatus, + expectedCallStatus, + wantedStatus); + + call2.NotifyStatusChange(notifyStatusChangeStatus, callStatus); + expectedCallStatus = RCall::EStatusConnecting; + iCallControlTestHelper.WaitForCallNotifyStatusChange(call2, + notifyStatusChangeStatus, + callStatus, + expectedCallStatus, + wantedStatus); + + call2.NotifyStatusChange(notifyStatusChangeStatus, callStatus); + expectedCallStatus = RCall::EStatusConnected; + iCallControlTestHelper.WaitForCallNotifyStatusChange(call2, + notifyStatusChangeStatus, + callStatus, + expectedCallStatus, + wantedStatus); + // Check RCall::GetStatus for call 2 returns EStatusConnected. + ASSERT_EQUALS(call2.GetStatus(callStatus),KErrNone, _L("RCall::GetStatus returned an error")); + ASSERT_EQUALS(callStatus, RCall::EStatusConnected, _L("RCall::GetStatus returned an unexpected call status")); + + + // Check RMobileCall::NotifyMobileCallStatusChange for call 2 completes with EStatusDialling -> EStatusConnecting -> EStatusConnected. + RMobileCall::TMobileCallStatus expectedMobileCallStatus = RMobileCall::EStatusDialling; + iCallControlTestHelper.WaitForMobileCallNotifyMobileCallStatusChange(call2, + notifyMobileCallStatusChangeStatus, + notifyMobileCallStatus, + expectedMobileCallStatus, + wantedStatus); + call2.NotifyMobileCallStatusChange(notifyMobileCallStatusChangeStatus, notifyMobileCallStatus); + expectedMobileCallStatus = RMobileCall::EStatusConnecting; + iCallControlTestHelper.WaitForMobileCallNotifyMobileCallStatusChange(call2, + notifyMobileCallStatusChangeStatus, + notifyMobileCallStatus, + expectedMobileCallStatus, + wantedStatus); + call2.NotifyMobileCallStatusChange(notifyMobileCallStatusChangeStatus, notifyMobileCallStatus); + expectedMobileCallStatus = RMobileCall::EStatusConnected; + iCallControlTestHelper.WaitForMobileCallNotifyMobileCallStatusChange(call2, + notifyMobileCallStatusChangeStatus, + notifyMobileCallStatus, + expectedMobileCallStatus, + wantedStatus); + // Check RMobileCall::GetMobileCallStatus for call 2 returns status of EStatusConnected. + ASSERT_EQUALS(call2.GetMobileCallStatus(mobileCallStatus), KErrNone, _L("RMobileCall::GetMobileStatus returned an error")); + ASSERT_EQUALS(mobileCallStatus, RMobileCall::EStatusConnected, _L("RMobileCall::GetMobileStatus did not return a status EStatusConnected")); + + // === Attempt to hold call 2 when call 1 is already on hold === + + // Hold call 2. + TExtEtelRequestStatus holdStatus2(call2, EMobileCallHold); + CleanupStack::PushL(holdStatus2); + call2.Hold(holdStatus2); + ASSERT_EQUALS(WaitForRequestWithTimeOut(holdStatus2, ETimeMedium),KErrNone, _L("RMobileCall::Hold timed out")); + + // Check error is returned. + ASSERT_TRUE(holdStatus2.Int() != KErrNone, _L("RMobileCall::Hold returned KErrNone, should have returned an error")); + + // === Check call 2 is still active and call 1 is still on hold === + + // Check RMobileCall::GetMobileCallStatus for call 2 returns status of EStatusConnected. + ASSERT_EQUALS(call2.GetMobileCallStatus(mobileCallStatus), KErrNone, _L("RMobileCall::GetMobileCallStatus returned with an error")); + ASSERT_EQUALS(mobileCallStatus, RMobileCall::EStatusConnected, _L("RMobileCall::GetMobileCallStatus did not return EStatusConnected as expected")); + + // Check RMobileCall::GetMobileCallStatus for call 1 returns status of EStatusHold. + ASSERT_EQUALS(call1.GetMobileCallStatus(mobileCallStatus), KErrNone, _L("RMobileCall::GetMobileCallStatus returned with an error")); + ASSERT_EQUALS(mobileCallStatus, RMobileCall::EStatusHold, _L("RMobileCall::GetMobileCallStatus did not return EStatusHold as expected")); + + // Terminate both calls + ASSERT_EQUALS(call1.HangUp(), KErrNone, _L("RMobileCall::HangUp returned with an error")); + ASSERT_EQUALS(call2.HangUp(), KErrNone, _L("RMobileCall::HangUp returned with an error")); + + //////////////////////////////////////////////////////////////// + // TEST END + //////////////////////////////////////////////////////////////// + + StartCleanup(); + + + // Pop + // dialStatus + // holdStatus + // notifyCapsChangeStatus + // notifyMobileCallCapsChangeStatus + // notifyStatusChangeStatus + // notifyMobileCallStatusChangeStatus + // dialStatus2 + // holdStatus2 + CleanupStack::PopAndDestroy(8, &dialStatus); + + return TestStepResult(); + } + +TPtrC CCTSYIntegrationTestCallControl0031::GetTestStepName() +/** + * @return The test step name. + */ + { + return _L("CCTSYIntegrationTestCallControl0031"); + } + + + +CCTSYIntegrationTestCallControl0032::CCTSYIntegrationTestCallControl0032(CEtelSessionMgr& aEtelSessionMgr) + : CCTSYIntegrationTestCallControlBase(aEtelSessionMgr) +/** + * Constructor. + */ + { + SetTestStepName(CCTSYIntegrationTestCallControl0032::GetTestStepName()); + } + +CCTSYIntegrationTestCallControl0032::~CCTSYIntegrationTestCallControl0032() +/** + * Destructor. + */ + { + } + +TVerdict CCTSYIntegrationTestCallControl0032::doTestStepL() +/** + * @SYMTestCaseID BA-CTSY-INT-CCON-0032 + * @SYMFssID BA/CTSY/CCON-0032 + * @SYMTestCaseDesc Resume a call that is not on hold. + * @SYMTestPriority High + * @SYMTestActions RMobileCall::NotifyMobileCallCapsChange, RMobileCall::GetMobileCallStatus, RCall::NotifyStatusChange, RMobileCall::NotifyMobileCallStatusChange, RCall::NotifyCapsChange, RCall::GetStatus, RMobileCall::GetMobileCallCaps, RMobileCall::Resume, RCall::Dial + * @SYMTestExpectedResults Pass - Error returned on attempt to resume a call that is not on hold. + * @SYMTestType CIT + * @SYMTestCaseDependencies live/automatic + * + * Reason for test: Verify error is returned on attempt to resume and call stays connected. + * + * @return - TVerdict code + */ + { + + //////////////////////////////////////////////////////////////// + // SET UP + //////////////////////////////////////////////////////////////// + + + // Call TNetworkTsyTestHelper::WaitForRegisteredOnHomeNetworkL + RMobilePhone& phone = iEtelSessionMgr.GetPhoneL(KMainServer,KMainPhone); + CHECK_EQUALS_L(iNetworkTestHelper.WaitForRegisteredOnHomeNetworkL(phone), KErrNone, + _L("TNetworkTsyTestHelper::WaitForRegisteredOnHomeNetworkL returned with an error")); + + // Check phone supports KCapsVoice. + RPhone::TCaps phoneCaps; + CHECK_EQUALS_L(phone.GetCaps(phoneCaps), KErrNone, _L("RPhone::GetCaps returned an error")); + CHECK_BITS_SET_L(phoneCaps.iFlags, RPhone::KCapsVoice, KNoUnwantedBits, _L("RPhone::GetCaps returned wrong caps")); + + // Get Voice line 1. + RMobileLine& voiceLine = iEtelSessionMgr.GetLineL(KMainServer, KMainPhone, KVoiceLine); + + // Get call 1 + RMobileCall& call1 = iEtelSessionMgr.GetCallL(KMainServer, KMainPhone, KVoiceLine, KCall1); + + + //////////////////////////////////////////////////////////////// + // SET UP END + //////////////////////////////////////////////////////////////// + + StartTest(); + + //////////////////////////////////////////////////////////////// + // TEST START + //////////////////////////////////////////////////////////////// + + + // Post notifier for RCall::NotifyCapsChange + TCoreEtelRequestStatus notifyCapsChangeStatus (call1, &RCall::NotifyCapsChangeCancel); + CleanupStack::PushL(notifyCapsChangeStatus); + RCall::TCaps callCaps; + call1.NotifyCapsChange(notifyCapsChangeStatus, callCaps); + + // Post notifier for RMobileCall::NotifyMobileCallCapsChange + TExtEtelRequestStatus notifyMobileCallCapsChangeStatus(call1, EMobileCallNotifyMobileCallCapsChange); + CleanupStack::PushL(notifyMobileCallCapsChangeStatus); + RMobileCall::TMobileCallCapsV1 mobileCallCaps; + RMobileCall::TMobileCallCapsV1Pckg mobileCallCapsPckg(mobileCallCaps); + call1.NotifyMobileCallCapsChange(notifyMobileCallCapsChangeStatus,mobileCallCapsPckg); + + // Post notifier for RCall::NotifyStatusChange for call 1 + RCall::TStatus callStatus; + TCoreEtelRequestStatus notifyStatusChangeStatus(call1,&RCall::NotifyStatusChangeCancel); + CleanupStack::PushL(notifyStatusChangeStatus); + call1.NotifyStatusChange(notifyStatusChangeStatus, callStatus); + + // Post notifier for RMobileCall::NotifyMobileCallStatusChange for call 1 + RMobileCall::TMobileCallStatus mobileCallStatus; + TExtEtelRequestStatus notifyMobileCallStatusChangeStatus(call1, EMobileCallNotifyMobileCallStatusChange); + CleanupStack::PushL(notifyMobileCallStatusChangeStatus); + call1.NotifyMobileCallStatusChange(notifyMobileCallStatusChangeStatus, mobileCallStatus); + + // Dial a number that answers. + TPtrC number; + ASSERT_TRUE(GetStringFromConfig(KIniVoiceNumSection, KIniVoiceNumber1, number) != EFalse, _L("GetStringFromConfig did not complete as expected")); + DEBUG_PRINTF1(_L("Board Now Dialling: ")); + TCoreEtelRequestStatus dialStatus(call1, &RCall::DialCancel); + CleanupStack::PushL(dialStatus); + call1.Dial(dialStatus, number); + ASSERT_EQUALS(WaitForRequestWithTimeOut(dialStatus, ETimeLong), KErrNone, _L("RCall::Dial timed-out")); + ASSERT_EQUALS(dialStatus.Int(), KErrNone, _L("RCall::Dial returned with an error")); + + // === Check call caps === + + // Check RCall::NotifyCapsChange completes with caps in set of KCapsVoice | KCapsHangUp. + RCall::TCaps wantedCaps, unwantedCaps; + wantedCaps.iFlags = RCall::KCapsVoice | RCall::KCapsHangUp; + unwantedCaps.iFlags = 0; + const TInt wantedStatus = KErrNone; + iCallControlTestHelper.WaitForCallNotifyCapsChange(call1, + notifyCapsChangeStatus, + callCaps, + wantedCaps, + unwantedCaps, + wantedStatus); + + // Check RCall::GetCaps supports KCapsHangUp | KCapsVoice. + ASSERT_EQUALS(call1.GetCaps(callCaps), KErrNone, _L("RCall::GetCaps returned an error")); + ASSERT_BITS_SET(callCaps.iFlags, wantedCaps.iFlags, KNoUnwantedBits, _L("RCall::GetCaps returned wrong caps")); + + // Check RMobileCall::NotifyMobileCallCapsChange completes with iCallControlCaps in set of KCapsVoice | KCapsHold | KCapsHangUp. + // Check RMobileCall::NotifyMobileCallCapsChange completes with iCallControlCaps NOT in set of KCapsResume + // Check RMobileCall::NotifyMobileCallCapsChange completes with iCallEventCaps in set of KCapsLocalHold | KCapsLocalTransfer | KCapsRemoteHold | KCapsRemoteTerminate | KCapsRemoteConferenceCreate. + RMobileCall::TMobileCallCapsV1 wantedMobileCaps; + TUint32 unWantedControlCaps = RMobileCall::KCapsResume; + + wantedMobileCaps.iCallControlCaps = RMobileCall::KCapsVoice | + RMobileCall::KCapsHold | + RMobileCall::KCapsHangUp; + + wantedMobileCaps.iCallEventCaps = RMobileCall::KCapsLocalHold | + RMobileCall::KCapsLocalTransfer | + RMobileCall::KCapsRemoteHold | + RMobileCall::KCapsRemoteTerminate | + RMobileCall::KCapsRemoteConferenceCreate; + + TCmpRMobileCallTMobileCallCaps mobileCapsComp(wantedMobileCaps, mobileCallCaps, *this); + iCallControlTestHelper.WaitForMobileCallNotifyMobileCallCapsChange(call1, + notifyMobileCallCapsChangeStatus, + mobileCapsComp, + wantedStatus); + + ASSERT_BITS_SET(mobileCallCaps.iCallControlCaps, wantedMobileCaps.iCallControlCaps, unWantedControlCaps, _L("RMobileCall::NotifyMobileCallCapsChange did not set expected iCallControlCaps")); + ASSERT_BITS_SET(mobileCallCaps.iCallEventCaps, wantedMobileCaps.iCallEventCaps, KNoUnwantedBits, _L("RMobileCall::NotifyMobileCallCapsChange did not set expected iCallControlCaps")); + + // Check RMobileCall::GetMobileCallCaps includes iCallControlCaps in set of KCapsVoice | KCapsHold | KCapsHangUp. + // Check RMobileCall::GetMobileCallCaps includes iCallControlCaps NOT in set of KCapsResume + ASSERT_EQUALS(call1.GetMobileCallCaps(mobileCallCapsPckg), KErrNone, _L("RMobileCall::GetMobileCallCaps returned an error")); + ASSERT_BITS_SET(mobileCallCaps.iCallControlCaps, wantedMobileCaps.iCallControlCaps, unWantedControlCaps, _L("RMobileCall::GetMobileCallCaps returned wrong caps")); + + // Check RMobileCall::GetMobileCallCaps includes iCallEventCaps in set of KCapsLocalHold | KCapsLocalTransfer | KCapsRemoteHold | KCapsRemoteTerminate | KCapsRemoteConferenceCreate. + ASSERT_BITS_SET(mobileCallCaps.iCallEventCaps, wantedMobileCaps.iCallEventCaps, KNoUnwantedBits, _L("RMobileCall::GetMobileCallCaps returned wrong caps")); + + // === Check call status === + + // Check RCall::NotifyStatusChange completes with EStatusDialling -> EStatusConnecting -> EStatusConnected. + RCall::TStatus expectedCallStatus = RCall::EStatusDialling; + iCallControlTestHelper.WaitForCallNotifyStatusChange(call1, + notifyStatusChangeStatus, + callStatus, + expectedCallStatus, + wantedStatus); + + // Check RCall::NotifyStatusChange completes with EStatusConnecting + call1.NotifyStatusChange(notifyStatusChangeStatus, callStatus); + expectedCallStatus = RCall::EStatusConnecting; + iCallControlTestHelper.WaitForCallNotifyStatusChange(call1, + notifyStatusChangeStatus, + callStatus, + expectedCallStatus, + wantedStatus); + + // Check RCall::NotifyStatusChange completes with EStatusConnected. + call1.NotifyStatusChange(notifyStatusChangeStatus, callStatus); + expectedCallStatus = RCall::EStatusConnected; + iCallControlTestHelper.WaitForCallNotifyStatusChange(call1, + notifyStatusChangeStatus, + callStatus, + expectedCallStatus, + wantedStatus); + + // Check RCall::GetStatus returns EStatusConnected. + ASSERT_EQUALS(call1.GetStatus(callStatus),KErrNone, _L("RCall::GetStatus returned an error")); + ASSERT_EQUALS(callStatus, RCall::EStatusConnected, _L("RCall::GetStatus returned an unexpected call status")); + + // Check RMobileCall::NotifyMobileCallStatusChange completes with EStatusDialling -> EStatusConnecting -> EStatusConnected. + RMobileCall::TMobileCallStatus expectedMobileCallStatus = RMobileCall::EStatusDialling; + iCallControlTestHelper.WaitForMobileCallNotifyMobileCallStatusChange(call1, + notifyMobileCallStatusChangeStatus, + mobileCallStatus, + expectedMobileCallStatus, + wantedStatus); + + // Check RMobileCall::NotifyMobileCallStatusChange completes with EStatusConnecting -> + call1.NotifyMobileCallStatusChange(notifyMobileCallStatusChangeStatus, mobileCallStatus); + expectedMobileCallStatus = RMobileCall::EStatusConnecting; + iCallControlTestHelper.WaitForMobileCallNotifyMobileCallStatusChange(call1, + notifyMobileCallStatusChangeStatus, + mobileCallStatus, + expectedMobileCallStatus, + wantedStatus); + + // Check RMobileCall::NotifyMobileCallStatusChange completes with EStatusConnected. + call1.NotifyMobileCallStatusChange(notifyMobileCallStatusChangeStatus, mobileCallStatus); + expectedMobileCallStatus = RMobileCall::EStatusConnected; + iCallControlTestHelper.WaitForMobileCallNotifyMobileCallStatusChange(call1, + notifyMobileCallStatusChangeStatus, + mobileCallStatus, + expectedMobileCallStatus, + wantedStatus); + + // Check RMobileCall::GetMobileCallStatus returns status of EStatusConnected. + ASSERT_EQUALS(call1.GetMobileCallStatus(mobileCallStatus), KErrNone, + _L("RMobileCall::GetMobileCallStatus returned an error")); + ASSERT_EQUALS(mobileCallStatus, RMobileCall::EStatusConnected, + _L("RMobileCall::GetMobileCallStatus did not return a status EStatusConnected")); + + // Resume call. + TExtEtelRequestStatus resumeStatus(call1, EMobileCallResume); + CleanupStack::PushL(resumeStatus); + call1.Resume(resumeStatus); + ASSERT_EQUALS(WaitForRequestWithTimeOut(resumeStatus, ETimeMedium), KErrNone, _L("RMobileCall::Resume timed-out")); + + // Check error is returned. + ASSERT_TRUE(resumeStatus.Int() != KErrNone, _L("RMobileCall::Resume did not return error as expected")); + + // === Check call is still connected === + + // Check RCall::GetStatus returns EStatusConnected. + ASSERT_EQUALS(call1.GetStatus(callStatus),KErrNone, _L("RCall::GetStatus returned an error")); + ASSERT_EQUALS(callStatus, RCall::EStatusConnected, _L("RCall::GetStatus returned an unexpected call status")); + + // Check RMobileCall::GetMobileCallStatus returns status of EStatusConnected. + ASSERT_EQUALS(call1.GetMobileCallStatus(mobileCallStatus), KErrNone, _L("RMobileCall::GetMobileCallStatus returned an error")); + ASSERT_EQUALS(mobileCallStatus, RMobileCall::EStatusConnected, _L("RMobileCall::GetMobileCallStatus did not return a status EStatusConnected")); + + // Hangup call 1. + TCoreEtelRequestStatus hangUpStatus (call1,&RCall::HangUpCancel); + CleanupStack::PushL(hangUpStatus); + call1.HangUp(hangUpStatus); + ASSERT_EQUALS(WaitForRequestWithTimeOut(hangUpStatus, ETimeMedium), KErrNone, _L("RCall::HangUp timed-out")); + ASSERT_EQUALS(hangUpStatus.Int(), KErrNone, _L("RCall::HangUp returned an error")); + + + //////////////////////////////////////////////////////////////// + // TEST END + //////////////////////////////////////////////////////////////// + + StartCleanup(); + + // Pop + // notifyCapsChangeStatus + // notifyMobileCallCapsChangeStatus + // notifyStatusChangeStatus + // notifyMobileCallStatusChangeStatus + // dialStatus + // resumeStatus + // hangUpStatus + CleanupStack::PopAndDestroy(7, ¬ifyCapsChangeStatus); + + + return TestStepResult(); + } + +TPtrC CCTSYIntegrationTestCallControl0032::GetTestStepName() +/** + * @return The test step name. + */ + { + return _L("CCTSYIntegrationTestCallControl0032"); + } + + + +CCTSYIntegrationTestCallControl0033::CCTSYIntegrationTestCallControl0033(CEtelSessionMgr& aEtelSessionMgr) + : CCTSYIntegrationTestCallControlBase(aEtelSessionMgr) +/** + * Constructor. + */ + { + SetTestStepName(CCTSYIntegrationTestCallControl0033::GetTestStepName()); + } + +CCTSYIntegrationTestCallControl0033::~CCTSYIntegrationTestCallControl0033() +/** + * Destructor. + */ + { + } + +TVerdict CCTSYIntegrationTestCallControl0033::doTestStepL() +/** + * @SYMTestCaseID BA-CTSY-INT-CCON-0033 + * @SYMFssID BA/CTSY/CCON-0033 + * @SYMTestCaseDesc Check that any client can hold or resume calls, not just owner + * @SYMTestPriority High + * @SYMTestActions RCall::OpenExistingCall, RMobileCall::Hold, RMobileCall::Resume, RCall::HangUp, RMobileCall::NotifyMobileCallStatusChange, RCall::NotifyStatusChange, RMobileCall::GetMobileCallStatus, RMobileCall::NotifyCallEvent, RCall::GetStatus + * @SYMTestExpectedResults Pass - Call held and resumed by any client. + * @SYMTestType CIT + * @SYMTestCaseDependencies live/automatic + * + * Reason for test: Verify call status is correct. + * + * @return - TVerdict code + */ + { + + //////////////////////////////////////////////////////////////// + // SET UP + //////////////////////////////////////////////////////////////// + + // Call TNetworkTsyTestHelper::WaitForRegisteredOnHomeNetworkL + RMobilePhone& phone = iEtelSessionMgr.GetPhoneL(KMainServer,KMainPhone); + CHECK_EQUALS_L(iNetworkTestHelper.WaitForRegisteredOnHomeNetworkL(phone), KErrNone, + _L("TNetworkTsyTestHelper::WaitForRegisteredOnHomeNetworkL returned with an error")); + + // Check phone supports KCapsVoice. + RPhone::TCaps phoneCaps; + CHECK_EQUALS_L(phone.GetCaps(phoneCaps), KErrNone, _L("RPhone::GetCaps returned an error")); + CHECK_BITS_SET_L(phoneCaps.iFlags, RPhone::KCapsVoice, KNoUnwantedBits, _L("RPhone::GetCaps returned wrong caps")); + + //////////////////////////////////////////////////////////////// + // SET UP END + //////////////////////////////////////////////////////////////// + + StartTest(); + + //////////////////////////////////////////////////////////////// + // TEST START + //////////////////////////////////////////////////////////////// + + // Get server 1. + RTelServer& srv1 = iEtelSessionMgr.GetServerL(KMainServer); + + // Get line 1 from server 1. + RMobileLine& line1 = iEtelSessionMgr.GetLineL(KMainServer, KMainPhone, KVoiceLine); + + // Get call 1 from line 1 and server 1. + RMobileCall& call1 = iEtelSessionMgr.GetCallL(KMainServer, KMainPhone, KVoiceLine, KCall1); + + // Get server 2. + RTelServer& srv2 = iEtelSessionMgr.GetServerL(KAltServer); + + // Get line 2 from server 2. + RMobileLine& line2 = iEtelSessionMgr.GetLineL(KAltServer, KMainPhone, KVoiceLine); + + // Get call 1 from line 2 and server 2 (this call is now referred to as call 2 in the procedure below). + RMobileCall& call2 = iEtelSessionMgr.GetCallL(KAltServer, KMainPhone, KVoiceLine, KCall1); + + // Post notify for call 1 RCall::NotifyStatusChange + TCoreEtelRequestStatus notifyStatusChangeCall1(call1, &RCall::NotifyStatusChangeCancel); + CleanupStack::PushL(notifyStatusChangeCall1); + RCall::TStatus callStatusCall1; + call1.NotifyStatusChange(notifyStatusChangeCall1, callStatusCall1); + + // Post notify for call 1 RMobileCall::NotifyMobileCallStatusChange + TExtEtelRequestStatus notifyMobileCallStatusChangeCall1(call1, EMobileCallNotifyMobileCallStatusChange); + CleanupStack::PushL(notifyMobileCallStatusChangeCall1); + RMobileCall::TMobileCallStatus mobileCallStatusCall1; + call1.NotifyMobileCallStatusChange(notifyMobileCallStatusChangeCall1, mobileCallStatusCall1); + + // Dial a number that answers on call 1. + TPtrC number; + ASSERT_TRUE(GetStringFromConfig(KIniVoiceNumSection, KIniVoiceNumber1, number) != EFalse,_L("GetStringFromConfig did not complete as expected")); + TCoreEtelRequestStatus dialStatus(call1, &RCall::DialCancel); + CleanupStack::PushL(dialStatus); + call1.Dial(dialStatus, number); + ASSERT_EQUALS(WaitForRequestWithTimeOut(dialStatus, ETimeMedium), KErrNone, _L("RCall::Dial timed-out")); + ASSERT_EQUALS(dialStatus.Int(), KErrNone, _L("RCall::Dial returned with an error")); + + // === Check status for call 1 and call 2 === + + // Check RMobilCall::NotifyStatusChange for call 1 completes with EStatusDialling -> EStatusConnecting -> EStatusConnected. + RCall::TStatus expectedCallStatusCall1 = RCall::EStatusDialling; + iCallControlTestHelper.WaitForCallNotifyStatusChange(call1, + notifyStatusChangeCall1, + callStatusCall1, + expectedCallStatusCall1, + KErrNone); + + call1.NotifyStatusChange(notifyStatusChangeCall1, callStatusCall1); + expectedCallStatusCall1 = RCall::EStatusConnecting; + iCallControlTestHelper.WaitForCallNotifyStatusChange(call1, + notifyStatusChangeCall1, + callStatusCall1, + expectedCallStatusCall1, + KErrNone); + + call1.NotifyStatusChange(notifyStatusChangeCall1, callStatusCall1); + expectedCallStatusCall1 = RCall::EStatusConnected; + iCallControlTestHelper.WaitForCallNotifyStatusChange(call1, + notifyStatusChangeCall1, + callStatusCall1, + expectedCallStatusCall1, + KErrNone); + + // Check RCall::GetStatus for call 1 returns EStatusConnected. + RCall::TStatus getStatusCall1; + ASSERT_EQUALS(call1.GetStatus(getStatusCall1), KErrNone,_L("RCall::GetStatus returned an error")); + ASSERT_EQUALS(getStatusCall1, expectedCallStatusCall1, _L("RCall::GetStatus did not return EStatusConnected")); + + // Check RMobileCall::NotifyMobileCallStatusChange for call 1 completes with EStatusDialling -> EStatusConnecting -> EStatusConnected. + RMobileCall::TMobileCallStatus expectedMobileCallStatusCall1 = RMobileCall::EStatusDialling; + iCallControlTestHelper.WaitForMobileCallNotifyMobileCallStatusChange( + call1, + notifyMobileCallStatusChangeCall1, + mobileCallStatusCall1, + expectedMobileCallStatusCall1, + KErrNone); + + call1.NotifyMobileCallStatusChange(notifyMobileCallStatusChangeCall1, mobileCallStatusCall1); + expectedMobileCallStatusCall1 = RMobileCall::EStatusConnecting; + iCallControlTestHelper.WaitForMobileCallNotifyMobileCallStatusChange( + call1, + notifyMobileCallStatusChangeCall1, + mobileCallStatusCall1, + expectedMobileCallStatusCall1, + KErrNone); + + call1.NotifyMobileCallStatusChange(notifyMobileCallStatusChangeCall1, mobileCallStatusCall1); + expectedMobileCallStatusCall1 = RMobileCall::EStatusConnected; + iCallControlTestHelper.WaitForMobileCallNotifyMobileCallStatusChange( + call1, + notifyMobileCallStatusChangeCall1, + mobileCallStatusCall1, + expectedMobileCallStatusCall1, + KErrNone); + + // Check RMobileCall::GetMobileCallStatus for call 1 returns status of EStatusConnected. + RMobileCall::TMobileCallStatus getMobileCallStatusCall1; + ASSERT_EQUALS(call1.GetMobileCallStatus(getMobileCallStatusCall1), KErrNone,_L("RMobileCall::GetMobileCallStatus returned an error")); + ASSERT_EQUALS(getMobileCallStatusCall1, expectedMobileCallStatusCall1, _L("RMobileCall::GetMobileCallStatus did not return EStatusConnected")); + + // Post notifier for call 2 RMobileCall::NotifyCallEvent + TExtEtelRequestStatus notifyCallEventCall2(call2, EMobileCallNotifyCallEvent); + CleanupStack::PushL(notifyCallEventCall2); + RMobileCall::TMobileCallEvent callEventCall2; + call2.NotifyCallEvent(notifyCallEventCall2,callEventCall2); + + // Post notifier for call 2 RMobileCall::NotifyMobileCallStatusChange + TExtEtelRequestStatus notifyMobileCallStatusChangeCall2(call2, EMobileCallNotifyMobileCallStatusChange); + CleanupStack::PushL(notifyMobileCallStatusChangeCall2); + RMobileCall::TMobileCallStatus mobileCallStatusCall2; + call2.NotifyMobileCallStatusChange(notifyMobileCallStatusChangeCall2, mobileCallStatusCall2); + + // Repost notifier for call 1 RMobileCall::NotifyMobileCallStatusChange + call1.NotifyMobileCallStatusChange(notifyMobileCallStatusChangeCall1, mobileCallStatusCall1); + + // Hold call using call 2 + TExtEtelRequestStatus holdRequestStatusCall2(call2, EMobileCallHold); + CleanupStack::PushL(holdRequestStatusCall2); + call2.Hold(holdRequestStatusCall2); + ASSERT_EQUALS(WaitForRequestWithTimeOut(holdRequestStatusCall2, ETimeMedium), KErrNone, _L("RMobileCall::Hold timed-out")); + ASSERT_EQUALS(holdRequestStatusCall2.Int(), KErrNone, _L("RMobileCall::Hold returned error")); + + // === Check status for call 1 and call 2 === + + // Check RMobileCall::NotifyCallEvent for call 2 completes with ELocalHold + RMobileCall::TMobileCallEvent expectedCallEventCall2 = RMobileCall::ELocalHold; + iCallControlTestHelper.WaitForMobileCallNotifyCallEvent( + call2, + notifyCallEventCall2, + callEventCall2, + expectedCallEventCall2, + KErrNone); + + // Check RMobileCall::NotifyMobileCallStatusChange for call 2 completes with EStatusHold + RMobileCall::TMobileCallStatus expectedMobileCallStatusCall2 = RMobileCall::EStatusHold; + iCallControlTestHelper.WaitForMobileCallNotifyMobileCallStatusChange( + call2, + notifyMobileCallStatusChangeCall2, + mobileCallStatusCall2, + expectedMobileCallStatusCall2, + KErrNone); + + // Check RMobileCall::GetMobileCallStatus for call 2 returns status of EStatusHold + RMobileCall::TMobileCallStatus getMobileCallStatusCall2; + ASSERT_EQUALS(call2.GetMobileCallStatus(getMobileCallStatusCall2), KErrNone, _L("RMobileCall::GetMobileCallStatus returned an error")); + ASSERT_EQUALS(getMobileCallStatusCall2, expectedMobileCallStatusCall2, _L("RMobileCall::GetMobileCallStatus did not return EStatusHold")); + + // Check RMobileCall::NotifyMobileCallStatusChange for call 1 completes with EStatusHold + expectedMobileCallStatusCall1 = RMobileCall::EStatusHold; + iCallControlTestHelper.WaitForMobileCallNotifyMobileCallStatusChange( + call1, + notifyMobileCallStatusChangeCall1, + mobileCallStatusCall1, + expectedMobileCallStatusCall1, + KErrNone); + + // Check RMobileCall::GetMobileCallStatus for call 1 returns status of EStatusHold + ASSERT_EQUALS(call1.GetMobileCallStatus(getMobileCallStatusCall1), KErrNone, _L("RMobileCall::GetMobileCallStatus returned an error")); + ASSERT_EQUALS(getMobileCallStatusCall1, expectedMobileCallStatusCall1, _L("RMobileCall::GetMobileCallStatus did not return EStatusHold")); + + // Repost notifier for call 2 RMobileCall::NotifyCallEvent + call2.NotifyCallEvent(notifyCallEventCall2,callEventCall2); + + // Repost notifier for call 2 RMobileCall::NotifyMobileCallStatusChange + call2.NotifyMobileCallStatusChange(notifyMobileCallStatusChangeCall2, mobileCallStatusCall2); + + // Repost notifier for call 1 RMobileCall::NotifyMobileCallStatusChange + call1.NotifyMobileCallStatusChange(notifyMobileCallStatusChangeCall1, mobileCallStatusCall1); + + // Resume call using call 2 + TExtEtelRequestStatus requestResumeCallStatus(call2,EMobileCallResume); + CleanupStack::PushL(requestResumeCallStatus); + call2.Resume(requestResumeCallStatus); + ASSERT_EQUALS(WaitForRequestWithTimeOut(requestResumeCallStatus, ETimeMedium), KErrNone, _L("RMobileCall::Resume timed-out")); + ASSERT_EQUALS(requestResumeCallStatus.Int(), KErrNone, _L("RMobileCall::Resume returned error")); + + // === Check status for call 1 and call 2 === + + // Check RMobileCall::NotifyCallEvent for call 2 completes with ELocalResume + expectedCallEventCall2 = RMobileCall::ELocalResume; + iCallControlTestHelper.WaitForMobileCallNotifyCallEvent(call2, + notifyCallEventCall2, + callEventCall2, + expectedCallEventCall2, + KErrNone); + + // Check RMobileCall::NotifyMobileCallStatusChange for call 2 completes with EStatusConnected + expectedMobileCallStatusCall2 = RMobileCall::EStatusConnected; + iCallControlTestHelper.WaitForMobileCallNotifyMobileCallStatusChange( + call2, + notifyMobileCallStatusChangeCall2, + mobileCallStatusCall2, + expectedMobileCallStatusCall2, + KErrNone); + + // Check RMobileCall::GetMobileCallStatus for call 2 returns status of EStatusConnected + ASSERT_EQUALS(call2.GetMobileCallStatus(getMobileCallStatusCall2), KErrNone, _L("RMobileCall::GetMobileCallStatus returned an error")); + ASSERT_EQUALS(getMobileCallStatusCall2, expectedMobileCallStatusCall2, _L("RMobileCall::GetMobileCallStatus did not return EStatusConnected")); + + // Check RMobileCall::NotifyMobileCallStatusChange for call 1 completes with EStatusConnected + expectedMobileCallStatusCall1 = RMobileCall::EStatusConnected; + iCallControlTestHelper.WaitForMobileCallNotifyMobileCallStatusChange( + call1, + notifyMobileCallStatusChangeCall1, + mobileCallStatusCall1, + expectedMobileCallStatusCall1, + KErrNone); + + // Check RMobileCall::GetMobileCallStatus for call 1 returns status of EStatusConnected + ASSERT_EQUALS(call1.GetMobileCallStatus(getMobileCallStatusCall1), KErrNone, _L("RMobileCall::GetMobileCallStatus returned an error")); + ASSERT_EQUALS(getMobileCallStatusCall1, expectedMobileCallStatusCall1, _L("RMobileCall::GetMobileCallStatus did not return EStatusConnected")); + + // Repost notifier for call 1 RCall::NotifyStatusChange + call1.NotifyStatusChange(notifyStatusChangeCall1, callStatusCall1); + + // Repost notifier for call 1 RMobileCall::NotifyMobileCallStatusChange + call1.NotifyMobileCallStatusChange(notifyMobileCallStatusChangeCall1, mobileCallStatusCall1); + + // Post notifier for call 2 RCall::NotifyStatusChange + TCoreEtelRequestStatus notifyStatusChangeCall2(call2, &RCall::NotifyStatusChangeCancel); + CleanupStack::PushL(notifyStatusChangeCall2); + RCall::TStatus callStatusCall2; + call2.NotifyStatusChange(notifyStatusChangeCall2, callStatusCall2); + + // Repost notifier for call 2 RMobileCall::NotifyMobileCallStatusChange + call2.NotifyMobileCallStatusChange(notifyMobileCallStatusChangeCall2, mobileCallStatusCall2); + + // Hang up call using call 1 + TCoreEtelRequestStatusrequestStatusHangUp(call1, &RCall::HangUpCancel); + CleanupStack::PushL(requestStatusHangUp); + call1.HangUp(requestStatusHangUp); + ASSERT_EQUALS(WaitForRequestWithTimeOut(requestStatusHangUp, ETimeMedium), KErrNone, _L("RMobileCall::HangUp timed-out")); + ASSERT_EQUALS(requestStatusHangUp.Int(), KErrNone, _L("RMobileCall::HangUp returned error")); + + // === Check status for call 1 and call 2 === + + // Check RCall::NotifyStatusChange for call 1 completes with EStatusHangingUp -> EStatusIdle. + expectedCallStatusCall1 = RCall::EStatusHangingUp; + iCallControlTestHelper.WaitForCallNotifyStatusChange(call1, + notifyStatusChangeCall1, + callStatusCall1, + expectedCallStatusCall1, + KErrNone); + + call1.NotifyStatusChange(notifyStatusChangeCall1, callStatusCall1); + expectedCallStatusCall1 = RCall::EStatusIdle; + iCallControlTestHelper.WaitForCallNotifyStatusChange(call1, + notifyStatusChangeCall1, + callStatusCall1, + expectedCallStatusCall1, + KErrNone); + + // Check RCall::GetStatus for call 1 returns EStatusIdle. + ASSERT_EQUALS(call1.GetStatus(getStatusCall1), KErrNone,_L("RCall::GetStatus returned an error")); + ASSERT_EQUALS(getStatusCall1, RCall::EStatusIdle, _L("RCall::GetStatus did not return EStatusIdle")); + + // Check RMobileCall::NotifyMobileCallStatusChange for call 1 completes with EStatusDisconnecting -> EStatusIdle. + expectedMobileCallStatusCall1 = RMobileCall::EStatusDisconnecting; + iCallControlTestHelper.WaitForMobileCallNotifyMobileCallStatusChange( + call1, + notifyMobileCallStatusChangeCall1, + mobileCallStatusCall1, + expectedMobileCallStatusCall1, + KErrNone); + + + call1.NotifyMobileCallStatusChange(notifyMobileCallStatusChangeCall1, mobileCallStatusCall1); + expectedMobileCallStatusCall1 = RMobileCall::EStatusIdle; + iCallControlTestHelper.WaitForMobileCallNotifyMobileCallStatusChange( + call1, + notifyMobileCallStatusChangeCall1, + mobileCallStatusCall1, + expectedMobileCallStatusCall1, + KErrNone); + + // Check RMobileCall::GetMobileCallStatus for call 1 returns status of EStatusIdle. + ASSERT_EQUALS(call1.GetMobileCallStatus(getMobileCallStatusCall1), KErrNone, _L("RMobileCall::GetMobileCallStatus returned an error")); + ASSERT_EQUALS(getMobileCallStatusCall1, expectedMobileCallStatusCall1, _L("RMobileCall::GetMobileCallStatus did not return EStatusIdle")); + + // Check RCall::NotifyStatusChange for call 2 completes with EStatusHangingUp ->EStatusIdle.. + RCall::TStatus expectedCallStatusCall2 = RCall::EStatusHangingUp; + iCallControlTestHelper.WaitForCallNotifyStatusChange(call2, + notifyStatusChangeCall2, + callStatusCall2, + expectedCallStatusCall2, + KErrNone); + + call2.NotifyStatusChange(notifyStatusChangeCall2, callStatusCall2); + expectedCallStatusCall2 = RCall::EStatusIdle; + iCallControlTestHelper.WaitForCallNotifyStatusChange(call2, + notifyStatusChangeCall2, + callStatusCall2, + expectedCallStatusCall2, + KErrNone); + + // Check RCall::GetStatus for call 2 returns EStatusIdle. + RCall::TStatus getStatusCall2; + ASSERT_EQUALS(call2.GetStatus(getStatusCall2), KErrNone,_L("RCall::GetStatus returned an error")); + ASSERT_EQUALS(getStatusCall2, RCall::EStatusIdle, _L("RCall::GetStatus did not return EStatusIdle")); + + // Check RMobileCall::NotifyMobileCallStatusChange for call 2 completes with EStatusDisconnecting -> EStatusIdle. + expectedMobileCallStatusCall2 = RMobileCall::EStatusDisconnecting; + iCallControlTestHelper.WaitForMobileCallNotifyMobileCallStatusChange( + call2, + notifyMobileCallStatusChangeCall2, + mobileCallStatusCall2, + expectedMobileCallStatusCall2, + KErrNone); + + call2.NotifyMobileCallStatusChange(notifyMobileCallStatusChangeCall2, mobileCallStatusCall2); + expectedMobileCallStatusCall2 = RMobileCall::EStatusIdle; + iCallControlTestHelper.WaitForMobileCallNotifyMobileCallStatusChange( + call2, + notifyMobileCallStatusChangeCall2, + mobileCallStatusCall2, + expectedMobileCallStatusCall2, + KErrNone); + + // Check RMobileCall::GetMobileCallStatus for call 2 returns status of EStatusIdle. + ASSERT_EQUALS(call2.GetMobileCallStatus(getMobileCallStatusCall2), KErrNone, _L("RMobileCall::GetMobileCallStatus returned an error")); + ASSERT_EQUALS(getMobileCallStatusCall2, expectedMobileCallStatusCall2, _L("RMobileCall::GetMobileCallStatus did not return EStatusIdle")); + + //////////////////////////////////////////////////////////////// + // TEST END + //////////////////////////////////////////////////////////////// + + StartCleanup(); + + // Pop + // notifyStatusChangeCall1 + // notifyMobileCallStatusChangeCall1 + // dialStatus + // notifyCallEventCall2 + // notifyMobileCallStatusChangeCall2 + // holdRequestStatusCall2 + // requestResumeCallStatus + // notifyStatusChangeCall2 + // requestStatusHangUp + + CleanupStack::PopAndDestroy(9, ¬ifyStatusChangeCall1); + + return TestStepResult(); + } + +TPtrC CCTSYIntegrationTestCallControl0033::GetTestStepName() +/** + * @return The test step name. + */ + { + return _L("CCTSYIntegrationTestCallControl0033"); + } + + + +CCTSYIntegrationTestCallControl0034::CCTSYIntegrationTestCallControl0034(CEtelSessionMgr& aEtelSessionMgr) + : CCTSYIntegrationTestCallControlBase(aEtelSessionMgr) +/** + * Constructor. + */ + { + SetTestStepName(CCTSYIntegrationTestCallControl0034::GetTestStepName()); + } + +CCTSYIntegrationTestCallControl0034::~CCTSYIntegrationTestCallControl0034() +/** + * Destructor. + */ + { + } + +TVerdict CCTSYIntegrationTestCallControl0034::doTestStepL() +/** + * @SYMTestCaseID BA-CTSY-INT-CCON-0034 + * @SYMFssID BA/CTSY/CCON-0034 + * @SYMTestCaseDesc Attempt to transfer a connected call when no other call is on hold + * @SYMTestPriority High + * @SYMTestActions RMobileCall::Transfer, RCall::GetCaps, RMobileCall::NotifyMobileCallCapsChange, RMobileCall::GetMobileCallStatus, RCall::NotifyStatusChange, RMobileCall::NotifyMobileCallStatusChange, RCall::NotifyCapsChange, RCall::GetStatus, RMobileCall::GetMobileCallCaps + * @SYMTestExpectedResults Pass - KErrNotReady? On attempt to transfer call when no other call is on hold. + * @SYMTestType CIT + * @SYMTestCaseDependencies live/automatic + * + * Reason for test: Verify KErrNotReady returned on attempt to transfer and call stays connected. + * + * @return - TVerdict code + */ + { + + //////////////////////////////////////////////////////////////// + // SET UP + //////////////////////////////////////////////////////////////// + + // Call TNetworkTsyTestHelper::WaitForRegisteredOnHomeNetworkL + RMobilePhone& phone = iEtelSessionMgr.GetPhoneL(KMainServer,KMainPhone); + CHECK_EQUALS_L(iNetworkTestHelper.WaitForRegisteredOnHomeNetworkL(phone), KErrNone, + _L("TNetworkTsyTestHelper::WaitForRegisteredOnHomeNetworkL returned with an error")); + + // Check phone supports KCapsVoice. + RPhone::TCaps phoneCaps; + CHECK_EQUALS_L(phone.GetCaps(phoneCaps), KErrNone, _L("RMobilePhone::GetCaps returned an error")); + CHECK_BITS_SET_L(phoneCaps.iFlags, RMobilePhone::KCapsVoice, KNoUnwantedBits, _L("RMobilePhone::GetCaps did not return KCapsVoice as expected")); + + // Get call. + RMobileCall& mobileCall = iEtelSessionMgr.GetCallL(KMainServer, KMainPhone, KVoiceLine, KCall1); + + // Get phone number + TPtrC phoneNumber; + CHECK_TRUE_L(GetStringFromConfig(KIniVoiceNumSection, KIniVoiceNumber1, phoneNumber) != EFalse, _L("GetStringFromConfig did not complete as expected")); + + //////////////////////////////////////////////////////////////// + // SET UP END + //////////////////////////////////////////////////////////////// + + StartTest(); + + //////////////////////////////////////////////////////////////// + // TEST START + //////////////////////////////////////////////////////////////// + + // Post notifier for RCall::NotifyCapsChange + RCall::TCaps callCaps; + TCoreEtelRequestStatus notifyCapsChangeStatus (mobileCall, &RCall::NotifyCapsChangeCancel); + CleanupStack::PushL(notifyCapsChangeStatus); + mobileCall.NotifyCapsChange(notifyCapsChangeStatus, callCaps); + + // Post notifier for RMobileCall::NotifyMobileCallCapsChange + RMobileCall::TMobileCallCapsV1 mobileCallCaps; + RMobileCall::TMobileCallCapsV1Pckg mobileCallCapsPckg(mobileCallCaps); + TExtEtelRequestStatus notifyMobileCapsChangeStatus(mobileCall, EMobileCallNotifyMobileCallCapsChange); + CleanupStack::PushL(notifyMobileCapsChangeStatus); + mobileCall.NotifyMobileCallCapsChange(notifyMobileCapsChangeStatus, mobileCallCapsPckg); + + // Post notifier RMobileCall::NotifyMobileCallStatusChange + TExtEtelRequestStatus notifyMobileCallStatusChangeStatus (mobileCall, EMobileCallNotifyMobileCallStatusChange); + CleanupStack::PushL(notifyMobileCallStatusChangeStatus); + RMobileCall::TMobileCallStatus mobileCallStatus; + mobileCall.NotifyMobileCallStatusChange(notifyMobileCallStatusChangeStatus, mobileCallStatus); + + // Post notifier for RCall::NotifyStatusChange + TCoreEtelRequestStatus notifyCallStatusChangeStatus (mobileCall, &RCall::NotifyStatusChangeCancel); + CleanupStack::PushL(notifyCallStatusChangeStatus); + RCall::TStatus callStatus; + mobileCall.NotifyStatusChange(notifyCallStatusChangeStatus,callStatus); + + // Dial a number that answers. + TCoreEtelRequestStatus getDialStatus(mobileCall, &RMobileCall::DialCancel); + CleanupStack::PushL(getDialStatus); + DEBUG_PRINTF2(_L("Board Now Dialling: %S"), &phoneNumber); + mobileCall.Dial(getDialStatus, phoneNumber); + ASSERT_EQUALS(WaitForRequestWithTimeOut(getDialStatus, ETimeLong), KErrNone, _L("RMobileCall::Dial timed-out")); + ASSERT_EQUALS(getDialStatus.Int(), KErrNone, _L("RMobileCall::Dial returned error")); + + // === Check call status === + + // Check RCall::NotifyStatusChange completes with EStatusDialling -> EStatusConnecting -> EStatusConnected. + RCall::TStatus expectedCallStatus = RCall::EStatusDialling; + const TInt expectedStatus = KErrNone; + iCallControlTestHelper.WaitForCallNotifyStatusChange(mobileCall, + notifyCallStatusChangeStatus, + callStatus, + expectedCallStatus, + expectedStatus); + + mobileCall.NotifyStatusChange(notifyCallStatusChangeStatus, callStatus); + expectedCallStatus = RCall::EStatusConnecting; + iCallControlTestHelper.WaitForCallNotifyStatusChange(mobileCall, + notifyCallStatusChangeStatus, + callStatus, + expectedCallStatus, + expectedStatus); + + mobileCall.NotifyStatusChange(notifyCallStatusChangeStatus, callStatus); + expectedCallStatus = RCall::EStatusConnected; + iCallControlTestHelper.WaitForCallNotifyStatusChange(mobileCall, + notifyCallStatusChangeStatus, + callStatus, + expectedCallStatus, + expectedStatus); + + // Check RCall::GetStatus returns EStatusConnected. + ASSERT_EQUALS(mobileCall.GetStatus(callStatus), KErrNone, _L("RCall::GetStatus returned an error")); + ASSERT_EQUALS(callStatus, RCall::EStatusConnected, _L("RCall::GetStatus did not return correct status.")); + + // Check RMobileCall::NotifyMobileCallStatusChange completes with EStatusDialling -> EStatusConnecting -> EStatusConnected. + RMobileCall::TMobileCallStatus expectedMobileCallStatus = RMobileCall::EStatusDialling; + iCallControlTestHelper.WaitForMobileCallNotifyMobileCallStatusChange(mobileCall, + notifyMobileCallStatusChangeStatus, + mobileCallStatus, + expectedMobileCallStatus, + expectedStatus); + + mobileCall.NotifyMobileCallStatusChange(notifyMobileCallStatusChangeStatus, mobileCallStatus); + expectedMobileCallStatus = RMobileCall::EStatusConnecting; + iCallControlTestHelper.WaitForMobileCallNotifyMobileCallStatusChange(mobileCall, + notifyMobileCallStatusChangeStatus, + mobileCallStatus, + expectedMobileCallStatus, + expectedStatus); + + mobileCall.NotifyMobileCallStatusChange(notifyMobileCallStatusChangeStatus, mobileCallStatus); + expectedMobileCallStatus = RMobileCall::EStatusConnected; + iCallControlTestHelper.WaitForMobileCallNotifyMobileCallStatusChange(mobileCall, + notifyMobileCallStatusChangeStatus, + mobileCallStatus, + expectedMobileCallStatus, + expectedStatus); + + // Check RMobileCall::GetMobileCallStatus returns status of EStatusConnected. + ASSERT_EQUALS(mobileCall.GetMobileCallStatus(mobileCallStatus), KErrNone, _L("RMobileCall::GetMobileCallStatus returned an error")); + ASSERT_EQUALS(mobileCallStatus, RMobileCall::EStatusConnected, _L("RMobileCall::GetMobileCallStatus did not return EStatusConnected as expected.")); + + // === Check call caps === + + // Check RCall::NotifyCapsChange completes with caps in set of KCapsVoice | KCapsHangUp. + RCall::TCaps wantedCaps; + RCall::TCaps unwantedCaps; + const TInt wantedStatus = KErrNone; + wantedCaps.iFlags = RCall::KCapsVoice | RCall::KCapsHangUp; + unwantedCaps.iFlags = 0; + iCallControlTestHelper.WaitForCallNotifyCapsChange(mobileCall, notifyCapsChangeStatus, callCaps, wantedCaps, unwantedCaps, wantedStatus); + + // Check RCall::GetCaps supports KCapsHangUp | KCapsVoice. + ASSERT_EQUALS(mobileCall.GetCaps(callCaps),KErrNone, _L("RCall::GetCaps returned an error")); + ASSERT_BITS_SET(callCaps.iFlags, wantedCaps.iFlags, KNoUnwantedBits, _L("RCall::GetCaps returned wrong caps")); + + // Check RMobileCall::NotifyMobileCallCapsChange completes with iCallControlCaps in set of KCapsVoice | KCapsHold | KCapsHangUp + RMobileCall::TMobileCallCapsV1 wantedMobileCaps; + wantedMobileCaps.iCallControlCaps = RMobileCall::KCapsVoice | RMobileCall::KCapsHold | RMobileCall::KCapsHangUp; + TCmpRMobileCallTMobileCallCaps mobileCapsComp(wantedMobileCaps,mobileCallCaps, *this); + iCallControlTestHelper.WaitForMobileCallNotifyMobileCallCapsChange(mobileCall, notifyMobileCapsChangeStatus, mobileCapsComp, wantedStatus); + + // Check RMobileCall::NotifyMobileCallCapsChange completes with iCallControlCaps NOT in set of KCapsTransfer + RMobileCall::TMobileCallCapsV1 unwantedMobileCaps; + unwantedMobileCaps.iCallControlCaps = RMobileCall::KCapsTransfer; + ASSERT_BITS_SET(mobileCallCaps.iCallControlCaps, KNoWantedBits, unwantedMobileCaps.iCallControlCaps, _L("RMobileCall::NotifyMobileCallCapsChange contains unwanted caps KCapsTransfer")); + + // Check RMobileCall::NotifyMobileCallCapsChange completes with iCallEventCaps in set of KCapsLocalHold | KCapsLocalTransfer | KCapsRemoteHold | KCapsRemoteTerminate | KCapsRemoteConferenceCreate. + wantedMobileCaps.iCallEventCaps = RMobileCall::KCapsLocalHold | RMobileCall::KCapsLocalTransfer | + RMobileCall::KCapsRemoteHold | RMobileCall::KCapsRemoteTerminate | + RMobileCall::KCapsRemoteConferenceCreate; + ASSERT_BITS_SET(mobileCallCaps.iCallEventCaps, wantedMobileCaps.iCallEventCaps, KNoUnwantedBits, _L("RMobileCall::NotifyMobileCallCapsChange returned unexpected iCallEventCaps")); + + // Check RMobileCall::GetMobileCallCaps includes iCallControlCaps in set of KCapsVoice | KCapsHold | KCapsHangUp + // Check RMobileCall::GetMobileCallCaps includes iCallControlCaps NOT in set of KCapsTransfer + ASSERT_EQUALS(mobileCall.GetMobileCallCaps(mobileCallCapsPckg), KErrNone, _L("RMobileCall::GetMobileCallCaps returned an error")) + ASSERT_BITS_SET(mobileCallCaps.iCallControlCaps, wantedMobileCaps.iCallControlCaps, unwantedMobileCaps.iCallControlCaps, _L("RMobileCall::GetMobileCallCaps returned unexpected iCallControlCaps")); + + // Check RMobileCall::GetMobileCallCaps includes iCallEventCaps in set of KCapsLocalHold | KCapsLocalTransfer | KCapsRemoteHold | KCapsRemoteTerminate | KCapsRemoteConferenceCreate. + ASSERT_BITS_SET(mobileCallCaps.iCallEventCaps, wantedMobileCaps.iCallEventCaps, KNoUnwantedBits, _L("RMobileCall::GetMobileCallCaps returned unexpected iCallEventCaps")); + + // Transfer call. + TExtEtelRequestStatus getTransferStatus(mobileCall, EMobileCallTransfer); + CleanupStack::PushL(getTransferStatus); + mobileCall.Transfer(getTransferStatus); + ASSERT_EQUALS(WaitForRequestWithTimeOut(getTransferStatus, ETimeLong), KErrNone, _L("RMobileCall::Transfer timed-out")); + + // Check KErrNotReady is returned. + ASSERT_EQUALS(getTransferStatus.Int(), KErrNotReady, _L("RMobileCall::Transfer did not return KErrNotReady as expected")); + + // Check RCall::GetStatus returns EStatusConnected. + ASSERT_EQUALS(mobileCall.GetStatus(callStatus), KErrNone, _L("RCall::GetStatus returned an error")); + ASSERT_EQUALS(callStatus, RCall::EStatusConnected, _L("RCall::GetStatus did not return EStatusConnected as expected")); + + // Check RMobileCall::GetMobileCallStatus returns status of EStatusConnected. + ASSERT_EQUALS(mobileCall.GetMobileCallStatus(mobileCallStatus), KErrNone, _L("RMobileCall::GetMobileCallStatus returned an error")); + ASSERT_EQUALS(mobileCallStatus, RMobileCall::EStatusConnected, _L("RMobileCall::GetMobileCallStatus did not return EStatusConnected as expected")); + + // Hangup call 1. + TCoreEtelRequestStatus hangUpStatus (mobileCall, &RCall::HangUpCancel); + CleanupStack::PushL(hangUpStatus); + mobileCall.HangUp(hangUpStatus); + ASSERT_EQUALS(WaitForRequestWithTimeOut(hangUpStatus, ETimeMedium), KErrNone, _L("RCall::HangUp timed-out")); + ASSERT_EQUALS(hangUpStatus.Int(), KErrNone, _L("RCall::HangUp returned an error")); + + //////////////////////////////////////////////////////////////// + // TEST END + //////////////////////////////////////////////////////////////// + + StartCleanup(); + + // Pop + // notifyCapsChangeStatus + // notifyMobileCapsChangeStatus + // notifyMobileCallStatusChangeStatus + // notifyCallStatusChangeStatus + // getDialStatus + // setTransferStatus + // hangUpStatus + CleanupStack::PopAndDestroy(7, ¬ifyCapsChangeStatus); + + return TestStepResult(); + } + +TPtrC CCTSYIntegrationTestCallControl0034::GetTestStepName() +/** + * @return The test step name. + */ + { + return _L("CCTSYIntegrationTestCallControl0034"); + } + + + +CCTSYIntegrationTestCallControl0035::CCTSYIntegrationTestCallControl0035(CEtelSessionMgr& aEtelSessionMgr) + : CCTSYIntegrationTestCallControlBase(aEtelSessionMgr) +/** + * Constructor. + */ + { + SetTestStepName(CCTSYIntegrationTestCallControl0035::GetTestStepName()); + } + +CCTSYIntegrationTestCallControl0035::~CCTSYIntegrationTestCallControl0035() +/** + * Destructor. + */ + { + } + +TVerdict CCTSYIntegrationTestCallControl0035::doTestStepL() +/** + * @SYMTestCaseID BA-CTSY-INT-CCON-0035 + * @SYMFssID BA/CTSY/CCON-0035 + * @SYMTestCaseDesc Attempt to transfer a held call when no other call is connected + * @SYMTestPriority High + * @SYMTestActions RMobileCall::Transfer, RMobileCall::GetMobileCallStatus, RCall::GetStatus, RMobileCall::GetMobileCallCaps + * @SYMTestExpectedResults Pass - KErrNotReady? On attempt to transfer call when no other call is active. + * @SYMTestType CIT + * @SYMTestCaseDependencies live/automatic + * + * Reason for test: Verify KErrNotReady returned on attempt to transfer and call stays held. + * + * @return - TVerdict code + */ + { + + //////////////////////////////////////////////////////////////// + // SET UP + //////////////////////////////////////////////////////////////// + + + // Call TNetworkTsyTestHelper::WaitForRegisteredOnHomeNetworkL + RMobilePhone& phone = iEtelSessionMgr.GetPhoneL(KMainServer,KMainPhone); + CHECK_EQUALS_L(iNetworkTestHelper.WaitForRegisteredOnHomeNetworkL(phone), KErrNone, + _L("TNetworkTsyTestHelper::WaitForRegisteredOnHomeNetworkL returned with an error")); + + // Check phone supports KCapsVoice. + RPhone::TCaps phoneCaps; + CHECK_EQUALS_L(phone.GetCaps(phoneCaps), KErrNone, _L("RMobilePhone::GetCaps returned an error")); + CHECK_BITS_SET_L(phoneCaps.iFlags, RMobilePhone::KCapsVoice, KNoUnwantedBits, _L("RMobilePhone::GetCaps did not return KCapsVoice as expected")); + + // Get Voice line 1. + RMobileLine& mobileVoiceLine1 = iEtelSessionMgr.GetLineL(KMainServer, KMainPhone, KVoiceLine); + + // Get call 1. + RMobileCall& mobileCall1 = iEtelSessionMgr.GetCallL(KMainServer, KMainPhone, KVoiceLine, KCall1); + + // Dial a number that answers on call 1. + TPtrC phoneNumber; + CHECK_TRUE_L(GetStringFromConfig(KIniVoiceNumSection, KIniVoiceNumber1, phoneNumber) != EFalse, _L("GetStringFromConfig did not complete as expected")); + TCoreEtelRequestStatus getDialStatus(mobileCall1, &RMobileCall::DialCancel); + CleanupStack::PushL(getDialStatus); + DEBUG_PRINTF2(_L("Board Now Dialling: %S"), &phoneNumber); + mobileCall1.Dial(getDialStatus, phoneNumber); + CHECK_EQUALS_L(WaitForRequestWithTimeOut(getDialStatus, ETimeLong), KErrNone, _L("RMobileCall::Dial timed-out")); + CHECK_EQUALS_L(getDialStatus.Int(), KErrNone, _L("RMobileCall::Dial returned error")); + + // Hold call 1. + TExtEtelRequestStatus getHoldStatus(mobileCall1, EMobileCallHold); + CleanupStack::PushL(getHoldStatus); + mobileCall1.Hold(getHoldStatus); + CHECK_EQUALS_L(WaitForRequestWithTimeOut(getHoldStatus, ETimeLong), KErrNone, _L("RMobileCall::Hold timed-out")); + CHECK_EQUALS_L(getHoldStatus.Int(), KErrNone, _L("RMobileCall::Hold returned error")); + + // Ensure mobile call status of call 1 is EStatusHold + RMobileCall::TMobileCallStatus mobileCallStatus; + CHECK_EQUALS_L(mobileCall1.GetMobileCallStatus(mobileCallStatus), KErrNone, _L("RMobileCall::GetMobileCallStatus returned an error")); + CHECK_EQUALS_L(mobileCallStatus, RMobileCall::EStatusHold, _L("RMobileCall::GetMobileCallStatus did not return EStatusHold as expected")); + + + //////////////////////////////////////////////////////////////// + // SET UP END + //////////////////////////////////////////////////////////////// + + StartTest(); + + //////////////////////////////////////////////////////////////// + // TEST START + //////////////////////////////////////////////////////////////// + + + // === Check mobile call caps === + + // Check RMobileCall::GetMobileCallCaps includes iCallControlCaps in set of KCapsVoice | KCapsResume | KCapsHangUp + // Check RMobileCall::GetMobileCallCaps includes iCallControlCaps NOT in set of KCapsTransfer + RMobileCall::TMobileCallCapsV1 mobileCallCaps; + RMobileCall::TMobileCallCapsV1Pckg mobileCallCapsPckg(mobileCallCaps); + RMobileCall::TMobileCallCapsV1 wantedMobileCaps; + wantedMobileCaps.iCallControlCaps = RMobileCall::KCapsVoice | RMobileCall::KCapsResume | RMobileCall::KCapsHangUp; + RMobileCall::TMobileCallCapsV1 unwantedMobileCaps; + unwantedMobileCaps.iCallControlCaps = RMobileCall::KCapsTransfer; + + ASSERT_EQUALS(mobileCall1.GetMobileCallCaps(mobileCallCapsPckg), KErrNone, _L("RMobileCall::GetMobileCallCaps returned an error")); + ASSERT_BITS_SET(mobileCallCaps.iCallControlCaps, wantedMobileCaps.iCallControlCaps, unwantedMobileCaps.iCallControlCaps , _L("RMobileCall::GetMobileCallCaps returned unexpected iCallControlCaps")); + + // Check RMobileCall::GetMobileCallCaps includes iCallEventCaps in set of KCapsLocalHold | KCapsLocalTransfer | KCapsRemoteHold | KCapsRemoteTerminate | KCapsRemoteConferenceCreate. + wantedMobileCaps.iCallEventCaps = RMobileCall::KCapsLocalHold | RMobileCall::KCapsLocalTransfer | RMobileCall::KCapsRemoteHold | RMobileCall::KCapsRemoteTerminate | RMobileCall::KCapsRemoteConferenceCreate; + ASSERT_BITS_SET(mobileCallCaps.iCallEventCaps, wantedMobileCaps.iCallEventCaps, KNoUnwantedBits, _L("RMobileCall::GetMobileCallCaps returned unexpected iCallEventCaps")); + + // Transfer call. + TExtEtelRequestStatus getTransferStatus(mobileCall1, EMobileCallTransfer); + CleanupStack::PushL(getTransferStatus); + mobileCall1.Transfer(getTransferStatus); + ASSERT_EQUALS(WaitForRequestWithTimeOut(getTransferStatus, ETimeLong), KErrNone, _L("RMobileCall::Transfer timed-out")); + + // Check KErrNotReady is returned. + ASSERT_EQUALS(getTransferStatus.Int(), KErrNotReady, _L("RMobileCall::Transfer did not return KErrNotReady as expected")); + + // Check RCall::GetStatus returns EStatusConnected. + RCall::TStatus callStatus; + ASSERT_EQUALS(mobileCall1.GetStatus(callStatus), KErrNone, _L("RCall::GetStatus returned an error")); + ASSERT_EQUALS(callStatus, RCall::EStatusConnected, _L("RCall::GetStatus did not return EStatusConnected as expected")); + + // Check RMobileCall::GetMobileCallStatus returns status of EStatusHold. + ASSERT_EQUALS(mobileCall1.GetMobileCallStatus(mobileCallStatus), KErrNone, _L("RMobileCall::GetMobileCallStatus returned an error")); + ASSERT_EQUALS(mobileCallStatus, RMobileCall::EStatusHold, _L("RMobileCall::GetStatus did not return EStatusHold as expected")); + + // Hangup call 1. + TCoreEtelRequestStatus hangUpStatus (mobileCall1, &RCall::HangUpCancel); + CleanupStack::PushL(hangUpStatus); + mobileCall1.HangUp(hangUpStatus); + ASSERT_EQUALS(WaitForRequestWithTimeOut(hangUpStatus, ETimeMedium), KErrNone, _L("RCall::HangUp timed-out")); + ASSERT_EQUALS(hangUpStatus.Int(), KErrNone, _L("RCall::HangUp returned an error")); + + + //////////////////////////////////////////////////////////////// + // TEST END + //////////////////////////////////////////////////////////////// + + StartCleanup(); + + // Pop: + // getDialStatus + // getHoldStatus + // getTransferStatus + // hangUpStatus + CleanupStack::PopAndDestroy(4, &getDialStatus); + + return TestStepResult(); + } + +TPtrC CCTSYIntegrationTestCallControl0035::GetTestStepName() +/** + * @return The test step name. + */ + { + return _L("CCTSYIntegrationTestCallControl0035"); + } + + + +CCTSYIntegrationTestCallControl0036::CCTSYIntegrationTestCallControl0036(CEtelSessionMgr& aEtelSessionMgr) + : CCTSYIntegrationTestCallControlBase(aEtelSessionMgr) +/** + * Constructor. + */ + { + SetTestStepName(CCTSYIntegrationTestCallControl0036::GetTestStepName()); + } + +CCTSYIntegrationTestCallControl0036::~CCTSYIntegrationTestCallControl0036() +/** + * Destructor. + */ + { + } + +TVerdict CCTSYIntegrationTestCallControl0036::doTestStepL() +/** + * @SYMTestCaseID BA-CTSY-INT-CCON-0036 + * @SYMFssID BA/CTSY/CCON-0036 + * @SYMTestCaseDesc Transfer a connected call and held call. + * @SYMTestPriority High + * @SYMTestActions RMobileCall::Transfer, RMobileCall::NotifyMobileCallStatusChange, RCall::NotifyStatusChange, RMobileCall::GetMobileCallStatus, RCall::GetStatus, RMobileCall::GetMobileCallCaps + * @SYMTestExpectedResults Pass - Call transferred successfully. + * @SYMTestType CIT + * @SYMTestCaseDependencies live/automatic + * + * Reason for test: Verify transfer succeeds and calls 1 and 2 are idle after transfer. + * + * @return - TVerdict code + */ + { + + //////////////////////////////////////////////////////////////// + // SET UP + //////////////////////////////////////////////////////////////// + + // Call TNetworkTsyTestHelper::WaitForRegisteredOnHomeNetworkL + RMobilePhone& phone = iEtelSessionMgr.GetPhoneL(KMainServer,KMainPhone); + CHECK_EQUALS_L(iNetworkTestHelper.WaitForRegisteredOnHomeNetworkL(phone), KErrNone, + _L("TNetworkTsyTestHelper::WaitForRegisteredOnHomeNetworkL returned with an error")); + + // Check phone supports KCapsVoice. + RPhone::TCaps phoneCaps; + CHECK_EQUALS_L(phone.GetCaps(phoneCaps), KErrNone, _L("RPhone::GetCaps returned an error")); + CHECK_BITS_SET_L(phoneCaps.iFlags, RPhone::KCapsVoice, KNoUnwantedBits, + _L("RPhone::GetCaps returned wrong caps")); + + //////////////////////////////////////////////////////////////// + // SET UP END + //////////////////////////////////////////////////////////////// + + StartTest(); + + //////////////////////////////////////////////////////////////// + // TEST START + //////////////////////////////////////////////////////////////// + + TPtrC number1, number2; + ASSERT_TRUE(GetStringFromConfig(KIniVoiceNumSection, KIniVoiceNumber1, number1) != EFalse, + _L("GetStringFromConfig did not complete as expected")); + ASSERT_TRUE(GetStringFromConfig(KIniVoiceNumSection, KIniVoiceNumber2, number2) != EFalse, + _L("GetStringFromConfig did not complete as expected")); + + // Loop for the two variations in this test. + for(TInt i=0; i < 2; ++i) + { + // Get calls. + RMobileCall& call1 = iEtelSessionMgr.GetCallL(KMainServer, KMainPhone, KVoiceLine, KCall3); + RMobileCall& call2 = iEtelSessionMgr.GetCallL(KMainServer, KMainPhone, KVoiceLine, KCall4); + + // Dial a number that answers on call 1. + DEBUG_PRINTF1(_L("Board Now Dialling: ")); + TCoreEtelRequestStatus dialStatus(call1, &RCall::DialCancel); + CleanupStack::PushL(dialStatus); + call1.Dial(dialStatus, number1); + CHECK_EQUALS_L(WaitForRequestWithTimeOut(dialStatus, ETimeLong), KErrNone, _L("RCall::Dial timed-out")); + CHECK_EQUALS_L(dialStatus.Int(), KErrNone, _L("RCall::Dial returned with an error")); + + // Hold call 1. + TExtEtelRequestStatus holdStatus(call1, EMobileCallHold); + CleanupStack::PushL(holdStatus); + call1.Hold(holdStatus); + CHECK_EQUALS_L(WaitForRequestWithTimeOut(holdStatus, ETimeMedium),KErrNone, _L("RMobileCall::Hold timed out")); + CHECK_EQUALS_L(holdStatus.Int(), KErrNone, _L("RMobileCall::Hold returned with an error")); + + // Ensure mobile call status of call 1 is EStatusHold + RMobileCall::TMobileCallStatus mobileCallStatus; + CHECK_EQUALS_L(call1.GetMobileCallStatus(mobileCallStatus), KErrNone, _L("RMobileCall::GetMobileCallStatus returned with an error")); + CHECK_EQUALS_L(mobileCallStatus, RMobileCall::EStatusHold, _L("RMobileCall::GetMobileCallStatus did not return EStatusHold as expected")); + + // === Check that it is not possible to transfer call 1 yet === + + // Check RMobileCall::GetMobileCallCaps for call 1 includes iCallControlCaps NOT in set of KCapsTransfer + RMobileCall::TMobileCallCapsV1 unWantedMobileCaps; + unWantedMobileCaps.iCallControlCaps = RMobileCall::KCapsTransfer; + RMobileCall::TMobileCallCapsV1 mobileCallCaps; + RMobileCall::TMobileCallCapsV1Pckg mobileCallCapsPckg(mobileCallCaps); + ASSERT_EQUALS(call1.GetMobileCallCaps(mobileCallCapsPckg), KErrNone, + _L("RMobileCall::GetMobileCallCaps returned an error")); + ASSERT_BITS_SET(mobileCallCaps.iCallControlCaps, mobileCallCaps.iCallControlCaps, unWantedMobileCaps.iCallControlCaps, + _L("RMobileCall::GetMobileCallCaps returned unexpected iCallControlCaps")); + + // Dial a number that answers on call 2. + DEBUG_PRINTF1(_L("Board Now Dialling 2nd call: ")); + TCoreEtelRequestStatus dialStatus2(call2, &RCall::DialCancel); + CleanupStack::PushL(dialStatus2); + call2.Dial(dialStatus2, number2); + ASSERT_EQUALS(WaitForRequestWithTimeOut(dialStatus2, ETimeLong), KErrNone, _L("RCall::Dial timed-out")); + ASSERT_EQUALS(dialStatus2.Int(), KErrNone, _L("RCall::Dial returned with an error")); + + // === Check that it is possible to transfer call 1 and 2 now === + + // Check RMobileCall::GetMobileCallCaps for call 1 includes iCallControlCaps in set of KCapsTransfer + ASSERT_EQUALS(call1.GetMobileCallCaps(mobileCallCapsPckg), KErrNone, _L("RMobileCall::GetMobileCallCaps returned an error")); + ASSERT_BITS_SET(mobileCallCaps.iCallControlCaps, RMobileCall::KCapsTransfer, KNoUnwantedBits, + _L("RMobileCall::GetMobileCallCaps returned unexpected iCallControlCaps")); + + // Check RMobileCall::GetMobileCallCaps for call 2 includes iCallControlCaps in set of KCapsTransfer + // Note: In light of the defect found in CTSY, defect Id 10052: CTSY not able to transfer the unheld call; + // it is not clear whether the unheld call (call2) should or should not have KCapsTransfer capability. + // The current implementation of CTSY DOES give the unheld call KCapsTransfer capability, so this test remains for now. + ASSERT_EQUALS(call2.GetMobileCallCaps(mobileCallCapsPckg), KErrNone, _L("RMobileCall::GetMobileCallCaps returned an error")); + ASSERT_BITS_SET(mobileCallCaps.iCallControlCaps, RMobileCall::KCapsTransfer, KNoUnwantedBits, + _L("RMobileCall::GetMobileCallCaps returned unexpected iCallControlCaps")); + + RMobileCall* callToTransfer; + if(i==0) + { + // Transfer call 1 + // $CTSYProblem LTSY propagating error -4285(KErrGsmCCFacilityRejected) to CTSY, which is correclty returning it back to client + // therefore error code does not indicate an error in the CTSY but rather that the LTSY/network is not supporting the requested operation. + callToTransfer = &call1; + } + else + { + // Transfer call 2 + callToTransfer = &call2; + } + + TExtEtelRequestStatus transferStatus(*callToTransfer, EMobileCallTransfer); + CleanupStack::PushL(transferStatus); + callToTransfer->Transfer(transferStatus); + ASSERT_EQUALS(WaitForRequestWithTimeOut(transferStatus, ETimeLong), KErrNone, _L("RCall::Transfer timed-out")); + + if(callToTransfer == &call2) + { + ASSERT_EQUALS(transferStatus.Int(), KErrNone, _L("RCall::Transfer of call2 returned with an error")); + } + else + { + ASSERT_EQUALS(transferStatus.Int(), KErrNone, _L("RCall::Transfer returned an unexpected status")); + } + + iEtelSessionMgr.ReleaseCall(KMainServer,KMainPhone,KVoiceLine,KCall3); + iEtelSessionMgr.ReleaseCall(KMainServer,KMainPhone,KVoiceLine,KCall4); + + User::After(3000000); + + // PopAndDestroy + // dialStatus + // holdStatus + // dialStatus2 + // transferStatus + CleanupStack::PopAndDestroy(4, &dialStatus); + } + + + //////////////////////////////////////////////////////////////// + // TEST END + //////////////////////////////////////////////////////////////// + + StartCleanup(); + + return TestStepResult(); + } + +TPtrC CCTSYIntegrationTestCallControl0036::GetTestStepName() +/** + * @return The test step name. + */ + { + return _L("CCTSYIntegrationTestCallControl0036"); + } + + +CCTSYIntegrationTestCallControl0037::CCTSYIntegrationTestCallControl0037(CEtelSessionMgr& aEtelSessionMgr) + : CCTSYIntegrationTestCallControlBase(aEtelSessionMgr) +/** + * Constructor. + */ + { + SetTestStepName(CCTSYIntegrationTestCallControl0037::GetTestStepName()); + } + +CCTSYIntegrationTestCallControl0037::~CCTSYIntegrationTestCallControl0037() +/** + * Destructor. + */ + { + } + +TVerdict CCTSYIntegrationTestCallControl0037::doTestStepL() +/** + * @SYMTestCaseID BA-CTSY-INT-CCON-0037 + * @SYMFssID BA/CTSY/CCON-0037 + * @SYMTestCaseDesc Close the phone when incoming call is coming. + * @SYMTestPriority High + * @SYMTestActions RLine::Open, RPhone::Close, RLine::NotifyIncomingCall, RPhone::Open, RLine::Close, RPhone::GetLineInfo + * @SYMTestExpectedResults Pass - Phone subsession closed cleanly. + * @SYMTestType CIT + * @SYMTestCaseDependencies live/automatic + * + * Reason for test: Verify incoming call notification completes and phone and line can be closed. + * + * @return - TVerdict code + */ + { + + //////////////////////////////////////////////////////////////// + // SET UP + //////////////////////////////////////////////////////////////// + + // Call TNetworkTsyTestHelper::WaitForRegisteredOnHomeNetworkL + RMobilePhone& phone = iEtelSessionMgr.GetPhoneL(KMainServer,KMainPhone); + CHECK_EQUALS_L(iNetworkTestHelper.WaitForRegisteredOnHomeNetworkL(phone), KErrNone, + _L("TNetworkTsyTestHelper::WaitForRegisteredOnHomeNetworkL returned with an error")); + + // Get line 1 + RMobileLine& mobileLine= iEtelSessionMgr.GetLineL(KMainServer, KMainPhone, KVoiceLine); + //////////////////////////////////////////////////////////////// + // SET UP END + //////////////////////////////////////////////////////////////// + + StartTest(); + + //////////////////////////////////////////////////////////////// + // TEST START + //////////////////////////////////////////////////////////////// + + + // Register for notification of incoming call with RLine::NotifyIncomingCall + TName name; + TCoreEtelRequestStatus notifyIncomingCallStatus (mobileLine,&RLine::NotifyIncomingCallCancel); + CleanupStack::PushL(notifyIncomingCallStatus); + mobileLine.NotifyIncomingCall(notifyIncomingCallStatus,name); + + // Request for incoming call from RPS. + ASSERT_EQUALS (RPSRequestIncomingCallL(EVoiceLine), KErrNone, _L("CCTSYIntegrationTestSuiteStepBase::RPSRequestIncomingCallL returned with an error")); + + // Cancel notification of incoming call with RLine::NotifyIncomingCallCancel + notifyIncomingCallStatus.Cancel(); + + // release phone. + iEtelSessionMgr.ReleaseLine(KMainServer, KMainPhone, KVoiceLine); + + //////////////////////////////////////////////////////////////// + // TEST END + //////////////////////////////////////////////////////////////// + + StartCleanup(); + + CleanupStack::PopAndDestroy(¬ifyIncomingCallStatus); + + return TestStepResult(); + } + +TPtrC CCTSYIntegrationTestCallControl0037::GetTestStepName() +/** + * @return The test step name. + */ + { + return _L("CCTSYIntegrationTestCallControl0037"); + } + + + +CCTSYIntegrationTestCallControl0038::CCTSYIntegrationTestCallControl0038(CEtelSessionMgr& aEtelSessionMgr) + : CCTSYIntegrationTestCallControlBase(aEtelSessionMgr) +/** + * Constructor. + */ + { + SetTestStepName(CCTSYIntegrationTestCallControl0038::GetTestStepName()); + } + +CCTSYIntegrationTestCallControl0038::~CCTSYIntegrationTestCallControl0038() +/** + * Destructor. + */ + { + } + +TVerdict CCTSYIntegrationTestCallControl0038::doTestStepL() +/** + * @SYMTestCaseID BA-CTSY-INT-CCON-0038 + * @SYMFssID BA/CTSY/CCON-0038 + * @SYMTestCaseDesc Cancel transfer + * @SYMTestPriority High + * @SYMTestActions RMobileCall::Transfer, RMobileCall::Transfer + * @SYMTestExpectedResults Pass - Transfer cancelled. + * @SYMTestType CIT + * @SYMTestCaseDependencies live/automatic + * + * Reason for test: Verify transfer can be cancelled. + * + * @return - TVerdict code + */ + { + + //////////////////////////////////////////////////////////////// + // SET UP + //////////////////////////////////////////////////////////////// + + // Call TNetworkTsyTestHelper::WaitForRegisteredOnHomeNetworkL + RMobilePhone& phone = iEtelSessionMgr.GetPhoneL(KMainServer,KMainPhone); + CHECK_EQUALS_L(iNetworkTestHelper.WaitForRegisteredOnHomeNetworkL(phone), KErrNone, _L("TNetworkTsyTestHelper::WaitForRegisteredOnHomeNetworkL returned with an error")); + + // Get Voice line 1. + RMobileLine& voiceLine = iEtelSessionMgr.GetLineL(KMainServer, KMainPhone, KVoiceLine); + + // Check phone supports KCapsVoice. + RLine::TCaps lineCaps; + CHECK_EQUALS_L(voiceLine.GetCaps(lineCaps), KErrNone, _L("RMobileLine::GetCaps returned an error")); + CHECK_BITS_SET_L(lineCaps.iFlags, RLine::KCapsVoice, KNoUnwantedBits, _L("RLine::GetCaps returned wrong caps")); + + // Get call 1. + RMobileCall& call1 = iEtelSessionMgr.GetCallL(KMainServer, KMainPhone, KVoiceLine, KCall1); + + // Get call 2. + RMobileCall& call2 = iEtelSessionMgr.GetCallL(KMainServer, KMainPhone, KVoiceLine, KCall2); + + //////////////////////////////////////////////////////////////// + // SET UP END + //////////////////////////////////////////////////////////////// + + StartTest(); + + //////////////////////////////////////////////////////////////// + // TEST START + //////////////////////////////////////////////////////////////// + + // Post notifier + const TInt expectedStatus = KErrNone; + TExtEtelRequestStatus notifyMobileCallStatusChangeStatus (call1, EMobileCallNotifyMobileCallStatusChange); + CleanupStack::PushL(notifyMobileCallStatusChangeStatus); + RMobileCall::TMobileCallStatus mobileCallStatus; + RMobileCall::TMobileCallStatus mobileCallStatus2; + call1.NotifyMobileCallStatusChange(notifyMobileCallStatusChangeStatus, mobileCallStatus); + + // Dial a number that answers. + TPtrC number; + ASSERT_TRUE(GetStringFromConfig(KIniVoiceNumSection, KIniVoiceNumber1, number) != EFalse, _L("CTestStep::GetStringFromConfig did not complete as expected")); + TCoreEtelRequestStatus dialStatus(call1, &RCall::DialCancel); + CleanupStack::PushL(dialStatus); + call1.Dial(dialStatus, number); + ASSERT_EQUALS(WaitForRequestWithTimeOut(dialStatus, ETimeMedium), KErrNone, _L("RCall::Dial timed-out")); + ASSERT_EQUALS(dialStatus.Int(), KErrNone, _L("RCall::Dial returned with an error")); + + // Wait for call to be connected. + RMobileCall::TMobileCallStatus expectedMobileCallStatus = RMobileCall::EStatusConnected; + iCallControlTestHelper.WaitForMobileCallNotifyMobileCallStatusChange(call1, + notifyMobileCallStatusChangeStatus, + mobileCallStatus, + expectedMobileCallStatus , + expectedStatus); + + // Check RMobileCall::GetMobileCallStatus returns status of EStatusConnected. + ASSERT_EQUALS(call1.GetMobileCallStatus(mobileCallStatus), KErrNone, _L("RMobileCall::GetMobileCallStatus returned an error")); + ASSERT_EQUALS(mobileCallStatus, RMobileCall::EStatusConnected, _L("RMobileCall::GetMobileCallStatus did not set call status EStatusConnected as expected")); + + // Hold call 1. + TExtEtelRequestStatus getHoldStatus(call1, EMobileCallHold); + CleanupStack::PushL(getHoldStatus); + call1.Hold(getHoldStatus); + ASSERT_EQUALS(WaitForRequestWithTimeOut(getHoldStatus, ETimeMedium), KErrNone, _L("RMobileCall::Hold timed-out.")); + ASSERT_EQUALS(getHoldStatus.Int(), KErrNone, _L("RMobileCall::Hold returned error.")); + + // Post notifier + TExtEtelRequestStatus notifyMobileCallStatusChangeStatus2 (call2, EMobileCallNotifyMobileCallStatusChange); + CleanupStack::PushL(notifyMobileCallStatusChangeStatus2); + call2.NotifyMobileCallStatusChange(notifyMobileCallStatusChangeStatus2, mobileCallStatus2); + + // Dial another number that answers. + ASSERT_TRUE(GetStringFromConfig(KIniVoiceNumSection, KIniVoiceNumber2, number) != EFalse, _L("CTestStep::GetStringFromConfig did not complete as expected")); + TCoreEtelRequestStatus dialStatus2(call2, &RCall::DialCancel); + CleanupStack::PushL(dialStatus2); + call2.Dial(dialStatus2, number); + ASSERT_EQUALS(WaitForRequestWithTimeOut(dialStatus2, ETimeMedium), KErrNone, _L("RCall::Dial timed-out")); + ASSERT_EQUALS(dialStatus2.Int(), KErrNone, _L("RCall::Dial returned with an error")); + + // Wait for call to be connected. + expectedMobileCallStatus = RMobileCall::EStatusConnected; + iCallControlTestHelper.WaitForMobileCallNotifyMobileCallStatusChange(call2, + notifyMobileCallStatusChangeStatus2, + mobileCallStatus2, + expectedMobileCallStatus , + expectedStatus); + + // Post notifier + call1.NotifyMobileCallStatusChange(notifyMobileCallStatusChangeStatus, mobileCallStatus); + call2.NotifyMobileCallStatusChange(notifyMobileCallStatusChangeStatus2, mobileCallStatus2); + + // Transfer call 1. + TExtEtelRequestStatus getTransferStatus(call1, EMobileCallTransfer); + CleanupStack::PushL(getTransferStatus); + call1.Transfer(getTransferStatus); + + // Cancel transfer. + phone.CancelAsyncRequest(EMobileCallTransfer); + + ASSERT_EQUALS(WaitForRequestWithTimeOut(getTransferStatus, ETimeMedium), KErrNone, _L("RTelSubSessionBase::CancelAsyncRequest timed-out")); + ASSERT_TRUE((getTransferStatus.Int() == KErrNone) || (getTransferStatus.Int() == KErrCancel), _L("RMobileCall::Transfer did not return KErrNone or KErrCancel")); + + if(getTransferStatus.Int() == KErrNone) + { // call transfering has not been canceled + ERR_PRINTF1(_L("TransferCancel didn't succeed")); + expectedMobileCallStatus = RMobileCall::EStatusDisconnecting; + iCallControlTestHelper.WaitForMobileCallNotifyMobileCallStatusChange(call1, + notifyMobileCallStatusChangeStatus, + mobileCallStatus, + expectedMobileCallStatus , + expectedStatus); + + call1.NotifyMobileCallStatusChange(notifyMobileCallStatusChangeStatus, mobileCallStatus); + + iCallControlTestHelper.WaitForMobileCallNotifyMobileCallStatusChange(call2, + notifyMobileCallStatusChangeStatus2, + mobileCallStatus2, + expectedMobileCallStatus , + expectedStatus); + + call2.NotifyMobileCallStatusChange(notifyMobileCallStatusChangeStatus2, mobileCallStatus2); + expectedMobileCallStatus = RMobileCall::EStatusIdle; + iCallControlTestHelper.WaitForMobileCallNotifyMobileCallStatusChange(call1, + notifyMobileCallStatusChangeStatus, + mobileCallStatus, + expectedMobileCallStatus , + expectedStatus); + + iCallControlTestHelper.WaitForMobileCallNotifyMobileCallStatusChange(call2, + notifyMobileCallStatusChangeStatus2, + mobileCallStatus2, + expectedMobileCallStatus , + expectedStatus); + + // Check RMobileCall::GetMobileCallStatus returns status of EStatusIdle. + ASSERT_EQUALS(call1.GetMobileCallStatus(mobileCallStatus), KErrNone, _L("RMobileCall::GetMobileCallStatus returned an error")); + ASSERT_EQUALS(mobileCallStatus, RMobileCall::EStatusIdle, _L("RMobileCall::GetMobileCallStatus did not set call status EStatusIdle as expected")); + + ASSERT_EQUALS(call2.GetMobileCallStatus(mobileCallStatus2), KErrNone, _L("RMobileCall::GetMobileCallStatus returned an error")); + ASSERT_EQUALS(mobileCallStatus2, RMobileCall::EStatusIdle, _L("RMobileCall::GetMobileCallStatus did not set call status EStatusIdle as expected")); + + } + else + { // call transfering has been canceled. + // Hang up call1. + TCoreEtelRequestStatus hangUpStatus (call1,&RCall::HangUpCancel); + CleanupStack::PushL(hangUpStatus); + call1.HangUp(hangUpStatus); + ASSERT_EQUALS(WaitForRequestWithTimeOut(hangUpStatus, ETimeMedium), KErrNone, _L("RCall::HangUp timed-out")); + ASSERT_EQUALS(hangUpStatus.Int(), KErrNone, _L("RCall::HangUp returned with an error")); + + // Hang up call2. + TCoreEtelRequestStatus hangUpStatus2 (call2,&RCall::HangUpCancel); + CleanupStack::PushL(hangUpStatus2); + call2.HangUp(hangUpStatus2); + ASSERT_EQUALS(WaitForRequestWithTimeOut(hangUpStatus2, ETimeMedium), KErrNone, _L("RCall::HangUp timed-out")); + ASSERT_EQUALS(hangUpStatus2.Int(), KErrNone, _L("RCall::HangUp returned with an error")); + + // hangUpStatus + // hangUpStatus2 + CleanupStack::PopAndDestroy(2, &hangUpStatus); + } + + + + //////////////////////////////////////////////////////////////// + // TEST END + //////////////////////////////////////////////////////////////// + + StartCleanup(); + + // Pop + // notifyMobileCallStatusChangeStatus + // dialStatus + // getHoldStatus + // notifyMobileCallStatusChangeStatus2 + // dialStatus2 + // getTransferStatus + + CleanupStack::PopAndDestroy(6, ¬ifyMobileCallStatusChangeStatus); + + return TestStepResult(); + } + +TPtrC CCTSYIntegrationTestCallControl0038::GetTestStepName() +/** + * @return The test step name. + */ + { + return _L("CCTSYIntegrationTestCallControl0038"); + } + + + +CCTSYIntegrationTestCallControl0039::CCTSYIntegrationTestCallControl0039(CEtelSessionMgr& aEtelSessionMgr) + : CCTSYIntegrationTestCallControlBase(aEtelSessionMgr) +/** + * Constructor. + */ + { + SetTestStepName(CCTSYIntegrationTestCallControl0039::GetTestStepName()); + } + +CCTSYIntegrationTestCallControl0039::~CCTSYIntegrationTestCallControl0039() +/** + * Destructor. + */ + { + } + +TVerdict CCTSYIntegrationTestCallControl0039::doTestStepL() +/** + * @SYMTestCaseID BA-CTSY-INT-CCON-0039 + * @SYMFssID BA/CTSY/CCON-0039 + * @SYMTestCaseDesc Deflect incoming call + * @SYMTestPriority High + * @SYMTestActions RMobileCall::Deflect, RMobileCall::NotifyMobileCallStatusChange, RCall::NotifyStatusChange, RLine::NotifyStatusChange, RMobileLine::GetMobileLineStatus, RMobileLine::NotifyMobileLineStatusChange, RLine::GetStatus, RMobileCall::GetMobileCallStatus, RCall::GetStatus, RLine::NotifyIncomingCall + * @SYMTestExpectedResults Pass - Call deflected. + * @SYMTestType CIT + * @SYMTestCaseDependencies live/manual + * + * Reason for test: Verify incoming call can be deflected and call and line return to idle. + * + * @return - TVerdict code + */ + { + + //////////////////////////////////////////////////////////////// + // SET UP + //////////////////////////////////////////////////////////////// + + // Call TNetworkTsyTestHelper::WaitForRegisteredOnHomeNetworkL + RMobilePhone& phone = iEtelSessionMgr.GetPhoneL(KMainServer,KMainPhone); + CHECK_EQUALS_L(iNetworkTestHelper.WaitForRegisteredOnHomeNetworkL(phone), KErrNone, _L("TNetworkTsyTestHelper::WaitForRegisteredOnHomeNetworkL returned with an error")); + + // Check phone supports KCapsVoice. + RPhone::TCaps phoneCaps; + CHECK_EQUALS_L(phone.GetCaps(phoneCaps), KErrNone, _L("RPhone::GetCaps returned an error")); + CHECK_BITS_SET_L(phoneCaps.iFlags, RPhone::KCapsVoice, KNoUnwantedBits, _L("RPhone::GetCaps returned wrong caps")); + + // Get Voice line 1. + RMobileLine& mobileLine = iEtelSessionMgr.GetLineL(KMainServer, KMainPhone, KVoiceLine); + + + //////////////////////////////////////////////////////////////// + // SET UP END + //////////////////////////////////////////////////////////////// + + StartTest(); + + //////////////////////////////////////////////////////////////// + // TEST START + //////////////////////////////////////////////////////////////// + + for (TInt callDeflectType = RMobileCall::EDeflectVoicemail; callDeflectType <= RMobileCall::EDeflectSuppliedNumber; ++callDeflectType ) + { + // Get call 1. + //RMobileCall& mobileCall = iEtelSessionMgr.GetCallL(KMainServer, KMainPhone, KVoiceLine, KCall1); + + // Post RLine::NotifyIncomingCall + TName callName; + TCoreEtelRequestStatus notifyIncomingCallStatus(mobileLine, &RLine::NotifyIncomingCallCancel); + CleanupStack::PushL(notifyIncomingCallStatus); + mobileLine.NotifyIncomingCall(notifyIncomingCallStatus, callName); + + // Request incoming call from RPS. + RPSRequestIncomingCallL(EVoiceLine); + + // Check RLine::NotifyIncomingCall completes with KErrNone + ASSERT_EQUALS(WaitForRequestWithTimeOut(notifyIncomingCallStatus, ETimeLong), KErrNone, _L("RLine::NotifyIncomingCall timed out")); + ASSERT_EQUALS(notifyIncomingCallStatus.Int(), KErrNone, _L("RLine::NotifyIncomingCall returned with an error")); + + TCallId incomingCallId; + RMobileCall& mobileCall = iEtelSessionMgr.GetIncomingCallL(KMainServer, KMainPhone, KVoiceLine, callName, incomingCallId); + + // Post notifications + RCall::TStatus callStatus; + TCoreEtelRequestStatus notifyStatusChangeMCallStatus (mobileCall, &RMobileCall::NotifyStatusChangeCancel); + CleanupStack::PushL(notifyStatusChangeMCallStatus); + mobileCall.NotifyStatusChange(notifyStatusChangeMCallStatus, callStatus); + + // Post notify RLine::NotifyStatusChange + RCall::TStatus lineStatus; + TCoreEtelRequestStatus notifyStatusChangeMLineStatus (mobileLine, &RLine::NotifyStatusChangeCancel); + CleanupStack::PushL(notifyStatusChangeMLineStatus); + mobileLine.NotifyStatusChange(notifyStatusChangeMLineStatus, lineStatus); + + // Post notifier RMobileCall::NotifyMobileCallStatusChange + RMobileCall::TMobileCallStatus mobileCallStatus; + TExtEtelRequestStatus notifyMobileCallStatusChangeStatus(mobileCall, EMobileCallNotifyMobileCallStatusChange); + CleanupStack::PushL(notifyMobileCallStatusChangeStatus); + mobileCall.NotifyMobileCallStatusChange(notifyMobileCallStatusChangeStatus, mobileCallStatus); + + // Post RMobileLine::NotifyMobileLineStatusChange + RMobileCall::TMobileCallStatus mobileLineStatus; + TExtEtelRequestStatus notifyMobileLineChangeStatus(mobileLine, EMobileLineNotifyMobileLineStatusChange); + CleanupStack::PushL(notifyMobileLineChangeStatus); + mobileLine.NotifyMobileLineStatusChange(notifyMobileLineChangeStatus, mobileLineStatus); + + // Deflect call to a voice mail number using RMobileCall::Deflect and aDeflectType = EDeflectVoicemail. + // $CTSYProblem CTSY is not supporting deflect type of RMobileCall::EDeflectVoicemail, and is returning KErrNotsupported + TExtEtelRequestStatus setDeflectStatus(mobileCall, EMobileCallDeflect); + CleanupStack::PushL(setDeflectStatus); + RMobilePhone::TMobileAddress destination; + TPtrC phoneNumber; + ASSERT_TRUE(GetStringFromConfig(KIniVoiceNumSection, KIniVoiceNumber2, phoneNumber) != EFalse, _L("GetStringFromConfig did not complete as expected")); + destination.iTelNumber = phoneNumber; + destination.iTypeOfNumber = RMobilePhone::ENationalNumber; + destination.iNumberPlan = RMobilePhone::ENationalNumberPlan; + + mobileCall.Deflect(setDeflectStatus, (RMobileCall::TMobileCallDeflect)callDeflectType, destination); + ASSERT_EQUALS(WaitForRequestWithTimeOut(setDeflectStatus, ETimeLong), KErrNone, _L("RMobileCall::Deflect timed-out")); + ASSERT_EQUALS(setDeflectStatus.Int(), KErrNone, _L("RMobileCall::Deflect returned with an error")); + // ******** HERE - put eror code. Assign new code from xls ******* // + + // === Check call status === + + // Check RCall::NotifyStatusChange completes with EStatusIdle. + RCall::TStatus expectedCallStatus = RCall::EStatusIdle; + TInt wantedStatus = KErrNone; + iCallControlTestHelper.WaitForCallNotifyStatusChange(mobileCall, + notifyStatusChangeMCallStatus, + callStatus, + expectedCallStatus, + wantedStatus); + + // Check RCall::GetStatus returns EStatusIdle. + ASSERT_EQUALS(mobileCall.GetStatus(callStatus), KErrNone, _L("RCall::GetStatus returned error")); + ASSERT_EQUALS(callStatus, RCall::EStatusIdle, _L("RCall::GetStatus did not return call status EStatusIdle as expected")); + + // Check RMobileCall::NotifyMobileCallStatusChange completes with EStatusIdle. + RMobileCall::TMobileCallStatus expectedMobileCallStatus = RMobileCall::EStatusIdle; + iCallControlTestHelper.WaitForMobileCallNotifyMobileCallStatusChange(mobileCall, + notifyMobileCallStatusChangeStatus, + mobileCallStatus, + expectedMobileCallStatus, + wantedStatus); + + // Check RMobileCall::GetMobileCallStatus returns status of EStatusIdle. + ASSERT_EQUALS(mobileCall.GetStatus(callStatus), KErrNone, _L("RMobileCall::GetStatus returned error")); + ASSERT_EQUALS(callStatus, RCall::EStatusIdle, _L("RMobileCall::GetStatus did not return call status EStatusIdle as expected")); + + // === Check line status === + + // Check RLine::NotifyStatusChange completes with EStatusIdle + iCallControlTestHelper.WaitForLineNotifyStatusChange(mobileLine, + notifyStatusChangeMLineStatus, + lineStatus, + expectedCallStatus, + wantedStatus); + + // Check RLine::GetStatus returns EStatusIdle + ASSERT_EQUALS(mobileLine.GetStatus(callStatus), KErrNone, _L("RLine::GetStatus returned error")); + ASSERT_EQUALS(callStatus, RCall::EStatusIdle, _L("RLine::GetStatus did not return call status EStatusIdle as expected")); + + // Check RMobileLine::NotifyMobileLineStatusChange completes with EStatusIdle + RMobileCall::TMobileCallStatus expectedLineStatus = RMobileCall::EStatusIdle; + iCallControlTestHelper.WaitForMobileLineNotifyMobileLineStatusChange(mobileLine, + notifyMobileLineChangeStatus, + mobileLineStatus, + expectedLineStatus, + wantedStatus); + + // Check RMobileLine::GetMobileLineStatus returns EStatusIdle + ASSERT_EQUALS(mobileLine.GetStatus(callStatus), KErrNone, _L("RMobileLine::GetStatus returned error")); + ASSERT_EQUALS(callStatus, RCall::EStatusIdle, _L("RMobileLine::GetStatus did not return call status EStatusIdle as expected")); + + iEtelSessionMgr.ReleaseCall(KMainServer,KMainPhone,KVoiceLine, KCall1); + + // Pop + // notifyIncomingCallStatus + // notifyStatusChangeMCallStatus + // notifyStatusChangeMLineStatus + // notifyMobileCallStatusChangeStatus + // notifyMobileLineChangeStatus + // setDeflectStatus + CleanupStack::PopAndDestroy(6, ¬ifyIncomingCallStatus); + } + + + //////////////////////////////////////////////////////////////// + // TEST END + //////////////////////////////////////////////////////////////// + + StartCleanup(); + + return TestStepResult(); + } + +TPtrC CCTSYIntegrationTestCallControl0039::GetTestStepName() +/** + * @return The test step name. + */ + { + return _L("CCTSYIntegrationTestCallControl0039"); + } + + +CCTSYIntegrationTestCallControl0040::CCTSYIntegrationTestCallControl0040(CEtelSessionMgr& aEtelSessionMgr) + : CCTSYIntegrationTestCallControlBase(aEtelSessionMgr) +/** + * Constructor. + */ + { + SetTestStepName(CCTSYIntegrationTestCallControl0040::GetTestStepName()); + } + +CCTSYIntegrationTestCallControl0040::~CCTSYIntegrationTestCallControl0040() +/** + * Destructor. + */ + { + } + +TVerdict CCTSYIntegrationTestCallControl0040::doTestStepL() +/** + * @SYMTestCaseID BA-CTSY-INT-CCON-0040 + * @SYMFssID BA/CTSY/CCON-0040 + * @SYMTestCaseDesc Cancel deflect call to registered number + * @SYMTestPriority High + * @SYMTestActions RMobileCall::Deflect + * @SYMTestExpectedResults Pass - Deflect cancelled. + * @SYMTestType CIT + * @SYMTestCaseDependencies live/manual + * + * Reason for test: Verify deflect is cancelled. + * + * @return - TVerdict code + */ + { + + //////////////////////////////////////////////////////////////// + // SET UP + //////////////////////////////////////////////////////////////// + + // Call TNetworkTsyTestHelper::WaitForRegisteredOnHomeNetworkL + RMobilePhone& phone = iEtelSessionMgr.GetPhoneL(KMainServer,KMainPhone); + CHECK_EQUALS_L(iNetworkTestHelper.WaitForRegisteredOnHomeNetworkL(phone), KErrNone, + _L("TNetworkTsyTestHelper::WaitForRegisteredOnHomeNetworkL returned with an error")); + + // Check phone supports KCapsVoice. + RPhone::TCaps phoneCaps; + CHECK_EQUALS_L(phone.GetCaps(phoneCaps), KErrNone, _L("RPhone::GetCaps returned an error")); + CHECK_BITS_SET_L(phoneCaps.iFlags, RPhone::KCapsVoice, KNoUnwantedBits, _L("RPhone::GetCaps returned wrong caps")); + + // Get Voice line 1. + RMobileLine& voiceLine = iEtelSessionMgr.GetLineL(KMainServer, KMainPhone, KVoiceLine); + + // Get call 1. + RMobileCall& call1 = iEtelSessionMgr.GetCallL(KMainServer, KMainPhone, KVoiceLine, KCall1); + + //////////////////////////////////////////////////////////////// + // SET UP END + //////////////////////////////////////////////////////////////// + + StartTest(); + + //////////////////////////////////////////////////////////////// + // TEST START + //////////////////////////////////////////////////////////////// + + + // Tester should dial the board. + DisplayUserInteractionPromptL(_L("Dial in to this phone after pressing Any key"), ETimeLong); + + // Check RLine::NotifyIncomingCall completes with KErrNone + TCoreEtelRequestStatus notifyIncomingCallStatus(voiceLine, &RLine::NotifyIncomingCallCancel); + CleanupStack::PushL(notifyIncomingCallStatus); + TName incomingCallName; + incomingCallName.Zero(); + voiceLine.NotifyIncomingCall(notifyIncomingCallStatus, incomingCallName); + + // Deflect call using aDeflectType = EDeflectRegisteredNumber and specifying a valid destination. + TExtEtelRequestStatus deflectStatus(call1, EMobileCallDeflect); + CleanupStack::PushL(deflectStatus); + RMobileCall::TMobileCallDeflect deflectType = RMobileCall::EDeflectRegisteredNumber; + RMobilePhone::TMobileAddress mobileAddress; + call1.Deflect(deflectStatus, deflectType, mobileAddress); + + // Cancel deflect. + phone.CancelAsyncRequest(EMobileCallDeflect); + + // Check KErrNone or KErrCancel returned. + // $CTSYProblem CTSY is not supporting deflect type of RMobileCall::EDeflectRegisteredNumber, and is returningn KErrNotsupported + ASSERT_EQUALS(WaitForRequestWithTimeOut(deflectStatus, ETimeLong), KErrNone, _L("RCall::Deflect timed-out")); + ASSERT_TRUE((deflectStatus.Int() == KErrNone) || (deflectStatus.Int() == KErrCancel), _L("RMobileCall::Deflect did not return KErrNone or KErrCancel")); + + //////////////////////////////////////////////////////////////// + // TEST END + //////////////////////////////////////////////////////////////// + + StartCleanup(); + + // Pop + // notifyIncomingCallStatus + // deflectStatus + CleanupStack::PopAndDestroy(2, ¬ifyIncomingCallStatus); + + return TestStepResult(); + } + +TPtrC CCTSYIntegrationTestCallControl0040::GetTestStepName() +/** + * @return The test step name. + */ + { + return _L("CCTSYIntegrationTestCallControl0040"); + } + + + +CCTSYIntegrationTestCallControl0041::CCTSYIntegrationTestCallControl0041(CEtelSessionMgr& aEtelSessionMgr) + : CCTSYIntegrationTestCallControlBase(aEtelSessionMgr) +/** + * Constructor. + */ + { + SetTestStepName(CCTSYIntegrationTestCallControl0041::GetTestStepName()); + } + +CCTSYIntegrationTestCallControl0041::~CCTSYIntegrationTestCallControl0041() +/** + * Destructor. + */ + { + } + +TVerdict CCTSYIntegrationTestCallControl0041::doTestStepL() +/** + * @SYMTestCaseID BA-CTSY-INT-CCON-0041 + * @SYMFssID BA/CTSY/CCON-0041 + * @SYMTestCaseDesc Cancelled answer incoming before detection and during detection + * @SYMTestPriority High + * @SYMTestActions RCall::AnswerIncomingCall + * @SYMTestExpectedResults Pass - Answer incoming call request cancelled. + * @SYMTestType CIT + * @SYMTestCaseDependencies live/automatic + * + * Reason for test: Verify answering of incoming call can be cancelled. + * + * @return - TVerdict code + */ + { + + //////////////////////////////////////////////////////////////// + // SET UP + //////////////////////////////////////////////////////////////// + + // Call TNetworkTsyTestHelper::WaitForRegisteredOnHomeNetworkL + RMobilePhone& phone = iEtelSessionMgr.GetPhoneL(KMainServer,KMainPhone); + CHECK_EQUALS_L(iNetworkTestHelper.WaitForRegisteredOnHomeNetworkL(phone), KErrNone, + _L("TNetworkTsyTestHelper::WaitForRegisteredOnHomeNetworkL returned with an error")); + + // Check phone supports KCapsVoice. + RPhone::TCaps phoneCaps; + CHECK_EQUALS_L(phone.GetCaps(phoneCaps), KErrNone, _L("RPhone::GetCaps returned an error")); + CHECK_BITS_SET_L(phoneCaps.iFlags, RPhone::KCapsVoice, KNoUnwantedBits, _L("RPhone::GetCaps returned wrong caps")); + + // Get Voice line 1. + RMobileLine& voiceLine = iEtelSessionMgr.GetLineL(KMainServer, KMainPhone, KVoiceLine); + + //////////////////////////////////////////////////////////////// + // SET UP END + //////////////////////////////////////////////////////////////// + + StartTest(); + + //////////////////////////////////////////////////////////////// + // TEST START + //////////////////////////////////////////////////////////////// + + // Answer incoming call request cancelled with different delays. + AnswerIncomingCallCancelL(voiceLine, KOneSecond/100); + AnswerIncomingCallCancelL(voiceLine, KOneSecond/10000); + AnswerIncomingCallCancelL(voiceLine, 0); + + //////////////////////////////////////////////////////////////// + // TEST END + //////////////////////////////////////////////////////////////// + + StartCleanup(); + + return TestStepResult(); + } + +TPtrC CCTSYIntegrationTestCallControl0041::GetTestStepName() +/** + * @return The test step name. + */ + { + return _L("CCTSYIntegrationTestCallControl0041"); + } + +/** + * Cancels an incoming call answer request after given delay. + * @param aVoiceLine Line object. + * @param aDelay Delay between answering and cancelling request. + */ +void CCTSYIntegrationTestCallControl0041::AnswerIncomingCallCancelL( + RMobileLine& aVoiceLine, + TInt aDelay) + { + // Post notify RLine::NotifyIncomingCall + TCoreEtelRequestStatus notifyIncomingCallStatus(aVoiceLine, &RLine::NotifyIncomingCallCancel); + CleanupStack::PushL(notifyIncomingCallStatus); + TName incomingCallName; + aVoiceLine.NotifyIncomingCall(notifyIncomingCallStatus, incomingCallName); + + // Request incoming call from RPS. + ASSERT_EQUALS (RPSRequestIncomingCallL(EVoiceLine), KErrNone, _L("CCTSYIntegrationTestSuiteStepBase::RPSRequestIncomingCallL returned an error")); + + // Check RLine::NotifyIncomingCall completes. + ASSERT_EQUALS(WaitForRequestWithTimeOut(notifyIncomingCallStatus, ETimeMedium), KErrNone, _L("RLine::NotifyIncomingCall timed-out")); + ASSERT_EQUALS(notifyIncomingCallStatus.Int(), KErrNone, _L("RLine::NotifyIncomingCall returned an error")); + + // Get the incoming call + TCallId incomingCallId; + RMobileCall& call1 = iEtelSessionMgr.GetIncomingCallL(KMainServer, KMainPhone, KVoiceLine, incomingCallName, incomingCallId); + + // Call RCall::AnswerIncomingCall + TCoreEtelRequestStatus answerIncomingStatus(call1, &RCall::AnswerIncomingCallCancel); + CleanupStack::PushL(answerIncomingStatus); + call1.AnswerIncomingCall(answerIncomingStatus); + + // Call RCall::AnswerIncomingCallCancel after a delay + if (aDelay > 0) + { + User::After(aDelay); + } + call1.AnswerIncomingCallCancel(); + DEBUG_PRINTF2(_L("RCall::AnswerIncomingCallCancel called after %d microseconds delay"), aDelay); + + // Check answer incoming call cancelled. + // $CTSYProblem CMmCallTsy::AnswerIncomingCallCancel + // TSY has started a request and it is not possible to then cancel this request. + // The best thing for the TSY to do in this case is to call HangUp method to do this and set a flag so that we can know that AnswerIncomingCallCancel handling is going on. + // Checking is changed from KErrCancel to KErrGsmCallRejected + ASSERT_EQUALS(WaitForRequestWithTimeOut(answerIncomingStatus, ETimeMedium), KErrNone, _L("RMobileCall::AnswerIncomingCall timed-out")); + ASSERT_EQUALS(answerIncomingStatus.Int(), KErrGsmCallRejected, _L("RCall::AnswerIncomingCall was not cancelled correctly")); + RCall::TStatus callStatus; + ASSERT_EQUALS(call1.GetStatus(callStatus), KErrNone, _L("RCall::GetStatus returned an Error")); + ASSERT_EQUALS(callStatus, RCall::EStatusIdle, _L("RCall::GetStatus did not return EStatusIdle")); + + // Release call + iEtelSessionMgr.ReleaseCall(KMainServer, KMainPhone, KVoiceLine, incomingCallId); + + // Pop + // notifyIncomingCallStatus + // answerIncomingStatus + CleanupStack::PopAndDestroy(2, ¬ifyIncomingCallStatus); + } + + +CCTSYIntegrationTestCallControl0042::CCTSYIntegrationTestCallControl0042(CEtelSessionMgr& aEtelSessionMgr) + : CCTSYIntegrationTestCallControlBase(aEtelSessionMgr) +/** + * Constructor. + */ + { + SetTestStepName(CCTSYIntegrationTestCallControl0042::GetTestStepName()); + } + +CCTSYIntegrationTestCallControl0042::~CCTSYIntegrationTestCallControl0042() +/** + * Destructor. + */ + { + } + +TVerdict CCTSYIntegrationTestCallControl0042::doTestStepL() +/** + * @SYMTestCaseID BA-CTSY-INT-CCON-0042 + * @SYMFssID BA/CTSY/CCON-0042 + * @SYMTestCaseDesc Ensure that when in class C operation (PSD only), a voice or data call dial request completes with an error. + * @SYMTestPriority High + * @SYMTestActions + * @SYMTestExpectedResults Pass - KErrGsmOfflineOpNotAllowed returned. + * @SYMTestType CIT + * @SYMTestCaseDependencies live/automatic + * + * Reason for test: Verify error is returned on attempt to dial. + * + * @return - TVerdict code + */ + { + + //////////////////////////////////////////////////////////////// + // SET UP + //////////////////////////////////////////////////////////////// + + // Call TNetworkTsyTestHelper::WaitForRegisteredOnHomeNetworkL + RMobilePhone& phone = iEtelSessionMgr.GetPhoneL(KMainServer,KMainPhone); + CHECK_EQUALS_L(iNetworkTestHelper.WaitForRegisteredOnHomeNetworkL(phone), KErrNone, _L("TNetworkTsyTestHelper::WaitForRegisteredOnHomeNetworkL returned with an error")); + + // Get the packet service. + RPacketService& packetService = iEtelSessionMgr.GetPacketServiceL(KMainServer, KMainPhone, KMainPacketService); + + // Set the MS class to EMSClassAlternateMode. + TExtEtelRequestStatus setMSClassStatus(packetService, EPacketSetMSClass); + CleanupStack::PushL(setMSClassStatus); + packetService.SetMSClass(setMSClassStatus, RPacketService::EMSClassAlternateMode); + CHECK_EQUALS_L(WaitForRequestWithTimeOut(setMSClassStatus, ETimeLong), KErrNone, _L("RPacketService::SetMSClass timed out")); + ERR_PRINTF2(_L("$CTSYKnownFailure: defect id = %d"), 10050); +// CTSY currently does not support the SetMSClass operation + CHECK_EQUALS_L(setMSClassStatus.Int(), KErrNone, _L("RPacketService::SetMSClass returned an error")); + + // Set the preferred bearer to EBearerPacketSwitched + TExtEtelRequestStatus setPreferredBearerStatus(packetService, EPacketSetPrefBearer); + CleanupStack::PushL(setPreferredBearerStatus); + packetService.SetPreferredBearer(setPreferredBearerStatus, RPacketService::EBearerPacketSwitched); + CHECK_EQUALS_L(WaitForRequestWithTimeOut(setPreferredBearerStatus, ETimeLong), KErrNone, _L("RPacketService::SetPreferredBearer timed out")); + CHECK_EQUALS_L(setPreferredBearerStatus.Int(), KErrNone, _L("RPacketService::SetPreferredBearer returned an error")); + + // Ensure the packet service status is EStatusAttached. + RPacketService::TStatus packetStatus; + CHECK_EQUALS_L(packetService.GetStatus(packetStatus), KErrNone, _L("RPacketService::GetStatus returned an error")); + TExtEtelRequestStatus notifyServiceStatusChStatus(packetService, EPacketNotifyStatusChange); + CleanupStack::PushL(notifyServiceStatusChStatus); + RPacketService::TStatus packetServiceStatus; + + if (packetStatus != RPacketService::EStatusAttached) + { + RPacketService::TAttachMode attachMode; + CHECK_EQUALS_L(packetService.GetAttachMode(attachMode), KErrNone, _L("RPacketService::GetAttachMode returned with an error.")); + packetService.NotifyStatusChange(notifyServiceStatusChStatus, packetServiceStatus); + if(attachMode != RPacketService::EAttachWhenPossible) + { + CHECK_EQUALS_L(packetService.SetAttachMode(RPacketService::EAttachWhenPossible), KErrNone, _L("RPacketService::SetAttachMode returned with an error.")); + } + CHECK_EQUALS_L(packetService.GetAttachMode(attachMode), KErrNone, _L("RPacketService::GetAttachMode returned with an error.")); + CHECK_EQUALS_L(attachMode, RPacketService::EAttachWhenPossible, _L("RPacketService::GetAttachMode did not return EAttachWhenPossible.")); + + // Ensure phone is attached to the packet service (RPacketService::GetStatus returns EStatusAttached). + CHECK_EQUALS_L(packetService.GetStatus(packetStatus), KErrNone, _L("RPacketService::GetStatus returned with an error")); + + // Wait for phone to attach to packet service if it is not attached. + if (packetStatus == RPacketService::EStatusUnattached) + { + iPacketServiceTestHelper.WaitForPacketServiceNotifyStatusChange( + packetService, + notifyServiceStatusChStatus, + packetServiceStatus, + RPacketService::EStatusAttached, + KErrNone); + CHECK_EQUALS_L(packetService.GetStatus(packetStatus), KErrNone, _L("RPacketService::GetStatus returned with an error")); + CHECK_EQUALS_L(packetStatus, RPacketService::EStatusAttached, _L("RPacketService::GetStatus did not return EStatusAttached")); + } + } + + + //////////////////////////////////////////////////////////////// + // SET UP END + //////////////////////////////////////////////////////////////// + + StartTest(); + + //////////////////////////////////////////////////////////////// + // TEST START + //////////////////////////////////////////////////////////////// + + + // Get voice line 1. + RLine& line = iEtelSessionMgr.GetLineL(KMainServer, KMainPhone, KVoiceLine); + + // Get call 1. + RCall& call = iEtelSessionMgr.GetCallL(KMainServer, KMainPhone, KVoiceLine, KCall1); + + // Dial a number with call 1. + TPtrC number; + ASSERT_TRUE(GetStringFromConfig(KIniVoiceNumSection, KIniVoiceNumber1, number) != EFalse, _L("GetStringFromConfig did not complete as expected")); + TCoreEtelRequestStatus dialStatus(call, &RCall::DialCancel); + CleanupStack::PushL(dialStatus); + DEBUG_PRINTF1(_L("Dialling VoiceNumber1")); + call.Dial(dialStatus, number); + ASSERT_EQUALS(WaitForRequestWithTimeOut(dialStatus, ETimeLong), KErrNone, _L("RCall::Dial timed-out")); + + // Verify KErrGsmOfflineOpNotAllowed returned. + ASSERT_EQUALS(dialStatus.Int(), KErrGsmOfflineOpNotAllowed, _L("RCall::Dial did not return KErrGsmOfflineOpNotAllowed as expected.")); + + // Get data line 1. + RLine& dataLine = iEtelSessionMgr.GetLineL(KMainServer, KMainPhone, KDataLine); + + // Get call 1 with data line 1. + call = iEtelSessionMgr.GetCallL(KMainServer, KMainPhone, KDataLine, KCall1); + + // Dial a number with call 1. + DEBUG_PRINTF1(_L("Dialling VoiceNumber1")); + call.Dial(dialStatus, number); + ASSERT_EQUALS(WaitForRequestWithTimeOut(dialStatus, ETimeLong), KErrNone, _L("RCall::Dial timed-out")); + + // Verify KErrGsmOfflineOpNotAllowed returned. + ASSERT_EQUALS(dialStatus.Int(), KErrGsmOfflineOpNotAllowed, _L("RCall::Dial did not return KErrGsmOfflineOpNotAllowed as expected.")); + + + //////////////////////////////////////////////////////////////// + // TEST END + //////////////////////////////////////////////////////////////// + + StartCleanup(); + + // Pop + // setMSClassStatus + // setPreferredBearerStatus + // notifyServiceStatusChStatus + // dialStatus + CleanupStack::Pop(4, &setMSClassStatus); + + + return TestStepResult(); + } + +TPtrC CCTSYIntegrationTestCallControl0042::GetTestStepName() +/** + * @return The test step name. + */ + { + return _L("CCTSYIntegrationTestCallControl0042"); + } + + + +CCTSYIntegrationTestCallControl0043::CCTSYIntegrationTestCallControl0043(CEtelSessionMgr& aEtelSessionMgr) + : CCTSYIntegrationTestCallControlBase(aEtelSessionMgr) +/** + * Constructor. + */ + { + SetTestStepName(CCTSYIntegrationTestCallControl0043::GetTestStepName()); + } + +CCTSYIntegrationTestCallControl0043::~CCTSYIntegrationTestCallControl0043() +/** + * Destructor. + */ + { + } + +TVerdict CCTSYIntegrationTestCallControl0043::doTestStepL() +/** + * @SYMTestCaseID BA-CTSY-INT-CCON-0043 + * @SYMFssID BA/CTSY/CCON-0043 + * @SYMTestCaseDesc Ensure that when in class C operation (PSD only), an incoming call does not trigger a NotifyIncomingCall request. + * @SYMTestPriority High + * @SYMTestActions + * @SYMTestExpectedResults Pass - Notify incoming call request does not complete. + * @SYMTestType CIT + * @SYMTestCaseDependencies live/automatic + * + * Reason for test: Verify incoming call notification remains pending. + * + * @return - TVerdict code + */ + { + + //////////////////////////////////////////////////////////////// + // SET UP + //////////////////////////////////////////////////////////////// + + // Call TNetworkTsyTestHelper::WaitForRegisteredOnHomeNetworkL + RMobilePhone& phone = iEtelSessionMgr.GetPhoneL(KMainServer,KMainPhone); + CHECK_EQUALS_L(iNetworkTestHelper.WaitForRegisteredOnHomeNetworkL(phone), KErrNone, + _L("TNetworkTsyTestHelper::WaitForRegisteredOnHomeNetworkL returned with an error")); + + // Get the packet service. + + // Set the MS class to EMSClassAlternateMode. + + // Set the preferred bearer to EBearerPacketSwitched + + // Ensure the packet service status is EStatusAttached. + + + //////////////////////////////////////////////////////////////// + // SET UP END + //////////////////////////////////////////////////////////////// + + StartTest(); + + //////////////////////////////////////////////////////////////// + // TEST START + //////////////////////////////////////////////////////////////// + + + // Get voice line 1. + + // Get call 1. + + // Request incoming call notification with RLine::NotifyIncomingCall + + // Request an incoming call from RPS. + + // Wait for 2 mins. + + // Check that RLine::NotifyIncomingCall notification is still KRequestPending. + + + //////////////////////////////////////////////////////////////// + // TEST END + //////////////////////////////////////////////////////////////// + + StartCleanup(); + + // Put any required test clean up here, then remove this comment + + return TestStepResult(); + } + +TPtrC CCTSYIntegrationTestCallControl0043::GetTestStepName() +/** + * @return The test step name. + */ + { + return _L("CCTSYIntegrationTestCallControl0043"); + } + + + +CCTSYIntegrationTestCallControl0044::CCTSYIntegrationTestCallControl0044(CEtelSessionMgr& aEtelSessionMgr) + : CCTSYIntegrationTestCallControlBase(aEtelSessionMgr) +/** + * Constructor. + */ + { + SetTestStepName(CCTSYIntegrationTestCallControl0044::GetTestStepName()); + } + +CCTSYIntegrationTestCallControl0044::~CCTSYIntegrationTestCallControl0044() +/** + * Destructor. + */ + { + } + +TVerdict CCTSYIntegrationTestCallControl0044::doTestStepL() +/** + * @SYMTestCaseID BA-CTSY-INT-CCON-0044 + * @SYMFssID BA/CTSY/CCON-0044 + * @SYMTestCaseDesc Cancel hang up. + * @SYMTestPriority High + * @SYMTestActions RCall::NotifyStatusChange, RCall::GetStatus, RCall::HangUp, RCall::HangUpCancel, RLine::GetStatus + * @SYMTestExpectedResults Pass - KErrNotSupported. + * @SYMTestType CIT + * @SYMTestCaseDependencies live/automatic + * + * Reason for test: Verify hang up request can be cancelled. + * + * @return - TVerdict code + */ + { + + //////////////////////////////////////////////////////////////// + // SET UP + //////////////////////////////////////////////////////////////// + + // Call TNetworkTsyTestHelper::WaitForRegisteredOnHomeNetworkL + RMobilePhone& phone = iEtelSessionMgr.GetPhoneL(KMainServer,KMainPhone); + CHECK_EQUALS_L(iNetworkTestHelper.WaitForRegisteredOnHomeNetworkL(phone), KErrNone, + _L("TNetworkTsyTestHelper::WaitForRegisteredOnHomeNetworkL returned with an error")); + + // Get Voice line 1. + RMobileLine& voiceLine = iEtelSessionMgr.GetLineL(KMainServer, KMainPhone, KVoiceLine); + + // Get call 1. + RMobileCall& call1 = iEtelSessionMgr.GetCallL(KMainServer, KMainPhone, KVoiceLine, KCall1); + + // Check phone supports KCapsVoice. + RPhone::TCaps phoneCaps; + CHECK_EQUALS_L(phone.GetCaps(phoneCaps), KErrNone,_L("RMobileLine::GetCaps returned an error")); + CHECK_BITS_SET_L(phoneCaps.iFlags, RPhone::KCapsVoice, KNoUnwantedBits, _L("RPhone::GetCaps returned wrong caps")); + + //////////////////////////////////////////////////////////////// + // SET UP END + //////////////////////////////////////////////////////////////// + + StartTest(); + + //////////////////////////////////////////////////////////////// + // TEST START + //////////////////////////////////////////////////////////////// + + // Dial a number that answers. + TPtrC number; + ASSERT_TRUE(GetStringFromConfig(KIniVoiceNumSection, KIniVoiceNumber1, number) != EFalse, _L("GetStringFromConfig did not complete as expected")); + TCoreEtelRequestStatus dialStatus(call1, &RCall::DialCancel); + CleanupStack::PushL(dialStatus); + DEBUG_PRINTF1(_L("Board Now Dialling: ")); + call1.Dial(dialStatus, number); + ASSERT_EQUALS(WaitForRequestWithTimeOut(dialStatus, ETimeMedium), KErrNone, _L("RCall::Dial timed-out")); + ASSERT_EQUALS(dialStatus.Int(), KErrNone, _L("RCall::Dial returned with an error")); + + // Hang up. + TCoreEtelRequestStatus hangUpStatus (call1, &RCall::HangUpCancel); + CleanupStack::PushL(hangUpStatus); + call1.HangUp(hangUpStatus); + + // Immediately cancel the hang up request with RCall::HangUpCancel. + call1.HangUpCancel(); + + // Check hang up is cancelled. + ASSERT_EQUALS(WaitForRequestWithTimeOut(hangUpStatus, ETimeShort), KErrNone, _L("RCall::HangUpCancel timed-out")); + ASSERT_TRUE((hangUpStatus.Int() == KErrNone) || (hangUpStatus.Int() == KErrCancel), _L("RMobileCall::HangUpCancel did not return KErrNone or KErrCancel")); + if(hangUpStatus.Int() == KErrNone) + { + ERR_PRINTF1(_L("HangUpCancel didn't succeed")); + } + else + { + call1.HangUp(hangUpStatus); + ASSERT_EQUALS(WaitForRequestWithTimeOut(hangUpStatus, ETimeShort), KErrNone, _L("RCall::HangUpCancel timed-out")); + ASSERT_EQUALS(hangUpStatus.Int(), KErrNone, _L("RMobileCall::HangUp did not return KErrNone")); + } + //////////////////////////////////////////////////////////////// + // TEST END + //////////////////////////////////////////////////////////////// + + StartCleanup(); + + // Pop + // dialStatus + // hangUpStatus + CleanupStack::PopAndDestroy(2, &dialStatus); + + return TestStepResult(); + } + +TPtrC CCTSYIntegrationTestCallControl0044::GetTestStepName() +/** + * @return The test step name. + */ + { + return _L("CCTSYIntegrationTestCallControl0044"); + } + + + +CCTSYIntegrationTestCallControl0045::CCTSYIntegrationTestCallControl0045(CEtelSessionMgr& aEtelSessionMgr) + : CCTSYIntegrationTestCallControlBase(aEtelSessionMgr) +/** + * Constructor. + */ + { + SetTestStepName(CCTSYIntegrationTestCallControl0045::GetTestStepName()); + } + +CCTSYIntegrationTestCallControl0045::~CCTSYIntegrationTestCallControl0045() +/** + * Destructor. + */ + { + } + +TVerdict CCTSYIntegrationTestCallControl0045::doTestStepL() +/** + * @SYMTestCaseID BA-CTSY-INT-CCON-0045 + * @SYMFssID BA/CTSY/CCON-0045 + * @SYMTestCaseDesc Terminate all calls when there are outgoing calls. + * @SYMTestPriority High + * @SYMTestActions RLine::NotifyStatusChange, RMobileLine::NotifyMobileLineStatusChange, RMobileCall::GetMobileCallStatus, RCall::NotifyStatusChange, RMobileCall::NotifyMobileCallStatusChange, RLine::GetStatus, RMobileLine::GetMobileLineStatus, RMobilePhone::TerminateAllCalls, RCall::GetStatus + * @SYMTestExpectedResults Pass - KErrNotSupported. + * @SYMTestType CIT + * @SYMTestCaseDependencies live/automatic + * + * Reason for test: Verify call and line statuses. + * + * @return - TVerdict code + */ + { + + //////////////////////////////////////////////////////////////// + // SET UP + //////////////////////////////////////////////////////////////// + + // Call TNetworkTsyTestHelper::WaitForRegisteredOnHomeNetworkL + RMobilePhone& phone = iEtelSessionMgr.GetPhoneL(KMainServer,KMainPhone); + CHECK_EQUALS_L(iNetworkTestHelper.WaitForRegisteredOnHomeNetworkL(phone), KErrNone, _L("TNetworkTsyTestHelper::WaitForRegisteredOnHomeNetworkL returned with an error")); + + // Check phone supports KCapsVoice. + RMobilePhone::TCaps lineCaps; + CHECK_EQUALS_L(phone.GetCaps(lineCaps), KErrNone, _L("RMobilePhone::GetCaps returned an error")); + CHECK_BITS_SET_L(lineCaps.iFlags, RMobilePhone::KCapsVoice, KNoUnwantedBits, _L("RMobilePhone::GetCaps did not return KCapsVoice as expected")); + + // Get Voice line 1. + RMobileLine& mobileLine1 = iEtelSessionMgr.GetLineL(KMainServer, KMainPhone, KVoiceLine); + + // Get call 1. + RMobileCall& mobileCall1 = iEtelSessionMgr.GetCallL(KMainServer, KMainPhone, KVoiceLine, KCall1); + + // Get Voice line 2. + RMobileLine& mobileLine2 = iEtelSessionMgr.GetLineL(KAltServer, KMainPhone, KVoiceLine); + + // Get call 2. + RMobileCall& mobileCall2 = iEtelSessionMgr.GetCallL(KMainServer, KMainPhone, KVoiceLine, KCall2); + + // Get phone numbers + TPtrC callNumber; + CHECK_TRUE_L(GetStringFromConfig(KIniVoiceNumSection, KIniVoiceNumber1, callNumber) != EFalse, _L("GetStringFromConfig did not complete as expected")); + + TPtrC callNumber2; + CHECK_TRUE_L(GetStringFromConfig(KIniVoiceNumSection, KIniVoiceNumber2, callNumber2) != EFalse, _L("GetStringFromConfig did not complete as expected")); + + //////////////////////////////////////////////////////////////// + // SET UP END + //////////////////////////////////////////////////////////////// + + StartTest(); + + //////////////////////////////////////////////////////////////// + // TEST START + //////////////////////////////////////////////////////////////// + + + // Dial a number that answers on call 1. + TCoreEtelRequestStatus getDialStatus(mobileCall1, &RMobileCall::DialCancel); + CleanupStack::PushL(getDialStatus); + + mobileCall1.Dial(getDialStatus, callNumber); + ASSERT_EQUALS(WaitForRequestWithTimeOut(getDialStatus, ETimeLong), KErrNone, _L("RMobileCall::Dial timed-out")); + ASSERT_EQUALS(getDialStatus.Int(), KErrNone, _L("RMobileCall::Dial returned error")); + + // Dial a number that answers on call 2. + TCoreEtelRequestStatus getDialStatus2(mobileCall2, &RMobileCall::DialCancel); + CleanupStack::PushL(getDialStatus2); + + mobileCall2.Dial(getDialStatus2, callNumber2); + ASSERT_EQUALS(WaitForRequestWithTimeOut(getDialStatus2, ETimeLong), KErrNone, _L("RMobileCall::Dial timed-out")); + ASSERT_EQUALS(getDialStatus2.Int(), KErrNone, _L("RMobileCall::Dial returned error")); + + // Post notifiers line + RMobileCall::TMobileCallStatus mobileLineStatus; + TExtEtelRequestStatus notifyMobileLineChangeStatus(mobileLine1, EMobileLineNotifyMobileLineStatusChange); + CleanupStack::PushL(notifyMobileLineChangeStatus); + mobileLine1.NotifyMobileLineStatusChange(notifyMobileLineChangeStatus, mobileLineStatus); + + RCall::TStatus lineStatus; + TCoreEtelRequestStatus notifyLineChangeStatus(mobileLine1, &RLine::NotifyStatusChangeCancel); + CleanupStack::PushL(notifyLineChangeStatus); + mobileLine1.NotifyStatusChange(notifyLineChangeStatus, lineStatus); + + RMobileCall::TMobileCallStatus mobileLineStatus2; + TExtEtelRequestStatus notifyMobileLineChangeStatus2(mobileLine2, EMobileLineNotifyMobileLineStatusChange); + CleanupStack::PushL(notifyMobileLineChangeStatus2); + mobileLine2.NotifyMobileLineStatusChange(notifyMobileLineChangeStatus2, mobileLineStatus2); + + RCall::TStatus lineStatus2; + TCoreEtelRequestStatus notifyLineChangeStatus2(mobileLine2, &RLine::NotifyStatusChangeCancel); + CleanupStack::PushL(notifyLineChangeStatus2); + mobileLine2.NotifyStatusChange(notifyLineChangeStatus2, lineStatus2); + + // Post notifiers call + RMobileCall::TMobileCallStatus mobileCallStatus; + TExtEtelRequestStatus notifyMobileCallChangeStatus(mobileCall1, EMobileCallNotifyMobileCallStatusChange); + CleanupStack::PushL(notifyMobileCallChangeStatus); + mobileCall1.NotifyMobileCallStatusChange(notifyMobileCallChangeStatus, mobileCallStatus); + + RCall::TStatus callStatus; + TCoreEtelRequestStatus notifyCallChangeStatus(mobileCall1, &RCall::NotifyStatusChangeCancel); + CleanupStack::PushL(notifyCallChangeStatus); + mobileCall1.NotifyStatusChange(notifyCallChangeStatus, callStatus); + + RMobileCall::TMobileCallStatus mobileCallStatus2; + TExtEtelRequestStatus notifyMobileCallChangeStatus2(mobileCall2, EMobileCallNotifyMobileCallStatusChange); + CleanupStack::PushL(notifyMobileCallChangeStatus2); + mobileCall2.NotifyMobileCallStatusChange(notifyMobileCallChangeStatus2, mobileCallStatus2); + + RCall::TStatus callStatus2; + TCoreEtelRequestStatus notifyCallChangeStatus2(mobileCall2, &RCall::NotifyStatusChangeCancel); + CleanupStack::PushL(notifyCallChangeStatus2); + mobileCall2.NotifyStatusChange(notifyCallChangeStatus2, callStatus2); + + // Terminate all calls with RMobilePhone::TerminateAllCalls + ERR_PRINTF1(_L("$CTSYProblem: RMobilePhone::TerminateAllCalls is not supported by CTSY, checked for KErrNotSupported instead of KErrNone.")); + TExtEtelRequestStatus getTerminateAllCallsStatus(phone, EMobilePhoneTerminateAllCallsCancel); + CleanupStack::PushL(getTerminateAllCallsStatus); + phone.TerminateAllCalls(getTerminateAllCallsStatus); + ASSERT_EQUALS(WaitForRequestWithTimeOut(getTerminateAllCallsStatus, ETimeLong), KErrNone, _L("RMobilePhone::TerminateAllCalls timed-out")); + ASSERT_EQUALS(getTerminateAllCallsStatus.Int(), KErrNotSupported, _L("RMobileCall::TerminateAllCalls returned with an error")); + + // === Check line status for calls 1 and 2 === + + // Check RLine::NotifyStatusChange for call 1 completes with EStatusHangingUp -> EStatusIdle + + // Check RLine::GetStatus for call 1 returns EStatusIdle + + // Check RMobileLine::NotifyMobileLineStatusChange for call 1 completes with EStatusDisconnecting -> EStatusIdle + + // Check RMobileLine::GetMobileLineStatus for call 1 returns EStatusIdle + + // Check RLine::NotifyStatusChange for call 2 completes with EStatusHangingUp -> EStatusIdle + + // Check RLine::GetStatus for call 2 returns EStatusIdle + + // Check RMobileLine::NotifyMobileLineStatusChange for call 2 completes with EStatusDisconnecting -> EStatusIdle + + // Check RMobileLine::GetMobileLineStatus for call 2 returns EStatusIdle + + // === Check call status for calls 1 and 2 === + + // Check RCall::NotifyStatusChange for call 1 completes with EStatusHangingUp -> EStatusIdle. + + // Check RCall::GetStatus for call 1 returns EStatusIdle. + + // Check RMobileCall::NotifyMobileCallStatusChange for call 1 completes with EStatusDisconnecting -> EStatusIdle. + + // Check RMobileCall::GetMobileCallStatus for call 1 returns status of EStatusIdle. + + // Check RCall::NotifyStatusChange for call 2 completes with EStatusHangingUp -> EStatusIdle. + + // Check RCall::GetStatus for call 2 returns EStatusIdle. + + // Check RMobileCall::NotifyMobileCallStatusChange for call 2 completes with EStatusDisconnecting -> EStatusIdle. + + // Check RMobileCall::GetMobileCallStatus for call 2 returns status of EStatusIdle. + + + //////////////////////////////////////////////////////////////// + // TEST END + //////////////////////////////////////////////////////////////// + + StartCleanup(); + + // Hangup calls + mobileCall2.HangUp(); + mobileCall1.HangUp(); + + // Pop + // getDialStatus + // getDialStatus2 + // notifyMobileLineChangeStatus + // notifyLineChangeStatus + // notifyMobileLineChangeStatus2 + // notifyLineChangeStatus2 + // notifyMobileCallChangeStatus + // notifyCallChangeStatus + // notifyMobileCallChangeStatus2 + // notifyCallChangeStatus2 + // getTerminateAllCallsStatus + CleanupStack::Pop(11, &getDialStatus); + + return TestStepResult(); + } + +TPtrC CCTSYIntegrationTestCallControl0045::GetTestStepName() +/** + * @return The test step name. + */ + { + return _L("CCTSYIntegrationTestCallControl0045"); + } + + + +CCTSYIntegrationTestCallControl0046::CCTSYIntegrationTestCallControl0046(CEtelSessionMgr& aEtelSessionMgr) + : CCTSYIntegrationTestCallControlBase(aEtelSessionMgr) +/** + * Constructor. + */ + { + SetTestStepName(CCTSYIntegrationTestCallControl0046::GetTestStepName()); + } + +CCTSYIntegrationTestCallControl0046::~CCTSYIntegrationTestCallControl0046() +/** + * Destructor. + */ + { + } + +TVerdict CCTSYIntegrationTestCallControl0046::doTestStepL() +/** + * @SYMTestCaseID BA-CTSY-INT-CCON-0046 + * @SYMFssID BA/CTSY/CCON-0046 + * @SYMTestCaseDesc Terminate all calls where there are incoming calls. + * @SYMTestPriority High + * @SYMTestActions RCall::AnswerIncomingCall, RMobileCall::Hold, RLine::NotifyStatusChange, RMobileLine::NotifyMobileLineStatusChange, RMobileCall::GetMobileCallStatus, RCall::NotifyStatusChange, RMobileCall::NotifyMobileCallStatusChange, RLine::GetStatus, RMobileLine::GetMobileLineStatus, RMobilePhone::TerminateAllCalls, RCall::GetStatus + * @SYMTestExpectedResults Pass - Calls terminated. + * @SYMTestType CIT + * @SYMTestCaseDependencies live/automatic + * + * Reason for test: Verify call and line statuses. + * + * @return - TVerdict code + */ + { + + //////////////////////////////////////////////////////////////// + // SET UP + //////////////////////////////////////////////////////////////// + + // Call TNetworkTsyTestHelper::WaitForRegisteredOnHomeNetworkL + RMobilePhone& phone = iEtelSessionMgr.GetPhoneL(KMainServer,KMainPhone); + CHECK_EQUALS_L(iNetworkTestHelper.WaitForRegisteredOnHomeNetworkL(phone), KErrNone, + _L("TNetworkTsyTestHelper::WaitForRegisteredOnHomeNetworkL returned with an error")); + + // Check phone supports KCapsVoice. + RMobilePhone::TCaps lineCaps; + CHECK_EQUALS_L(phone.GetCaps(lineCaps), KErrNone, _L("RMobilePhone::GetCaps returned an error")); + CHECK_BITS_SET_L(lineCaps.iFlags, RMobilePhone::KCapsVoice, KNoUnwantedBits, _L("RMobilePhone::GetCaps did not return KCapsVoice as expected")); + + // Get Voice line 1. + RMobileLine& mobileLine1 = iEtelSessionMgr.GetLineL(KMainServer, KMainPhone, KVoiceLine); + + // Get call 1. + RMobileCall& mobileCall1 = iEtelSessionMgr.GetCallL(KMainServer, KMainPhone, KVoiceLine, KCall1); + + // Get Voice line 2. + RMobileLine& mobileLine2 = iEtelSessionMgr.GetLineL(KAltServer, KMainPhone, KVoiceLine); + + // Get call 2. + RMobileCall& mobileCall2 = iEtelSessionMgr.GetCallL(KMainServer, KMainPhone, KVoiceLine, KCall2); + + + //////////////////////////////////////////////////////////////// + // SET UP END + //////////////////////////////////////////////////////////////// + + StartTest(); + + //////////////////////////////////////////////////////////////// + // TEST START + //////////////////////////////////////////////////////////////// + + // Post notification RCall::NotifyIncomingCall for Line1 + TCoreEtelRequestStatus notifyIncomingCallStatus(mobileLine1, &RLine::NotifyIncomingCallCancel); + CleanupStack::PushL(notifyIncomingCallStatus); + TName name; + mobileLine1.NotifyIncomingCall(notifyIncomingCallStatus, name); + + // Request incoming call from RPS. + ASSERT_EQUALS(RPSRequestIncomingCallL(EVoiceLine), KErrNone, _L("CCTSYIntegrationTestSuiteStepBase::RPSRequestIncomingCallL returned an error")); + ASSERT_EQUALS(WaitForRequestWithTimeOut(notifyIncomingCallStatus,ETimeMedium),KErrNone, + _L("RLine::NotifyIncomingCall did not complete without error")); + ASSERT_EQUALS(notifyIncomingCallStatus.Int(), KErrNone, + _L("RLine::NotifyIncomingCall set requestStatus to an error")); + + // Get the incoming call + TCallId incomingCallId; + mobileCall1 = iEtelSessionMgr.GetIncomingCallL(KMainServer, KMainPhone, KVoiceLine, name, incomingCallId); + + // Answer call on call 1. + TCoreEtelRequestStatus answerIncomingMCallStatus1(mobileCall1, &RMobileCall::AnswerIncomingCallCancel); + CleanupStack::PushL(answerIncomingMCallStatus1); + mobileCall1.AnswerIncomingCall(answerIncomingMCallStatus1); + ASSERT_EQUALS(WaitForRequestWithTimeOut(answerIncomingMCallStatus1, ETimeMedium), KErrNone, _L("RMobileCall::AnswerIncomingCall timed-out")) + ASSERT_EQUALS(answerIncomingMCallStatus1.Int(), KErrNone, _L("RMobileCall::AnswerIncomingCall returned with an error")) + + // Hold call 1. + TExtEtelRequestStatus getHoldStatus(mobileCall1, EMobileCallHold); + CleanupStack::PushL(getHoldStatus); + mobileCall1.Hold(getHoldStatus); + ASSERT_EQUALS(WaitForRequestWithTimeOut(getHoldStatus, ETimeMedium), KErrNone, _L("RMobileCall::Hold timed-out")); + ASSERT_EQUALS(getHoldStatus.Int(), KErrNone, _L("RMobileCall::Hold returned with error")); + + // Post notification RCall::NotifyIncomingCall for Line2 + TCoreEtelRequestStatus notifyIncomingCallStatus2(mobileLine2, &RLine::NotifyIncomingCallCancel); + CleanupStack::PushL(notifyIncomingCallStatus2); + TName name2; + mobileLine2.NotifyIncomingCall(notifyIncomingCallStatus2, name2); + + // Request another incoming call from RPS. + ASSERT_EQUALS(RPSRequestIncomingCallL(EVoiceLine), KErrNone, _L("CCTSYIntegrationTestSuiteStepBase::RPSRequestIncomingCallL returned an error")); + + // Tester should have "Call waiting" activated on SIM. Otherwise will fail. + ASSERT_EQUALS(WaitForRequestWithTimeOut(notifyIncomingCallStatus2,ETimeLong),KErrNone, _L("RLine::NotifyIncomingCall did not complete without error")); + ASSERT_EQUALS(notifyIncomingCallStatus2.Int(), KErrNone, _L("RLine::NotifyIncomingCall set requestStatus to an error")); + + // Get the incoming call + TCallId incomingCallId2; + mobileCall2 = iEtelSessionMgr.GetIncomingCallL(KMainServer, KMainPhone, KVoiceLine, name2, incomingCallId2); + + // Answer call on call 2. + TCoreEtelRequestStatus answerIncomingMCallStatus2(mobileCall2, &RMobileCall::AnswerIncomingCallCancel); + CleanupStack::PushL(answerIncomingMCallStatus2); + mobileCall2.AnswerIncomingCall(answerIncomingMCallStatus2); + ASSERT_EQUALS(WaitForRequestWithTimeOut(answerIncomingMCallStatus2, ETimeMedium), KErrNone, _L("RMobileCall::AnswerIncomingCall timed-out")) + ASSERT_EQUALS(answerIncomingMCallStatus2.Int(), KErrNone, _L("RMobileCall::AnswerIncomingCall returned with an error")) + + // Post notifiers line + RMobileCall::TMobileCallStatus mobileLineStatus; + TExtEtelRequestStatus notifyMobileLineChangeStatus(mobileLine1, EMobileLineNotifyMobileLineStatusChange); + CleanupStack::PushL(notifyMobileLineChangeStatus); + mobileLine1.NotifyMobileLineStatusChange(notifyMobileLineChangeStatus, mobileLineStatus); + + RCall::TStatus lineStatus; + TCoreEtelRequestStatus notifyLineChangeStatus(mobileLine1, &RLine::NotifyStatusChangeCancel); + CleanupStack::PushL(notifyLineChangeStatus); + mobileLine1.NotifyStatusChange(notifyLineChangeStatus, lineStatus); + + RMobileCall::TMobileCallStatus mobileLineStatus2; + TExtEtelRequestStatus notifyMobileLineChangeStatus2(mobileLine2, EMobileLineNotifyMobileLineStatusChange); + CleanupStack::PushL(notifyMobileLineChangeStatus2); + mobileLine2.NotifyMobileLineStatusChange(notifyMobileLineChangeStatus2, mobileLineStatus2); + + RCall::TStatus lineStatus2; + TCoreEtelRequestStatus notifyLineChangeStatus2(mobileLine2, &RLine::NotifyStatusChangeCancel); + CleanupStack::PushL(notifyLineChangeStatus2); + mobileLine2.NotifyStatusChange(notifyLineChangeStatus2, lineStatus2); + + // Post notifiers call + RMobileCall::TMobileCallStatus mobileCallStatus; + TExtEtelRequestStatus notifyMobileCallChangeStatus(mobileCall1, EMobileCallNotifyMobileCallStatusChange); + CleanupStack::PushL(notifyMobileCallChangeStatus); + mobileCall1.NotifyMobileCallStatusChange(notifyMobileCallChangeStatus, mobileCallStatus); + + RCall::TStatus callStatus; + TCoreEtelRequestStatus notifyCallChangeStatus(mobileCall1, &RCall::NotifyStatusChangeCancel); + CleanupStack::PushL(notifyCallChangeStatus); + mobileCall1.NotifyStatusChange(notifyCallChangeStatus, callStatus); + + RMobileCall::TMobileCallStatus mobileCallStatus2; + TExtEtelRequestStatus notifyMobileCallChangeStatus2(mobileCall2, EMobileCallNotifyMobileCallStatusChange); + CleanupStack::PushL(notifyMobileCallChangeStatus2); + mobileCall2.NotifyMobileCallStatusChange(notifyMobileCallChangeStatus2, mobileCallStatus2); + + RCall::TStatus callStatus2; + TCoreEtelRequestStatus notifyCallChangeStatus2(mobileCall2, &RCall::NotifyStatusChangeCancel); + CleanupStack::PushL(notifyCallChangeStatus2); + mobileCall2.NotifyStatusChange(notifyCallChangeStatus2, callStatus2); + + // Terminate all calls with RMobilePhone::TerminateAllCalls + TExtEtelRequestStatus getTerminateAllCallsStatus(phone, EMobilePhoneTerminateAllCallsCancel); + CleanupStack::PushL(getTerminateAllCallsStatus); + phone.TerminateAllCalls(getTerminateAllCallsStatus); + + // CTSYProblem CTSY is not supporting EMobilePhoneTerminateAllCalls IPC and test returns -5(KErrNotsuppported) + // Rest of test is not tested before EMobilePhoneTerminateAllCalls IPC support is added + ASSERT_EQUALS(WaitForRequestWithTimeOut(getTerminateAllCallsStatus, ETimeLong), KErrNone, _L("RMobilePhone::TerminateAllCalls timed-out")); + ASSERT_EQUALS(getTerminateAllCallsStatus.Int(), KErrNone, _L("RMobileCall::TerminateAllCalls returned with an error")) + + // === Check line status for calls 1 and 2 === + + // Check RLine::NotifyStatusChange for call 1 completes with EStatusHangingUp -> EStatusIdle + const TInt expectedStatus = KErrNone; + RCall::TStatus expectedCallStatus = RCall::EStatusHangingUp; + iCallControlTestHelper.WaitForLineNotifyStatusChange(mobileLine1, notifyLineChangeStatus, lineStatus, expectedCallStatus, expectedStatus); + expectedCallStatus = RCall::EStatusIdle; + mobileLine1.NotifyStatusChange(notifyLineChangeStatus, lineStatus); + iCallControlTestHelper.WaitForLineNotifyStatusChange(mobileLine1, notifyLineChangeStatus, lineStatus, expectedCallStatus, expectedStatus); + + // Check RLine::GetStatus for call 1 returns EStatusIdle + ASSERT_EQUALS(mobileLine1.GetStatus(lineStatus), KErrNone, _L("RLine::GetStatus returned an error")); + ASSERT_EQUALS(lineStatus, RCall::EStatusIdle, _L("RLine::GetStatus did not EStatusIdle return as expected")); + + // Check RMobileLine::NotifyMobileLineStatusChange for call 1 completes with EStatusDisconnecting -> EStatusIdle + RMobileCall::TMobileCallStatus expectedMobileCallStatus = RMobileCall::EStatusDisconnecting; + iCallControlTestHelper.WaitForMobileLineNotifyMobileLineStatusChange(mobileLine1, notifyMobileLineChangeStatus, mobileLineStatus, expectedMobileCallStatus, expectedStatus); + expectedMobileCallStatus = RMobileCall::EStatusIdle; + mobileLine1.NotifyMobileLineStatusChange(notifyMobileLineChangeStatus, mobileLineStatus); + iCallControlTestHelper.WaitForMobileLineNotifyMobileLineStatusChange(mobileLine1, notifyMobileLineChangeStatus, mobileLineStatus, expectedMobileCallStatus, expectedStatus); + + // Check RMobileLine::GetMobileLineStatus for call 1 returns EStatusIdle + ASSERT_EQUALS(mobileLine1.GetStatus(lineStatus), KErrNone, _L("RMobileLine::GetStatus returned an error")); + ASSERT_EQUALS(lineStatus, RCall::EStatusIdle, _L("RMobileLine::GetStatus did not return EStatusIdle as expected")); + + // Check RLine::NotifyStatusChange for call 2 completes with EStatusHangingUp -> EStatusIdle + RCall::TStatus expectedCallStatus2 = RCall::EStatusHangingUp; + iCallControlTestHelper.WaitForLineNotifyStatusChange(mobileLine2, notifyLineChangeStatus2, lineStatus2, expectedCallStatus2, expectedStatus); + expectedCallStatus2 = RCall::EStatusIdle; + mobileLine2.NotifyStatusChange(notifyLineChangeStatus2, lineStatus2); + iCallControlTestHelper.WaitForLineNotifyStatusChange(mobileLine2, notifyLineChangeStatus2, lineStatus2, expectedCallStatus2, expectedStatus); + + // Check RLine::GetStatus for call 2 returns EStatusIdle + ASSERT_EQUALS(mobileLine2.GetStatus(lineStatus2), KErrNone, _L("RLine::GetStatus returned an error")); + ASSERT_EQUALS(lineStatus2, RCall::EStatusIdle, _L("RLine::GetStatus did not EStatusIdle return as expected")); + + // Check RMobileLine::NotifyMobileLineStatusChange for call 2 completes with EStatusDisconnecting -> EStatusIdle + RMobileCall::TMobileCallStatus expectedMobileCallStatus2 = RMobileCall::EStatusDisconnecting; + iCallControlTestHelper.WaitForMobileLineNotifyMobileLineStatusChange(mobileLine2, notifyMobileLineChangeStatus2, mobileLineStatus2, expectedMobileCallStatus2, expectedStatus); + expectedMobileCallStatus2 = RMobileCall::EStatusIdle; + mobileLine2.NotifyMobileLineStatusChange(notifyMobileLineChangeStatus2, mobileLineStatus2); + iCallControlTestHelper.WaitForMobileLineNotifyMobileLineStatusChange(mobileLine2, notifyMobileLineChangeStatus2, mobileLineStatus2, expectedMobileCallStatus2, expectedStatus); + + // Check RMobileLine::GetMobileLineStatus for call 2 returns EStatusIdle + ASSERT_EQUALS(mobileLine2.GetStatus(lineStatus2), KErrNone, _L("RMobileLine::GetStatus returned an error")); + ASSERT_EQUALS(lineStatus2, RCall::EStatusIdle, _L("RMobileLine::GetStatus did not return EStatusIdle as expected")); + + // === Check call status for calls 1 and 2 === + + // Check RCall::NotifyStatusChange for call 1 completes with EStatusHangingUp -> EStatusIdle. + RCall::TStatus expectedCallStatus3 = RCall::EStatusHangingUp; + iCallControlTestHelper.WaitForCallNotifyStatusChange(mobileCall1, notifyCallChangeStatus, callStatus, expectedCallStatus3, expectedStatus); + expectedCallStatus3 = RCall::EStatusIdle; + mobileCall1.NotifyStatusChange(notifyCallChangeStatus, callStatus); + iCallControlTestHelper.WaitForCallNotifyStatusChange(mobileCall1, notifyCallChangeStatus, callStatus, expectedCallStatus3, expectedStatus); + + // Check RCall::GetStatus for call 1 returns EStatusIdle. + ASSERT_EQUALS(mobileCall1.GetStatus(callStatus), KErrNone, _L("RCall::GetStatus returned an error")); + ASSERT_EQUALS(callStatus, RCall::EStatusIdle, _L("RCall::GetStatus did not EStatusIdle return as expected")); + + // Check RMobileCall::NotifyMobileCallStatusChange for call 1 completes with EStatusDisconnecting -> EStatusIdle. + RMobileCall::TMobileCallStatus expectedMobileCallStatus3 = RMobileCall::EStatusDisconnecting; + iCallControlTestHelper.WaitForMobileCallNotifyMobileCallStatusChange(mobileCall1, notifyMobileCallChangeStatus, mobileCallStatus, expectedMobileCallStatus3, expectedStatus); + expectedMobileCallStatus3 = RMobileCall::EStatusIdle; + mobileCall1.NotifyMobileCallStatusChange(notifyMobileCallChangeStatus, mobileCallStatus); + iCallControlTestHelper.WaitForMobileCallNotifyMobileCallStatusChange(mobileCall1, notifyMobileCallChangeStatus, mobileCallStatus, expectedMobileCallStatus3, expectedStatus); + + // Check RMobileCall::GetMobileCallStatus for call 1 returns status of EStatusIdle. + ASSERT_EQUALS(mobileCall1.GetStatus(callStatus), KErrNone, _L("RMobileCall::GetStatus returned an error")); + ASSERT_EQUALS(callStatus, RCall::EStatusIdle, _L("RMobileCall::GetStatus did not return EStatusIdle as expected")); + + // Check RCall::NotifyStatusChange for call 2 completes with EStatusHangingUp -> EStatusIdle. + RCall::TStatus expectedCallStatus4 = RCall::EStatusHangingUp; + iCallControlTestHelper.WaitForCallNotifyStatusChange(mobileCall2, notifyCallChangeStatus2, callStatus2, expectedCallStatus4, expectedStatus); + expectedCallStatus4 = RCall::EStatusIdle; + mobileCall2.NotifyStatusChange(notifyCallChangeStatus2, callStatus2); + iCallControlTestHelper.WaitForCallNotifyStatusChange(mobileCall2, notifyCallChangeStatus2, callStatus2, expectedCallStatus4, expectedStatus); + + // Check RCall::GetStatus for call 2 returns EStatusIdle. + ASSERT_EQUALS(mobileCall2.GetStatus(callStatus2), KErrNone, _L("RCall::GetStatus returned an error")); + ASSERT_EQUALS(callStatus2, RCall::EStatusIdle, _L("RCall::GetStatus did not EStatusIdle return as expected")); + + // Check RMobileCall::NotifyMobileCallStatusChange for call 2 completes with EStatusDisconnecting -> EStatusIdle. + RMobileCall::TMobileCallStatus expectedMobileCallStatus4 = RMobileCall::EStatusDisconnecting; + iCallControlTestHelper.WaitForMobileCallNotifyMobileCallStatusChange(mobileCall2, notifyMobileCallChangeStatus2, mobileCallStatus2, expectedMobileCallStatus4, expectedStatus); + expectedMobileCallStatus3 = RMobileCall::EStatusIdle; + mobileCall2.NotifyMobileCallStatusChange(notifyMobileCallChangeStatus2, mobileCallStatus2); + iCallControlTestHelper.WaitForMobileCallNotifyMobileCallStatusChange(mobileCall2, notifyMobileCallChangeStatus2, mobileCallStatus2, expectedMobileCallStatus4, expectedStatus); + + // Check RMobileCall::GetMobileCallStatus for call 2 returns status of EStatusIdle. + ASSERT_EQUALS(mobileCall2.GetStatus(callStatus2), KErrNone, _L("RMobileCall::GetStatus returned an error")); + ASSERT_EQUALS(callStatus2, RCall::EStatusIdle, _L("RMobileCall::GetStatus did not return EStatusIdle as expected")); + + + //////////////////////////////////////////////////////////////// + // TEST END + //////////////////////////////////////////////////////////////// + + StartCleanup(); + + // Pop + // notifyIncomingCallStatus + // answerIncomingMCallStatus1 + // getHoldStatus + // notifyIncomingCallStatus2 + // answerIncomingMCallStatus2 + // notifyMobileLineChangeStatus + // notifyLineChangeStatus + // notifyMobileLineChangeStatus2 + // notifyLineChangeStatus2 + // notifyMobileCallChangeStatus + // notifyCallChangeStatus + // notifyMobileCallChangeStatus2 + // notifyCallChangeStatus2 + // getTerminateAllCallsStatus + CleanupStack::PopAndDestroy(14, ¬ifyIncomingCallStatus); + + return TestStepResult(); + } + +TPtrC CCTSYIntegrationTestCallControl0046::GetTestStepName() +/** + * @return The test step name. + */ + { + return _L("CCTSYIntegrationTestCallControl0046"); + } + + + +CCTSYIntegrationTestCallControl0047::CCTSYIntegrationTestCallControl0047(CEtelSessionMgr& aEtelSessionMgr) + : CCTSYIntegrationTestCallControlBase(aEtelSessionMgr) +/** + * Constructor. + */ + { + SetTestStepName(CCTSYIntegrationTestCallControl0047::GetTestStepName()); + } + +CCTSYIntegrationTestCallControl0047::~CCTSYIntegrationTestCallControl0047() +/** + * Destructor. + */ + { + } + +TVerdict CCTSYIntegrationTestCallControl0047::doTestStepL() +/** + * @SYMTestCaseID BA-CTSY-INT-CCON-0047 + * @SYMFssID BA/CTSY/CCON-0047 + * @SYMTestCaseDesc Dial a call using RMobileCall::DialISV + * @SYMTestPriority High + * @SYMTestActions RLine::NotifyStatusChange, + * RMobileLine::NotifyMobileLineStatusChange, + * RLine::GetCallInfo, RLine::GetCaps, + * RMobileCall::DialISV, RLine::GetStatus, + * RMobileLine::GetMobileLineStatus, + * RLine::GetInfo, RLine::EnumerateCall + * @SYMTestExpectedResults Pass - Call connects and line status, + * line caps correct. + * @SYMTestType CIT + * @SYMTestCaseDependencies live/automatic + * + * Reason for test: Verify change in line state is reflected in RLine and RMobileLine + * + * @return - TVerdict code + */ + { + + //////////////////////////////////////////////////////////////// + // SET UP + //////////////////////////////////////////////////////////////// + + // Call TNetworkTsyTestHelper::WaitForRegisteredOnHomeNetworkL + RMobilePhone& phone = iEtelSessionMgr.GetPhoneL(KMainServer,KMainPhone); + CHECK_EQUALS_L(iNetworkTestHelper.WaitForRegisteredOnHomeNetworkL(phone), KErrNone, + _L("TNetworkTsyTestHelper::WaitForRegisteredOnHomeNetworkL returned with an error")); + + // Check phone supports KCapsVoice. + RPhone::TCaps phoneCaps; + CHECK_EQUALS_L(phone.GetCaps(phoneCaps), KErrNone, _L("RPhone::GetCaps returned an error")); + CHECK_BITS_SET_L(phoneCaps.iFlags, RPhone::KCapsVoice, KNoUnwantedBits, _L("RPhone::GetCaps returned wrong caps")); + + // Get Voice line 1. + RMobileLine& voiceLine = iEtelSessionMgr.GetLineL(KMainServer, KMainPhone, KVoiceLine); + + // Get call 1. + RMobileCall& call1 = iEtelSessionMgr.GetCallL(KMainServer, KMainPhone, KVoiceLine, KCall1); + + + //////////////////////////////////////////////////////////////// + // SET UP END + //////////////////////////////////////////////////////////////// + + StartTest(); + + //////////////////////////////////////////////////////////////// + // TEST START + //////////////////////////////////////////////////////////////// + + + // === Check line caps === + + // Check RLine::GetCaps supports caps in set of KCapsVoice. + RLine::TCaps lineCaps; + ASSERT_EQUALS(voiceLine.GetCaps(lineCaps), KErrNone, _L("RLine::GetCaps returned an error")); + ASSERT_BITS_SET(lineCaps.iFlags, RLine::KCapsVoice, KNoUnwantedBits, _L("RLine::GetCaps returned wrong caps")); + + // === Check line status === + + // Check RLine::GetStatus returns EStatusIdle. + RCall::TStatus lineStatus; + ASSERT_EQUALS(voiceLine.GetStatus(lineStatus), KErrNone, _L("RLine::GetStatus returned an error")); + ASSERT_EQUALS(lineStatus, RCall::EStatusIdle, _L("RLine::GetStatus returned wrong status")); + + // Check RMobileLine::GetMobileLineStatus returns EStatusIdle. + RMobileCall::TMobileCallStatus mobilelineStatus; + ASSERT_EQUALS(voiceLine.GetMobileLineStatus(mobilelineStatus), KErrNone, + _L("RMobileLine::GetMobileLineStatus returned an error")); + ASSERT_EQUALS(mobilelineStatus, RMobileCall::EStatusIdle, + _L("RMobileLine::GetMobileLineStatus did not return EStatusIdle as expected")); + + // === Check line info === + + // Check RLine::GetCallInfo returns valid name. + RLine::TCallInfo callInfo; + ASSERT_EQUALS(voiceLine.GetCallInfo( KCall1, callInfo), KErrNone, _L("RLine::GetCallInfo returned an error")); + ASSERT_TRUE(callInfo.iCallName.Length() > 0, _L("RLine::GetCallInfo returned invalid iCallName")); + + // Check RLine::GetCallInfo returns caps in set of KCapsVoice | KCapsDial. + // $CTSYProblem. CTSY is not either completing CapsChanges or/and test suite does not get them correctly hence wrong caps are returned + // Got 0xc , required 0x4c + // KCapsVoice=0x00000004 and KCapsDial=0x00000008 are OK but KCapsAnswer=0x00000040 is missing. + // Changed original test step to check RLine::GetCallInfo returns caps in set of KCapsVoice | KCapsDial instead of KCapsVoice | KCapsDial | KCapsAnswer. + TUint expectedCallCapsFlags = RCall::KCapsVoice | RCall::KCapsDial; + ASSERT_BITS_SET(callInfo.iCallCapsFlags, expectedCallCapsFlags, KNoUnwantedBits, _L("RLine::GetCallInfo returned wrong caps")); + + // Check RLine::GetCallInfo returns status of EStatusIdle. + ASSERT_EQUALS(callInfo.iStatus, RCall::EStatusIdle, _L("RLine::GetCallInfo wrong iStatus, should be EStatusIdle")); + + // Check RLine::GetInfo returns status of EStatusIdle. + RLine::TLineInfo lineInfo; + ASSERT_EQUALS(voiceLine.GetInfo(lineInfo),KErrNone, _L("RLine::GetInfo returned an error")); + ASSERT_EQUALS(lineInfo.iStatus, RCall::EStatusIdle, _L("RLine::GetInfo did not return iStatus EStatusIdle")); + + // Post RLine::NotifyStatusChange + TCoreEtelRequestStatus notifyStatusChangeStatus(voiceLine, &RLine::NotifyStatusChangeCancel); + CleanupStack::PushL(notifyStatusChangeStatus); + voiceLine.NotifyStatusChange(notifyStatusChangeStatus,lineStatus); + + // Post RLine::NotifyMobileLineStatusChange + TExtEtelRequestStatus notifyMobileLineChangeStatus(voiceLine, EMobileLineNotifyMobileLineStatusChange); + CleanupStack::PushL(notifyMobileLineChangeStatus); + voiceLine.NotifyMobileLineStatusChange(notifyMobileLineChangeStatus, mobilelineStatus); + + // Dial a number that answers using RMobileCall::DialISV + TPtrC number; + ASSERT_TRUE(GetStringFromConfig(KIniVoiceNumSection, KIniVoiceNumber1, number) != EFalse, _L("CTestStep::GetStringFromConfig did not complete as expected")); + TExtEtelRequestStatus dialStatus(call1, EMobileCallDialISV); + CleanupStack::PushL(dialStatus); + RMobileCall::TEtel3rdPartyMobileCallParamsV1 callParams; + RMobileCall::TEtel3rdPartyMobileCallParamsV1Pckg callParamsPckg(callParams); + DEBUG_PRINTF1(_L("Board Now Dialling... ")); + call1.DialISV(dialStatus, callParamsPckg, number); + ASSERT_EQUALS(WaitForRequestWithTimeOut(dialStatus, ETimeMedium), KErrNone, _L("RMobileCall::DialISV timed-out")); + ASSERT_EQUALS(dialStatus.Int(), KErrNone, _L("RMobileCall::DialISV returned with an error")); + + // === Check line status === + + // Check RLine::NotifyStatusChange completes with EStatusDialling -> EStatusConnecting -> EStatusConnected. + TInt wantedStatus = KErrNone; + RCall::TStatus expectedLineStatus = RCall::EStatusDialling; + iCallControlTestHelper.WaitForLineNotifyStatusChange(voiceLine, + notifyStatusChangeStatus, + lineStatus, + expectedLineStatus, + wantedStatus); + + voiceLine.NotifyStatusChange(notifyStatusChangeStatus,lineStatus); + expectedLineStatus = RCall::EStatusConnecting; + iCallControlTestHelper.WaitForLineNotifyStatusChange(voiceLine, + notifyStatusChangeStatus, + lineStatus, + expectedLineStatus, + wantedStatus); + + voiceLine.NotifyStatusChange(notifyStatusChangeStatus,lineStatus); + expectedLineStatus = RCall::EStatusConnected; + iCallControlTestHelper.WaitForLineNotifyStatusChange(voiceLine, + notifyStatusChangeStatus, + lineStatus, + expectedLineStatus, + wantedStatus); + + // Check RLine::GetStatus returns EStatusConnected + ASSERT_EQUALS(voiceLine.GetStatus(lineStatus), KErrNone, _L("RLine::GetStatus returned an error")); + ASSERT_EQUALS(lineStatus, RCall::EStatusConnected, _L("RLine::GetStatus did not return EStatusConnected")); + + // Check RMobileLine::NotifyMobileLineStatusChange completes with with EStatusDialling -> EStatusConnecting -> EStatusConnected. + RMobileCall::TMobileCallStatus expectedMobileLineStatus = RMobileCall::EStatusDialling; + iCallControlTestHelper.WaitForMobileLineNotifyMobileLineStatusChange(voiceLine, + notifyMobileLineChangeStatus, + mobilelineStatus, + expectedMobileLineStatus, + wantedStatus); + + voiceLine.NotifyMobileLineStatusChange(notifyMobileLineChangeStatus, mobilelineStatus); + expectedMobileLineStatus = RMobileCall::EStatusConnecting; + iCallControlTestHelper.WaitForMobileLineNotifyMobileLineStatusChange(voiceLine, + notifyMobileLineChangeStatus, + mobilelineStatus, + expectedMobileLineStatus, + wantedStatus); + + voiceLine.NotifyMobileLineStatusChange(notifyMobileLineChangeStatus, mobilelineStatus); + expectedMobileLineStatus = RMobileCall::EStatusConnected; + iCallControlTestHelper.WaitForMobileLineNotifyMobileLineStatusChange(voiceLine, + notifyMobileLineChangeStatus, + mobilelineStatus, + expectedMobileLineStatus, + wantedStatus); + + // Check RMobileLine::GetMobileLineStatus returns EStatusConnected + ASSERT_EQUALS(voiceLine.GetMobileLineStatus(mobilelineStatus), KErrNone, + _L("RMobileLine::GetMobileLineStatus returned an error")); + ASSERT_EQUALS(mobilelineStatus, RMobileCall::EStatusConnected, + _L("RMobileLine::GetMobileLineStatus did not set line status to EStatusConnected")); + + // === Check line info === + + // Check RLine::GetCallInfo returns valid name. + ASSERT_EQUALS(voiceLine.GetCallInfo( KCall1, callInfo), KErrNone, _L("RLine::GetCallInfo returned an error")); + ASSERT_TRUE(callInfo.iCallName.Length()>0, _L("RLine::GetCallInfo returned invalid iCallName")); + + // Check RLine::GetCallInfo returns caps in set of KCapsHangUp. + expectedCallCapsFlags = RCall::KCapsHangUp; + ASSERT_BITS_SET(callInfo.iCallCapsFlags, expectedCallCapsFlags, KNoUnwantedBits, _L("RLine::GetCallInfo returned wrong caps")); + + // Check RLine::GetCallInfo returns status of EStatusConnected. + ASSERT_EQUALS(callInfo.iStatus, RCall::EStatusConnected, _L("RLine::GetCallInfo returned wrong iStatus, should be EStatusConnected")); + + // Check RLine::GetInfo returns status of EStatusConnected. + ASSERT_EQUALS(voiceLine.GetInfo(lineInfo),KErrNone, _L("RLine::GetInfo returned an error")); + ASSERT_EQUALS(lineInfo.iStatus, RCall::EStatusConnected, _L("RLine::GetInfo did not return EStatusConnected")); + + // Check RLine::EnumerateCall returns 2. + TInt numberOfCalls = 0; + TInt wantedNumberOfCalls = 2; + ASSERT_EQUALS(voiceLine.EnumerateCall(numberOfCalls), KErrNone, _L("RLine::EnumerateCall returned an error.")); + ASSERT_EQUALS(numberOfCalls, wantedNumberOfCalls, _L("RLine::EnumerateCall returned wrong number of calls.")); + + // Hang up call 1 + TCoreEtelRequestStatushangupStatus(call1, &RCall::HangUpCancel); + CleanupStack::PushL(hangupStatus); + call1.HangUp(hangupStatus); + ASSERT_EQUALS(WaitForRequestWithTimeOut(hangupStatus, ETimeMedium), KErrNone, _L("RMobileCall::HangUp timed-out")); + ASSERT_EQUALS(hangupStatus.Int(), KErrNone, _L("RMobileCall::HangUp returned error")); + + + //////////////////////////////////////////////////////////////// + // TEST END + //////////////////////////////////////////////////////////////// + + StartCleanup(); + + // Pop + // notifyStatusChangeStatus + // notifyMobileLineChangeStatus + // dialStatus + // hangupStatus + CleanupStack::PopAndDestroy(4, ¬ifyStatusChangeStatus); + + return TestStepResult(); + } + +TPtrC CCTSYIntegrationTestCallControl0047::GetTestStepName() +/** + * @return The test step name. + */ + { + return _L("CCTSYIntegrationTestCallControl0047"); + } + + + +CCTSYIntegrationTestCallControl0048::CCTSYIntegrationTestCallControl0048(CEtelSessionMgr& aEtelSessionMgr) + : CCTSYIntegrationTestCallControlBase(aEtelSessionMgr) +/** + * Constructor. + */ + { + SetTestStepName(CCTSYIntegrationTestCallControl0048::GetTestStepName()); + } + +CCTSYIntegrationTestCallControl0048::~CCTSYIntegrationTestCallControl0048() +/** + * Destructor. + */ + { + } + +TVerdict CCTSYIntegrationTestCallControl0048::doTestStepL() +/** + * @SYMTestCaseID BA-CTSY-INT-CCON-0048 + * @SYMFssID BA/CTSY/CCON-0048 + * @SYMTestCaseDesc Dial a call using RMobileCall::DialISV + * @SYMTestPriority High + * @SYMTestActions RCall::GetCaps, + * RMobileCall::NotifyMobileCallCapsChange, + * RMobileCall::GetMobileCallStatus, + * RMobileCall::GetMobileCallInfo, + * RMobileCall::NotifyMobileCallStatusChange, + * RCall::NotifyStatusChange, RCall::GetInfo, + * RMobileCall::DialISV, + * RCall::NotifyCapsChange, RCall::GetStatus, + * RMobileCall::GetMobileCallCaps + * @SYMTestExpectedResults Pass - Call connects and call status, caps and info correct. + * @SYMTestType CIT + * @SYMTestCaseDependencies live/automatic + * + * Reason for test: Verify change in call state is reflected in RCall and RMobileCall + * + * @return - TVerdict code + */ + { + + //////////////////////////////////////////////////////////////// + // SET UP + //////////////////////////////////////////////////////////////// + + + // Call TNetworkTsyTestHelper::WaitForRegisteredOnHomeNetworkL + RMobilePhone& phone = iEtelSessionMgr.GetPhoneL(KMainServer,KMainPhone); + CHECK_EQUALS_L(iNetworkTestHelper.WaitForRegisteredOnHomeNetworkL(phone), KErrNone, + _L("TNetworkTsyTestHelper::WaitForRegisteredOnHomeNetworkL returned with an error")); + + // Check phone supports KCapsVoice. + RPhone::TCaps phoneCaps; + CHECK_EQUALS_L(phone.GetCaps(phoneCaps), KErrNone, _L("RPhone::GetCaps returned an error")); + CHECK_BITS_SET_L(phoneCaps.iFlags, RPhone::KCapsVoice, KNoUnwantedBits, _L("RPhone::GetCaps returned wrong caps")); + + // Get Voice line 1. + RMobileLine& voiceLine = iEtelSessionMgr.GetLineL(KMainServer, KMainPhone, KVoiceLine); + + // Get call 1. + RMobileCall& call1 = iEtelSessionMgr.GetCallL(KMainServer, KMainPhone, KVoiceLine, KCall1); + + + //////////////////////////////////////////////////////////////// + // SET UP END + //////////////////////////////////////////////////////////////// + + StartTest(); + + //////////////////////////////////////////////////////////////// + // TEST START + //////////////////////////////////////////////////////////////// + + + // === Check call caps === + + // Check RCall::GetCaps supports KCapsDial | KCapsVoice. + RCall::TCaps callCaps; + TUint32 wantedCaps = RCall::KCapsDial | RCall::KCapsVoice; + ASSERT_EQUALS(call1.GetCaps(callCaps), KErrNone, _L("RCall::GetCaps returned an error")); + ASSERT_BITS_SET(callCaps.iFlags, wantedCaps, KNoUnwantedBits, _L("RCall::GetCaps returned wrong caps")); + + // Check RMobileCall::GetMobileCallCaps returns iCallControlCaps in set of KCapsVoice | KCapsDial. + // Check RMobileCall::GetMobileCallCaps includes iCallEventCaps in set of 0. + TUint32 wantedCallControlCaps = RCall::KCapsDial | RCall::KCapsVoice; + TUint32 wantedCallEventCaps = 0; + RMobileCall::TMobileCallCapsV1 mobileCallCaps; + RMobileCall::TMobileCallCapsV1Pckg capsPckg(mobileCallCaps); + ASSERT_EQUALS(call1.GetMobileCallCaps(capsPckg), KErrNone, _L("RMobileCall::GetMobileCallCaps returned an error")); + ASSERT_BITS_SET(mobileCallCaps.iCallControlCaps, wantedCallControlCaps, KNoUnwantedBits, _L("RMobileCall::GetMobileCallCaps returned wrong caps")); + ASSERT_BITS_SET(mobileCallCaps.iCallEventCaps, wantedCallEventCaps, KNoUnwantedBits, _L("RMobileCall::GetMobileCallCaps returned wrong caps")); + + // === Check call status === + + // Check RCall::GetStatus returns EStatusIdle. + RCall::TStatus callStatus; + ASSERT_EQUALS(call1.GetStatus(callStatus), KErrNone, _L("RCall::GetStatus returned an error")); + ASSERT_EQUALS(callStatus, RCall::EStatusIdle, _L("RCall::GetStatus did not return EStatusIdle")); + + // Check RMobileCall::GetMobileCallStatus returns status of EStatusIdle. + RMobileCall::TMobileCallStatus mobileCallStatus; + ASSERT_EQUALS(call1.GetMobileCallStatus(mobileCallStatus), KErrNone, _L("RMobileCall::GetMobileStatus returned an error")); + ASSERT_EQUALS(mobileCallStatus, RMobileCall::EStatusIdle, _L("RMobileCall::GetMobileStatus did not return a status EStatusIdle")); + + // === Check call info === + + // Check RCall::GetInfo returns valid call name. + // Check RCall::GetInfo returns valid voice line name. + // Check RCall::GetInfo returns call status of EStatusIdle. + RCall::TCallInfo callInfo; + ASSERT_EQUALS(call1.GetInfo(callInfo), KErrNone, _L("RCall::GetInfo returned an error")); + ASSERT_TRUE(callInfo.iCallName.Length() > 0, _L("RCall::GetInfo returned an invalid call name")); + ASSERT_TRUE(callInfo.iLineName.Length() > 0,_L("RCall::GetInfo returned an invalid line name")); + ASSERT_EQUALS(callInfo.iStatus, RCall::EStatusIdle, _L("RCall::GetInfo returned wrong status, should be EStatusIdle")); + + // Check RMobileCall::GetMobileCallInfo returns iValid with correct flags for returned parameters set. + RMobileCall::TMobileCallInfoV1 mobileCallInfo; + RMobileCall::TMobileCallInfoV1Pckg callInfoPckg(mobileCallInfo); + ASSERT_EQUALS(call1.GetMobileCallInfo(callInfoPckg), KErrNone, _L("RMobileCall::GetMobileCallInfo returned an error")); + + // Check RMobileCall::GetMobileCallInfo returns valid call status. + ASSERT_EQUALS(mobileCallInfo.iStatus, RMobileCall::EStatusIdle, _L("RMobileCall::GetMobileCallInfo returned an invalid status")); + + // Check RMobileCall::GetMobileCallInfo returns valid call name. + ASSERT_TRUE(mobileCallInfo.iCallName.Length() > 0, _L("RMobileCall::GetMobileCallInfo returned an invalid call name")); + + // Check RMobileCall::GetMobileCallInfo returns valid line name. + ASSERT_TRUE(mobileCallInfo.iLineName.Length() > 0, _L("RMobileCall::GetMobileCallInfo returned an invalid line name")); + + // post notifier RCall::NotifyCapsChange for call1 + TCoreEtelRequestStatus notifyCapsChangeStatus (call1, &RCall::NotifyCapsChangeCancel); + CleanupStack::PushL(notifyCapsChangeStatus); + call1.NotifyCapsChange(notifyCapsChangeStatus, callCaps); + + // post notifier for RMobileCall::NotifyMobileCallCapsChange + TExtEtelRequestStatus notifyMobileCallCapsChangeStatus(call1, EMobileCallNotifyMobileCallCapsChange); + CleanupStack::PushL(notifyMobileCallCapsChangeStatus); + RMobileCall::TMobileCallCapsV1 notifyMobileCallCaps; + RMobileCall::TMobileCallCapsV1Pckg notifymobileCallCapsPckg(notifyMobileCallCaps); + call1.NotifyMobileCallCapsChange(notifyMobileCallCapsChangeStatus, notifymobileCallCapsPckg); + + // post notifier for RCall::NotifyStatusChange + TCoreEtelRequestStatus notifyStatusChangeStatus (call1, &RCall::NotifyStatusChangeCancel); + CleanupStack::PushL(notifyStatusChangeStatus); + RCall::TStatus notifyCallStatus; + call1.NotifyStatusChange(notifyStatusChangeStatus, notifyCallStatus); + + // Post notifiers call + RMobileCall::TMobileCallStatus notifyMobileCallStatus; + TExtEtelRequestStatus notifyMobileCallChangeStatus(call1, EMobileCallNotifyMobileCallStatusChange); + CleanupStack::PushL(notifyMobileCallChangeStatus); + call1.NotifyMobileCallStatusChange(notifyMobileCallChangeStatus, notifyMobileCallStatus); + + // Dial a number that answers using RMobileCall::DialISV + TExtEtelRequestStatus dialStatus(call1, EMobileCallDialISV); + CleanupStack::PushL(dialStatus); + TPtrC number; + ASSERT_TRUE(GetStringFromConfig(KIniVoiceNumSection, KIniVoiceNumber1, number) != EFalse, _L("CTestStep::GetStringFromConfig did not complete as expected")); + RMobileCall::TEtel3rdPartyMobileCallParamsV1 callParams; + RMobileCall::TEtel3rdPartyMobileCallParamsV1Pckg callParamsPckg(callParams); + call1.DialISV(dialStatus, callParamsPckg, number); + DEBUG_PRINTF1(_L("Board Now Dialling... ")); + ASSERT_EQUALS(WaitForRequestWithTimeOut(dialStatus, ETimeMedium), KErrNone, _L("RMobileCall::DialISV timed-out")); + ASSERT_EQUALS(dialStatus.Int(), KErrNone, _L("RMobileCall::DialISV returned with an error")); + + // === Check call caps === + + // Check RCall::NotifyCapsChange completes with caps in set of KCapsVoice | KCapsHangUp. + RCall::TCaps wantedNotifyCaps, unwantedNotifyCaps; + wantedNotifyCaps.iFlags = RCall::KCapsVoice | RCall::KCapsHangUp; + unwantedNotifyCaps.iFlags = 0; + const TInt wantedStatus = KErrNone; + iCallControlTestHelper.WaitForCallNotifyCapsChange(call1, + notifyCapsChangeStatus, + callCaps, + wantedNotifyCaps, + unwantedNotifyCaps, + wantedStatus); + + // Check RCall::GetCaps supports KCapsHangUp | KCapsVoice. + TUint32 wantedCallCaps = RCall::KCapsHangUp | RCall::KCapsVoice; + ASSERT_EQUALS(call1.GetCaps(callCaps),KErrNone, _L("RCall::GetCaps returned an error")); + ASSERT_BITS_SET(callCaps.iFlags, wantedCallCaps, KNoUnwantedBits, _L("RCall::GetCaps returned wrong caps")); + + // Check RMobileCall::NotifyMobileCallCapsChange completes with iCallControlCaps in set of KCapsVoice | KCapsHold | KCapsHangUp | KCapsTransfer. + RMobileCall::TMobileCallCapsV1 wantedMobileCaps; + TCmpRMobileCallTMobileCallCaps mobileCapsComp(wantedMobileCaps,mobileCallCaps, *this); + iCallControlTestHelper.WaitForMobileCallNotifyMobileCallCapsChange(call1, + notifyMobileCallCapsChangeStatus, + mobileCapsComp, + wantedStatus); + wantedMobileCaps.iCallControlCaps = RMobileCall::KCapsVoice | + RMobileCall::KCapsHold | + RMobileCall::KCapsHangUp | + RMobileCall::KCapsTransfer; + + // Check RMobileCall::NotifyMobileCallCapsChange completes with iCallEventCaps in set of KCapsLocalHold | KCapsLocalTransfer | KCapsRemoteHold | KCapsRemoteTerminate | KCapsRemoteConferenceCreate. + wantedMobileCaps.iCallEventCaps = RMobileCall::KCapsLocalHold | + RMobileCall::KCapsLocalTransfer | + RMobileCall::KCapsRemoteHold | + RMobileCall::KCapsRemoteTerminate | + RMobileCall::KCapsRemoteConferenceCreate; + + // Check RMobileCall::GetMobileCallCaps includes iCallControlCaps in set of KCapsVoice | KCapsHold | KCapsHangUp + RMobileCall::TMobileCallCapsV1Pckg mobileCallCapsPckg(mobileCallCaps); + TUint32 wantedMobileCallCaps = RMobileCall::KCapsVoice | + RMobileCall::KCapsHold | + RMobileCall::KCapsHangUp; + ASSERT_EQUALS(call1.GetMobileCallCaps(mobileCallCapsPckg), KErrNone, _L("RMobileCall::GetMobileCallCaps returned an error")); + ASSERT_BITS_SET(mobileCallCaps.iCallControlCaps, wantedMobileCallCaps, KNoUnwantedBits, _L("RMobileCall::GetMobileCallCaps returned wrong caps")); + + // Check RMobileCall::GetMobileCallCaps includes iCallEventCaps in set of KCapsLocalHold | KCapsLocalTransfer | KCapsRemoteHold | KCapsRemoteTerminate | KCapsRemoteConferenceCreate. + TUint32 wantedMobileCallEventCaps = RMobileCall::KCapsLocalHold | + RMobileCall::KCapsLocalTransfer | + RMobileCall::KCapsRemoteHold | + RMobileCall::KCapsRemoteTerminate | + RMobileCall::KCapsRemoteConferenceCreate; + ASSERT_BITS_SET(mobileCallCaps.iCallEventCaps, wantedMobileCallEventCaps, KNoUnwantedBits, + _L("RMobileCall::GetMobileCallCaps returned wrong caps")); + + // === Check call status === + + // Check RCall::NotifyStatusChange completes with EStatusDialling -> EStatusConnecting -> EStatusConnected. + RCall::TStatus expectedCallStatus = RCall::EStatusDialling; + iCallControlTestHelper.WaitForCallNotifyStatusChange(call1, + notifyStatusChangeStatus, + notifyCallStatus, + expectedCallStatus, + wantedStatus); + + call1.NotifyStatusChange(notifyStatusChangeStatus, notifyCallStatus); + expectedCallStatus = RCall::EStatusConnecting; + iCallControlTestHelper.WaitForCallNotifyStatusChange(call1, + notifyStatusChangeStatus, + notifyCallStatus, + expectedCallStatus, + wantedStatus); + + call1.NotifyStatusChange(notifyStatusChangeStatus, notifyCallStatus); + expectedCallStatus = RCall::EStatusConnected; + iCallControlTestHelper.WaitForCallNotifyStatusChange(call1, + notifyStatusChangeStatus, + notifyCallStatus, + expectedCallStatus, + wantedStatus); + + // Check RCall::GetStatus returns EStatusConnected. + ASSERT_EQUALS(call1.GetStatus(callStatus), KErrNone, _L("RCall::GetStatus returned an error")); + ASSERT_EQUALS(callStatus, RCall::EStatusConnected, _L("RCall::GetStatus did not return EStatusConnected")); + + // Check RMobileCall::NotifyMobileCallStatusChange completes with EStatusDialling -> EStatusConnecting -> EStatusConnected. + RMobileCall::TMobileCallStatus expectedMobileCallStatus = RMobileCall::EStatusDialling; + iCallControlTestHelper.WaitForMobileCallNotifyMobileCallStatusChange(call1, + notifyMobileCallChangeStatus, + notifyMobileCallStatus, + expectedMobileCallStatus, + wantedStatus); + + call1.NotifyMobileCallStatusChange(notifyMobileCallChangeStatus, notifyMobileCallStatus); + expectedMobileCallStatus = RMobileCall::EStatusConnecting; + iCallControlTestHelper.WaitForMobileCallNotifyMobileCallStatusChange(call1, + notifyMobileCallChangeStatus, + notifyMobileCallStatus, + expectedMobileCallStatus, + wantedStatus); + + call1.NotifyMobileCallStatusChange(notifyMobileCallChangeStatus, notifyMobileCallStatus); + expectedMobileCallStatus = RMobileCall::EStatusConnected; + iCallControlTestHelper.WaitForMobileCallNotifyMobileCallStatusChange(call1, + notifyMobileCallChangeStatus, + notifyMobileCallStatus, + expectedMobileCallStatus, + wantedStatus); + + // Check RMobileCall::GetMobileCallStatus returns status of EStatusConnected. + ASSERT_EQUALS(call1.GetMobileCallStatus(mobileCallStatus), KErrNone, _L("RMobileCall::GetMobileCallStatus returned an error")); + ASSERT_EQUALS(mobileCallStatus, RMobileCall::EStatusConnected, _L("RMobileCall::GetMobileCallStatus did not return a status EStatusConnected")); + + // === Check call info === + + User::After(KOneSecond*2); // Wait added for call duration + + // Check RCall::GetInfo returns valid call name. + ASSERT_EQUALS(call1.GetInfo(callInfo), KErrNone, _L("RCall::GetInfo returned an error")); + ASSERT_TRUE(callInfo.iCallName.Length() > 0, _L("RCall::GetInfo returned an invalid call name")); + + // Check RCall::GetInfo returns valid voice line name. + ASSERT_TRUE(callInfo.iLineName.Length() > 0 ,_L("RCall::GetInfo returned an invalid line name")); + + // Check RCall::GetInfo returns call status of EStatusConnected. + ASSERT_EQUALS(callInfo.iStatus, RCall::EStatusConnected, _L("RCall::GetInfo returned wrong status, should be EStatusConnected")); + + // Check RCall::GetInfo returns call duration of > 0. + ASSERT_TRUE(callInfo.iDuration.Int() > 0, _L("RCall::GetInfo returned a duration other than > 0")); + + // Check RMobileCall::GetMobileCallInfo returns iValid > 0. + ASSERT_EQUALS(call1.GetMobileCallInfo(callInfoPckg), KErrNone, _L("RMobileCall::GetMobileCallInfo returned an error")); + // $CTSYProblem CTSY initialises iAlternatingCall to EAlternatingModeUnspecified, which should be updated via EMobileCallGetMobileCallInfo from LTSY + // This problem is inside CheckForValidCallInfo() helper method. + iCallControlTestHelper.CheckForValidCallInfo(mobileCallInfo); + + // Check RMobileCall::GetMobileCallInfo returns data for attributes marked as valid in iValid. + ASSERT_TRUE(mobileCallInfo.iCallName.Length() > 0, _L("RMobileCall::GetMobileCallInfo returned an invalid call name")); + + // Check RMobileCall::GetMobileCallInfo returns valid line name. + ASSERT_TRUE(mobileCallInfo.iLineName.Length() > 0, _L("RMobileCall::GetMobileCallInfo returned an invalid line name")); + + + //////////////////////////////////////////////////////////////// + // TEST END + //////////////////////////////////////////////////////////////// + + StartCleanup(); + + // Hangup call + call1.HangUp(); + + // Pop + // notifyCapsChangeStatus + // notifyMobileCallCapsChangeStatus + // notifyStatusChangeStatus + // notifyMobileCallChangeStatus + // dialStatus + CleanupStack::PopAndDestroy(5, ¬ifyCapsChangeStatus); + + return TestStepResult(); + } + +TPtrC CCTSYIntegrationTestCallControl0048::GetTestStepName() +/** + * @return The test step name. + */ + { + return _L("CCTSYIntegrationTestCallControl0048"); + } + + + +CCTSYIntegrationTestCallControl0049::CCTSYIntegrationTestCallControl0049(CEtelSessionMgr& aEtelSessionMgr) + : CCTSYIntegrationTestCallControlBase(aEtelSessionMgr) +/** + * Constructor. + */ + { + SetTestStepName(CCTSYIntegrationTestCallControl0049::GetTestStepName()); + } + +CCTSYIntegrationTestCallControl0049::~CCTSYIntegrationTestCallControl0049() +/** + * Destructor. + */ + { + } + +TVerdict CCTSYIntegrationTestCallControl0049::doTestStepL() +/** + * @SYMTestCaseID BA-CTSY-INT-CCON-0049 + * @SYMFssID BA/CTSY/CCON-0049 + * @SYMTestCaseDesc Answer a call using RMobileCall::AnswerIncomingCallISV + * @SYMTestPriority High + * @SYMTestActions RMobileCall::NotifyMobileCallCapsChange, + * RMobileCall::GetMobileCallStatus, + * RMobileCall::GetMobileCallInfo, + * RLine::NotifyIncomingCall, RCall::GetInfo, + * RCall::NotifyStatusChange, + * RMobileCall::NotifyMobileCallStatusChange, + * RCall::NotifyCapsChange, RCall::GetStatus, + * RMobileCall::AnswerIncomingCallISV, + * RMobileCall::GetMobileCallCaps + * @SYMTestExpectedResults Pass - Call answered. + * @SYMTestType CIT + * @SYMTestCaseDependencies live/automatic + * + * Reason for test: Verify change in call state is reflected in RCall and RMobileCall + * + * @return - TVerdict code + */ + { + + //////////////////////////////////////////////////////////////// + // SET UP + //////////////////////////////////////////////////////////////// + + + // Call TNetworkTsyTestHelper::WaitForRegisteredOnHomeNetworkL + RMobilePhone& phone = iEtelSessionMgr.GetPhoneL(KMainServer,KMainPhone); + CHECK_EQUALS_L(iNetworkTestHelper.WaitForRegisteredOnHomeNetworkL(phone), KErrNone, _L("TNetworkTsyTestHelper::WaitForRegisteredOnHomeNetworkL returned with an error")); + + // Check phone supports KCapsVoice. + RPhone::TCaps phoneCaps; + CHECK_EQUALS_L(phone.GetCaps(phoneCaps), KErrNone, _L("RPhone::GetCaps returned an error")); + CHECK_BITS_SET_L(phoneCaps.iFlags, RPhone::KCapsVoice, KNoUnwantedBits, _L("RPhone::GetCaps returned wrong caps")); + + // Get Voice line 1. + RMobileLine& voiceLine = iEtelSessionMgr.GetLineL(KMainServer, KMainPhone, KVoiceLine); + + + //////////////////////////////////////////////////////////////// + // SET UP END + //////////////////////////////////////////////////////////////// + + StartTest(); + + //////////////////////////////////////////////////////////////// + // TEST START + //////////////////////////////////////////////////////////////// + + + // post notification RLine::NotifyIncomingCall + TCoreEtelRequestStatus notifyIncomingCallStatus(voiceLine, &RLine::NotifyIncomingCallCancel); + CleanupStack::PushL(notifyIncomingCallStatus); + TName incomingCallName; + incomingCallName.Zero(); + voiceLine.NotifyIncomingCall(notifyIncomingCallStatus, incomingCallName); + + // Request incoming call from RPS. + ASSERT_EQUALS (RPSRequestIncomingCallL(EVoiceLine), KErrNone, + _L("CCTSYIntegrationTestSuiteStepBase::RPSRequestIncomingCallL returned an error")); + + // Check RLine::NotifyIncomingCall completes with call name. + ASSERT_EQUALS(WaitForRequestWithTimeOut(notifyIncomingCallStatus, ETimeMedium),KErrNone, _L("RLine::NotifyIncomingCall timed out")); + ASSERT_EQUALS(notifyIncomingCallStatus.Int(), KErrNone, _L("RLine::NotifyIncomingCall returned with an error")); + ASSERT_TRUE(incomingCallName.Length() > 0, _L("RLine::NotifyIncomingCall completed with invalid call name")); + + // Get the incoming call + TCallId incomingCallId; + RMobileCall& call1 = iEtelSessionMgr.GetIncomingCallL(KMainServer, KMainPhone, KVoiceLine, incomingCallName, incomingCallId); + + // post notifier for RCall::NotifyCapsChange + TCoreEtelRequestStatus notifyCapsChangeStatus (call1, &RCall::NotifyCapsChangeCancel); + CleanupStack::PushL(notifyCapsChangeStatus); + RCall::TCaps callCaps; + call1.NotifyCapsChange(notifyCapsChangeStatus, callCaps); + + // post notifier for RMobileCall::NotifyMobileCallCapsChange + TExtEtelRequestStatus notifyMobileCallCapsChangeStatus(call1, EMobileCallNotifyMobileCallCapsChange); + CleanupStack::PushL(notifyMobileCallCapsChangeStatus); + RMobileCall::TMobileCallCapsV1 mobileCallCaps; + RMobileCall::TMobileCallCapsV1Pckg mobileCallCapsPckg(mobileCallCaps); + call1.NotifyMobileCallCapsChange(notifyMobileCallCapsChangeStatus, mobileCallCapsPckg); + + // post notifier for RCall::NotifyStatusChange + TCoreEtelRequestStatus notifyStatusChangeStatus (call1, &RCall::NotifyStatusChangeCancel); + CleanupStack::PushL(notifyStatusChangeStatus); + RCall::TStatus callStatus; + call1.NotifyStatusChange(notifyStatusChangeStatus,callStatus); + + // post notifier for RMobileCall::NotifyMobileCallStatusChange + TExtEtelRequestStatus notifyMobileCallStatusChangeStatus(call1, EMobileCallNotifyMobileCallStatusChange); + CleanupStack::PushL(notifyMobileCallStatusChangeStatus); + RMobileCall::TMobileCallStatus mobileCallStatus; + call1.NotifyMobileCallStatusChange(notifyMobileCallStatusChangeStatus, mobileCallStatus); + + // Answer incoming call with RMobileCall::AnswerIncomingCallISV + TExtEtelRequestStatus answerIncomingCallStatus(call1, EMobileCallAnswerISV); + CleanupStack::PushL(answerIncomingCallStatus); + RMobileCall::TEtel3rdPartyMobileCallParamsV1 callParams; + RMobileCall::TEtel3rdPartyMobileCallParamsV1Pckg callParamsPckg(callParams); + call1.AnswerIncomingCallISV(answerIncomingCallStatus, callParamsPckg); + ASSERT_EQUALS(WaitForRequestWithTimeOut(answerIncomingCallStatus,ETimeMedium),KErrNone,_L("RMobileCall::AnswerIncomingCallISV timed out")); + ASSERT_EQUALS(answerIncomingCallStatus.Int(), KErrNone, _L("RMobileCall::AnswerIncomingCallISV returned with an error")); + + // === Check call caps === + + // Check RCall::NotifyCapsChange completes with caps in set of KCapsVoice | KCapsHangUp. + RCall::TCaps wantedCaps, unwantedCaps; + wantedCaps.iFlags = RCall::KCapsVoice | RCall::KCapsHangUp; + unwantedCaps.iFlags = 0; + const TInt wantedStatus = KErrNone; + iCallControlTestHelper.WaitForCallNotifyCapsChange(call1, + notifyCapsChangeStatus, + callCaps, + wantedCaps, + unwantedCaps, + wantedStatus); + + // Check RCall::GetCaps supports KCapsHangUp | KCapsVoice. + TUint32 wantedCallCaps = RCall::KCapsHangUp | RCall::KCapsVoice; + ASSERT_EQUALS(call1.GetCaps(callCaps),KErrNone, _L("RCall::GetCaps returned an error")); + ASSERT_BITS_SET(callCaps.iFlags, wantedCallCaps, KNoUnwantedBits, _L("RCall::GetCaps returned wrong caps")); + + // Check RMobileCall::NotifyMobileCallCapsChange completes with iCallControlCaps in set of KCapsVoice | KCapsHold | KCapsHangUp + // Check RMobileCall::NotifyMobileCallCapsChange completes with iCallEventCaps in set of KCapsLocalHold | KCapsLocalTransfer | KCapsRemoteHold | KCapsRemoteTerminate | KCapsRemoteConferenceCreate. + RMobileCall::TMobileCallCapsV1 wantedMobileCaps; + wantedMobileCaps.iCallControlCaps = RMobileCall::KCapsVoice | + RMobileCall::KCapsHold | + RMobileCall::KCapsHangUp; + + wantedMobileCaps.iCallEventCaps = RMobileCall::KCapsLocalHold | + RMobileCall::KCapsLocalTransfer | + RMobileCall::KCapsRemoteHold | + RMobileCall::KCapsRemoteTerminate | + RMobileCall::KCapsRemoteConferenceCreate; + + TCmpRMobileCallTMobileCallCaps mobileCapsComp(wantedMobileCaps,mobileCallCaps, *this); + iCallControlTestHelper.WaitForMobileCallNotifyMobileCallCapsChange(call1, + notifyMobileCallCapsChangeStatus, + mobileCapsComp, + wantedStatus); + + // Check RMobileCall::GetMobileCallCaps includes iCallControlCaps in set of KCapsVoice | KCapsHold | KCapsHangUp. + ASSERT_EQUALS(call1.GetMobileCallCaps(mobileCallCapsPckg), KErrNone, _L("RMobileCall::GetMobileCallCaps returned an error")); + ASSERT_BITS_SET(mobileCallCaps.iCallControlCaps, wantedMobileCaps.iCallControlCaps, KNoUnwantedBits, _L("RMobileCall::GetMobileCallCaps returned wrong caps")); + + // Check RMobileCall::GetMobileCallCaps includes iCallEventCaps in set of KCapsLocalHold | KCapsLocalTransfer | KCapsRemoteHold | KCapsRemoteTerminate | KCapsRemoteConferenceCreate. + ASSERT_BITS_SET(mobileCallCaps.iCallEventCaps, wantedMobileCaps.iCallEventCaps, KNoUnwantedBits, _L("RMobileCall::GetMobileCallCaps returned wrong caps")); + + // === Check call status === + + // Check RCall::NotifyStatusChange completes with EStatusConnected + RCall::TStatus expectedCallStatus = RCall::EStatusConnected; + iCallControlTestHelper.WaitForCallNotifyStatusChange(call1, + notifyStatusChangeStatus, + callStatus, + expectedCallStatus, + wantedStatus); + + // Check RCall::GetStatus returns EStatusConnected + ASSERT_EQUALS(call1.GetStatus(callStatus), KErrNone, _L("RCall::GetStatus returned an error")); + ASSERT_EQUALS(callStatus, RCall::EStatusConnected, _L("RCall::GetStatus did not return EStatusConnected")); + + // Check RMobileCall::NotifyMobileCallStatusChange completes with EStatusConnected. + RMobileCall::TMobileCallStatus expectedMobileCallStatus = RMobileCall::EStatusConnected; + iCallControlTestHelper.WaitForMobileCallNotifyMobileCallStatusChange(call1, + notifyMobileCallStatusChangeStatus, + mobileCallStatus, + expectedMobileCallStatus, + wantedStatus); + + // Check RMobileCall::GetMobileCallStatus returns status of EStatusConnected. + ASSERT_EQUALS(call1.GetMobileCallStatus(mobileCallStatus), KErrNone, + _L("RMobileCall::GetMobileStatus returned an error")); + ASSERT_EQUALS(mobileCallStatus, RMobileCall::EStatusConnected, + _L("RMobileCall::GetMobileStatus did not return a status EStatusConnected")); + + // === Check call info === + + User::After(KOneSecond*2); // Wait added for call duration + + // Check RCall::GetInfo returns valid call name. + RCall::TCallInfo callInfo; + ASSERT_EQUALS(call1.GetInfo(callInfo), KErrNone, _L("RCall::GetInfo returned an error")); + ASSERT_TRUE(callInfo.iCallName.Length() > 0, _L("RCall::GetInfo returned an invalid call name")); + + // Check RCall::GetInfo returns valid voice line name. + ASSERT_TRUE(callInfo.iLineName.Length() > 0,_L("RCall::GetInfo returned an invalid line name")); + + // Check RCall::GetInfo returns call status of EStatusConnected. + ASSERT_EQUALS(callInfo.iStatus, RCall::EStatusConnected, _L("RCall::GetInfo returned wrong status, should be EStatusConnected")); + + // Check RCall::GetInfo returns call duration of > 0. + ASSERT_TRUE(callInfo.iDuration.Int() > 0, _L("RCall::GetInfo returned duration <= 0, should > 0")); + + // Check RMobileCall::GetMobileCallInfo returns iValid > 0. + RMobileCall::TMobileCallInfoV1 mobileCallInfo; + RMobileCall::TMobileCallInfoV1Pckg callInfoPckg(mobileCallInfo); + ASSERT_EQUALS(call1.GetMobileCallInfo(callInfoPckg), KErrNone, _L("RMobileCall::GetMobileCallInfo returned an error")); + ASSERT_TRUE(mobileCallInfo.iValid > 0, _L("RMobileCall::GetMobileCallInfo returned iValid <= 0 flags, should be > 0")); + + // Check RMobileCall::GetMobileCallInfo returns data for attributes makred as valid in iValid. + iCallControlTestHelper.CheckForValidCallInfo(mobileCallInfo); + + // Check RMobileCall::GetMobileCallInfo returns valid line name. + ASSERT_TRUE(mobileCallInfo.iLineName.Length() > 0, _L("RMobileCall::GetMobileCallInfo returned an invalid line name")); + + // Hangup call + TCoreEtelRequestStatus hangUpStatus (call1,&RCall::HangUpCancel); + CleanupStack::PushL(hangUpStatus); + call1.HangUp(hangUpStatus); + ASSERT_EQUALS(WaitForRequestWithTimeOut(hangUpStatus, ETimeMedium), KErrNone, _L("RCall::HangUp timed-out")); + ASSERT_EQUALS(hangUpStatus.Int(), KErrNone, _L("RCall::HangUp returned an error")); + + + //////////////////////////////////////////////////////////////// + // TEST END + //////////////////////////////////////////////////////////////// + + StartCleanup(); + + // Pop + // notifyIncomingCallStatus + // notifyCapsChangeStatus + // notifyMobileCallCapsChangeStatus + // notifyStatusChangeStatus + // notifyMobileCallStatusChangeStatus + // answerIncomingCallStatus + // hangUpStatus + CleanupStack::PopAndDestroy(7, ¬ifyIncomingCallStatus); + + return TestStepResult(); + } + +TPtrC CCTSYIntegrationTestCallControl0049::GetTestStepName() +/** + * @return The test step name. + */ + { + return _L("CCTSYIntegrationTestCallControl0049"); + } + + + +CCTSYIntegrationTestCallControl0050::CCTSYIntegrationTestCallControl0050(CEtelSessionMgr& aEtelSessionMgr) + : CCTSYIntegrationTestCallControlBase(aEtelSessionMgr) +/** + * Constructor. + */ + { + SetTestStepName(CCTSYIntegrationTestCallControl0050::GetTestStepName()); + } + +CCTSYIntegrationTestCallControl0050::~CCTSYIntegrationTestCallControl0050() +/** + * Destructor. + */ + { + } + +TVerdict CCTSYIntegrationTestCallControl0050::doTestStepL() +/** + * @SYMTestCaseID BA-CTSY-INT-CCON-0050 + * @SYMFssID BA/CTSY/CCON-0050 + * @SYMTestCaseDesc Answer a call using RMobileCall::AnswerIncomingCallISV + * @SYMTestPriority High + * @SYMTestActions RMobileLine::NotifyMobileLineStatusChange, + * RLine::GetCallInfo, + * RLine::NotifyIncomingCall, RLine::GetStatus, + * RMobileLine::GetMobileLineStatus, + * RLine::GetInfo, + * RMobileCall::AnswerIncomingCallISV + * @SYMTestExpectedResults Pass - Call answered. + * @SYMTestType CIT + * @SYMTestCaseDependencies RPS/automatic + * + * Reason for test: Verify change in line state is reflected in RLine and RMobileLine + * + * @return - TVerdict code + */ + { + + //////////////////////////////////////////////////////////////// + // SET UP + //////////////////////////////////////////////////////////////// + + // Call TNetworkTsyTestHelper::WaitForRegisteredOnHomeNetworkL + RMobilePhone& phone = iEtelSessionMgr.GetPhoneL(KMainServer,KMainPhone); + CHECK_EQUALS_L(iNetworkTestHelper.WaitForRegisteredOnHomeNetworkL(phone), KErrNone, + _L("TNetworkTsyTestHelper::WaitForRegisteredOnHomeNetworkL returned with an error")); + + // Check phone supports KCapsVoice. + RPhone::TCaps phoneCaps; + CHECK_EQUALS_L(phone.GetCaps(phoneCaps), KErrNone, _L("RPhone::GetCaps returned an error")); + CHECK_BITS_SET_L(phoneCaps.iFlags, RPhone::KCapsVoice, KNoUnwantedBits, _L("RPhone::GetCaps returned wrong caps")); + + // Get Voice line 1. + RMobileLine& voiceLine = iEtelSessionMgr.GetLineL(KMainServer, KMainPhone, KVoiceLine); + + // Get Call 1. + RMobileCall& mobileCall1 = iEtelSessionMgr.GetCallL(KMainServer, KMainPhone, KVoiceLine, KCall1); + + //////////////////////////////////////////////////////////////// + // SET UP END + //////////////////////////////////////////////////////////////// + + StartTest(); + + //////////////////////////////////////////////////////////////// + // TEST START + //////////////////////////////////////////////////////////////// + + // Post notification RLine::NotifyIncomingCall + TCoreEtelRequestStatus notifyIncomingCallStatus(voiceLine, &RLine::NotifyIncomingCallCancel); + CleanupStack::PushL(notifyIncomingCallStatus); + TName incomingCallName; + incomingCallName.Zero(); + voiceLine.NotifyIncomingCall(notifyIncomingCallStatus, incomingCallName); + + // Post notifier for RLine::NotifyStatusChange + TCoreEtelRequestStatus notifyStatusChangeStatus (voiceLine, &RLine::NotifyStatusChangeCancel); + CleanupStack::PushL(notifyStatusChangeStatus); + RCall::TStatus lineStatus; + voiceLine.NotifyStatusChange(notifyStatusChangeStatus, lineStatus); + + // Post a notifier for RMobileLine::NotifyMobileLineStatusChange + RMobileCall::TMobileCallStatus mobileLineStatus; + TExtEtelRequestStatus notifyMobileLineChangeStatus(voiceLine, EMobileLineNotifyMobileLineStatusChange); + CleanupStack::PushL(notifyMobileLineChangeStatus); + voiceLine.NotifyMobileLineStatusChange(notifyMobileLineChangeStatus, mobileLineStatus); + + // Request incoming call from RPS. + ASSERT_EQUALS (RPSRequestIncomingCallL(EVoiceLine), KErrNone, _L("CCTSYIntegrationTestSuiteStepBase::RPSRequestIncomingCallL returned an error")); + + // Check RLine::NotifyIncomingCall completes with call name. + ASSERT_EQUALS(WaitForRequestWithTimeOut(notifyIncomingCallStatus, ETimeMedium), KErrNone, _L("RLine::NotifyIncomingCall timed out")); + ASSERT_EQUALS(notifyIncomingCallStatus.Int(), KErrNone, _L("RLine::NotifyIncomingCall returned with an error")); + ASSERT_TRUE(incomingCallName.Length() > 0, _L("RLine::NotifyIncomingCall completed with an invalid call name")); + + // Get the incoming call + TCallId incomingCallId; + mobileCall1 = iEtelSessionMgr.GetIncomingCallL(KMainServer, KMainPhone, KVoiceLine, incomingCallName, incomingCallId); + + // Answer incoming call with RMobileCall::AnswerIncomingCallISV + TExtEtelRequestStatus answerIncomingCallStatus(mobileCall1, EMobileCallAnswerISV); + CleanupStack::PushL(answerIncomingCallStatus); + RMobileCall::TEtel3rdPartyMobileCallParamsV1 callParams; + RMobileCall::TEtel3rdPartyMobileCallParamsV1Pckg callParamsPckg(callParams); + mobileCall1.AnswerIncomingCallISV(answerIncomingCallStatus, callParamsPckg); + ASSERT_EQUALS(WaitForRequestWithTimeOut(answerIncomingCallStatus,ETimeMedium),KErrNone,_L("RMobileCall::AnswerIncomingCallISV timed out")); + ASSERT_EQUALS(answerIncomingCallStatus.Int(), KErrNone, _L("RMobileCall::AnswerIncomingCallISV returned with an error")); + + // === Check line status === + + // Check RLine::NotifyStatusChange completes with EStatusAnswering -> EStatusConnected. + RCall::TStatus expectedLineStatus = RCall::EStatusAnswering; + iCallControlTestHelper.WaitForLineNotifyStatusChange(voiceLine, + notifyStatusChangeStatus, + lineStatus, + expectedLineStatus, + KErrNone); + + voiceLine.NotifyStatusChange(notifyStatusChangeStatus, lineStatus); + expectedLineStatus = RCall::EStatusConnected; + iCallControlTestHelper.WaitForLineNotifyStatusChange(voiceLine, + notifyStatusChangeStatus, + lineStatus, + expectedLineStatus, + KErrNone); + + // Check RLine::GetStatus returns EStatusConnected + ASSERT_EQUALS(voiceLine.GetStatus(lineStatus), KErrNone, _L("RLine::GetStatus returned an error")); + ASSERT_EQUALS(lineStatus, expectedLineStatus, _L("RLine::GetStatus did not return EStatusConnected as expected")); + + // Check RMobileLine::NotifyMobileLineStatusChange completes with EStatusAnswering -> EStatusConnected. + RMobileCall::TMobileCallStatus expectedMobileLineStatus = RMobileCall::EStatusAnswering; + iCallControlTestHelper.WaitForMobileLineNotifyMobileLineStatusChange(voiceLine, + notifyMobileLineChangeStatus, + mobileLineStatus, + expectedMobileLineStatus, + KErrNone); + + voiceLine.NotifyMobileLineStatusChange(notifyMobileLineChangeStatus, mobileLineStatus); + expectedMobileLineStatus = RMobileCall::EStatusConnected; + iCallControlTestHelper.WaitForMobileLineNotifyMobileLineStatusChange(voiceLine, + notifyMobileLineChangeStatus, + mobileLineStatus, + expectedMobileLineStatus, + KErrNone); + + // Check RMobileLine::GetMobileLineStatus returns EStatusConnected + ASSERT_EQUALS(voiceLine.GetMobileLineStatus(mobileLineStatus), KErrNone, _L("RMobileLine::GetMobileLineStatus returned an error")); + ASSERT_EQUALS(mobileLineStatus, RMobileCall::EStatusConnected, _L("RMobileLine::GetMobileLineStatus did not return EStatusConnected as expected")); + + // === Check line info === + + // Check RLine::GetCallInfo returns valid name. + RLine::TCallInfo callInfo; + ASSERT_EQUALS(voiceLine.GetCallInfo(incomingCallId, callInfo), KErrNone, _L("RLine::GetCallInfo returned an error")); + ASSERT_TRUE(callInfo.iCallName.Length() > 0, _L("RLine::GetCallInfo returned an invalid iCallName")); + + // Check RLine::GetCallInfo returns caps in set of KCapsHangUp. + ASSERT_BITS_SET(callInfo.iCallCapsFlags, RCall::KCapsHangUp, KNoUnwantedBits , _L("RLine::GetCallInfo returned wrong caps")); + + // Check RLine::GetCallInfo returns status of EStatusConnected. + ASSERT_EQUALS(callInfo.iStatus, RCall::EStatusConnected, _L("RLine::GetCallInfo did not return EStatusConnected as expected")); + + // Check RLine::GetInfo returns status of EStatusConnected. + RLine::TLineInfo lineInfo; + ASSERT_EQUALS(voiceLine.GetInfo(lineInfo),KErrNone, _L("RLine::GetInfo returned an error")); + ASSERT_EQUALS(lineInfo.iStatus, RCall::EStatusConnected, _L("RLine::GetInfo did not return EStatusConnected as expected")); + + // Hang up the call + TCoreEtelRequestStatus hangUpStatus (mobileCall1, &RCall::HangUpCancel); + CleanupStack::PushL(hangUpStatus); + mobileCall1.HangUp(hangUpStatus); + ASSERT_EQUALS(WaitForRequestWithTimeOut(hangUpStatus, ETimeMedium), KErrNone, _L("RCall::HangUp timed-out")); + ASSERT_EQUALS(hangUpStatus.Int(), KErrNone, _L("RCall::HangUp returned an error")); + + //////////////////////////////////////////////////////////////// + // TEST END + //////////////////////////////////////////////////////////////// + + StartCleanup(); + + // Pop + // notifyIncomingCallStatus + // notifyStatusChangeStatus + // notifyMobileLineChangeStatus + // answerIncomingCallStatus + // hangUpStatus + CleanupStack::PopAndDestroy(5, ¬ifyIncomingCallStatus); + + return TestStepResult(); + } + +TPtrC CCTSYIntegrationTestCallControl0050::GetTestStepName() +/** + * @return The test step name. + */ + { + return _L("CCTSYIntegrationTestCallControl0050"); + } + + + +CCTSYIntegrationTestCallControl0051::CCTSYIntegrationTestCallControl0051(CEtelSessionMgr& aEtelSessionMgr) + : CCTSYIntegrationTestCallControlBase(aEtelSessionMgr) +/** + * Constructor. + */ + { + SetTestStepName(CCTSYIntegrationTestCallControl0051::GetTestStepName()); + } + +CCTSYIntegrationTestCallControl0051::~CCTSYIntegrationTestCallControl0051() +/** + * Destructor. + */ + { + } + +TVerdict CCTSYIntegrationTestCallControl0051::doTestStepL() +/** + * @SYMTestCaseID BA-CTSY-INT-CCON-0051 + * @SYMFssID BA/CTSY/CCON-0051 + * @SYMTestCaseDesc Get the call duration of a call. + * @SYMTestPriority High + * @SYMTestActions RCall::NotifyCallDurationChange, RCall::GetCallDuration, RCall::HangUp + * @SYMTestExpectedResults Pass - Call duration reported correctly during call. + * @SYMTestType CIT + * @SYMTestCaseDependencies live/automatic + * + * Reason for test: Verify notification of call duration advances during call each second. + * + * @return - TVerdict code + */ + { + + //////////////////////////////////////////////////////////////// + // SET UP + //////////////////////////////////////////////////////////////// + + // Call TNetworkTsyTestHelper::WaitForRegisteredOnHomeNetworkL + RMobilePhone& phone = iEtelSessionMgr.GetPhoneL(KMainServer,KMainPhone); + CHECK_EQUALS_L(iNetworkTestHelper.WaitForRegisteredOnHomeNetworkL(phone), KErrNone, + _L("TNetworkTsyTestHelper::WaitForRegisteredOnHomeNetworkL returned with an error")); + + // Check phone supports KCapsVoice. + RPhone::TCaps phoneCaps; + CHECK_EQUALS_L(phone.GetCaps(phoneCaps), KErrNone, _L("RPhone::GetCaps returned an error")); + CHECK_BITS_SET_L(phoneCaps.iFlags, RPhone::KCapsVoice, KNoUnwantedBits, _L("RPhone::GetCaps returned wrong caps")); + + // Get Voice line 1. + RMobileLine& voiceLine = iEtelSessionMgr.GetLineL(KMainServer, KMainPhone, KVoiceLine); + + // Get call 1. + RCall& call1 = iEtelSessionMgr.GetCallL(KMainServer, KMainPhone, KVoiceLine, KCall1); + + + //////////////////////////////////////////////////////////////// + // SET UP END + //////////////////////////////////////////////////////////////// + + StartTest(); + + //////////////////////////////////////////////////////////////// + // TEST START + //////////////////////////////////////////////////////////////// + + // Check RCall::GetInfo returns call status of EStatusIdle. + RCall::TCallInfo callInfo; + ASSERT_EQUALS(call1.GetInfo(callInfo), KErrNone, _L("RCall::GetInfo returned an error")); + ASSERT_EQUALS(callInfo.iStatus, RCall::EStatusIdle, _L("RCall::GetInfo returned wrong status, should be EStatusIdle")); + + // post RCall::NotifyCallDurationChange + TCoreEtelRequestStatus notifyCallDurationChangeStatus(call1, &RCall::NotifyCallDurationChangeCancel); + CleanupStack::PushL(notifyCallDurationChangeStatus); + TTimeIntervalSeconds notifyDuration; + call1.NotifyCallDurationChange(notifyCallDurationChangeStatus, notifyDuration); + + // Dial a number that answers. + TPtrC number; + ASSERT_TRUE(GetStringFromConfig(KIniVoiceNumSection, KIniVoiceNumber1, number) != EFalse, _L("GetStringFromConfig did not complete as expected")); + TCoreEtelRequestStatus dialStatus(call1, &RCall::DialCancel); + CleanupStack::PushL(dialStatus); + DEBUG_PRINTF1(_L("Board Now Dialling... ")); + call1.Dial(dialStatus, number); + ASSERT_EQUALS(WaitForRequestWithTimeOut(dialStatus, ETimeLong), KErrNone, _L("RCall::Dial timed-out")); + ASSERT_EQUALS(dialStatus.Int(), KErrNone, _L("RCall::Dial returned with an error")); + + // Check completion of RCall::NotifyCallDurationChange + ASSERT_EQUALS(WaitForRequestWithTimeOut(notifyCallDurationChangeStatus, ETimeShort), KErrNone, _L("RCall::NotifyCallDurationChange timed-out")); + ASSERT_EQUALS(notifyCallDurationChangeStatus.Int(), KErrNone, _L("RCall::NotifyCallDurationChange returned with an error")); + + for(TInt i = 0; i < 10; ++i) + { + TTimeIntervalSeconds prevNotifyDuration = notifyDuration; + + // post RCall::NotifyCallDurationChange + call1.NotifyCallDurationChange(notifyCallDurationChangeStatus, notifyDuration); + + // Check notification of call duration from RCall::NotifyCallDurationChange completes with call duration which has advanced from previous notification. + ASSERT_EQUALS(WaitForRequestWithTimeOut(notifyCallDurationChangeStatus, ETimeShort), KErrNone, _L("RCall::NotifyCallDurationChange timed-out")); + ASSERT_EQUALS(notifyCallDurationChangeStatus.Int(), KErrNone, _L("RCall::NotifyCallDurationChange returned with an error")); + + ASSERT_TRUE(notifyDuration.Int() > prevNotifyDuration.Int(), _L("RCall::NotifyCallDurationChange completed with duration less than expected")); + + // Check RCall::GetCallDuration returns call duration >= previous call duration. + TTimeIntervalSeconds durationGet, prevdurationGet=0; + ASSERT_EQUALS(call1.GetCallDuration(durationGet), KErrNone, _L("RCall::GetCallDuration returned with an error")); + ASSERT_TRUE(durationGet.Int() >= prevdurationGet.Int(), _L("RCall::GetCallDuration returned with duration less than expected")); + prevdurationGet = durationGet; + } + + // hang up the call + TCoreEtelRequestStatus hangUpStatus (call1,&RCall::HangUpCancel); + CleanupStack::PushL(hangUpStatus); + call1.HangUp(hangUpStatus); + ASSERT_EQUALS(WaitForRequestWithTimeOut(hangUpStatus, ETimeMedium), KErrNone, _L("RCall::HangUp timed-out")); + ASSERT_EQUALS(hangUpStatus.Int(), KErrNone, _L("RCall::HangUp returned with an error")); + + //////////////////////////////////////////////////////////////// + // TEST END + //////////////////////////////////////////////////////////////// + + StartCleanup(); + + // Pop + // notifyCallDurationChangeStatus + // dialStatus + // hangUpStatus + CleanupStack::PopAndDestroy(3, ¬ifyCallDurationChangeStatus); + + return TestStepResult(); + } + +TPtrC CCTSYIntegrationTestCallControl0051::GetTestStepName() +/** + * @return The test step name. + */ + { + return _L("CCTSYIntegrationTestCallControl0051"); + } + + + +CCTSYIntegrationTestCallControl0052::CCTSYIntegrationTestCallControl0052(CEtelSessionMgr& aEtelSessionMgr) + : CCTSYIntegrationTestCallControlBase(aEtelSessionMgr) +/** + * Constructor. + */ + { + SetTestStepName(CCTSYIntegrationTestCallControl0052::GetTestStepName()); + } + +CCTSYIntegrationTestCallControl0052::~CCTSYIntegrationTestCallControl0052() +/** + * Destructor. + */ + { + } + +TVerdict CCTSYIntegrationTestCallControl0052::doTestStepL() +/** + * @SYMTestCaseID BA-CTSY-INT-CCON-0052 + * @SYMFssID BA/CTSY/CCON-0052 + * @SYMTestCaseDesc Cancel call duration notifications. + * @SYMTestPriority High + * @SYMTestActions RCall::NotifyCallDurationChange, RCall::NotifyCallDurationChangeCancel + * @SYMTestExpectedResults Pass - Call duration cancelled. + * @SYMTestType CIT + * @SYMTestCaseDependencies live/automatic + * + * Reason for test: Verify notification of call duration cancelled. + * + * @return - TVerdict code + */ + { + + //////////////////////////////////////////////////////////////// + // SET UP + //////////////////////////////////////////////////////////////// + + // Call TNetworkTsyTestHelper::WaitForRegisteredOnHomeNetworkL + RMobilePhone& phone = iEtelSessionMgr.GetPhoneL(KMainServer,KMainPhone); + CHECK_EQUALS_L(iNetworkTestHelper.WaitForRegisteredOnHomeNetworkL(phone), KErrNone, + _L("TNetworkTsyTestHelper::WaitForRegisteredOnHomeNetworkL returned with an error")); + + // Check phone supports KCapsVoice. + RPhone::TCaps phoneCaps; + CHECK_EQUALS_L(phone.GetCaps(phoneCaps), KErrNone, _L("RPhone::GetCaps returned an error")); + CHECK_BITS_SET_L(phoneCaps.iFlags, RPhone::KCapsVoice, KNoUnwantedBits, _L("RPhone::GetCaps returned wrong caps")); + + // Get Voice line 1. + RMobileLine& voiceLine = iEtelSessionMgr.GetLineL(KMainServer, KMainPhone, KVoiceLine); + + // Get call 1. + RMobileCall& call1 = iEtelSessionMgr.GetCallL(KMainServer, KMainPhone, KVoiceLine, KCall1); + + //////////////////////////////////////////////////////////////// + // SET UP END + //////////////////////////////////////////////////////////////// + + StartTest(); + + //////////////////////////////////////////////////////////////// + // TEST START + //////////////////////////////////////////////////////////////// + + + // Register for notification of call duration with RCall::NotifyCallDurationChange + TCoreEtelRequestStatus notifyCallDurationChangeStatus(call1, &RCall::NotifyCallDurationChangeCancel); + CleanupStack::PushL(notifyCallDurationChangeStatus); + TTimeIntervalSeconds notifyDuration; + call1.NotifyCallDurationChange(notifyCallDurationChangeStatus, notifyDuration); + + // Cancel notification + call1.NotifyCallDurationChangeCancel(); + + // Check status is KErrCancel + ASSERT_EQUALS(notifyCallDurationChangeStatus.Int(), KErrCancel, _L("RCall::NotifyCallDurationChange is not KErrCancel")); + + //////////////////////////////////////////////////////////////// + // TEST END + //////////////////////////////////////////////////////////////// + + StartCleanup(); + + // Pop + // notifyCallDurationChangeStatus + CleanupStack::PopAndDestroy(¬ifyCallDurationChangeStatus); + + return TestStepResult(); + } + +TPtrC CCTSYIntegrationTestCallControl0052::GetTestStepName() +/** + * @return The test step name. + */ + { + return _L("CCTSYIntegrationTestCallControl0052"); + } + + + +CCTSYIntegrationTestCallControl0053::CCTSYIntegrationTestCallControl0053(CEtelSessionMgr& aEtelSessionMgr) + : CCTSYIntegrationTestCallControlBase(aEtelSessionMgr) +/** + * Constructor. + */ + { + SetTestStepName(CCTSYIntegrationTestCallControl0053::GetTestStepName()); + } + +CCTSYIntegrationTestCallControl0053::~CCTSYIntegrationTestCallControl0053() +/** + * Destructor. + */ + { + } + +TVerdict CCTSYIntegrationTestCallControl0053::doTestStepL() +/** + * @SYMTestCaseID BA-CTSY-INT-CCON-0053 + * @SYMFssID BA/CTSY/CCON-0053 + * @SYMTestCaseDesc Close the phone when incoming call is coming (with 2 clients). + * @SYMTestPriority High + * @SYMTestActions RTelServer::LoadPhoneModule, RTelServer::Close, RLine::Open, RLine::NotifyIncomingCall, RPhone::Open, RLine::Close, RTelServer::Connect, RCall::OpenNewCall, RCall::Close, RPhone::Close + * @SYMTestExpectedResults Pass - Incoming call notification received. Subsessions closed successfully. + * @SYMTestType CIT + * @SYMTestCaseDependencies live/automatic + * + * Reason for test: Verify incoming call notification completes and phone and line can be closed. + * + * @return - TVerdict code + */ + { + + //////////////////////////////////////////////////////////////// + // SET UP + //////////////////////////////////////////////////////////////// + + // Call TNetworkTsyTestHelper::WaitForRegisteredOnHomeNetworkL + RMobilePhone& phone = iEtelSessionMgr.GetPhoneL(KMainServer,KMainPhone); + CHECK_EQUALS_L(iNetworkTestHelper.WaitForRegisteredOnHomeNetworkL(phone), KErrNone, + _L("TNetworkTsyTestHelper::WaitForRegisteredOnHomeNetworkL returned with an error")); + + //////////////////////////////////////////////////////////////// + // SET UP END + //////////////////////////////////////////////////////////////// + + StartTest(); + + //////////////////////////////////////////////////////////////// + // TEST START + //////////////////////////////////////////////////////////////// + + // Get voice line 1 on main phone. This is the first client. + RMobileLine& mobileLine= iEtelSessionMgr.GetLineL(KMainServer, KMainPhone, KVoiceLine); + + // Get voice line 1 on alt phone. This is the second client. + RMobileLine& mobileLine2= iEtelSessionMgr.GetLineL(KAltServer, KMainPhone, KVoiceLine); + + // Register for notification of incoming call1 with RLine::NotifyIncomingCall + TName name; + TCoreEtelRequestStatus notifyIncomingCallStatus (mobileLine,&RLine::NotifyIncomingCallCancel); + CleanupStack::PushL(notifyIncomingCallStatus); + mobileLine.NotifyIncomingCall(notifyIncomingCallStatus,name); + + // Register for notification of incoming call2 with RLine::NotifyIncomingCall + TName name2; + TCoreEtelRequestStatus notifyIncomingCallStatus2 (mobileLine2,&RLine::NotifyIncomingCallCancel); + CleanupStack::PushL(notifyIncomingCallStatus2); + mobileLine2.NotifyIncomingCall(notifyIncomingCallStatus2,name2); + + // Request an incoming call from RPS + ASSERT_EQUALS (RPSRequestIncomingCallL(EVoiceLine), KErrNone, _L("CCTSYIntegrationTestSuiteStepBase::RPSRequestIncomingCallL returned an error")); + + // Check RLine::NotifyIncomingCall completes with KErrNone on both clients. + ASSERT_EQUALS(WaitForRequestWithTimeOut(notifyIncomingCallStatus,ETimeMedium),KErrNone,_L("RLine::NotifyIncomingCall (1) timed out")); + ASSERT_EQUALS(notifyIncomingCallStatus.Int(), KErrNone, _L("RLine::NotifyIncomingCall (1) returned with an error")); + + ASSERT_EQUALS(WaitForRequestWithTimeOut(notifyIncomingCallStatus2,ETimeMedium),KErrNone,_L("RLine::NotifyIncomingCall (2) timed out")); + ASSERT_EQUALS(notifyIncomingCallStatus2.Int(), KErrNone, _L("RLine::NotifyIncomingCall (2) returned with an error")); + + // Release main phone. + iEtelSessionMgr.GetLineL(KMainServer, KMainPhone, KVoiceLine); + + // Release alt phone. + iEtelSessionMgr.GetLineL(KAltServer, KMainPhone, KVoiceLine); + + + //////////////////////////////////////////////////////////////// + // TEST END + //////////////////////////////////////////////////////////////// + + StartCleanup(); + + // Pop + // notifyIncomingCallStatus + // notifyIncomingCallStatus2 + + CleanupStack::PopAndDestroy(2,¬ifyIncomingCallStatus); + + return TestStepResult(); + } + +TPtrC CCTSYIntegrationTestCallControl0053::GetTestStepName() +/** + * @return The test step name. + */ + { + return _L("CCTSYIntegrationTestCallControl0053"); + } + + + +CCTSYIntegrationTestCallControl0054::CCTSYIntegrationTestCallControl0054(CEtelSessionMgr& aEtelSessionMgr) + : CCTSYIntegrationTestCallControlBase(aEtelSessionMgr) +/** + * Constructor. + */ + { + SetTestStepName(CCTSYIntegrationTestCallControl0054::GetTestStepName()); + } + +CCTSYIntegrationTestCallControl0054::~CCTSYIntegrationTestCallControl0054() +/** + * Destructor. + */ + { + } + +TVerdict CCTSYIntegrationTestCallControl0054::doTestStepL() +/** + * @SYMTestCaseID BA-CTSY-INT-CCON-0054 + * @SYMFssID BA/CTSY/CCON-0054 + * @SYMTestCaseDesc Answer incoming call and hang up call. + * @SYMTestPriority High + * @SYMTestActions RMobileLine::NotifyMobileLineStatusChange, + * RLine::GetCallInfo, + * RLine::NotifyIncomingCall, + * RCall::OpenExistingCall, RLine::GetStatus, + * RCall::AnswerIncomingCall, + * RMobileLine::GetMobileLineStatus, + * RLine::GetInfo + * @SYMTestExpectedResults Pass - Call can be answered and line status is correct. + * @SYMTestType CIT + * @SYMTestCaseDependencies live/automatic + * + * Reason for test: Verify call can be answered with specified + * params and line status, and line info correct. + * + * @return - TVerdict code + */ + { + + //////////////////////////////////////////////////////////////// + // SET UP + //////////////////////////////////////////////////////////////// + + // Call TNetworkTsyTestHelper::WaitForRegisteredOnHomeNetworkL + RMobilePhone& phone = iEtelSessionMgr.GetPhoneL(KMainServer,KMainPhone); + CHECK_EQUALS_L(iNetworkTestHelper.WaitForRegisteredOnHomeNetworkL(phone), KErrNone, + _L("TNetworkTsyTestHelper::WaitForRegisteredOnHomeNetworkL returned with an error")); + + // Check phone supports KCapsVoice. + RPhone::TCaps phoneCaps; + CHECK_EQUALS_L(phone.GetCaps(phoneCaps), KErrNone, _L("RPhone::GetCaps returned an error")); + CHECK_BITS_SET_L(phoneCaps.iFlags, RPhone::KCapsVoice, KNoUnwantedBits, _L("RPhone::GetCaps returned wrong caps, shouydl be KCapsVoice")); + + // Get Voice line 1. + RMobileLine& voiceLine = iEtelSessionMgr.GetLineL(KMainServer, KMainPhone, KVoiceLine); + + // Get call 1. + RMobileCall& call1 = iEtelSessionMgr.GetCallL(KMainServer, KMainPhone, KVoiceLine, KCall1); + + //////////////////////////////////////////////////////////////// + // SET UP END + //////////////////////////////////////////////////////////////// + + StartTest(); + + //////////////////////////////////////////////////////////////// + // TEST START + //////////////////////////////////////////////////////////////// + + // post notify RLine::NotifyIncomingCall + TCoreEtelRequestStatus notifyIncomingCallStatus (voiceLine, &RLine::NotifyIncomingCallCancel); + CleanupStack::PushL(notifyIncomingCallStatus); + TName incomingCallName; + voiceLine.NotifyIncomingCall(notifyIncomingCallStatus, incomingCallName); + + // post notifier for RLine::NotifyStatusChange + TCoreEtelRequestStatus notifyStatusChangeStatus (voiceLine, &RLine::NotifyStatusChangeCancel); + CleanupStack::PushL(notifyStatusChangeStatus); + RCall::TStatus lineStatus; + voiceLine.NotifyStatusChange(notifyStatusChangeStatus, lineStatus); + + // Request an incoming call from RPS. + ASSERT_EQUALS(RPSRequestIncomingCallL(EVoiceLine), KErrNone, _L("CCTSYIntegrationTestSuiteStepBase::RPSRequestIncomingCallL returned an error")); + + // Check RLine::NotifyIncomingCall completes. + ASSERT_EQUALS(WaitForRequestWithTimeOut(notifyIncomingCallStatus, ETimeMedium), KErrNone, + _L("RLine::NotifyIncomingCall did not complete without error")); + ASSERT_EQUALS(notifyIncomingCallStatus.Int(), KErrNone, _L("RLine::NotifyIncomingCall returned an error")); + + // Get the incoming call + TCallId incomingCallId; + call1 = iEtelSessionMgr.GetIncomingCallL(KMainServer, KMainPhone, KVoiceLine, incomingCallName, incomingCallId); + + // === Check line status === + + // Check RLine::NotifyStatusChange completes with EStatusRinging + RCall::TStatus expectedCallStatus = RCall::EStatusRinging; + TInt expectedStatus = KErrNone; + iCallControlTestHelper.WaitForLineNotifyStatusChange(voiceLine, + notifyStatusChangeStatus, + lineStatus, + expectedCallStatus, + expectedStatus); + + // Check RLine::GetStatus returns EStatusRinging + ASSERT_EQUALS(voiceLine.GetStatus(lineStatus),KErrNone, _L("RLine::GetStatus returned an error")); + ASSERT_EQUALS(lineStatus, RCall::EStatusRinging, _L("RLine::GetStatus returned wrong status, should be EStatusRinging")); + + // === Check line info === + + // Check RLine::GetCallInfo returns correct call name. + // Get the latest created call id. Call indexing starts from 0, so decrease it with one. + TInt numberOfCalls; + voiceLine.EnumerateCall(numberOfCalls); + numberOfCalls-=1; + RLine::TCallInfo callInfo; + ASSERT_EQUALS(voiceLine.GetCallInfo(numberOfCalls, callInfo), KErrNone, _L("RLine::GetCallInfo returned an error")); + ASSERT_TRUE(callInfo.iCallName.Length() > 0, _L("RLine::GetCallInfo returned an invalid name")); + + // Check RLine::GetCallInfo returns caps in set of KCapsVoice | KCapsAnswer. + ASSERT_BITS_SET(callInfo.iCallCapsFlags, RCall::KCapsVoice | RCall::KCapsAnswer, KNoUnwantedBits , + _L("RLine::GetCallInfo returned wrong caps")); + // Check RLine::GetCallInfo returns status of EStatusRinging + ASSERT_EQUALS(callInfo.iStatus, RCall::EStatusRinging, _L("RLine::GetCallInfo wrong iStatus, should be EStatusRinging")); + + // Populate a RMobileCall::TMobileCallParamsV1 with: + RMobileCall::TMobileCallParamsV1 mobileCallParams; + RMobileCall::TMobileCallParamsV1Pckg mobileCallParamsPckg(mobileCallParams); + + // ? iSpeakerControl = EMonitorSpeakerControlAlwaysOff + mobileCallParams.iSpeakerControl = RCall::EMonitorSpeakerControlAlwaysOff; + + // • iSpeakerVolume = EMonitorSpeakerVolumeOff + mobileCallParams.iSpeakerVolume = RCall::EMonitorSpeakerVolumeOff; + + // • iInterval = 0x01 + mobileCallParams.iInterval = 0x01; + + // • iWaitForDialTone = EDialToneWait + mobileCallParams.iWaitForDialTone = RCall::EDialToneWait; + + // • iIdRestrict = EIdRestrictDefault + mobileCallParams.iIdRestrict = RMobileCall::EIdRestrictDefault; + + // • iExplicitInvoke = TRUE + mobileCallParams.iCug.iExplicitInvoke = TRUE; + + // • iCugIndex = 0x0000 + mobileCallParams.iCug.iCugIndex = 0x0000; + + // • iSuppressOA = FALSE + mobileCallParams.iCug.iSuppressOA = FALSE; + + // • iSuppressPrefCug = FALSE + mobileCallParams.iCug.iSuppressPrefCug = FALSE; + + // • iAutoRedial = FALSE + mobileCallParams.iAutoRedial = FALSE; + + // post a notifier for RMobileLine::NotifyMobileLineStatusChange + RMobileCall::TMobileCallStatus mobileLineStatus; + TExtEtelRequestStatus notifyMobileLineChangeStatus(voiceLine, EMobileLineNotifyMobileLineStatusChange); + CleanupStack::PushL(notifyMobileLineChangeStatus); + voiceLine.NotifyMobileLineStatusChange(notifyMobileLineChangeStatus, mobileLineStatus); + + // post notifier for RLine::NotifyStatusChange + voiceLine.NotifyStatusChange(notifyStatusChangeStatus,lineStatus); + + // Answer incoming call by calling RCall::AnswerIncomingCall and using TMobileCallParamsV1 + ASSERT_EQUALS(call1.AnswerIncomingCall(mobileCallParamsPckg), KErrNone, _L("RCall::AnswerIncomingCall returned an error")); + + // === Check line status === + + // Check RLine::NotifyStatusChange completes with EStatusAnswering -> EStatusConnected. + expectedCallStatus = RCall::EStatusAnswering; + iCallControlTestHelper.WaitForLineNotifyStatusChange(voiceLine, + notifyStatusChangeStatus, + lineStatus, + expectedCallStatus, + expectedStatus); + + voiceLine.NotifyStatusChange(notifyStatusChangeStatus,lineStatus); + expectedCallStatus = RCall::EStatusConnected; + iCallControlTestHelper.WaitForLineNotifyStatusChange(voiceLine, + notifyStatusChangeStatus, + lineStatus, + expectedCallStatus, + expectedStatus); + + // Check RLine::GetStatus returns EStatusConnected + ASSERT_EQUALS(voiceLine.GetStatus(lineStatus),KErrNone, _L("RLine::GetStatus returned an error")); + ASSERT_EQUALS(lineStatus, RCall::EStatusConnected, _L("RLine::GetStatus returned wrong status, should be EStatusConnected")); + + // Check RMobileLine::NotifyMobileLineStatusChange completes with with EStatusAnswering -> EStatusConnected. + TInt wantedStatus = KErrNone; + RMobileCall::TMobileCallStatus expectedMobileLineStatus = RMobileCall::EStatusAnswering; + iCallControlTestHelper.WaitForMobileLineNotifyMobileLineStatusChange(voiceLine, + notifyMobileLineChangeStatus, + mobileLineStatus, + expectedMobileLineStatus, + wantedStatus); + + voiceLine.NotifyMobileLineStatusChange(notifyMobileLineChangeStatus, mobileLineStatus); + expectedMobileLineStatus = RMobileCall::EStatusConnected; + iCallControlTestHelper.WaitForMobileLineNotifyMobileLineStatusChange(voiceLine, + notifyMobileLineChangeStatus, + mobileLineStatus, + expectedMobileLineStatus, + wantedStatus); + + // Check RMobileLine::GetMobileLineStatus returns EStatusConnected + ASSERT_EQUALS(voiceLine.GetMobileLineStatus(mobileLineStatus), KErrNone, + _L("RMobileLine::GetMobileLineStatus returned an error")); + ASSERT_EQUALS(mobileLineStatus, RMobileCall::EStatusConnected, + _L("RMobileLine::GetMobileLineStatus did not return EStatusConnected as expected")); + + // === Check line info === + + // Check RLine::GetCallInfo returns valid name. + // Check RLine::GetCallInfo returns caps in set of KCapsHangUp. + // Check RLine::GetCallInfo returns status of EStatusConnected. + ASSERT_EQUALS(voiceLine.GetCallInfo(numberOfCalls, callInfo), KErrNone, _L("RLine::GetCallInfo returned an error")); + ASSERT_TRUE(callInfo.iCallName.Length()>0, _L("RLine::GetCallInfo returned an invalid name")); + ASSERT_BITS_SET(callInfo.iCallCapsFlags, RCall::KCapsHangUp, KNoUnwantedBits , + _L("RLine::GetCallInfo returned wrong caps")); + ASSERT_EQUALS(callInfo.iStatus, RCall::EStatusConnected, _L("RLine::GetCallInfo wrong iStatus, should be EStatusConnected")); + + // Check RLine::GetInfo returns status of EStatusConnected. + RLine::TLineInfo lineInfo; + ASSERT_EQUALS(voiceLine.GetInfo(lineInfo),KErrNone, _L("RLine::GetInfo returned an error")); + ASSERT_EQUALS(lineInfo.iStatus, RCall::EStatusConnected, _L("RLine::GetInfo did not return EStatusConnected")); + + voiceLine.NotifyStatusChange(notifyStatusChangeStatus,lineStatus); + voiceLine.NotifyMobileLineStatusChange(notifyMobileLineChangeStatus, mobileLineStatus); + + // Hang up the call + TCoreEtelRequestStatus hangUpStatus (call1, &RCall::HangUpCancel); + CleanupStack::PushL(hangUpStatus); + call1.HangUp(hangUpStatus); + ASSERT_EQUALS(WaitForRequestWithTimeOut(hangUpStatus, ETimeLong), KErrNone, _L("RCall::HangUp timed-out")); + ASSERT_EQUALS(hangUpStatus.Int(), KErrNone, _L("RCall::HangUp returned an error")); + + // === Check line status === + + // Check RLine::NotifyStatusChange completes with EStatusHangingUp -> EStatusIdle + expectedCallStatus = RCall::EStatusHangingUp; + iCallControlTestHelper.WaitForLineNotifyStatusChange(voiceLine, + notifyStatusChangeStatus, + lineStatus, + expectedCallStatus, + expectedStatus); + + voiceLine.NotifyStatusChange(notifyStatusChangeStatus,lineStatus); + expectedCallStatus = RCall::EStatusIdle; + iCallControlTestHelper.WaitForLineNotifyStatusChange(voiceLine, + notifyStatusChangeStatus, + lineStatus, + expectedCallStatus, + expectedStatus); + + // Check RLine::GetStatus returns EStatusIdle + ASSERT_EQUALS(voiceLine.GetStatus(lineStatus),KErrNone, _L("RLine::GetStatus returned an error")); + ASSERT_EQUALS(lineStatus, RCall::EStatusIdle, _L("RLine::GetStatus returned wrong status, should be EStatusIdle")); + + // Check RMobileLine::NotifyMobileLineStatusChange completes with EStatusDisconnecting -> EStatusIdle + expectedMobileLineStatus = RMobileCall::EStatusDisconnecting; + iCallControlTestHelper.WaitForMobileLineNotifyMobileLineStatusChange(voiceLine, + notifyMobileLineChangeStatus, + mobileLineStatus, + expectedMobileLineStatus, + wantedStatus); + voiceLine.NotifyMobileLineStatusChange(notifyMobileLineChangeStatus, mobileLineStatus); + expectedMobileLineStatus = RMobileCall::EStatusIdle; + iCallControlTestHelper.WaitForMobileLineNotifyMobileLineStatusChange(voiceLine, + notifyMobileLineChangeStatus, + mobileLineStatus, + expectedMobileLineStatus, + wantedStatus); + + // Check RMobileLine::GetMobileLineStatus returns EStatusIdle + ASSERT_EQUALS(voiceLine.GetMobileLineStatus(mobileLineStatus), KErrNone, + _L("RMobileLine::GetMobileLineStatus returned an error")); + ASSERT_EQUALS(mobileLineStatus, RMobileCall::EStatusIdle, + _L("RMobileLine::GetMobileLineStatus did not return EStatusIdle as expected")); + + // === Check line info === + + // Check RLine::GetCallInfo returns valid name. + // Check RLine::GetCallInfo returns caps in set of KCapsVoice | KCapsDial. + // Check RLine::GetCallInfo returns status of EStatusIdle. + ASSERT_EQUALS(voiceLine.GetCallInfo(numberOfCalls, callInfo), KErrNone, _L("RLine::GetCallInfo returned an error")); + ASSERT_TRUE(callInfo.iCallName.Length() > 0, _L("RLine::GetCallInfo returned an invalid name")); + ASSERT_BITS_SET(callInfo.iCallCapsFlags, RCall::KCapsVoice | RCall::KCapsDial, KNoUnwantedBits , + _L("RLine::GetCallInfo returned wrong caps")); + ASSERT_EQUALS(callInfo.iStatus, RCall::EStatusIdle, _L("RLine::GetCallInfo wrong iStatus, should be EStatusIdle")); + + // Check RLine::GetInfo returns status of EStatusIdle. + ASSERT_EQUALS(voiceLine.GetInfo(lineInfo), KErrNone, _L("RLine::GetInfo returned an error")); + ASSERT_EQUALS(lineInfo.iStatus, RCall::EStatusIdle, _L("RLine::GetInfo did not return EStatusIdle")); + + + //////////////////////////////////////////////////////////////// + // TEST END + //////////////////////////////////////////////////////////////// + + StartCleanup(); + + // Pop + // notifyIncomingCallStatus + // notifyStatusChangeStatus + // notifyMobileLineChangeStatus + // hangUpStatus + CleanupStack::PopAndDestroy(4, ¬ifyIncomingCallStatus); + + return TestStepResult(); + } + +TPtrC CCTSYIntegrationTestCallControl0054::GetTestStepName() +/** + * @return The test step name. + */ + { + return _L("CCTSYIntegrationTestCallControl0054"); + } + + + +CCTSYIntegrationTestCallControl0055::CCTSYIntegrationTestCallControl0055(CEtelSessionMgr& aEtelSessionMgr) + : CCTSYIntegrationTestCallControlBase(aEtelSessionMgr) +/** + * Constructor. + */ + { + SetTestStepName(CCTSYIntegrationTestCallControl0055::GetTestStepName()); + } + +CCTSYIntegrationTestCallControl0055::~CCTSYIntegrationTestCallControl0055() +/** + * Destructor. + */ + { + } + +TVerdict CCTSYIntegrationTestCallControl0055::doTestStepL() +/** + * @SYMTestCaseID BA-CTSY-INT-CCON-0055 + * @SYMFssID BA/CTSY/CCON-0055 + * @SYMTestCaseDesc Answer incoming call then have remote party hang up. + * @SYMTestPriority High + * @SYMTestActions RMobileLine::NotifyMobileLineStatusChange, + * RLine::GetCallInfo, + * RLine::NotifyIncomingCall, + * RCall::OpenExistingCall, RLine::GetStatus, + * RCall::AnswerIncomingCall, + * RMobileLine::GetMobileLineStatus, + * RLine::GetInfo + * @SYMTestExpectedResults Pass - Line status correct after remote party hangs up. + * @SYMTestType CIT + * @SYMTestCaseDependencies rps/automatic + * + * Reason for test: Verify call can be answered with specified + * params and line status, and line info correct. + * + * @return - TVerdict code + */ + { + + //////////////////////////////////////////////////////////////// + // SET UP + //////////////////////////////////////////////////////////////// + + // Call TNetworkTsyTestHelper::WaitForRegisteredOnHomeNetworkL + RMobilePhone& phone = iEtelSessionMgr.GetPhoneL(KMainServer,KMainPhone); + CHECK_EQUALS_L(iNetworkTestHelper.WaitForRegisteredOnHomeNetworkL(phone), KErrNone, + _L("TNetworkTsyTestHelper::WaitForRegisteredOnHomeNetworkL returned with an error")); + + // Check phone supports KCapsVoice + RPhone::TCaps phoneCaps; + CHECK_EQUALS_L(phone.GetCaps(phoneCaps), KErrNone, _L("RPhone::GetCaps returned an error")); + CHECK_BITS_SET_L(phoneCaps.iFlags, RPhone::KCapsVoice, KNoUnwantedBits, _L("RPhone::GetCaps returned wrong caps")); + + // Get Voice line 1 + RMobileLine& voiceLine = iEtelSessionMgr.GetLineL(KMainServer, KMainPhone, KVoiceLine); + + // Get call 1. + RMobileCall& call1 = iEtelSessionMgr.GetCallL(KMainServer, KMainPhone, KVoiceLine, KCall1); + + //////////////////////////////////////////////////////////////// + // SET UP END + //////////////////////////////////////////////////////////////// + + StartTest(); + + //////////////////////////////////////////////////////////////// + // TEST START + //////////////////////////////////////////////////////////////// + + // Post notification RLine::NotifyIncomingCall + TCoreEtelRequestStatus notifyIncomingCallStatus(voiceLine, &RLine::NotifyIncomingCallCancel); + CleanupStack::PushL(notifyIncomingCallStatus); + TName incomingCallName; + incomingCallName.Zero(); + voiceLine.NotifyIncomingCall(notifyIncomingCallStatus, incomingCallName); + + // Post notifier for RLine::NotifyStatusChange + TCoreEtelRequestStatus notifyStatusChangeStatus (voiceLine, &RLine::NotifyStatusChangeCancel); + CleanupStack::PushL(notifyStatusChangeStatus); + RCall::TStatus lineStatus; + voiceLine.NotifyStatusChange(notifyStatusChangeStatus, lineStatus); + + // Request an incoming call from RPS. + ASSERT_EQUALS(RPSRequestIncomingCallL(EVoiceLine), KErrNone, _L("CCTSYIntegrationTestSuiteStepBase::RPSRequestIncomingCallL returned an error")); + + // Check RLine::NotifyIncomingCall completes. + ASSERT_EQUALS(WaitForRequestWithTimeOut(notifyIncomingCallStatus, ETimeMedium), KErrNone, + _L("RLine::NotifyIncomingCall timed-out.")); + ASSERT_EQUALS(notifyIncomingCallStatus.Int(), KErrNone, + _L( "RLine::NotifyIncomingCall returned with an error.")); + ASSERT_TRUE(incomingCallName.Length() > 0, + _L("RLine::NotifyIncomingCall completed with invalid call name.")); + + // Get the incoming call + TCallId incomingCallId; + call1 = iEtelSessionMgr.GetIncomingCallL(KMainServer, KMainPhone, KVoiceLine, incomingCallName, incomingCallId); + + // === Check line status === + + // Check RLine::NotifyStatusChange completes with EStatusRinging + RCall::TStatus expectedLineStatus = RCall::EStatusRinging; + iCallControlTestHelper.WaitForLineNotifyStatusChange(voiceLine, + notifyStatusChangeStatus, + lineStatus, + expectedLineStatus, + KErrNone); + + // Check RLine::GetStatus returns EStatusRinging + ASSERT_EQUALS(voiceLine.GetStatus(lineStatus), KErrNone, _L("RLine::GetStatus returned an error.")); + ASSERT_EQUALS(lineStatus, RCall::EStatusRinging, _L("RLine::GetStatus did not return EStatusRinging as expected.")); + + // === Check line info === + + // Check RLine::GetCallInfo returns correct call name. + RLine::TCallInfo callInfo; + ASSERT_EQUALS(voiceLine.GetCallInfo(incomingCallId, callInfo), KErrNone, _L( "RLine::GetCallInfo returned an error")); + ASSERT_TRUE(callInfo.iCallName.Length() > 0, _L("RLine::GetCallInfo returned an invalid name")); + + // Check RLine::GetCallInfo returns caps in set of KCapsVoice | KCapsAnswer. + // $CTSYProblem RLine::GetCallInfo returns wrong bits set : Got 0x44 , required 0x64 + // KCapsVoice=0x00000004 and KCapsAnswer=0x00000040 are OK but KCapsHangUp=0x00000020 is missing. + // Changed original test step to check RLine::GetCallinfo returns caps in set KCapsVoice | KCapsAnswer instead of KCapsVoice | KCapsAnswer | KCapsHangUp. + ASSERT_BITS_SET(callInfo.iCallCapsFlags, RCall::KCapsVoice | RCall::KCapsAnswer, KNoUnwantedBits, _L( "RLine::GetCallInfo returned wrong caps")); + + // Check RLine::GetCallInfo returns status of EStatusRinging + ASSERT_EQUALS(callInfo.iStatus, RCall::EStatusRinging, _L( "RLine::GetCallInfo did not return EStatusRinging as expected.")); + + // Populate a RMobileCall::TMobileCallParamsV1 with: + RMobileCall::TMobileCallParamsV1 mobileCallParams; + RMobileCall::TMobileCallParamsV1Pckg mobileCallParamsPckg(mobileCallParams); + + // • iSpeakerControl = EMonitorSpeakerControlAlwaysOff + mobileCallParams.iSpeakerControl = RCall::EMonitorSpeakerControlAlwaysOff; + + // • iSpeakerVolume = EMonitorSpeakerVolumeOff + mobileCallParams.iSpeakerVolume = RCall::EMonitorSpeakerVolumeOff; + + // • iInterval = 0x01 + mobileCallParams.iInterval = 0x01; + + // • iWaitForDialTone = EDialToneWait + mobileCallParams.iWaitForDialTone = RCall::EDialToneWait; + + // • iIdRestrict = EIdRestrictDefault + mobileCallParams.iIdRestrict = RMobileCall::EIdRestrictDefault; + + // • iExplicitInvoke = TRUE + mobileCallParams.iCug.iExplicitInvoke = TRUE; + + // • iCugIndex = 0x0000 + mobileCallParams.iCug.iCugIndex = 0x0000; + + // • iSuppressOA = FALSE + mobileCallParams.iCug.iSuppressOA = FALSE; + + // • iSuppressPrefCug = FALSE + mobileCallParams.iCug.iSuppressPrefCug = FALSE; + + // • iAutoRedial = FALSE + mobileCallParams.iAutoRedial = FALSE; + + // Post a notifier for RMobileLine::NotifyMobileLineStatusChange + RMobileCall::TMobileCallStatus mobileLineStatus; + TExtEtelRequestStatus notifyMobileLineChangeStatus(voiceLine, EMobileLineNotifyMobileLineStatusChange); + CleanupStack::PushL(notifyMobileLineChangeStatus); + voiceLine.NotifyMobileLineStatusChange(notifyMobileLineChangeStatus, mobileLineStatus); + + // Repost notifier for RLine::NotifyStatusChange + voiceLine.NotifyStatusChange(notifyStatusChangeStatus, lineStatus); + + // Answer incoming call by calling RCall::AnswerIncomingCall and using TMobileCallParamsV1 + ASSERT_EQUALS(call1.AnswerIncomingCall(mobileCallParamsPckg), KErrNone, + _L( "RCall::AnswerIncomingCall returned an error")); + + // === Check line status === + + // Check RLine::NotifyStatusChange completes with EStatusAnswering -> EStatusConnected. + expectedLineStatus = RCall::EStatusAnswering; + iCallControlTestHelper.WaitForLineNotifyStatusChange(voiceLine, + notifyStatusChangeStatus, + lineStatus, + expectedLineStatus, + KErrNone); + + voiceLine.NotifyStatusChange(notifyStatusChangeStatus, lineStatus); + expectedLineStatus = RCall::EStatusConnected; + iCallControlTestHelper.WaitForLineNotifyStatusChange(voiceLine, + notifyStatusChangeStatus, + lineStatus, + expectedLineStatus, + KErrNone); + + // Check RLine::GetStatus returns EStatusConnected + ASSERT_EQUALS(voiceLine.GetStatus(lineStatus), KErrNone, _L("RLine::GetStatus returned an error.")); + ASSERT_EQUALS(lineStatus, RCall::EStatusConnected, _L("RLine::GetStatus did not return EStatusConnected as expected.")); + + // Check RMobileLine::NotifyMobileLineStatusChange completes with with EStatusAnswering -> EStatusConnected. + RMobileCall::TMobileCallStatus expectedMobileLineStatus = RMobileCall::EStatusAnswering; + iCallControlTestHelper.WaitForMobileLineNotifyMobileLineStatusChange(voiceLine, + notifyMobileLineChangeStatus, + mobileLineStatus, + expectedMobileLineStatus, + KErrNone); + + voiceLine.NotifyMobileLineStatusChange(notifyMobileLineChangeStatus, mobileLineStatus); + expectedMobileLineStatus = RMobileCall::EStatusConnected; + iCallControlTestHelper.WaitForMobileLineNotifyMobileLineStatusChange(voiceLine, + notifyMobileLineChangeStatus, + mobileLineStatus, + expectedMobileLineStatus, + KErrNone); + + // Check RMobileLine::GetMobileLineStatus returns EStatusConnected + ASSERT_EQUALS(voiceLine.GetMobileLineStatus(mobileLineStatus), KErrNone, + _L("RMobileLine::GetMobileLineStatus returned an error")); + ASSERT_EQUALS(mobileLineStatus, RMobileCall::EStatusConnected, + _L("RMobileLine::GetMobileLineStatus did not return EStatusConnected as expected")); + + // === Check line info === + + // Check RLine::GetCallInfo returns valid name. + RLine::TCallInfo callInfo2; + ASSERT_EQUALS(voiceLine.GetCallInfo(incomingCallId, callInfo2), KErrNone, _L("RLine::GetCallInfo returned an error")); + ASSERT_TRUE(callInfo2.iCallName.Length()>0, _L("RLine::GetCallInfo returned an invalid name")); + + // Check RLine::GetCallInfo returns caps in set of KCapsHangUp. + ASSERT_BITS_SET(callInfo2.iCallCapsFlags, RCall::KCapsHangUp, KNoUnwantedBits, _L("RLine::GetCallInfo returned wrong caps")); + + // Check RLine::GetCallInfo returns status of EStatusConnected. + ASSERT_EQUALS(callInfo2.iStatus, RCall::EStatusConnected, _L("RLine::GetCallInfo did not return EStatusConnected as expected.")); + + // Check RLine::GetInfo returns status of EStatusConnected. + RLine::TLineInfo lineInfo; + ASSERT_EQUALS(voiceLine.GetInfo(lineInfo), KErrNone, _L("RLine::GetInfo returned an error")); + ASSERT_EQUALS(lineInfo.iStatus, RCall::EStatusConnected, _L("RLine::GetInfo did not return EStatusConnected as expected.")); + + // Repost notifier for RLine::NotifyStatusChange + voiceLine.NotifyStatusChange(notifyStatusChangeStatus, lineStatus); + + // Repost notifer for RMobileLine::NotifyMobileLineStatusChange + voiceLine.NotifyMobileLineStatusChange(notifyMobileLineChangeStatus, mobileLineStatus); + + // RPS hangs up the call + ASSERT_EQUALS(RPSHangupL(EVoiceLine, 0), KErrNone, _L("CCTSYIntegrationTestSuiteStepBase::RPSHangup returned an error")); + + // === Check line status === + + // Check RLine::NotifyStatusChange completes with EStatusHangingUp -> EStatusIdle + expectedLineStatus = RCall::EStatusHangingUp; + iCallControlTestHelper.WaitForLineNotifyStatusChange(voiceLine, + notifyStatusChangeStatus, + lineStatus, + expectedLineStatus, + KErrNone); + + voiceLine.NotifyStatusChange(notifyStatusChangeStatus, lineStatus); + expectedLineStatus = RCall::EStatusIdle; + iCallControlTestHelper.WaitForLineNotifyStatusChange(voiceLine, + notifyStatusChangeStatus, + lineStatus, + expectedLineStatus, + KErrNone); + + // Check RLine::GetStatus returns EStatusIdle + ASSERT_EQUALS(voiceLine.GetStatus(lineStatus), KErrNone, _L("RLine::GetStatus returned an error")); + ASSERT_EQUALS(lineStatus, RCall::EStatusIdle, _L("RLine::GetStatus did not return EStatusIdle as expected.")); + + // Check RMobileLine::NotifyMobileLineStatusChange completes with with EStatusDisconnecting -> EStatusIdle + expectedMobileLineStatus = RMobileCall::EStatusDisconnecting; + iCallControlTestHelper.WaitForMobileLineNotifyMobileLineStatusChange(voiceLine, + notifyMobileLineChangeStatus, + mobileLineStatus, + expectedMobileLineStatus, + KErrNone); + + voiceLine.NotifyMobileLineStatusChange(notifyMobileLineChangeStatus, mobileLineStatus); + expectedMobileLineStatus = RMobileCall::EStatusIdle; + iCallControlTestHelper.WaitForMobileLineNotifyMobileLineStatusChange(voiceLine, + notifyMobileLineChangeStatus, + mobileLineStatus, + expectedMobileLineStatus, + KErrNone); + + // Check RMobileLine::GetMobileLineStatus returns EStatusIdle + ASSERT_EQUALS(voiceLine.GetMobileLineStatus(mobileLineStatus), KErrNone, + _L("RMobileLine::GetMobileLineStatus returned an error")); + ASSERT_EQUALS(mobileLineStatus, RMobileCall::EStatusIdle, + _L("RMobileLine::GetMobileLineStatus did not return EStatusIdle as expected")); + + // === Check line info === + + // Check RLine::GetCallInfo returns valid name. + RLine::TCallInfo callInfo3; + ASSERT_EQUALS(voiceLine.GetCallInfo(incomingCallId, callInfo3), KErrNone, _L("RLine::GetCallInfo returned an error")); + ASSERT_TRUE(callInfo3.iCallName.Length() > 0, _L("RLine::GetCallInfo returned an invalid name")); + + // Check RLine::GetCallInfo returns caps in set of KCapsVoice | KCapsDial. + TUint expectedCallCapsFlags = RCall::KCapsVoice | RCall::KCapsDial; + ASSERT_BITS_SET(callInfo3.iCallCapsFlags, expectedCallCapsFlags, KNoUnwantedBits, _L("RLine::GetCallInfo returned wrong caps")); + + // Check RLine::GetCallInfo returns status of EStatusIdle. + ASSERT_EQUALS(callInfo3.iStatus, RCall::EStatusIdle, + _L("RLine::GetCallInfo did not return EStatusIdle as expected.")); + + // Check RLine::GetInfo returns status of EStatusIdle. + ASSERT_EQUALS(voiceLine.GetInfo(lineInfo), KErrNone, _L("RLine::GetInfo returned an error")); + ASSERT_EQUALS(lineInfo.iStatus, RCall::EStatusIdle, _L("RLine::GetInfo did not return EStatusIdle as expected.")); + + //////////////////////////////////////////////////////////////// + // TEST END + //////////////////////////////////////////////////////////////// + + StartCleanup(); + + // Pop + // notifyIncomingCallStatus + // notifyStatusChangeStatus + // notifyMobileLineChangeStatus + CleanupStack::PopAndDestroy(3, ¬ifyIncomingCallStatus); + + return TestStepResult(); + } + +TPtrC CCTSYIntegrationTestCallControl0055::GetTestStepName() +/** + * @return The test step name. + */ + { + return _L("CCTSYIntegrationTestCallControl0055"); + } + + + +CCTSYIntegrationTestCallControl0056::CCTSYIntegrationTestCallControl0056(CEtelSessionMgr& aEtelSessionMgr) + : CCTSYIntegrationTestCallControlBase(aEtelSessionMgr) +/** + * Constructor. + */ + { + SetTestStepName(CCTSYIntegrationTestCallControl0056::GetTestStepName()); + } + +CCTSYIntegrationTestCallControl0056::~CCTSYIntegrationTestCallControl0056() +/** + * Destructor. + */ + { + } + +TVerdict CCTSYIntegrationTestCallControl0056::doTestStepL() +/** + * @SYMTestCaseID BA-CTSY-INT-CCON-0056 + * @SYMFssID BA/CTSY/CCON-0056 + * @SYMTestCaseDesc Remove SIM during call + * @SYMTestPriority High + * @SYMTestActions RMobilePhone::GetNetworkRegistrationStatus, RLine::NotifyStatusChange, RLine::GetStatus, RMobileLine::NotifyMobileLineStatusChange, RMobileLine::GetMobileLineStatus, RCall::NotifyStatusChange, RCall::GetStatus, RMobileCall::NotifyMobileCallStatusChange, RMobileCall::GetMobileCallStatus + * @SYMTestExpectedResults Pass - Phone is not registered on network after 35s of SIM removal. + * @SYMTestType CIT + * @SYMTestCaseDependencies live/manual + * + * Reason for test: Verify network registration status, call and line statuses are correct + * + * @return - TVerdict code + */ + { + + //////////////////////////////////////////////////////////////// + // SET UP + //////////////////////////////////////////////////////////////// + + // Call TNetworkTsyTestHelper::WaitForRegisteredOnHomeNetworkL + RMobilePhone& phone = iEtelSessionMgr.GetPhoneL(KMainServer,KMainPhone); + CHECK_EQUALS_L(iNetworkTestHelper.WaitForRegisteredOnHomeNetworkL(phone), KErrNone, + _L("TNetworkTsyTestHelper::WaitForRegisteredOnHomeNetworkL returned with an error")); + + // Get Voice Line 1 + + // Get Call 1 + + // Dial a number that answers + + // Ensure call is connected before starting test + + + //////////////////////////////////////////////////////////////// + // SET UP END + //////////////////////////////////////////////////////////////// + + StartTest(); + + //////////////////////////////////////////////////////////////// + // TEST START + //////////////////////////////////////////////////////////////// + + + // Check RMobilePhone::GetNetworkRegistrationStatus returns ERegisteredOnHomeNetwork + + // Remove SIM. + + // Wait for 35 seconds. + + // Check RMobilePhone::NotifyNetworkRegistrationStatusChange completes with one of ENotRegisteredSearching | ENotRegisteredEmergencyOnly + + // Check RMobilePhone::GetNetworkRegistrationStatus returns one of ENotRegisteredSearching | ENotRegisteredEmergencyOnly + + // === Check line status === + + // Check RLine::NotifyStatusChange completes with EStatusIdle + + // Check RLine::GetStatus returns EStatusIdle + + // Check RMobileLine::NotifyMobileLineStatusChange completes with EStatusIdle + + // Check RMobileLine::GetMobileLineStatus returns EStatusIdle + + // === Check call status === + + // Check RCall::NotifyStatusChange completes with EStatusIdle + + // Check RCall::GetStatus returns EStatusIdle + + // Check RMobileCall::NotifyMobileCallStatusChange completes with EStatusIdle + + // Check RMobileCall::GetMobileCallStatus returns EStatusIdle + + + //////////////////////////////////////////////////////////////// + // TEST END + //////////////////////////////////////////////////////////////// + + StartCleanup(); + + // Put any required test clean up here, then remove this comment + + return TestStepResult(); + } + +TPtrC CCTSYIntegrationTestCallControl0056::GetTestStepName() +/** + * @return The test step name. + */ + { + return _L("CCTSYIntegrationTestCallControl0056"); + } + + + +CCTSYIntegrationTestCallControl0057::CCTSYIntegrationTestCallControl0057(CEtelSessionMgr& aEtelSessionMgr) + : CCTSYIntegrationTestCallControlBase(aEtelSessionMgr) +/** + * Constructor. + */ + { + SetTestStepName(CCTSYIntegrationTestCallControl0057::GetTestStepName()); + } + +CCTSYIntegrationTestCallControl0057::~CCTSYIntegrationTestCallControl0057() +/** + * Destructor. + */ + { + } + +TVerdict CCTSYIntegrationTestCallControl0057::doTestStepL() +/** + * @SYMTestCaseID BA-CTSY-INT-CCON-0057 + * @SYMFssID BA/CTSY/CCON-0057 + * @SYMTestCaseDesc Remove SIM during idle mode + * @SYMTestPriority High + * @SYMTestActions RMobileLine::NotifyMobileLineStatusChange, RMobileCall::GetMobileCallStatus, RCall::Dial, RMobilePhone::NotifyNetworkRegistrationStatusChange, RMobileCall::GetMobileCallInfo, RMobileCall::NotifyMobileCallStatusChange, RCall::NotifyStatusChange, RLine::NotifyStatusChange, RLine::GetStatus, RLine::GetStatus, RMobileLine::GetMobileLineStatus, RMobilePhone::GetNetworkRegistrationStatus, RMobileCall::DialEmergencyCall, RCall::GetStatus + * @SYMTestExpectedResults Pass - Only emergency numbers can be dialled without SIM. + * @SYMTestType CIT + * @SYMTestCaseDependencies simulated/manual + * + * Reason for test: Verify only emergency calls can be made without a SIM. + * + * @return - TVerdict code + */ + { + + //////////////////////////////////////////////////////////////// + // SET UP + //////////////////////////////////////////////////////////////// + + // Call TNetworkTsyTestHelper::WaitForRegisteredOnHomeNetworkL + RMobilePhone& phone = iEtelSessionMgr.GetPhoneL(KMainServer,KMainPhone); + CHECK_EQUALS_L(iNetworkTestHelper.WaitForRegisteredOnHomeNetworkL(phone), KErrNone, + _L("TNetworkTsyTestHelper::WaitForRegisteredOnHomeNetworkL returned with an error")); + + // Ensure phone is camped on simulated network. + + // Get Voice Line 1 + + // Get Call 1 + + + //////////////////////////////////////////////////////////////// + // SET UP END + //////////////////////////////////////////////////////////////// + + StartTest(); + + //////////////////////////////////////////////////////////////// + // TEST START + //////////////////////////////////////////////////////////////// + + + // Remove SIM. + + // Check RMobilePhone::NotifyNetworkRegistrationStatusChange completes with one of ENotRegisteredSearching | ENotRegisteredEmergencyOnly + + // Check RMobilePhone::GetNetworkRegistrationStatus returns one of ENotRegisteredSearching | ENotRegisteredEmergencyOnly + + // === Check line status and call status === + + // Check RLine::GetStatus returns EStatusIdle. + + // Check RMobileLine::GetMobileLineStatus returns EStatusIdle. + + // Check RCall::GetStatus returns EStatusIdle. + + // Check RMobileCall::GetMobileCallStatus returns status of EStatusIdle. + + // === Attempt to dial a non-emergency number === + + // Dial a non-emergency number with RCall::Dial + + // Wait for completion + + // Check error is returned. + + // === Check line status and call status === + + // Check RLine::GetStatus returns EStatusIdle. + + // Check RMobileLine::GetMobileLineStatus returns EStatusIdle. + + // Check RCall::GetStatus returns EStatusIdle. + + // Check RMobileCall::GetMobileCallStatus returns status of EStatusIdle. + + // === Attempt to dial the international emergency number, simulate answering === + + // Dial emergency number with RCall::DialEmergencyCall + + // === Check call status === + + // Check RCall::NotifyStatusChange completes with EStatusDialling -> EStatusConnecting -> EStatusConnected. + + // Check RCall::GetStatus returns EStatusConnected. + + // Check RMobileCall::NotifyMobileCallStatusChange completes with EStatusDialling -> EStatusConnecting -> EStatusConnected. + + // Check RMobileCall::GetMobileCallStatus returns status of EStatusConnected. + + // === Check line status === + + // Check RLine::NotifyStatusChange completes with EStatusDialling -> EStatusConnecting -> EStatusConnected. + + // Check RLine::GetStatus returns EStatusConnected + + // Check RMobileLine::NotifyMobileLineStatusChange completes with with EStatusDialling -> EStatusConnecting -> EStatusConnected. + + // Check RMobileLine::GetMobileLineStatus returns EStatusConnected + + // === Check call info === + + // Check RMobileCall::GetMobileCallInfo returns valid call name + // Check RMobileCall::GetMobileCallInfo returns valid line name + // Check RMobileCall::GetMobileCallInfo returns correct number in iDialledParty.iTelNumber + // Check RMobileCall::GetMobileCallInfo returns iEmergency == ETrue + // Check RMobileCall::GetMobileCallInfo returns iStatus of EStatusConnected + // Check RMobileCall::GetMobileCallInfo returns correct iRemoteNumber and iDirection in iRemoteParty + // Check RMobileCall::GetMobileCallInfo returns correct iValid for returned parameters + + // Hang up. + + // === Check call status === + + // Check RCall::NotifyStatusChange completes with EStatusHangingUp -> EStatusIdle. + + // Check RCall::GetStatus returns EStatusIdle. + + // Check RMobileCall::NotifyMobileCallStatusChange completes with EStatusDisconnecting -> EStatusIdle. + + // Check RMobileCall::GetMobileCallStatus returns status of EStatusIdle. + + // === Check line status === + + // Check RMobileLine::NotifyStatusChange completes with EStatusHangingUp -> EStatusIdle + + // Check RMobileLine::GetStatus returns EStatusIdle + + // Check RMobileLine::NotifyMobileLineStatusChange completes with with EStatusDisconnecting -> EStatusIdle + + // Check RMobileLine::GetMobileLineStatus returns EStatusIdle + + // === Attempt to dial national emergency number === + + // Dial emergency number with RCall::DialEmergencyCall + + // === Check call status === + + // Check RCall::NotifyStatusChange completes with EStatusDialling -> EStatusConnecting -> EStatusConnected. + + // Check RCall::GetStatus returns EStatusConnected. + + // Check RMobileCall::NotifyMobileCallStatusChange completes with EStatusDialling -> EStatusConnecting -> EStatusConnected. + + // Check RMobileCall::GetMobileCallStatus returns status of EStatusConnected. + + // === Check line status === + + // Check RLine::NotifyStatusChange completes with EStatusDialling -> EStatusConnecting -> EStatusConnected. + + // Check RLine::GetStatus returns EStatusConnected + + // Check RMobileLine::NotifyMobileLineStatusChange completes with with EStatusDialling -> EStatusConnecting -> EStatusConnected. + + // Check RMobileLine::GetMobileLineStatus returns EStatusConnected + + // === Check call info === + + // Check RMobileCall::GetMobileCallInfo returns valid call name + // Check RMobileCall::GetMobileCallInfo returns valid line name + // Check RMobileCall::GetMobileCallInfo returns correct number in iDialledParty.iTelNumber + // Check RMobileCall::GetMobileCallInfo returns iEmergency == ETrue + // Check RMobileCall::GetMobileCallInfo returns iStatus of EStatusConnected + // Check RMobileCall::GetMobileCallInfo returns correct iRemoteNumber and iDirection in iRemoteParty + // Check RMobileCall::GetMobileCallInfo returns correct iValid for returned parameters + + // Hang up. + + // === Check call status === + + // Check RCall::NotifyStatusChange completes with EStatusHangingUp -> EStatusIdle. + + // Check RCall::GetStatus returns EStatusIdle. + + // Check RMobileCall::NotifyMobileCallStatusChange completes with EStatusDisconnecting -> EStatusIdle. + + // Check RMobileCall::GetMobileCallStatus returns status of EStatusIdle. + + // === Check line status === + + // Check RMobileLine::NotifyStatusChange completes with EStatusHangingUp -> EStatusIdle + + // Check RMobileLine::GetStatus returns EStatusIdle + + // Check RMobileLine::NotifyMobileLineStatusChange completes with with EStatusDisconnecting -> EStatusIdle + + // Check RMobileLine::GetMobileLineStatus returns EStatusIdle + + + //////////////////////////////////////////////////////////////// + // TEST END + //////////////////////////////////////////////////////////////// + + StartCleanup(); + + // Put any required test clean up here, then remove this comment + + return TestStepResult(); + } + +TPtrC CCTSYIntegrationTestCallControl0057::GetTestStepName() +/** + * @return The test step name. + */ + { + return _L("CCTSYIntegrationTestCallControl0057"); + } + + + +CCTSYIntegrationTestCallControl0058::CCTSYIntegrationTestCallControl0058(CEtelSessionMgr& aEtelSessionMgr) + : CCTSYIntegrationTestCallControlBase(aEtelSessionMgr) +/** + * Constructor. + */ + { + SetTestStepName(CCTSYIntegrationTestCallControl0058::GetTestStepName()); + } + +CCTSYIntegrationTestCallControl0058::~CCTSYIntegrationTestCallControl0058() +/** + * Destructor. + */ + { + } + +TVerdict CCTSYIntegrationTestCallControl0058::doTestStepL() +/** + * @SYMTestCaseID BA-CTSY-INT-CCON-0058 + * @SYMFssID BA/CTSY/CCON-0058 + * @SYMTestCaseDesc Remove SIM and replace with another SIM. + * @SYMTestPriority High + * @SYMTestActions RMobilePhone::GetNetworkRegistrationStatus, RCall::Dial, RCall::HangUp, RLine::NotifyStatusChange, RLine::GetStatus, RMobileLine::NotifyMobileLineStatusChange, RMobileLine::GetMobileLineStatus, RCall::NotifyStatusChange, RCall::GetStatus, RMobileCall::NotifyMobileCallStatusChange, RMobileCall::GetMobileCallStatus + * @SYMTestExpectedResults Pass - Phone uses new SIM when SIM replaced. + * @SYMTestType CIT + * @SYMTestCaseDependencies live/manual + * + * Reason for test: Verify remote party receives call from new SIM phone number. + * + * @return - TVerdict code + */ + { + + //////////////////////////////////////////////////////////////// + // SET UP + //////////////////////////////////////////////////////////////// + + // Ensure phone is camped on network. + // Call TNetworkTsyTestHelper::WaitForRegisteredOnHomeNetworkL + RMobilePhone& phone = iEtelSessionMgr.GetPhoneL(KMainServer,KMainPhone); + CHECK_EQUALS_L(iNetworkTestHelper.WaitForRegisteredOnHomeNetworkL(phone), KErrNone, + _L("TNetworkTsyTestHelper::WaitForRegisteredOnHomeNetworkL returned with an error")); + + //////////////////////////////////////////////////////////////// + // SET UP END + //////////////////////////////////////////////////////////////// + + StartTest(); + + //////////////////////////////////////////////////////////////// + // TEST START + //////////////////////////////////////////////////////////////// + + + // Remove SIM. + + // Replace with another SIM. + + // Reinitialise the TSY? + + // Check RMobilePhone::GetNetworkRegistrationStatus returns one of ERegisteredOnHomeNetwork + + // Get call 1. + + // Get voice line 1. + + // Dial outgoing call to RPS which answers. + + // === Check call status === + + // Check RCall::NotifyStatusChange completes with EStatusDialling -> EStatusConnecting -> EStatusConnected. + + // Check RCall::GetStatus returns EStatusConnected. + + // Check RMobileCall::NotifyMobileCallStatusChange completes with EStatusDialling -> EStatusConnecting -> EStatusConnected. + + // Check RMobileCall::GetMobileCallStatus returns status of EStatusConnected. + + // === Check line status === + + // Check RLine::NotifyStatusChange completes with EStatusDialling -> EStatusConnecting -> EStatusConnected. + + // Check RLine::GetStatus returns EStatusConnected + + // Check RMobileLine::NotifyMobileLineStatusChange completes with with EStatusDialling -> EStatusConnecting -> EStatusConnected. + + // Check RMobileLine::GetMobileLineStatus returns EStatusConnected + + // RPS returns MO number as being from the new SIM. + + // Hang up. + + // === Check call status === + + // Check RCall::NotifyStatusChange completes with EStatusHangingUp -> EStatusIdle. + + // Check RCall::GetStatus returns EStatusIdle. + + // Check RMobileCall::NotifyMobileCallStatusChange completes with EStatusDisconnecting -> EStatusIdle. + + // Check RMobileCall::GetMobileCallStatus returns status of EStatusIdle. + + // === Check line status === + + // Check RMobileLine::NotifyStatusChange completes with EStatusHangingUp -> EStatusIdle + + // Check RMobileLine::GetStatus returns EStatusIdle + + // Check RMobileLine::NotifyMobileLineStatusChange completes with with EStatusDisconnecting -> EStatusIdle + + // Check RMobileLine::GetMobileLineStatus returns EStatusIdle + + // RPS dials old SIM number. + + // Verify phone does not respond. + + + //////////////////////////////////////////////////////////////// + // TEST END + //////////////////////////////////////////////////////////////// + + StartCleanup(); + + // Put any required test clean up here, then remove this comment + + return TestStepResult(); + } + +TPtrC CCTSYIntegrationTestCallControl0058::GetTestStepName() +/** + * @return The test step name. + */ + { + return _L("CCTSYIntegrationTestCallControl0058"); + } + +CCTSYIntegrationTestCallControl0059::CCTSYIntegrationTestCallControl0059(CEtelSessionMgr& aEtelSessionMgr) + : CCTSYIntegrationTestCallControlBase(aEtelSessionMgr) +/** + * Constructor. + */ + { + SetTestStepName(CCTSYIntegrationTestCallControl0059::GetTestStepName()); + } + +CCTSYIntegrationTestCallControl0059::~CCTSYIntegrationTestCallControl0059() +/** + * Destructor. + */ + { + } + +TVerdict CCTSYIntegrationTestCallControl0059::doTestStepL() +/** + * @SYMTestCaseID BA-CTSY-INT-CCON-0059 + * @SYMFssID BA/CTSY/CCON-0059 + * @SYMTestCaseDesc Update life time parameter with call duration + * @SYMTestPriority High + * @SYMTestActions + * @SYMTestExpectedResults Pass - Life time param updated after call executed + * @SYMTestType CIT + * @SYMTestCaseDependencies live/automatic + * + * Reason for test + * + * @return - TVerdict code + */ + { + + //////////////////////////////////////////////////////////////// + // SET UP + //////////////////////////////////////////////////////////////// + + // Check phone supports KCapsVoice + // Get Voice line 1 + RMobileLine& voiceLine = iEtelSessionMgr.GetLineL(KMainServer, KMainPhone, KVoiceLine); + // Get call 1 + RMobileCall& call1 = iEtelSessionMgr.GetCallL(KMainServer, KMainPhone, KVoiceLine, KCall1); + + RLine::TCaps lineCaps; + CHECK_TRUE_L(voiceLine.GetCaps(lineCaps) == KErrNone, + _L("RMobileLine::GetCaps returned an error")); + CHECK_BITS_SET_L(lineCaps.iFlags, RLine::KCapsVoice, KNoUnwantedBits, + _L("RLine::GetCaps returned wrong caps")); + + // Ensure phone is camped on network. + // Call TNetworkTsyTestHelper::WaitForRegisteredOnHomeNetworkL + RMobilePhone& phone = iEtelSessionMgr.GetPhoneL(KMainServer,KMainPhone); + CHECK_EQUALS_L(iNetworkTestHelper.WaitForRegisteredOnHomeNetworkL(phone), KErrNone, + _L("TNetworkTsyTestHelper::WaitForRegisteredOnHomeNetworkL returned with an error")); + RMmCustomAPI& customApi = iEtelSessionMgr.GetCustomApiL(KMainServer, KMainPhone, KMainCustomApi); + + //////////////////////////////////////////////////////////////// + // SET UP END + //////////////////////////////////////////////////////////////// + + StartTest(); + + //////////////////////////////////////////////////////////////// + // TEST START + //////////////////////////////////////////////////////////////// + + // calling RMmCustomAPI::GetLifeTime() to retrieve current LTSY value for life time param before the call: + TExtEtelRequestStatus getLifeTimeStatus(customApi, ECustomGetLifeTimeIPC); + CleanupStack::PushL(getLifeTimeStatus); + RMmCustomAPI::TLifeTimeData ltData; + TPckg ltPckg(ltData); + customApi.GetLifeTime(getLifeTimeStatus, ltPckg); + ASSERT_EQUALS(WaitForRequestWithTimeOut(getLifeTimeStatus, ETimeLong), KErrNone, _L("RMmCustomAPI::GetLifeTime timed out")); + ASSERT_EQUALS(getLifeTimeStatus.Int(), KErrNone, _L("RMmCustomAPI::GetLifeTime returned an error")); + DEBUG_PRINTF3(_L("Life Time param before the call: hours=%d, min=%d"), ltData.iHours, ltData.iMinutes); + + + // post a notifier for RMobileCall::NotifyMobileCallStatusChange + TExtEtelRequestStatus notifyMobileCallChangeStatus(call1, EMobileCallNotifyMobileCallStatusChange); + CleanupStack::PushL(notifyMobileCallChangeStatus); + RMobileCall::TMobileCallStatus mobileCallStatus; + call1.NotifyMobileCallStatusChange(notifyMobileCallChangeStatus, mobileCallStatus); + + // Dial RPS which answers + TPtrC number; + GetRPSNumber(EVoiceLine,number); + RPSAnswerNextCallL(EVoiceLine); + + TCoreEtelRequestStatus dialStatus(call1, &RCall::DialCancel); + CleanupStack::PushL(dialStatus); + call1.Dial(dialStatus, number); + ASSERT_EQUALS(WaitForRequestWithTimeOut(dialStatus, ETimeMedium), KErrNone, + _L("RCall::Dial timed-out")); + ASSERT_EQUALS(dialStatus.Int(), KErrNone, + _L("RCall::Dial Expected KErrNone, but an error returned")); + + // === Check call status === + + const TInt wantedStatus = KErrNone; + + // Check RMobileCall::NotifyMobileCallStatusChange completes with EStatusDialling -> EStatusConnecting -> EStatusConnected. + RMobileCall::TMobileCallStatus expectedMobileCallStatus = RMobileCall::EStatusDialling; + iCallControlTestHelper.WaitForMobileCallNotifyMobileCallStatusChange(call1, + notifyMobileCallChangeStatus, + mobileCallStatus, + expectedMobileCallStatus, + wantedStatus); + + call1.NotifyMobileCallStatusChange(notifyMobileCallChangeStatus, mobileCallStatus); + expectedMobileCallStatus = RMobileCall::EStatusConnecting; + iCallControlTestHelper.WaitForMobileCallNotifyMobileCallStatusChange(call1, + notifyMobileCallChangeStatus, + mobileCallStatus, + expectedMobileCallStatus, + wantedStatus); + + call1.NotifyMobileCallStatusChange(notifyMobileCallChangeStatus, mobileCallStatus); + expectedMobileCallStatus = RMobileCall::EStatusConnected; + iCallControlTestHelper.WaitForMobileCallNotifyMobileCallStatusChange(call1, + notifyMobileCallChangeStatus, + mobileCallStatus, + expectedMobileCallStatus, + wantedStatus); + + // Check RMobileCall::GetMobileCallStatus returns status of EStatusConnected. + ASSERT_EQUALS(call1.GetMobileCallStatus(mobileCallStatus), KErrNone, + _L("RMobileCall::GetMobileStatus returned an error")); + ASSERT_EQUALS(mobileCallStatus, RMobileCall::EStatusConnected, + _L("RMobileCall::GetMobileStatus did not return a status EStatusConnected")); + + User::After(180000000); // Wait added for call duration of 3min + + //==== Post Notifiers ======== + call1.NotifyMobileCallStatusChange(notifyMobileCallChangeStatus, mobileCallStatus); + + // RPS hangs up. + ASSERT_EQUALS(RPSHangupL(EVoiceLine,0), KErrNone, _L("CCTSYIntegrationTestSuiteStepBase::RPSHangup returned an error")); + + // Check RMobileCall::NotifyMobileCallStatusChange completes with EStatusDisconnecting -> EStatusIdle. + expectedMobileCallStatus = RMobileCall::EStatusDisconnecting; + iCallControlTestHelper.WaitForMobileCallNotifyMobileCallStatusChange(call1, + notifyMobileCallChangeStatus, + mobileCallStatus, + expectedMobileCallStatus, + wantedStatus); + + call1.NotifyMobileCallStatusChange(notifyMobileCallChangeStatus, mobileCallStatus); + expectedMobileCallStatus = RMobileCall::EStatusIdle; + iCallControlTestHelper.WaitForMobileCallNotifyMobileCallStatusChange(call1, + notifyMobileCallChangeStatus, + mobileCallStatus, + expectedMobileCallStatus, + wantedStatus); + + // Check RMobileCall::GetMobileCallStatus returns status of EStatusIdle. + ASSERT_EQUALS(call1.GetMobileCallStatus(mobileCallStatus), KErrNone, + _L("RMobileCall::GetMobileStatus returned an error")); + ASSERT_EQUALS(mobileCallStatus, RMobileCall::EStatusIdle, + _L("RMobileCall::GetMobileStatus did not return a status EStatusIdle")); + + // calling RMmCustomAPI::GetLifeTime() to retrieve current LTSY value for life time param after the call: + customApi.GetLifeTime(getLifeTimeStatus, ltPckg); + ASSERT_EQUALS(WaitForRequestWithTimeOut(getLifeTimeStatus, ETimeLong), KErrNone, _L("RMmCustomAPI::GetLifeTime timed out")); + ASSERT_EQUALS(getLifeTimeStatus.Int(), KErrNone, _L("RMmCustomAPI::GetLifeTime returned an error")); + DEBUG_PRINTF3(_L("Life Time param after the call: hours=%d, min=%d"), ltData.iHours, ltData.iMinutes); + + //////////////////////////////////////////////////////////////// + // TEST END + //////////////////////////////////////////////////////////////// + + StartCleanup(); + + // Put any required test clean up here, then remove this comment + + CleanupStack::PopAndDestroy(3,&getLifeTimeStatus); + + return TestStepResult(); + } + +TPtrC CCTSYIntegrationTestCallControl0059::GetTestStepName() +/** + * @return The test step name. + */ + { + return _L("CCTSYIntegrationTestCallControl0059"); + } + + + +CCTSYIntegrationTestCallControl0060::CCTSYIntegrationTestCallControl0060(CEtelSessionMgr& aEtelSessionMgr) + : CCTSYIntegrationTestCallControlBase(aEtelSessionMgr) +/** + * Constructor. + */ + { + SetTestStepName(CCTSYIntegrationTestCallControl0060::GetTestStepName()); + } + +CCTSYIntegrationTestCallControl0060::~CCTSYIntegrationTestCallControl0060() +/** + * Destructor. + */ + { + } + +TVerdict CCTSYIntegrationTestCallControl0060::doTestStepL() +/** + * @SYMTestCaseID BA-CTSY-INT-CCON-0060 + * @SYMFssID BA/CTSY/CCON-0060 + * @SYMTestCaseDesc Update life time parameter with call duration + * @SYMTestPriority High + * @SYMTestActions + * @SYMTestExpectedResults Pass - Life time param updated after call executed + * @SYMTestType CIT + * @SYMTestCaseDependencies live/automatic + * + * Reason for test + * + * @return - TVerdict code + */ + { + //////////////////////////////////////////////////////////////// + // SET UP + //////////////////////////////////////////////////////////////// + RMobilePhone& phone = iEtelSessionMgr.GetPhoneL(KMainServer,KMainPhone); + + // Get Voice line 1 + RMobileLine& voiceLine = iEtelSessionMgr.GetLineL(KMainServer, KMainPhone, KVoiceLine); + + // Get call 1 + RMobileCall& call1 = iEtelSessionMgr.GetCallL(KMainServer, KMainPhone, KVoiceLine, KCall1); + + // Check phone supports KCapsVoice + RLine::TCaps lineCaps; + CHECK_EQUALS_L(voiceLine.GetCaps(lineCaps), KErrNone, + _L("RMobileLine::GetCaps returned an error")); + CHECK_BITS_SET_L(lineCaps.iFlags, RLine::KCapsVoice, KNoUnwantedBits, + _L("RLine::GetCaps returned wrong caps")); + + // Call TNetworkTsyTestHelper::WaitForRegisteredOnHomeNetworkL + CHECK_EQUALS_L(iNetworkTestHelper.WaitForRegisteredOnHomeNetworkL(phone), KErrNone, _L("TNetworkTsyTestHelper::WaitForRegisteredOnHomeNetworkL returned with an error")); + RMmCustomAPI& customApi = iEtelSessionMgr.GetCustomApiL(KMainServer, KMainPhone, KMainCustomApi); + + //////////////////////////////////////////////////////////////// + // SET UP END + //////////////////////////////////////////////////////////////// + + StartTest(); + + //////////////////////////////////////////////////////////////// + // TEST START + //////////////////////////////////////////////////////////////// + + // calling RMmCustomAPI::GetLifeTime() to retrieve current LTSY value for life time param before the call: + TExtEtelRequestStatus getLifeTimeStatus(customApi, ECustomGetLifeTimeIPC); + CleanupStack::PushL(getLifeTimeStatus); + + RMmCustomAPI::TLifeTimeData lifeTimeData; + lifeTimeData.iHours = 0; + lifeTimeData.iMinutes = 0; + TPckg lifeTimePckg(lifeTimeData); + + customApi.GetLifeTime(getLifeTimeStatus, lifeTimePckg); + ASSERT_EQUALS(WaitForRequestWithTimeOut(getLifeTimeStatus, ETimeLong), KErrNone, _L("RMmCustomAPI::GetLifeTime timed out")); + ASSERT_EQUALS(getLifeTimeStatus.Int(), KErrNone, _L("RMmCustomAPI::GetLifeTime returned an error")); + DEBUG_PRINTF3(_L("Life Time param before the call: hours=%d, min=%d"), lifeTimeData.iHours, lifeTimeData.iMinutes); + + TUint32 lifTimeInMintues = lifeTimeData.iHours * 60 + lifeTimeData.iMinutes; + + // Check RPhone::GetLineInfo returns iStatus of EStatusIdle + RPhone::TLineInfo lineInfo; + TInt lineIndex=0; + ASSERT_EQUALS(phone.GetLineInfo(lineIndex, lineInfo), KErrNone, + _L("RPhone::GetLineInfo returned an error")); + ASSERT_EQUALS(lineInfo.iStatus, RCall::EStatusIdle, + _L("RPhone::GetLineInfo wrong iStatus, should be EStatusIdle")); + + // Check RPhone::GetLineInfo returns iLineCapsFlags of KCapsVoice + ASSERT_BITS_SET(lineInfo.iLineCapsFlags, RLine::KCapsVoice, KNoUnwantedBits, + _L("RPhone::GetLineInfo returned wrong caps")); + + // Check RPhone::GetLineInfo returns a valid line name + ASSERT_TRUE(lineInfo.iName.Length() >0, + _L("RPhone::GetLineInfo wrong call name")); + + // Get the voice number that answers. + TPtrC number; + ASSERT_TRUE(GetStringFromConfig(KIniVoiceNumSection, KIniVoiceNumber1, number) != EFalse, + _L("CTestStep::GetStringFromConfig did not complete as expected")); + + TCoreEtelRequestStatus dialStatus(call1, &RCall::DialCancel); + CleanupStack::PushL(dialStatus); + + // make 3 calls 70 seconds each and check if Life Timer is increased by at least a minute each time + TInt callCount = 3; + + for (TInt i = 0; i < callCount; i++) + { + call1.Dial(dialStatus, number); + ASSERT_EQUALS(WaitForRequestWithTimeOut(dialStatus, ETimeMedium), KErrNone, + _L("RCall::Dial timed-out")); + ASSERT_EQUALS(dialStatus.Int(), KErrNone, + _L("RCall::Dial returned with an error")); + + // Check RPhone::GetLineInfo returns iStatus of EStatusConnected + ASSERT_EQUALS(phone.GetLineInfo(lineIndex, lineInfo), KErrNone, + _L("RPhone::GetLineInfo returned an error")); + ASSERT_EQUALS(lineInfo.iStatus, RCall::EStatusConnected, + _L("RPhone::GetLineInfo wrong iStatus, should be EStatusConnected")); + + // Check RPhone::GetLineInfo returns a valid line name + ASSERT_TRUE(lineInfo.iName.Length() >0, + _L("RPhone::GetLineInfo wrong call name")); + + User::After(70*KOneSecond); // Wait added for call duration of just over a minute + + // hang up the active call + TCoreEtelRequestStatus hangUpStatus (call1,&RCall::HangUpCancel); + CleanupStack::PushL(hangUpStatus); + call1.HangUp(hangUpStatus); + WaitForRequestWithTimeOut(hangUpStatus, ETimeMedium); + + // calling RMmCustomAPI::GetLifeTime() to retrieve current LTSY value for life time param after the call: + customApi.GetLifeTime(getLifeTimeStatus, lifeTimePckg); + + ASSERT_EQUALS(WaitForRequestWithTimeOut(getLifeTimeStatus, ETimeLong), KErrNone, _L("RMmCustomAPI::GetLifeTime timed out")); + ASSERT_EQUALS(getLifeTimeStatus.Int(), KErrNone, _L("RMmCustomAPI::GetLifeTime returned an error")); + DEBUG_PRINTF3(_L("Life Time param after the call: hours=%d, min=%d"), lifeTimeData.iHours, lifeTimeData.iMinutes); + + lifTimeInMintues++; + ASSERT_TRUE( lifTimeInMintues <= (lifeTimeData.iHours * 60 + lifeTimeData.iMinutes), _L("Life Time was not updated properly") ); + } + + //////////////////////////////////////////////////////////////// + // TEST END + //////////////////////////////////////////////////////////////// + + StartCleanup(); + CleanupStack::PopAndDestroy(5,&getLifeTimeStatus); + return TestStepResult(); + } + +TPtrC CCTSYIntegrationTestCallControl0060::GetTestStepName() +/** + * @return The test step name. + */ + { + return _L("CCTSYIntegrationTestCallControl0060"); + }