--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/telephonyserverplugins/ctsydispatchlayer/test/dispatchertests/dispatchsrc/cctsycallcontrolmultipartyfunegative.cpp Tue Feb 02 01:41:59 2010 +0200
@@ -0,0 +1,650 @@
+// Copyright (c) 2008-2009 Nokia Corporation and/or its subsidiary(-ies).
+// All rights reserved.
+// This component and the accompanying materials are made available
+// under the terms of "Eclipse Public License v1.0"
+// which accompanies this distribution, and is available
+// at the URL "http://www.eclipse.org/legal/epl-v10.html".
+//
+// Initial Contributors:
+// Nokia Corporation - initial contribution.
+//
+// Contributors:
+//
+// Description:
+// when support for the various APIs are disabled in the dispatch layer.
+//
+
+
+
+/**
+ @file The TEFUnit test suite for SmsControl in the Common TSY
+*/
+
+#include "cctsycallcontrolmultipartyfunegative.h"
+
+#include <etelmm.h>
+#include <ctsy/ltsy/mltsydispatchcallcontrolmultipartyinterface.h>
+
+#include <etel.h>
+#include <et_clsvr.h>
+#include <ctsy/mmtsy_names.h>
+#include <ctsy/serviceapi/mmtsy_ipcdefs.h>
+#include <ctsy/serviceapi/gsmerror.h>
+#include <ctsy/ltsy/mltsydispatchcallcontrolinterface.h>
+
+#include <test/tmockltsydata.h>
+#include "mockltsyindicatorids.h"
+
+#include "config.h"
+
+
+CTestSuite* CCTsyCallControlMultipartyFUNegative::CreateSuiteL(const TDesC& aName)
+ {
+ SUB_SUITE;
+ ADD_TEST_STEP_ISO_CPP(CCTsyCallControlMultipartyFUNegative, TestHangUpL);
+ ADD_TEST_STEP_ISO_CPP(CCTsyCallControlMultipartyFUNegative, TestAddCallL);
+ ADD_TEST_STEP_ISO_CPP(CCTsyCallControlMultipartyFUNegative, TestCreateConferenceL);
+ ADD_TEST_STEP_ISO_CPP(CCTsyCallControlMultipartyFUNegative, TestSwapL);
+ ADD_TEST_STEP_ISO_CPP(CCTsyCallControlMultipartyFUNegative, TestGoOneToOneL);
+ END_SUITE;
+ }
+
+/**
+ * @SYMTestCaseID BA-CTSYD-DIS-CALLCONTROLMULTIPARTY-NEGATIVE-UN0001
+ * @SYMComponent telephony_ctsy
+ * @SYMTestCaseDesc Test handing in CTSY dispatch when the Hangup API is disabled
+ * @SYMTestPriority High
+ * @SYMTestActions Disable API, call API, check correct error returned
+ * @SYMTestExpectedResults Pass
+ * @SYMTestType CT
+ */
+void CCTsyCallControlMultipartyFUNegative::TestHangUpL()
+ {
+ // Note: based on original non-negative test void CCTsyCallControlMultipartyFU::TestUseCase0003L()
+
+ TConfig config;
+ config.SetSupportedValue(MLtsyDispatchCallControlMultipartyConferenceHangUp::KLtsyDispatchCallControlMultipartyConferenceHangUpApiId, EFalse);
+ config.PushL();
+
+ OpenEtelServerL(EUseExtendedError);
+ CleanupStack::PushL(TCleanupItem(Cleanup, this));
+ OpenPhoneL();
+
+ RBuf8 data;
+ CleanupClosePushL(data);
+
+ TInt callId1 = 1;
+ TInt callId2 = 2;
+ RMobilePhone::TMobileService mobileService = RMobilePhone::EVoiceService;
+ DriverCreateConferenceCallL(mobileService, callId1, callId2);
+
+ DriverHangUpCallL(callId1, KErrGsmCCNormalCallClearing, EFalse);
+ DriverHangUpCallL(callId2, KErrGsmCCNormalCallClearing);
+
+ // Client side test
+
+ RMobileLine mobileLine;
+ CleanupClosePushL(mobileLine);
+ RMobileCall mobileCall;
+ CleanupClosePushL(mobileCall);
+
+ RMobileLine mobileLine2;
+ CleanupClosePushL(mobileLine2);
+ RMobileCall mobileCall2;
+ CleanupClosePushL(mobileCall2);
+
+ ClientDialAndHoldFirstCallDialSecondCallL(mobileService, mobileCall, mobileLine,
+ mobileCall2, mobileLine2);
+
+ RMobileConferenceCall confCall;
+ CleanupClosePushL(confCall);
+
+ TRequestStatus notifyCall1Status;
+ RMobileCall::TMobileCallStatus call1Status;
+ mobileCall.NotifyMobileCallStatusChange(notifyCall1Status, call1Status);
+
+ ClientCreateConferenceCallL(confCall);
+
+ User::WaitForRequest(notifyCall1Status);
+ ASSERT_EQUALS(KErrNone, notifyCall1Status.Int());
+ ASSERT_EQUALS(RMobileCall::EStatusConnected, call1Status);
+
+ TRequestStatus hangupStatus;
+ confCall.HangUp(hangupStatus);
+ User::WaitForRequest(hangupStatus);
+ ASSERT_EQUALS(KErrNotSupported, hangupStatus.Int());
+
+ // Boths calls should still be connected
+ RMobileCall::TMobileCallStatus callStatus;
+ ASSERT_EQUALS(KErrNone, mobileCall.GetMobileCallStatus(callStatus));
+ ASSERT_EQUALS(RMobileCall::EStatusConnected, callStatus);
+ ASSERT_EQUALS(KErrNone, mobileCall2.GetMobileCallStatus(callStatus));
+ ASSERT_EQUALS(RMobileCall::EStatusConnected, callStatus);
+
+ // Hang up the calls
+ ClientHangUpCallL(mobileCall);
+ ClientHangUpCallL(mobileCall2);
+
+ User::After(100000); // Allow the lifetimer to be updated before ending the test
+
+ mobileCall.Close();
+ mobileCall2.Close();
+
+ AssertMockLtsyStatusL();
+ CleanupStack::PopAndDestroy(8, &config); // confCall, this, config
+ }
+
+
+/**
+ * @SYMTestCaseID BA-CTSYD-DIS-CALLCONTROLMULTIPARTY-NEGATIVE-UN0002
+ * @SYMComponent telephony_ctsy
+ * @SYMTestCaseDesc Test handing in CTSY dispatch when the AddCall API is disabled
+ * @SYMTestPriority High
+ * @SYMTestActions Disable API, call API, check correct error returned
+ * @SYMTestExpectedResults Pass
+ * @SYMTestType CT
+ */
+void CCTsyCallControlMultipartyFUNegative::TestAddCallL()
+ {
+ // Note: based on non-negative test CCTsyCallControlMultipartyFU::TestUseCase0007L()
+
+ TConfig config;
+ config.SetSupportedValue(MLtsyDispatchCallControlMultipartyConferenceAddCall::KLtsyDispatchCallControlMultipartyConferenceAddCallApiId, EFalse);
+ config.PushL();
+
+ OpenEtelServerL(EUseExtendedError);
+ CleanupStack::PushL(TCleanupItem(Cleanup, this));
+ OpenPhoneL();
+
+ TInt callId1 = 1;
+ TInt callId2 = 2;
+ RMobilePhone::TMobileService mobileService = RMobilePhone::EVoiceService;
+ DriverCreateConferenceCallAndHoldItL(mobileService, callId1, callId2);
+
+ TInt callId3 = 3;
+ DriverDialCallL(callId3, mobileService);
+
+ DriverHangUpCallL(callId1, KErrGsmCCNormalCallClearing, EFalse);
+ DriverHangUpCallL(callId2, KErrGsmCCNormalCallClearing, EFalse);
+ DriverHangUpCallL(callId3, KErrGsmCCNormalCallClearing);
+
+ // Client side test
+
+ RMobileLine mobileLine;
+ CleanupClosePushL(mobileLine);
+ RMobileCall mobileCall;
+ CleanupClosePushL(mobileCall);
+
+ RMobileLine mobileLine2;
+ CleanupClosePushL(mobileLine2);
+ RMobileCall mobileCall2;
+ CleanupClosePushL(mobileCall2);
+
+ ClientDialAndHoldFirstCallDialSecondCallL(mobileService, mobileCall, mobileLine,
+ mobileCall2, mobileLine2);
+
+ RMobileConferenceCall confCall;
+ CleanupClosePushL(confCall);
+
+ TRequestStatus notifyCall1Status;
+ RMobileCall::TMobileCallStatus call1Status;
+ mobileCall.NotifyMobileCallStatusChange(notifyCall1Status, call1Status);
+
+ ClientCreateConferenceCallL(confCall);
+
+ User::WaitForRequest(notifyCall1Status);
+ ASSERT_EQUALS(KErrNone, notifyCall1Status.Int());
+ ASSERT_EQUALS(RMobileCall::EStatusConnected, call1Status);
+
+ mobileCall.NotifyMobileCallStatusChange(notifyCall1Status, call1Status);
+
+ TRequestStatus notifyCall2Status;
+ RMobileCall::TMobileCallStatus call2Status;
+ mobileCall2.NotifyMobileCallStatusChange(notifyCall2Status, call2Status);
+
+ ClientSwapConferenceCallL(confCall, RMobileConferenceCall::EConferenceSwapped,
+ RMobileConferenceCall::EConferenceHold);
+
+ User::WaitForRequest(notifyCall1Status);
+ ASSERT_EQUALS(KErrNone, notifyCall1Status.Int());
+ ASSERT_EQUALS(RMobileCall::EStatusHold, call1Status);
+
+ User::WaitForRequest(notifyCall2Status);
+ ASSERT_EQUALS(KErrNone, notifyCall2Status.Int());
+ ASSERT_EQUALS(RMobileCall::EStatusHold, call2Status);
+
+ // Dial a new call and attempt to add it to the conference
+ RMobileLine mobileLine3;
+ CleanupClosePushL(mobileLine3);
+ RMobileCall mobileCall3;
+ CleanupClosePushL(mobileCall3);
+
+ ClientDialCallL(mobileLine3, mobileCall3, mobileService);
+
+ RMobileCall::TMobileCallInfoV1 callInfo;
+ RMobileCall::TMobileCallInfoV1Pckg callInfoPckg(callInfo);
+ ASSERT_EQUALS(KErrNone, mobileCall3.GetMobileCallInfo(callInfoPckg));
+
+ TRequestStatus status;
+ confCall.AddCall(status, callInfo.iCallName);
+ User::WaitForRequest(status);
+ ASSERT_EQUALS(status.Int(), KErrNotSupported);
+
+ // Hang up the calls
+ ClientHangUpCallL(mobileCall);
+ ClientHangUpCallL(mobileCall2);
+ ClientHangUpCallL(mobileCall3);
+
+ User::After(100000); // Allow the lifetimer to be updated before ending the test
+
+ mobileCall.Close();
+ mobileCall2.Close();
+ mobileCall3.Close();
+
+ AssertMockLtsyStatusL();
+ CleanupStack::PopAndDestroy(9, &config);
+ }
+
+
+
+/**
+ * @SYMTestCaseID BA-CTSYD-DIS-CALLCONTROLMULTIPARTY-NEGATIVE-UN0003
+ * @SYMComponent telephony_ctsy
+ * @SYMTestCaseDesc Test handing in CTSY dispatch when the CreateConference API is disabled
+ * @SYMTestPriority High
+ * @SYMTestActions Disable API, call API, check correct error returned
+ * @SYMTestExpectedResults Pass
+ * @SYMTestType CT
+ */
+void CCTsyCallControlMultipartyFUNegative::TestCreateConferenceL()
+ {
+ TConfig config;
+ config.SetSupportedValue(MLtsyDispatchCallControlMultipartyCreateConference::KLtsyDispatchCallControlMultipartyCreateConferenceApiId, EFalse);
+ config.PushL();
+
+ OpenEtelServerL(EUseExtendedError);
+ CleanupStack::PushL(TCleanupItem(Cleanup,this));
+ OpenPhoneL();
+
+ RBuf8 data;
+ CleanupClosePushL(data);
+
+ // Set up correct conditions to be able to create a conference
+ TInt callId1 = 1;
+ TInt callId2 = 2;
+ RMobilePhone::TMobileService mobileService = RMobilePhone::EVoiceService;
+ DriverDialAndHoldFirstCallDialSecondCallL(mobileService, callId1, callId2);
+
+ RMobileLine mobileLine;
+ CleanupClosePushL(mobileLine);
+ RMobileCall mobileCall;
+ CleanupClosePushL(mobileCall);
+
+ RMobileLine mobileLine2;
+ CleanupClosePushL(mobileLine2);
+ RMobileCall mobileCall2;
+ CleanupClosePushL(mobileCall2);
+
+ ClientDialAndHoldFirstCallDialSecondCallL(mobileService, mobileCall, mobileLine,
+ mobileCall2, mobileLine2);
+
+ RMobileConferenceCall confCall;
+ CleanupClosePushL(confCall);
+ ASSERT_EQUALS(KErrNone, confCall.Open(iPhone));
+
+ // Hang up cause for normal hang up
+ DriverHangUpCallL(callId1, KErrGsmCCNormalCallClearing, EFalse);
+ DriverHangUpCallL(callId2, KErrGsmCCNormalCallClearing);
+
+ TRequestStatus status;
+ confCall.CreateConference(status);
+ User::WaitForRequest(status);
+ ASSERT_EQUALS(status.Int(), KErrNotSupported);
+
+ // Hang up the calls
+ ClientHangUpCallL(mobileCall);
+ ClientHangUpCallL(mobileCall2);
+
+ User::After(100000); // Allow the lifetimer to be updated before ending the test
+
+ mobileCall.Close();
+ mobileCall2.Close();
+
+ AssertMockLtsyStatusL();
+ CleanupStack::PopAndDestroy(8, &config);
+ }
+
+
+
+/**
+ * @SYMTestCaseID BA-CTSYD-DIS-CALLCONTROLMULTIPARTY-NEGATIVE-UN0004
+ * @SYMComponent telephony_ctsy
+ * @SYMTestCaseDesc Test handing in CTSY dispatch when the Swap API is disabled
+ * @SYMTestPriority High
+ * @SYMTestActions Disable API, call API, check correct error returned
+ * @SYMTestExpectedResults Pass
+ * @SYMTestType CT
+ */
+void CCTsyCallControlMultipartyFUNegative::TestSwapL()
+ {
+ // Note: Equiv non-negative test is CCTsyCallControlMultipartyFU::TestUseCase0006L
+
+ TConfig config;
+ config.SetSupportedValue(MLtsyDispatchCallControlMultipartyConferenceSwap::KLtsyDispatchCallControlMultipartyConferenceSwapApiId, EFalse);
+ config.PushL();
+
+ OpenEtelServerL(EUseExtendedError);
+ CleanupStack::PushL(TCleanupItem(Cleanup, this));
+ OpenPhoneL();
+
+ RBuf8 data;
+ CleanupClosePushL(data);
+
+ TInt callId1 = 1;
+ TInt callId2 = 2;
+ RMobilePhone::TMobileService mobileService = RMobilePhone::EVoiceService;
+ DriverCreateConferenceCallAndHoldItL(mobileService, callId1, callId2);
+
+ TInt callId3 = 3;
+ DriverDialCallL(callId3, mobileService);
+
+ DriverHangUpCallL(callId1, KErrGsmCCNormalCallClearing, EFalse);
+ DriverHangUpCallL(callId2, KErrGsmCCNormalCallClearing, EFalse);
+ DriverHangUpCallL(callId3, KErrGsmCCNormalCallClearing);
+
+ // Client side test
+
+ RMobileLine mobileLine;
+ CleanupClosePushL(mobileLine);
+ RMobileCall mobileCall;
+ CleanupClosePushL(mobileCall);
+
+ RMobileLine mobileLine2;
+ CleanupClosePushL(mobileLine2);
+ RMobileCall mobileCall2;
+ CleanupClosePushL(mobileCall2);
+
+ RMobileConferenceCall confCall;
+ CleanupClosePushL(confCall);
+
+ ClientCreateConferenceCallAndHoldItL(mobileService, mobileCall,
+ mobileLine, mobileCall2, mobileLine2, confCall);
+
+ TRequestStatus notifyCall1Status;
+ RMobileCall::TMobileCallStatus call1Status;
+ mobileCall.NotifyMobileCallStatusChange(notifyCall1Status, call1Status);
+
+ TRequestStatus notifyCall2Status;
+ RMobileCall::TMobileCallStatus call2Status;
+ mobileCall2.NotifyMobileCallStatusChange(notifyCall2Status, call2Status);
+
+ // Dial a new call and attempt to swap the conference with it
+ RMobileLine mobileLine3;
+ CleanupClosePushL(mobileLine3);
+ RMobileCall mobileCall3;
+ CleanupClosePushL(mobileCall3);
+
+ ClientDialCallL(mobileLine3, mobileCall3, mobileService);
+
+ User::WaitForRequest(notifyCall1Status);
+ ASSERT_EQUALS(KErrNone, notifyCall1Status.Int());
+ ASSERT_EQUALS(RMobileCall::EStatusConnected, call1Status);
+
+ mobileCall.NotifyMobileCallStatusChange(notifyCall1Status, call1Status);
+
+ TRequestStatus swapStatus;
+ confCall.Swap(swapStatus);
+ User::WaitForRequest(swapStatus);
+ ASSERT_EQUALS(KErrNotSupported, swapStatus.Int());
+
+ User::WaitForRequest(notifyCall1Status);
+ ASSERT_EQUALS(KErrNone, notifyCall1Status.Int());
+ ASSERT_EQUALS(RMobileCall::EStatusHold, call1Status);
+
+ User::WaitForRequest(notifyCall2Status);
+ ASSERT_EQUALS(KErrNone, notifyCall2Status.Int());
+ ASSERT_EQUALS(RMobileCall::EStatusHold, call2Status);
+
+ RMobileConferenceCall::TMobileConferenceStatus confStatus;
+ ASSERT_EQUALS(KErrNone, confCall.GetConferenceStatus(confStatus));
+ ASSERT_EQUALS(RMobileConferenceCall::EConferenceHold, confStatus);
+
+ // Hang up the calls
+ ClientHangUpCallL(mobileCall);
+ ClientHangUpCallL(mobileCall2);
+ ClientHangUpCallL(mobileCall3);
+
+ User::After(100000); // Allow the lifetimer to be updated before ending the test
+
+ mobileCall.Close();
+ mobileCall2.Close();
+ mobileCall3.Close();
+
+ AssertMockLtsyStatusL();
+
+ CleanupStack::PopAndDestroy(10, &config);
+ }
+
+
+/**
+ * @SYMTestCaseID BA-CTSYD-DIS-CALLCONTROLMULTIPARTY-NEGATIVE-UN0005
+ * @SYMComponent telephony_ctsy
+ * @SYMTestCaseDesc Test handing in CTSY dispatch when the GoOneToOne API is disabled
+ * @SYMTestPriority High
+ * @SYMTestActions Disable API, call API, check correct error returned
+ * @SYMTestExpectedResults Pass
+ * @SYMTestType CT
+ */
+void CCTsyCallControlMultipartyFUNegative::TestGoOneToOneL()
+ {
+ // Note: Equiv non-negative test CCTsyCallControlMultipartyFU::TestUseCase0008L()
+
+ TConfig config;
+ config.SetSupportedValue(MLtsyDispatchCallControlMultipartyConferenceGoOneToOne::KLtsyDispatchCallControlMultipartyConferenceGoOneToOneApiId, EFalse);
+ config.PushL();
+
+ OpenEtelServerL(EUseExtendedError);
+ CleanupStack::PushL(TCleanupItem(Cleanup, this));
+ OpenPhoneL();
+
+ RBuf8 data;
+ CleanupClosePushL(data);
+
+ TInt callId1 = 1;
+ TInt callId2 = 2;
+ RMobilePhone::TMobileService mobileService = RMobilePhone::EVoiceService;
+ DriverCreateConferenceCallL(mobileService, callId1, callId2);
+
+ RArray<TInt> callIds;
+ CleanupClosePushL( callIds );
+ callIds.AppendL( callId1 );
+ callIds.AppendL( callId2 );
+
+ TMockLtsyData1<RArray<TInt> > ltsyData(callIds);
+ data.Close();
+ ltsyData.SerialiseL(data);
+
+ iMockLTSY.ExpectL(MLtsyDispatchCallControlMultipartyConferenceHangUp::KLtsyDispatchCallControlMultipartyConferenceHangUpApiId, data);
+ iMockLTSY.CompleteL(MLtsyDispatchCallControlMultipartyConferenceHangUp::KLtsyDispatchCallControlMultipartyConferenceHangUpApiId, KErrNone);
+
+ DriverCompleteSuccessfulHangUpNotificationsL(callId1, EFalse, KErrGsmCCNormalCallClearing, EFalse);
+ DriverCompleteSuccessfulHangUpNotificationsL(callId2, EFalse, KErrGsmCCNormalCallClearing, ETrue);
+
+ // Client Side Test
+
+ RMobileLine mobileLine;
+ CleanupClosePushL(mobileLine);
+ RMobileCall mobileCall;
+ CleanupClosePushL(mobileCall);
+
+ RMobileLine mobileLine2;
+ CleanupClosePushL(mobileLine2);
+ RMobileCall mobileCall2;
+ CleanupClosePushL(mobileCall2);
+
+ ClientDialAndHoldFirstCallDialSecondCallL(mobileService, mobileCall, mobileLine,
+ mobileCall2, mobileLine2);
+
+ RMobileConferenceCall confCall;
+ CleanupClosePushL(confCall);
+
+ TRequestStatus notifyCall1Status;
+ RMobileCall::TMobileCallStatus call1Status;
+ mobileCall.NotifyMobileCallStatusChange(notifyCall1Status, call1Status);
+
+ ClientCreateConferenceCallL(confCall);
+
+ User::WaitForRequest(notifyCall1Status);
+ ASSERT_EQUALS(KErrNone, notifyCall1Status.Int());
+ ASSERT_EQUALS(RMobileCall::EStatusConnected, call1Status);
+
+ TRequestStatus oneToOneStatus;
+ mobileCall2.GoOneToOne(oneToOneStatus);
+ User::WaitForRequest(oneToOneStatus);
+ ASSERT_EQUALS(KErrNotSupported, oneToOneStatus.Int());
+
+ TInt numCalls;
+ ASSERT_EQUALS(KErrNone, confCall.EnumerateCalls(numCalls));
+ ASSERT_EQUALS(2, numCalls);
+
+ TRequestStatus hangupStatus;
+ confCall.HangUp(hangupStatus);
+ User::WaitForRequest(hangupStatus);
+ ASSERT_EQUALS(KErrNone, hangupStatus.Int());
+
+ mobileCall.Close();
+ mobileCall2.Close();
+
+ AssertMockLtsyStatusL();
+ CleanupStack::PopAndDestroy(9, &config);
+ }
+
+
+//
+// Helper functions
+//
+
+void CCTsyCallControlMultipartyFUNegative::DriverCreateConferenceCallL(RMobilePhone::TMobileService aMobileService, TInt aCallId1, TInt aCallId2)
+ {
+ RBuf8 data;
+ CleanupClosePushL(data);
+
+ DriverDialAndHoldFirstCallDialSecondCallL(aMobileService, aCallId1, aCallId2);
+
+ TMockLtsyData2<TInt, TInt> createConfData(aCallId1, aCallId2);
+ createConfData.SerialiseL(data);
+ iMockLTSY.ExpectL(MLtsyDispatchCallControlMultipartyCreateConference::KLtsyDispatchCallControlMultipartyCreateConferenceApiId, data);
+
+ RMobileCall::TMobileCallStatus callStatus = RMobileCall::EStatusConnected;
+ TMockLtsyCallData1<RMobileCall::TMobileCallStatus> mockCallData(
+ aCallId1, RMobilePhone::EServiceUnspecified, callStatus);
+ data.Close();
+ mockCallData.SerialiseL(data);
+ iMockLTSY.CompleteL(KMockLtsyDispatchCallControlNotifyCallStatusChangeIndId, KErrNone, data);
+
+ TMockLtsyCallData1<RMobileCall::TMobileCallStatus> mockCallData2(
+ aCallId2, RMobilePhone::EServiceUnspecified, callStatus);
+ data.Close();
+ mockCallData2.SerialiseL(data);
+ iMockLTSY.CompleteL(KMockLtsyDispatchCallControlNotifyCallStatusChangeIndId, KErrNone, data);
+
+ CleanupStack::PopAndDestroy(1, &data);
+ } // CCTsyCallControlMultipartyFUNegative::DriverCreateConferenceCallL
+
+void CCTsyCallControlMultipartyFUNegative::DriverCreateConferenceCallAndHoldItL(
+ RMobilePhone::TMobileService aMobileService, TInt aCallId1, TInt aCallId2)
+ {
+ RBuf8 data;
+ CleanupClosePushL(data);
+
+ DriverCreateConferenceCallL(aMobileService, aCallId1, aCallId2);
+
+ // Swapping a conference call when there isn't another call causes hold
+ // IPC to go to the dispatcher.
+ DriverHoldCallL(aCallId1, KErrNone);
+
+ // Call 2 which is part of the conference will go on hold
+ RMobileCall::TMobileCallStatus callStatus = RMobileCall::EStatusHold;
+ TMockLtsyCallData1<RMobileCall::TMobileCallStatus> mockCallData(
+ aCallId2, RMobilePhone::EServiceUnspecified, callStatus);
+ data.Close();
+ mockCallData.SerialiseL(data);
+ iMockLTSY.CompleteL(KMockLtsyDispatchCallControlNotifyCallStatusChangeIndId, KErrNone, data);
+
+ CleanupStack::PopAndDestroy(1, &data);
+ } // CCTsyCallControlMultipartyFUNegative::DriverCreateConferenceCallAndHoldItL
+
+void CCTsyCallControlMultipartyFUNegative::ClientCreateConferenceCallL(RMobileConferenceCall& aConfCall)
+ {
+ ASSERT_EQUALS(KErrNone, aConfCall.Open(iPhone));
+
+ RMobileConferenceCall::TMobileConferenceEvent confEvent;
+ TName callName;
+ TRequestStatus notifyConfEventStatus;
+ aConfCall.NotifyConferenceEvent(notifyConfEventStatus, confEvent, callName);
+
+ TRequestStatus notifyConfStatus;
+ RMobileConferenceCall::TMobileConferenceStatus confStatus;
+ aConfCall.NotifyConferenceStatusChange(notifyConfStatus, confStatus);
+
+ TRequestStatus createConfStatus;
+ aConfCall.CreateConference(createConfStatus);
+
+ User::WaitForRequest(notifyConfEventStatus);
+ ASSERT_EQUALS(KErrNone, notifyConfEventStatus.Int());
+ ASSERT_EQUALS(RMobileConferenceCall::EConferenceCallAdded, confEvent); // Call 1 when call status change notification completes
+ aConfCall.NotifyConferenceEvent(notifyConfEventStatus, confEvent, callName);
+
+ User::WaitForRequest(notifyConfEventStatus);
+ ASSERT_EQUALS(KErrNone, notifyConfEventStatus.Int()); // Call 2 added when call status change notification completes
+ ASSERT_EQUALS(RMobileConferenceCall::EConferenceCallAdded, confEvent);
+ aConfCall.NotifyConferenceEvent(notifyConfEventStatus, confEvent, callName);
+
+ User::WaitForRequest(notifyConfEventStatus);
+ ASSERT_EQUALS(KErrNone, notifyConfEventStatus.Int());
+ ASSERT_EQUALS(RMobileConferenceCall::EConferenceBuilt, confEvent);
+
+ User::WaitForRequest(notifyConfStatus);
+ ASSERT_EQUALS(KErrNone, notifyConfStatus.Int());
+ ASSERT_EQUALS(RMobileConferenceCall::EConferenceActive, confStatus);
+
+ User::WaitForRequest(createConfStatus);
+ ASSERT_EQUALS(KErrNone, createConfStatus.Int());
+ } // CCTsyCallControlMultipartyFUNegative::ClientCreateConferenceCallL
+
+void CCTsyCallControlMultipartyFUNegative::ClientSwapConferenceCallL(RMobileConferenceCall& aConfCall,
+ RMobileConferenceCall::TMobileConferenceEvent aExpectedConfEvent, RMobileConferenceCall::TMobileConferenceStatus aExpectedConfStatus)
+ {
+ TRequestStatus notifyConfStatus;
+ RMobileConferenceCall::TMobileConferenceStatus confStatus;
+ aConfCall.NotifyConferenceStatusChange(notifyConfStatus, confStatus);
+
+ RMobileConferenceCall::TMobileConferenceEvent confEvent;
+ TName callName;
+ TRequestStatus notifyConfEventStatus;
+ aConfCall.NotifyConferenceEvent(notifyConfEventStatus, confEvent, callName);
+
+ TRequestStatus swapStatus;
+ aConfCall.Swap(swapStatus);
+ User::WaitForRequest(swapStatus);
+ ASSERT_EQUALS(KErrNone, swapStatus.Int());
+
+ User::WaitForRequest(notifyConfEventStatus);
+ ASSERT_EQUALS(KErrNone, notifyConfEventStatus.Int());
+ ASSERT_EQUALS(aExpectedConfEvent, confEvent);
+
+ User::WaitForRequest(notifyConfStatus);
+ ASSERT_EQUALS(KErrNone, notifyConfStatus.Int());
+ ASSERT_EQUALS(aExpectedConfStatus, confStatus);
+ } // CCTsyCallControlMultipartyFUNegative::ClientSwapConferenceCallL
+
+void CCTsyCallControlMultipartyFUNegative::ClientCreateConferenceCallAndHoldItL(
+ RMobilePhone::TMobileService aMobileService, RMobileCall& aMobileCall,
+ RMobileLine& aMobileLine, RMobileCall& aMobileCall2, RMobileLine& aMobileLine2,
+ RMobileConferenceCall& aConfCall)
+ {
+ ClientDialAndHoldFirstCallDialSecondCallL(aMobileService, aMobileCall, aMobileLine, aMobileCall2, aMobileLine2);
+ ClientCreateConferenceCallL(aConfCall);
+ ClientSwapConferenceCallL(aConfCall, RMobileConferenceCall::EConferenceSwapped, RMobileConferenceCall::EConferenceHold);
+ } // CCTsyCallControlMultipartyFUNegative::ClientCreateConferenceCallAndHoldItL
+