telephonyserverplugins/simatktsy/tests/src/ccsatlaunchbrowserfu.cpp
changeset 0 3553901f7fa8
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/telephonyserverplugins/simatktsy/tests/src/ccsatlaunchbrowserfu.cpp	Tue Feb 02 01:41:59 2010 +0200
@@ -0,0 +1,719 @@
+// 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:
+//
+
+
+
+/**
+ @file The TEFUnit test suite for LaunchBrowser in the SAT.
+*/
+
+#include <satcs.h>
+#include <ctsy/ltsy/sat_defs.h>
+
+#include <ctsy/ltsy/mltsydispatchsatinterface.h>
+#include <test/mockltsyindicatorids.h>
+#include <test/tmockltsydata.h>
+
+#include "ccsatlaunchbrowserfu.h"
+
+static const TUint8 KCommandNumber = 1;
+static const TUint8 KCommandType   = KLaunchBrowser;
+static const TUint8 KSourceDevice = KSim;
+static const TUint8 KDestinationDevice = KMe;
+static const TUint8 KCodingScheme = K8BitDCS;
+
+static const TInt KDelay = 10;
+
+_LIT8(KURL, "www.symbian.ru");
+_LIT8(KBearerList, "\x01\x03\x01\x03");
+_LIT8(KText, "Gateway/Proxy");
+_LIT8(KAlphaId, "phase");
+_LIT8(KNULL, "\x00");
+_LIT8(KFileRef, "1234567890");
+
+CTestSuite* CCSatLaunchBrowserFU::CreateSuiteL(const TDesC& aName)
+	{
+	SUB_SUITE;
+
+	ADD_TEST_STEP_ISO_CPP(CCSatLaunchBrowserFU, TestNotifyLaunchBrowserPCmd0001L);
+	ADD_TEST_STEP_ISO_CPP(CCSatLaunchBrowserFU, TestNotifyLaunchBrowserPCmd0002L);
+	ADD_TEST_STEP_ISO_CPP(CCSatLaunchBrowserFU, TestNotifyLaunchBrowserPCmd0004L);
+
+	END_SUITE;
+	}
+
+void CCSatLaunchBrowserFU::PrepareTlvData ( TTlv& aTlvData )
+	{	
+	aTlvData.Begin(KBerTlvProactiveSimCommandTag);
+
+	aTlvData.AddTag(KTlvCommandDetailsTag);         // Command details
+	aTlvData.AddByte(KCommandNumber);               // Command number
+	aTlvData.AddByte(KCommandType);                 // Command type
+	aTlvData.AddByte(iData.iCommandQualifier);      // Command qualifier
+
+	aTlvData.AddTag(KTlvDeviceIdentityTag);         // Device identities
+	aTlvData.AddByte(KSourceDevice);                // Source device
+	aTlvData.AddByte(KDestinationDevice);           // Destination device
+
+	if ( iData.iUrl.Length() > 0 )
+		{
+		aTlvData.AddTag(KTlvUrlTag);
+		aTlvData.AddData(iData.iUrl);
+		}
+
+	if ( iData.iBearerList.Length() > 0 )
+		{
+		aTlvData.AddTag(KTlvBearerTag);
+		aTlvData.AddData(iData.iBearerList);
+		}
+
+	if ( iData.iText.Length() > 0 )
+		{
+		aTlvData.AddTag(KTlvTextStringTag);
+		aTlvData.AddByte(KCodingScheme);
+		aTlvData.AddData(iData.iText);
+		}
+
+	if ( iData.iAlphaId.Length() > 0 || iData.iIfAlphaId )
+		{
+		aTlvData.AddTag(KTlvAlphaIdentifierTag);
+		aTlvData.AddData(iData.iAlphaId);
+		}
+	
+	if ( iData.iIfUsedBrowserId )
+		{
+		aTlvData.AddTag(KTlvBrowserIdentityTag);
+		aTlvData.AddByte(iData.iBrowserId);
+		}
+
+	if ( iData.iFileRef.Length() > 0 )
+		{
+		aTlvData.AddTag(KTlvProvisioningReferenceFileTag);
+		aTlvData.AddData(iData.iFileRef);
+		aTlvData.AddTag(KTwoByteLengthCoding);
+		}
+	}
+
+void CCSatLaunchBrowserFU::PrepareExpectDataL ()
+	{
+	RBuf8 data;
+	CleanupClosePushL(data);	
+	
+	TUint8 commandType = KLaunchBrowser;
+	TMockLtsyData1<TUint8> expLtsyData(commandType);
+	expLtsyData.SerialiseL(data);
+	iMockLTSY.ExpectL(MLtsyDispatchSatPCmdNotification::KLtsyDispatchSatPCmdNotificationApiId, data);
+
+	CleanupStack::PopAndDestroy(1); // data
+	}
+
+void CCSatLaunchBrowserFU::PrepareCompleteDataL ( TInt aResultCode )
+	{
+	RBuf8 data;
+	CleanupClosePushL(data);	
+	
+	TTlv tlv;
+	PrepareTlvData( tlv );
+	
+	TPtrC8 tlvDsc = tlv.End();
+	TDesC8* tlvDscPtr = &tlvDsc;
+	TMockLtsyData1<TDesC8*> tlvDscPack(tlvDscPtr);
+	tlvDscPack.SerialiseL(data);
+	iMockLTSY.CompleteL(KMockLtsyDispatchSatPcmdIndId, aResultCode, data, KDelay);
+
+	CleanupStack::PopAndDestroy(1); // data
+	}
+
+void CCSatLaunchBrowserFU::ProactiveCommandCallL( 
+		RSat::TLaunchBrowserV2& aLaunchBrowserData,
+		TInt aCompleteErrorCode,
+		TInt aResultCode,
+		TBool aIfCreateTerminal,
+		RSat::TPCmdResult aGeneralResult,
+		TUint8 aCommandQualifier,
+		const TDesC& aAdditionalInfo
+		)
+	{
+	TRequestStatus requestStatus;
+	
+	PrepareExpectDataL ();
+
+	RSat::TLaunchBrowserV2Pckg setpPck(aLaunchBrowserData);
+	iSat.NotifyLaunchBrowserPCmd(requestStatus, setpPck);
+		
+	PrepareCompleteDataL ( aCompleteErrorCode );
+
+	if ( aIfCreateTerminal )
+		{
+		PrepareTerminalResponseMockDataL(
+				KCommandNumber,
+				KCommandType,
+				aCommandQualifier,
+				aAdditionalInfo,
+				aGeneralResult,
+				KNullDesC8);
+		}
+
+	User::WaitForRequest(requestStatus);
+	ASSERT_EQUALS(aResultCode, requestStatus.Int());
+	AssertMockLtsyStatusL();
+	}
+
+void CCSatLaunchBrowserFU::DataInitialization(
+		TUint8 aCommandQualifier,
+		const TDesC8& aUrl,
+		const TDesC8& aBearerList,
+		const TDesC8& aText,
+		const TDesC8& aAlphaId,
+		const TDesC8& aFileRef,
+		TBool aIfUsedBrowserId,
+		TUint aBrowserId,
+		TBool aIfAlphaId
+		)
+	{
+	iData.iUrl.Copy(aUrl);
+	iData.iBearerList.Copy(aBearerList);
+	iData.iText.Copy(aText);
+	iData.iAlphaId.Copy(aAlphaId);
+	iData.iFileRef.Copy(aFileRef);
+	iData.iCommandQualifier = aCommandQualifier;
+	iData.iBrowserId = aBrowserId;
+	iData.iIfUsedBrowserId = aIfUsedBrowserId;
+	iData.iIfAlphaId = aIfAlphaId;
+	}
+
+void CCSatLaunchBrowserFU::TerminalResponseCallL(
+		const RSat& aSat,
+		RSat::TPCmdResult aGeneralResult,
+		const TDesC& aAdditionalInfo,
+		TInt aResultCode,
+		TUint aInfoType
+		)
+	{
+	RSat::TLaunchBrowserRspV2 launchBrowser;
+	RSat::TLaunchBrowserRspV2Pckg launchBrowserPckg(launchBrowser);
+	TRequestStatus requestStatus;
+	
+	launchBrowser.iGeneralResult = aGeneralResult;
+	launchBrowser.SetPCmdNumber(KCommandNumber);
+	launchBrowser.iInfoType = aInfoType;
+	
+	PrepareTerminalResponseMockDataL(
+			KCommandNumber,
+			KCommandType,
+			iData.iCommandQualifier,
+			aAdditionalInfo,
+			launchBrowser.iGeneralResult,
+			KNullDesC8);
+
+	aSat.TerminalRsp(requestStatus, RSat::ELaunchBrowser, launchBrowserPckg);
+	User::WaitForRequest(requestStatus);
+	ASSERT_EQUALS(aResultCode, requestStatus.Int());
+	}
+
+void CCSatLaunchBrowserFU::DataCompareL( const RSat::TLaunchBrowserV2& aLaunchBrowser )
+	{
+	
+	RSat::TBrowserSelection browserSel;
+	switch( iData.iCommandQualifier )
+		{
+		case KLaunchBrowserIfNotYetLaunched:
+			browserSel = RSat::ELaunchBrowserIfNotAlreadyLaunched;
+			break;
+		case KUseExistingBrowser:
+			browserSel = RSat::EUseExistingBrowser;
+			break;
+		case KCloseAndLaunchNewBrowser:
+			browserSel = RSat::ECloseExistingLaunchNewBrowserSession;
+			break;
+		case KLaunchBrowserCmdQualifierNotUsed:
+		case KLaunchBrowserCmdQualifierReserved:
+		default:
+			browserSel = RSat::EBrowserSelectionNotSet;
+		}
+
+	ASSERT_EQUALS( browserSel, aLaunchBrowser.iBrowserSel );
+
+	RSat::TAlphaIdBuf alphaId;
+	alphaId.Copy(iData.iAlphaId);
+	ASSERT_EQUALS( 0, alphaId.Compare( aLaunchBrowser.iAlphaId.iAlphaId ) );
+
+	RSat::TTextString text;
+	text.Copy( iData.iText );
+	ASSERT_EQUALS( 0, text.Compare( aLaunchBrowser.iText ) );
+
+	ASSERT_EQUALS( 0, iData.iBearerList.Compare( aLaunchBrowser.iBearerList ) );
+	ASSERT_EQUALS( 0, iData.iUrl.Compare( aLaunchBrowser.iUrl ) );
+	
+	}
+
+void CCSatLaunchBrowserFU::ClearData( RSat::TLaunchBrowserV2& aLaunchBrowser )
+	{
+	aLaunchBrowser.ResetFileRef();
+	aLaunchBrowser.iBrowserSel = RSat::EBrowserSelectionNotSet;
+	aLaunchBrowser.iBrowserId  = RSat::EBrowserIdNotSet;
+	aLaunchBrowser.iUrl.Zero();
+	aLaunchBrowser.iBearerList.Zero();
+	aLaunchBrowser.iText.Zero();
+	aLaunchBrowser.iAlphaId.iAlphaId.Zero();
+	}
+
+
+//
+// Actual test cases
+//
+
+
+/**
+@SYMTestCaseID BA-CSAT-LB-SNLBPC-0001
+@SYMPREQ 1780
+@SYMComponent  telephony_csat
+@SYMTestCaseDesc Test support in CSAT for RSat::NotifyLaunchBrowserPCmd
+@SYMTestPriority High
+@SYMTestActions Invokes RSat::NotifyLaunchBrowserPCmd
+@SYMTestExpectedResults Pass
+@SYMTestType CT
+*/
+void CCSatLaunchBrowserFU::TestNotifyLaunchBrowserPCmd0001L()
+	{
+
+	static const TUint8 KCmdQualifierArray[] = { 
+			KLaunchBrowserCmdQualifierNotUsed, 
+			KUseExistingBrowser, 
+			KCloseAndLaunchNewBrowser,
+			KLaunchBrowserCmdQualifierReserved, 
+			KLaunchBrowserCmdQualifierReserved + 1 };
+
+	static const RSat::TPCmdResult KGenResultArray[] = {
+			RSat::KPSessionTerminatedByUser,
+			RSat::KBackwardModeRequestedByUser,
+			RSat::KNoResponseFromUser,
+			RSat::KMeUnableToProcessCmd,
+			RSat::KCmdBeyondMeCapabilities,
+			RSat::KCmdDataNotUnderstood,
+			RSat::KLaunchBrowserError,
+			RSat::KPCmdNotAcceptedByUser,
+			RSat::KCmdTypeNotUnderstood,
+			RSat::KMissingInformation,
+			RSat::KPartialComprehension,
+			RSat::KNetworkUnableToProcessCmd,
+			RSat::KCmdNumberNotKnown };
+
+	static const TUint KArrayInfoType[] = {
+			RSat::KMeProblem,
+			RSat::KBearerUnvailable,
+			RSat::KBrowserUnavailable,
+			RSat::KMeUnableToReadProvisioningData,
+			RSat::KNoSpecificBrowserError,
+			RSat::KServiceError };
+
+	const TInt KSize = sizeof(KCmdQualifierArray)/sizeof(KCmdQualifierArray[0]);
+	const TInt KArraySize = sizeof(KGenResultArray)/sizeof(KGenResultArray[0]);
+	const TInt KArrayITSize = sizeof(KArrayInfoType)/sizeof(KArrayInfoType[0]);
+	const TUint8 KCommandQualifier = KLaunchBrowserIfNotYetLaunched;
+
+	OpenEtelServerL(EUseExtendedError);
+	CleanupStack::PushL(TCleanupItem(Cleanup,this));
+	OpenPhoneL();
+	OpenSatL();
+
+	RSat::TLaunchBrowserV2 launchBrowser;
+	TRequestStatus requestStatus;
+	DataInitialization(KCommandQualifier, KURL, KBearerList, KText, KAlphaId, KFileRef);
+
+ 	//-------------------------------------------------------------------------
+	// TEST C: Successful completion request of
+	// RSat::NotifyLaunchBrowserPCmd 
+ 	//-------------------------------------------------------------------------
+
+	ProactiveCommandCallL(launchBrowser);
+	TerminalResponseCallL(iSat);
+	DataCompareL( launchBrowser );
+	AssertMockLtsyStatusL();
+
+ 	//-------------------------------------------------------------------------
+	// TEST E: Coverage test(s) for RSat::NotifyLaunchBrowserPCmd
+ 	//-------------------------------------------------------------------------
+
+	iMockLTSY.NotifyTerminated(requestStatus);
+	
+	PrepareCompleteDataL ();
+
+	RSat::TAdditionalInfo additionalInfo;
+	additionalInfo.Append(RSat::KNoSpecificMeProblem);
+
+	PrepareTerminalResponseMockDataL(
+			KCommandNumber,
+			KCommandType,
+			KCommandQualifier,
+			additionalInfo,
+			RSat::KMeUnableToProcessCmd,
+			KNullDesC8);
+
+	User::WaitForRequest(requestStatus);
+	ASSERT_EQUALS(KErrNone, requestStatus.Int());
+	AssertMockLtsyStatusL();
+
+	//-------------------------------------------------------------------------
+	// to increase CSatNotifyLaunchBrowser::CompleteNotifyL coverage 
+	// in case of "switch ( cmdQualifier )"
+ 	//-------------------------------------------------------------------------
+
+	TBool prepareMockData = EFalse;
+	TUint8 element = 0;
+
+	for ( TInt i = 0; i < KSize; i++ )
+		{
+		element = KCmdQualifierArray[i];
+		prepareMockData = 
+			element == KLaunchBrowserCmdQualifierNotUsed || 
+			element == KLaunchBrowserCmdQualifierReserved;
+
+		DataInitialization(element, KURL, KBearerList, KText, KAlphaId, KFileRef);
+
+		ClearData(launchBrowser);
+		if ( prepareMockData )
+			{
+			ProactiveCommandCallL(
+					launchBrowser, 
+					KErrNone, 
+					KErrCorrupt, 
+					ETrue, 
+					RSat::KCmdTypeNotUnderstood,
+					element);
+			}
+		else
+			{
+			ProactiveCommandCallL(launchBrowser); 
+			}
+
+		if ( !prepareMockData )
+			{
+			TerminalResponseCallL(iSat);
+			DataCompareL( launchBrowser );
+			}
+		
+		AssertMockLtsyStatusL();
+		}
+
+	//-------------------------------------------------------------------------
+	// to increase CSatNotifyLaunchBrowser::TerminalResponseL coverage 
+	// in case of general result value isn't valid
+ 	//-------------------------------------------------------------------------
+
+	RSat::TPCmdResult elementResult;
+	TInt resultCode = KErrNone;
+	for (TInt i = 0; i < KArraySize; i++)
+		{
+		elementResult = KGenResultArray[i];
+		additionalInfo.Zero();
+		
+		switch( elementResult )
+			{
+			case RSat::KCmdDataNotUnderstood:
+			case RSat::KCmdTypeNotUnderstood:
+			case RSat::KMissingInformation:
+			case RSat::KPartialComprehension:
+				{
+				break;
+				}			
+			default:
+				{
+				additionalInfo.Append(RSat::KNoSpecificMeProblem);
+				}
+			}
+		
+		TerminalResponseCallL(iSat, elementResult, additionalInfo, resultCode);
+		AssertMockLtsyStatusL();
+		}
+
+	//-------------------------------------------------------------------------
+	// to increase CSatNotifyLaunchBrowser::TerminalResponseL coverage 
+	// in case of infotype isn't valid
+ 	//-------------------------------------------------------------------------
+
+	TUint elementIT;
+	for (TInt i = 0; i < KArrayITSize; i++)
+		{
+		elementIT = KArrayInfoType[i];
+
+		if ( RSat::KMeProblem    == elementIT ||
+			 RSat::KServiceError == elementIT )
+			{
+			resultCode = KErrCorrupt;
+			}
+		else
+			{
+			resultCode = KErrNone;
+			}
+
+		TerminalResponseCallL(iSat, RSat::KSuccess, KNullDesC, resultCode, elementIT);
+		AssertMockLtsyStatusL();
+		}
+
+	//-------------------------------------------------------------------------
+	// to increase CSatNotifyLaunchBrowser::ParseBrowserIdL coverage 
+	// in case of "if ( 0x00 == aLaunchBrowserV2.iBearerList.Length() )"
+ 	//-------------------------------------------------------------------------
+
+	DataInitialization(KCommandQualifier, KURL, KBearerList, KText, KAlphaId, KFileRef, ETrue);
+	ClearData(launchBrowser);
+	ProactiveCommandCallL(launchBrowser);
+	AssertMockLtsyStatusL();
+
+	//-------------------------------------------------------------------------
+	// to increase CSatNotifyLaunchBrowser::ParseBrowserIdL coverage 
+	//  in case of "if ( 0x00 != browserId.GetShortInfo( ETLV_BrowserIdentity ) )"
+ 	//-------------------------------------------------------------------------
+
+	TUint browserId = RSat::EBrowserIdNotPresent;
+	DataInitialization(KCommandQualifier, KURL, KBearerList, KText, KAlphaId, KFileRef, ETrue, browserId);
+	ClearData(launchBrowser);
+	ProactiveCommandCallL(
+			launchBrowser, 
+			KErrNone, 
+			KErrCorrupt, 
+			ETrue, 
+			RSat::KCmdDataNotUnderstood);
+
+	//-------------------------------------------------------------------------
+	// to increase CSatNotifyLaunchBrowser::ParseUrlL coverage 
+	// in case of KTlvUrlTag isn't found.
+ 	//-------------------------------------------------------------------------
+
+	DataInitialization(KCommandQualifier, KNullDesC8, KBearerList, KText, KAlphaId, KFileRef);
+	ClearData(launchBrowser);
+	ProactiveCommandCallL(
+			launchBrowser, 
+			KErrNone, 
+			KErrCorrupt, 
+			ETrue, 
+			RSat::KErrorRequiredValuesMissing);
+
+	//-------------------------------------------------------------------------
+	// to increase CSatNotifyLaunchBrowser::ParseBearerListL coverage 
+	// in case of KTlvBearerTag isn't found.
+ 	//-------------------------------------------------------------------------
+
+	DataInitialization(KCommandQualifier, KURL, KNullDesC8, KText, KAlphaId, KFileRef);
+	ClearData(launchBrowser);
+	ProactiveCommandCallL(launchBrowser);
+
+	//-------------------------------------------------------------------------
+	// to increase CSatNotifyLaunchBrowser::ParseBearerListL coverage 
+	// in case of "if ( 0x00 == aLaunchBrowserV2.iBearerList.Length() )"
+ 	//-------------------------------------------------------------------------
+
+	additionalInfo.Zero();
+	additionalInfo.Append(RSat::KBearerUnvailable);
+
+	DataInitialization(KCommandQualifier, KURL, KNULL, KText, KAlphaId, KFileRef);
+	ClearData(launchBrowser);
+	ProactiveCommandCallL(
+			launchBrowser, 
+			KErrNone, 
+			KErrCorrupt, 
+			ETrue, 
+			RSat::KLaunchBrowserError,
+			KCommandQualifier,
+			additionalInfo);
+
+	//-------------------------------------------------------------------------
+	// to increase CSatNotifyLaunchBrowser::CompleteNotifyL coverage 
+	// in case of KTlvTextStringTag isn't found.
+ 	//-------------------------------------------------------------------------
+
+	DataInitialization(KCommandQualifier, KURL, KBearerList, KNullDesC8, KAlphaId, KFileRef);
+	ClearData(launchBrowser);
+	ProactiveCommandCallL(launchBrowser);
+
+	//-------------------------------------------------------------------------
+	// to increase CSatNotifyLaunchBrowser::CompleteNotifyL coverage 
+	// in case of KTlvAlphaIdentifierTag isn't found.
+ 	//-------------------------------------------------------------------------
+
+	DataInitialization(KCommandQualifier, KURL, KBearerList, KText, KNullDesC8, KFileRef);
+	ClearData(launchBrowser);
+	ProactiveCommandCallL(launchBrowser);
+
+	//-------------------------------------------------------------------------
+	// to increase CSatNotifyLaunchBrowser::ParseProvisioningFileListL coverage 
+	// in  case of "if ( ( RSat::KFileRefMaxSize < stringLength ) || 
+    // ( 4 > stringLength ) )"
+ 	//-------------------------------------------------------------------------
+
+	additionalInfo.Zero();
+	additionalInfo.Append(RSat::KMeUnableToReadProvisioningData);
+
+	DataInitialization(KCommandQualifier, KURL, KBearerList, KText, KAlphaId, KNULL);
+	ClearData(launchBrowser);
+	ProactiveCommandCallL(
+			launchBrowser, 
+			KErrNone, 
+			KErrCorrupt, 
+			ETrue, 
+			RSat::KLaunchBrowserError,
+			KCommandQualifier,
+			additionalInfo);
+
+	//-------------------------------------------------------------------------
+	// to increase CSatNotifyLaunchBrowser::ParseBrowserIdL coverage 
+	// in case of "if ( KErrNotFound == returnValue )"
+ 	//-------------------------------------------------------------------------
+
+	DataInitialization(
+			KCommandQualifier, 
+			KURL, KBearerList,
+			KText,
+			KNullDesC8,
+			KFileRef,
+			EFalse,
+			RSat::EBrowserIdNotSet,
+			ETrue);
+	ClearData(launchBrowser);
+	ProactiveCommandCallL(launchBrowser);
+
+	//-------------------------------------------------------------------------
+	// TEST B: failure on completion of pending request from LTSY->CTSY
+ 	//-------------------------------------------------------------------------
+
+	ClearData(launchBrowser);
+	ProactiveCommandCallL(launchBrowser, KErrUnknown, KErrUnknown);
+
+	AssertMockLtsyStatusL();
+	CleanupStack::PopAndDestroy(this); // this
+
+	}
+
+
+/**
+@SYMTestCaseID BA-CSAT-LB-SNLBPC-0002
+@SYMPREQ 1780
+@SYMComponent  telephony_csat
+@SYMTestCaseDesc Test support in CSAT for cancelling of RSat::NotifyLaunchBrowserPCmd
+@SYMTestPriority High
+@SYMTestActions Invokes cancelling of RSat::NotifyLaunchBrowserPCmd
+@SYMTestExpectedResults Pass
+@SYMTestType CT
+*/
+void CCSatLaunchBrowserFU::TestNotifyLaunchBrowserPCmd0002L()
+	{
+
+	OpenEtelServerL(EUseExtendedError);
+	CleanupStack::PushL(TCleanupItem(Cleanup,this));
+	OpenPhoneL();
+	OpenSatL();
+
+	TRequestStatus requestStatus;
+
+	RSat::TLaunchBrowserV2 launchBrowser;
+	RSat::TLaunchBrowserV2Pckg launchBrowserPck(launchBrowser);
+
+	DataInitialization(KCommandQualifier, KURL, KBearerList, KText, KAlphaId, KFileRef);
+
+ 	//-------------------------------------------------------------------------
+	// Test cancelling of RSat::NotifyLaunchBrowserPCmd
+ 	//-------------------------------------------------------------------------
+
+	PrepareExpectDataL();
+
+	iSat.NotifyLaunchBrowserPCmd(requestStatus, launchBrowserPck);
+
+	iSat.CancelAsyncRequest(ESatNotifyLaunchBrowserPCmd);
+
+	User::WaitForRequest(requestStatus);
+	ASSERT_EQUALS(KErrCancel, requestStatus.Int());
+	AssertMockLtsyStatusL();
+
+	CleanupStack::PopAndDestroy(1); // this
+
+	}
+
+/**
+@SYMTestCaseID BA-CSAT-LB-SNLBPC-0004
+@SYMPREQ 1780
+@SYMComponent  telephony_csat
+@SYMTestCaseDesc Test support in CSAT for multiple client requests to RSat::NotifyLaunchBrowserPCmd
+@SYMTestPriority High
+@SYMTestActions Invokes multiple client requests to RSat::NotifyLaunchBrowserPCmd
+@SYMTestExpectedResults Pass
+@SYMTestType CT
+*/
+void CCSatLaunchBrowserFU::TestNotifyLaunchBrowserPCmd0004L()
+	{
+
+	OpenEtelServerL(EUseExtendedError);
+	CleanupStack::PushL(TCleanupItem(Cleanup,this));
+	OpenPhoneL();
+	OpenSatL();
+
+	// Open second client
+	RTelServer telServer2;
+	TInt ret = telServer2.Connect();
+	ASSERT_EQUALS(KErrNone, ret);
+	CleanupClosePushL(telServer2);
+
+	RMobilePhone phone2;
+	ret = phone2.Open(telServer2,KMmTsyPhoneName);
+	ASSERT_EQUALS(KErrNone, ret);
+	CleanupClosePushL(phone2);
+
+	RSat sat2;
+	ret = sat2.Open(phone2);
+	ASSERT_EQUALS(KErrNone, ret);
+	CleanupClosePushL(sat2);
+
+	TRequestStatus requestStatus1;
+	TRequestStatus requestStatus2;
+	TUint8 commandQualifier = KLaunchBrowserIfNotYetLaunched;
+
+	DataInitialization(commandQualifier, KURL, KBearerList, KText, KAlphaId, KFileRef);
+
+	//-------------------------------------------------------------------------
+	// Test A: Test multiple clients requesting RSat::NotifyLaunchBrowserPCmd
+	// when they both pass the same T-class version
+ 	//-------------------------------------------------------------------------
+
+	PrepareExpectDataL();
+	
+	RSat::TLaunchBrowserV2 launchBrowser1;
+	RSat::TLaunchBrowserV2Pckg launchBrowserPck1(launchBrowser1);
+	iSat.NotifyLaunchBrowserPCmd(requestStatus1, launchBrowserPck1);
+
+	RSat::TLaunchBrowserV2 launchBrowser2;
+	RSat::TLaunchBrowserV2Pckg launchBrowserPck2(launchBrowser2);
+	sat2.NotifyLaunchBrowserPCmd(requestStatus2, launchBrowserPck2);
+
+	PrepareCompleteDataL();
+
+	User::WaitForRequest(requestStatus1);
+	User::WaitForRequest(requestStatus2);
+
+	ASSERT_EQUALS(KErrNone, requestStatus1.Int());
+	//probably «KErrServerBusy?is more appropriate result here
+	ASSERT_EQUALS(KErrNone, requestStatus2.Int());
+
+	TerminalResponseCallL(iSat);
+	TerminalResponseCallL(sat2);
+
+	DataCompareL( launchBrowser1 );
+	DataCompareL( launchBrowser2 );
+
+	AssertMockLtsyStatusL();
+	CleanupStack::PopAndDestroy(4, this); // sat2, phone2, telServer2, this
+
+	}
+
+