diff -r 000000000000 -r 3553901f7fa8 telephonyserverplugins/simatktsy/tests/src/ccsatsetupmenufu.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/telephonyserverplugins/simatktsy/tests/src/ccsatsetupmenufu.cpp Tue Feb 02 01:41:59 2010 +0200 @@ -0,0 +1,1542 @@ +// 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 SetUpMenu in the SAT. +*/ + +#include +#include +#include +#include +#include +#include +#include + +#include "ccsatsetupmenufu.h" + +static const TInt KDelay = 10; + +CTestSuite* CCSatSetUpMenuFU::CreateSuiteL(const TDesC& aName) + { + SUB_SUITE; + + ADD_TEST_STEP_ISO_CPP(CCSatSetUpMenuFU, TestNotifySetUpMenuPCmd0001L); + ADD_TEST_STEP_ISO_CPP(CCSatSetUpMenuFU, TestNotifySetUpMenuPCmd0001bL); + ADD_TEST_STEP_ISO_CPP(CCSatSetUpMenuFU, TestNotifySetUpMenuPCmd0001cL); + ADD_TEST_STEP_ISO_CPP(CCSatSetUpMenuFU, TestNotifySetUpMenuPCmd0001dL); + ADD_TEST_STEP_ISO_CPP(CCSatSetUpMenuFU, TestNotifySetUpMenuPCmd0001eL); + ADD_TEST_STEP_ISO_CPP(CCSatSetUpMenuFU, TestNotifySetUpMenuPCmd0001fL); + ADD_TEST_STEP_ISO_CPP(CCSatSetUpMenuFU, TestNotifySetUpMenuPCmd0001gL); + ADD_TEST_STEP_ISO_CPP(CCSatSetUpMenuFU, TestNotifySetUpMenuPCmd0001hL); + ADD_TEST_STEP_ISO_CPP(CCSatSetUpMenuFU, TestNotifySetUpMenuPCmd0001iL); + ADD_TEST_STEP_ISO_CPP(CCSatSetUpMenuFU, TestNotifySetUpMenuPCmd0001jL); + ADD_TEST_STEP_ISO_CPP(CCSatSetUpMenuFU, TestNotifySetUpMenuPCmd0002L); + ADD_TEST_STEP_ISO_CPP(CCSatSetUpMenuFU, TestNotifySetUpMenuPCmd0004L); + + END_SUITE; + } + + +// +// Actual test cases +// + + +/** +@SYMTestCaseID BA-CSAT-SUM-SNSUMPC-0001 +@SYMPREQ 1780 +@SYMComponent telephony_csat +@SYMTestCaseDesc Test support in CSAT for RSat::NotifySetUpMenuPCmd +@SYMTestPriority High +@SYMTestActions Invokes RSat::NotifySetUpMenuPCmd +@SYMTestExpectedResults Pass +@SYMTestType CT +*/ +void CCSatSetUpMenuFU::TestNotifySetUpMenuPCmd0001L() + { + OpenEtelServerL(EUseExtendedError); + CleanupStack::PushL(TCleanupItem(Cleanup,this)); + OpenPhoneL(); + OpenSatL(); + + RBuf8 data; + CleanupClosePushL(data); + + TUint8 KPCmdNumber = 1; + + // prepare tlv buffer for serialisation + TTlv tlv; + tlv.Begin(KBerTlvProactiveSimCommandTag); + tlv.AddTag(KTlvCommandDetailsTag); + tlv.AddByte(KPCmdNumber);//ETLV_CommandNumber + tlv.AddByte(KSetUpMenu); //ETLV_TypeOfCommand + tlv.AddByte(0); //ETLV_CommandQualifier + + tlv.AddTag(KTlvDeviceIdentityTag); + tlv.AddByte(KSim); //ETLV_SourceDeviceIdentity + tlv.AddByte(KDisplay); //ETLV_DestinationDeviceIdentity + + tlv.AddTag(KTlvAlphaIdentifierTag); + _LIT8(KSetupMenuTest8,"Menu AlphaIdent"); + tlv.AddData(KSetupMenuTest8);//ETLV_AlphaIdentifier + + tlv.AddTag(KTlvItemTag); + tlv.AddByte(77); //item identifier + tlv.AddData(_L8("Item AlphaIdent1")); + + TPtrC8 tlvDsc = tlv.End(); + TDesC8* tlvDscPtr = &tlvDsc; + + TMockLtsyData1 tlvDscPack(tlvDscPtr); + + //------------------------------------------------------------------------- + // TEST B: failure on completion of pending request from LTSY->CTSY + //------------------------------------------------------------------------- + + // tell Mock about forthcoming RSat::NotifySetUpMenuPCmd + TUint8 pcmdCode = KSetUpMenu; + TMockLtsyData1 expLtsyData(pcmdCode); + expLtsyData.SerialiseL(data); + iMockLTSY.ExpectL(MLtsyDispatchSatPCmdNotification::KLtsyDispatchSatPCmdNotificationApiId,data); + data.Close(); + + RSat::TSetUpMenuV2 setupMenu; + RSat::TSetUpMenuV2Pckg setpPck(setupMenu); + TRequestStatus stat; + iSat.NotifySetUpMenuPCmd(stat, setpPck); + + tlvDscPack.SerialiseL(data); + iMockLTSY.CompleteL(KMockLtsyDispatchSatPcmdIndId, KErrGeneral, data, KDelay); + + User::WaitForRequest(stat); + ASSERT_EQUALS(KErrGeneral, stat.Int()); + + AssertMockLtsyStatusL(); + + //------------------------------------------------------------------------- + // TEST E: Unsolicited completion of RSat::NotifySetUpMenuPCmd from LTSY. + //------------------------------------------------------------------------- + + TRequestStatus mockLtsyStatus; + iMockLTSY.NotifyTerminated(mockLtsyStatus); + + tlvDscPack.SerialiseL(data); + iMockLTSY.CompleteL(KMockLtsyDispatchSatPcmdIndId, KErrNone, data, KDelay); + data.Close(); + + RSat::TAdditionalInfo addInfo; + addInfo.Zero(); + addInfo.Append(RSat::KNoSpecificMeProblem); + + PrepareTerminalResponseMockDataL( KPCmdNumber, KSetUpMenu, 0, + addInfo, RSat::KMeUnableToProcessCmd, KNullDesC8); + + User::WaitForRequest(mockLtsyStatus); + AssertMockLtsyStatusL(); + ASSERT_EQUALS(KErrNone, mockLtsyStatus.Int()); + + // test C - Successful completion request of + // RSat::NotifySetFramesPCmd() - implemented in 0001b()-0001i() functions + + CleanupStack::PopAndDestroy(2, this); // data, this + } + + +/** +@SYMTestCaseID BA-CSAT-SUM-SNSUMPC-0001b +@SYMPREQ 1780 +@SYMComponent telephony_csat +@SYMTestCaseDesc Test support in CSAT for RSat::NotifySetUpMenuPCmd - SET UP MENU (help request support) and ENVELOPE MENU SELECTION +@SYMTestPriority High +@SYMTestActions Invokes RSat::NotifySetUpMenuPCmd +@SYMTestExpectedResults Pass +@SYMTestType CT +*/ +void CCSatSetUpMenuFU::TestNotifySetUpMenuPCmd0001bL() + { + OpenEtelServerL(EUseExtendedError); + CleanupStack::PushL(TCleanupItem(Cleanup,this)); + OpenPhoneL(); + OpenSatL(); + + // Expected Sequence 2.1 + //(SET UP MENU and MENU SELECTION, with Help Request, Replace and Remove a Toolkit Menu) + //See ETSI TS 102 384 [26] in subclause 27.22.4.8.2.4.2, Expected Sequence 2.1. + + TUint8 cmdNumber = 1; + const TInt KNumItems = 4; + + TUint8 ids[KNumItems] = {1, 2, 3, 4}; + TPtrC8 idNames[KNumItems] = {_L8("Item 1"), _L8("Item 2"), _L8("Item 3"), _L8("Item 4")}; + + SetUpMenuL( cmdNumber, KHelpAvailabilityMask, _L8("Toolkit Menu"), KNumItems, ids, idNames ); + + //generate the terminal response + RSat::TSetUpMenuRspV1 resp; + RSat::TSetUpMenuRspV1Pckg respPck(resp); + + resp.iGeneralResult = RSat::KSuccess; + resp.iInfoType = RSat::KNoAdditionalInfo; + resp.iAdditionalInfo.Zero(); + resp.SetPCmdNumber(cmdNumber); + GenerateTerminalResponseL(cmdNumber, KSetUpMenu, KHelpAvailabilityMask, RSat::ESetUpMenu, + respPck, resp.iAdditionalInfo, resp.iGeneralResult); + AssertMockLtsyStatusL(); + + // now end session + EndProactiveSimSessionL(); + AssertMockLtsyStatusL(); + + // select 2 + SelectMenuItemL(ids[1], ETrue); + AssertMockLtsyStatusL(); + + CleanupStack::PopAndDestroy(1, this); + } + + +/** +@SYMTestCaseID BA-CSAT-SUM-SNSUMPC-0001c +@SYMPREQ 1780 +@SYMComponent telephony_csat +@SYMTestCaseDesc Test support in CSAT for RSat::NotifySetUpMenuPCmd - SET UP MENU (next action support) and ENVELOPE MENU SELECTION +@SYMTestPriority High +@SYMTestActions Invokes RSat::NotifySetUpMenuPCmd +@SYMTestExpectedResults Pass +@SYMTestType CT +*/ +void CCSatSetUpMenuFU::TestNotifySetUpMenuPCmd0001cL() + { + OpenEtelServerL(EUseExtendedError); + CleanupStack::PushL(TCleanupItem(Cleanup,this)); + OpenPhoneL(); + OpenSatL(); + + // Expected Sequence 3.1 + //(SET UP MENU, next action indicator "Send SM", "Set Up Call", "LaunchBrowser", + //"Provide Local Information", successful) + //See ETSI TS 102 384 [26] in subclause 27.22.4.8.3.4.2, Expected Sequence 3.1. + + TUint8 cmdNumber = 1; + TUint8 noPref(0); // no selection preferences + const TInt KNumItems = 4; + + TUint8 ids[KNumItems] = {1, 2, 3, 4}; + TPtrC8 idNames[KNumItems] = {_L8("Item 1"), _L8("Item 2"), _L8("Item 3"), _L8("Item 4")}; + TUint8 actions[KNumItems] = {KSendShortMessage, KSetUpCall, KLaunchBrowser, KProvideLocalInformation}; + + SetUpMenuL( cmdNumber, noPref, _L8("Toolkit Menu"), KNumItems, ids, idNames, actions ); + + //generate the terminal response + RSat::TSetUpMenuRspV1 resp; + RSat::TSetUpMenuRspV1Pckg respPck(resp); + + resp.iGeneralResult = RSat::KSuccess; + resp.iInfoType = RSat::KNoAdditionalInfo; + resp.iAdditionalInfo.Zero(); + resp.SetPCmdNumber(cmdNumber); + GenerateTerminalResponseL(cmdNumber, KSetUpMenu, noPref, RSat::ESetUpMenu, + respPck, resp.iAdditionalInfo, resp.iGeneralResult); + AssertMockLtsyStatusL(); + + // now end session + EndProactiveSimSessionL(); + AssertMockLtsyStatusL(); + + // select 2 + SelectMenuItemL(ids[1], ETrue); + AssertMockLtsyStatusL(); + + CleanupStack::PopAndDestroy(1, this); + } + + + +/** +@SYMTestCaseID BA-CSAT-SUM-SNSUMPC-0001d +@SYMPREQ 1780 +@SYMComponent telephony_csat +@SYMTestCaseDesc Test support in CSAT for RSat::NotifySetUpMenuPCmd - SET UP MENU (display of icons) and ENVELOPE MENU SELECTION +@SYMTestPriority High +@SYMTestActions Invokes RSat::NotifySetUpMenuPCmd +@SYMTestExpectedResults Pass +@SYMTestType CT +*/ +void CCSatSetUpMenuFU::TestNotifySetUpMenuPCmd0001dL() + { + OpenEtelServerL(EUseExtendedError); + CleanupStack::PushL(TCleanupItem(Cleanup,this)); + OpenPhoneL(); + OpenSatL(); + + // Expected Sequence 4.1A + //(SET UP MENU, BASIC ICON NOT SELF EXPLANATORY in ALPHA ID and ITEMS DATA OBJECTS, successful) + //See ETSI TS 102 384 [26] in subclause 27.22.4.8.4.4.2, Expected Sequence 4.1A. + + TUint8 cmdNumber = 1; + TUint8 noPref(0); // no preferences + const TInt KNumItems = 3; + + TUint8 ids[KNumItems] = {1, 2, 3}; + TPtrC8 idNames[KNumItems] = {_L8("Item 1"), _L8("Item 2"), _L8("Item 3")}; + TUint8 iconList[KNumItems] = {5, 5, 5}; + + SetUpMenuL( cmdNumber, noPref, _L8("Toolkit Menu"), KNumItems, ids, idNames, NULL, + RSat::ENotSelfExplanatory, 1, RSat::ENotSelfExplanatory, iconList ); + + //generate the terminal response + RSat::TSetUpMenuRspV1 resp; + RSat::TSetUpMenuRspV1Pckg respPck(resp); + + resp.iGeneralResult = RSat::KSuccess; + resp.iInfoType = RSat::KNoAdditionalInfo; + resp.iAdditionalInfo.Zero(); + resp.SetPCmdNumber(cmdNumber); + GenerateTerminalResponseL(cmdNumber, KSetUpMenu, noPref, RSat::ESetUpMenu, + respPck, resp.iAdditionalInfo, resp.iGeneralResult); + AssertMockLtsyStatusL(); + + // now end session + EndProactiveSimSessionL(); + AssertMockLtsyStatusL(); + + // select 2 + SelectMenuItemL(ids[1], ETrue); + AssertMockLtsyStatusL(); + + //Expected Sequence 4.1B + //(SET UP MENU, BASIC ICON NOT SELF EXPLANATORY in ALPHA ID and ITEMS DATA OBJECTS, + //requested icon could not be displayed) + //See ETSI TS 102 384 [26] in subclause 27.22.4.8.4.4.2, Expected Sequence 4.1B. + + SetUpMenuL( cmdNumber, noPref, _L8("Toolkit Menu"), KNumItems, ids, idNames, NULL, + RSat::ENotSelfExplanatory, 1, RSat::ENotSelfExplanatory, iconList ); + + //generate the terminal response + resp.iGeneralResult = RSat::KSuccessRequestedIconNotDisplayed; + GenerateTerminalResponseL(cmdNumber, KSetUpMenu, noPref, RSat::ESetUpMenu, + respPck, resp.iAdditionalInfo, resp.iGeneralResult); + AssertMockLtsyStatusL(); + + // now end session + EndProactiveSimSessionL(); + AssertMockLtsyStatusL(); + + // select 2 + SelectMenuItemL(ids[1], ETrue); + AssertMockLtsyStatusL(); + + //Expected Sequence 4.2A (SET UP MENU, BASIC ICON SELF EXPLANATORY in ALPHA ID and ITEMS + //DATA OBJECTS, successful) + //See ETSI TS 102 384 [26] in subclause 27.22.4.8.4.4.2, Expected Sequence 4.2A. + + SetUpMenuL( cmdNumber, noPref, _L8("Toolkit Menu"), KNumItems, ids, idNames, NULL, + RSat::ESelfExplanatory, 1, RSat::ESelfExplanatory, iconList ); + + //generate the terminal response + resp.iGeneralResult = RSat::KSuccess; + GenerateTerminalResponseL(cmdNumber, KSetUpMenu, noPref, RSat::ESetUpMenu, respPck, + resp.iAdditionalInfo, resp.iGeneralResult); + AssertMockLtsyStatusL(); + + // now end session + EndProactiveSimSessionL(); + AssertMockLtsyStatusL(); + + // select 2 + SelectMenuItemL(ids[1], ETrue); + AssertMockLtsyStatusL(); + + //Expected Sequence 4.2B (SET UP MENU, BASIC ICON SELF EXPLANATORY in ALPHA ID and ITEMS + //DATA OBJECTS, requested icon could not be displayed) + //See ETSI TS 102 384 [26] in subclause 27.22.4.8.4.4.2, Expected Sequence 4.2B. + + SetUpMenuL( cmdNumber, noPref, _L8("Toolkit Menu"), KNumItems, ids, idNames, NULL, + RSat::ESelfExplanatory, 1, RSat::ESelfExplanatory, iconList ); + + //generate the terminal response + resp.iGeneralResult = RSat::KSuccessRequestedIconNotDisplayed; + GenerateTerminalResponseL(cmdNumber, KSetUpMenu, noPref, RSat::ESetUpMenu, + respPck, resp.iAdditionalInfo, resp.iGeneralResult); + AssertMockLtsyStatusL(); + + // now end session + EndProactiveSimSessionL(); + AssertMockLtsyStatusL(); + + // select 2 + SelectMenuItemL(ids[1], ETrue); + AssertMockLtsyStatusL(); + + CleanupStack::PopAndDestroy(1, this); + } + + +/** +@SYMTestCaseID BA-CSAT-SUM-SNSUMPC-0001e +@SYMPREQ 1780 +@SYMComponent telephony_csat +@SYMTestCaseDesc Test support in CSAT for RSat::NotifySetUpMenuPCmd - SET UP MENU (soft keys support) and ENVELOPE MENU SELECTION +@SYMTestPriority High +@SYMTestActions Invokes RSat::NotifySetUpMenuPCmd +@SYMTestExpectedResults Pass +@SYMTestType CT +*/ +void CCSatSetUpMenuFU::TestNotifySetUpMenuPCmd0001eL() + { + OpenEtelServerL(EUseExtendedError); + CleanupStack::PushL(TCleanupItem(Cleanup,this)); + OpenPhoneL(); + OpenSatL(); + + // Expected Sequence 5.1 (SET UP MENU, SOFT KEY PREFERRED, successful) + //See ETSI TS 102 384 [26] in subclause 27.22.4.8.5.4.2, Expected Sequence 5.1. + + TUint8 cmdNumber = 1; + const TInt KNumItems = 2; + + TUint8 ids[KNumItems] = {1, 2}; + TPtrC8 idNames[KNumItems] = {_L8("Item 1"), _L8("Item 2")}; + + SetUpMenuL( cmdNumber, KSelectionUsingSoftKey, _L8("Toolkit Menu"), KNumItems, ids, idNames ); + + //generate the terminal response + RSat::TSetUpMenuRspV1 resp; + RSat::TSetUpMenuRspV1Pckg respPck(resp); + + resp.iGeneralResult = RSat::KSuccess; + resp.iInfoType = RSat::KNoAdditionalInfo; + resp.iAdditionalInfo.Zero(); + resp.SetPCmdNumber(cmdNumber); + GenerateTerminalResponseL(cmdNumber, KSetUpMenu, KSelectionUsingSoftKey, RSat::ESetUpMenu, + respPck, resp.iAdditionalInfo, resp.iGeneralResult); + AssertMockLtsyStatusL(); + + // now end session + EndProactiveSimSessionL(); + + // select second item + SelectMenuItemL(ids[1]); + + AssertMockLtsyStatusL(); + + CleanupStack::PopAndDestroy(1, this); + } + + +/** +@SYMTestCaseID BA-CSAT-SUM-SNSUMPC-0001f +@SYMPREQ 1780 +@SYMComponent telephony_csat +@SYMTestCaseDesc Test support in CSAT for RSat::NotifySetUpMenuPCmd - SET UP MENU (help request support) and ENVELOPE MENU SELECTION +@SYMTestPriority High +@SYMTestActions Invokes RSat::NotifySetUpMenuPCmd +@SYMTestExpectedResults Pass +@SYMTestType CT +*/ +void CCSatSetUpMenuFU::TestNotifySetUpMenuPCmd0001fL() + { + OpenEtelServerL(EUseExtendedError); + CleanupStack::PushL(TCleanupItem(Cleanup,this)); + OpenPhoneL(); + OpenSatL(); + + // Check SATTSY for handling error value + + TUint8 cmdNumber = 1; + const TInt KNumItems = 4; + + TUint8 ids[KNumItems] = {1, 2, 3, 4}; + TPtrC8 idNames[KNumItems] = {_L8("Item 1"), _L8("Item 2"), _L8("Item 3"), _L8("Item 4")}; + + SetUpMenuL( cmdNumber, KHelpAvailabilityMask, _L8("Toolkit Menu"), KNumItems, ids, idNames ); + + //generate the terminal response + RSat::TSetUpMenuRspV1 resp; + RSat::TSetUpMenuRspV1Pckg respPck(resp); + + resp.iGeneralResult = RSat::KSuccess; + resp.iInfoType = RSat::KNoAdditionalInfo; + resp.iAdditionalInfo.Zero(); + resp.SetPCmdNumber(cmdNumber); + GenerateTerminalResponseL(cmdNumber, KSetUpMenu, KHelpAvailabilityMask, RSat::ESetUpMenu, + respPck, resp.iAdditionalInfo, resp.iGeneralResult); + AssertMockLtsyStatusL(); + + // now end session + EndProactiveSimSessionL(); + AssertMockLtsyStatusL(); + + // select 2 + // now tell Mock to return KErrUnknown when dispatching forthcoming RSat::MenuSelection() + SelectMenuItemL(ids[1], ETrue, KErrUnknown); + AssertMockLtsyStatusL(); + + CleanupStack::PopAndDestroy(1, this); + } + + +/** +@SYMTestCaseID BA-CSAT-SUM-SNSUMPC-0001g +@SYMPREQ 1780 +@SYMComponent telephony_csat +@SYMTestCaseDesc Test support in CSAT for RSat::NotifySetUpMenuPCmd - SET UP MENU (UCS2 display in Cyrillic) and ENVELOPE MENU SELECTION +@SYMTestPriority High +@SYMTestActions Invokes RSat::NotifySetUpMenuPCmd +@SYMTestExpectedResults Pass +@SYMTestType CT +*/ +void CCSatSetUpMenuFU::TestNotifySetUpMenuPCmd0001gL() + { + //"hello" in russian + _LIT8(KMenu, + "\x80\x04\x17\x04\x14\x04\x20\x04\x10\x04\x12\x04\x21\x04\x22\x04\x12\x04\x23\x04\x19\x04\x22\x04\x15"); + + //"hello1", "hello2" etc... in russian + TPtrC8 idNames[4] = + {_L8("\x80\x04\x17\x04\x14\x04\x20\x04\x10\x04\x12\x04\x21\x04\x22\x04\x12\x04\x23\x04\x19\x04\x22\x04\x15\x00\x31"), + _L8("\x80\x04\x17\x04\x14\x04\x20\x04\x10\x04\x12\x04\x21\x04\x22\x04\x12\x04\x23\x04\x19\x04\x22\x04\x15\x00\x32"), + _L8("\x80\x04\x17\x04\x14\x04\x20\x04\x10\x04\x12\x04\x21\x04\x22\x04\x12\x04\x23\x04\x19\x04\x22\x04\x15\x00\x33"), + _L8("\x80\x04\x17\x04\x14\x04\x20\x04\x10\x04\x12\x04\x21\x04\x22\x04\x12\x04\x23\x04\x19\x04\x22\x04\x15\x00\x34")}; + + //"hello5", "hello6" in russian + TPtrC8 idNames2[2] = + {_L8("\x80\x04\x17\x04\x14\x04\x20\x04\x10\x04\x12\x04\x21\x04\x22\x04\x12\x04\x23\x04\x19\x04\x22\x04\x15\x00\x35"), + _L8("\x80\x04\x17\x04\x14\x04\x20\x04\x10\x04\x12\x04\x21\x04\x22\x04\x12\x04\x23\x04\x19\x04\x22\x04\x15\x00\x36")}; + + CheckForeignSetUpMenuL(KMenu, idNames, idNames2); + } + + +/** +@SYMTestCaseID BA-CSAT-SUM-SNSUMPC-0001h +@SYMPREQ 1780 +@SYMComponent telephony_csat +@SYMTestCaseDesc Test support in CSAT for RSat::NotifySetUpMenuPCmd - SET UP MENU (UCS2 display in Chinese) and ENVELOPE MENU SELECTION +@SYMTestPriority High +@SYMTestActions Invokes RSat::NotifySetUpMenuPCmd +@SYMTestExpectedResults Pass +@SYMTestType CT +*/ +void CCSatSetUpMenuFU::TestNotifySetUpMenuPCmd0001hL() + { + //"Toolkit menu" in chinese + _LIT8(KMenu, "\x80\x5D\xE5\x51\x77\x7B\xB1\x53\x55"); + + //"Item 1", "Item 2" etc. in chinese + TPtrC8 idNames[4] = + {_L8("\x80\x98\x79\x76\xEE\x4E\x00"), + _L8("\x80\x98\x79\x76\xEE\x4E\x8C"), + _L8("\x80\x98\x79\x76\xEE\x4E\x09"), + _L8("\x80\x98\x79\x76\xEE\x56\xDB")}; + + //"One", "two" in chinese + TPtrC8 idNames2[2] = + {_L8("\x80\x4E\x00"), + _L8("\x80\x4E\x8C")}; + + CheckForeignSetUpMenuL(KMenu, idNames, idNames2); + } + + +/** +@SYMTestCaseID BA-CSAT-SUM-SNSUMPC-0001i +@SYMPREQ 1780 +@SYMComponent telephony_csat +@SYMTestCaseDesc Test support in CSAT for RSat::NotifySetUpMenuPCmd - SET UP MENU (UCS2 display in Katakana) and ENVELOPE MENU SELECTION +@SYMTestPriority High +@SYMTestActions Invokes RSat::NotifySetUpMenuPCmd +@SYMTestExpectedResults Pass +@SYMTestType CT +*/ +void CCSatSetUpMenuFU::TestNotifySetUpMenuPCmd0001iL() + { + //Menu Header and menu items use characters in Katakana + _LIT8(KMenu, "\x80\x00\x38\x00\x30\x30\xEB\x00\x30"); + + TPtrC8 idNames[4] = + {_L8("\x80\x00\x38\x00\x30\x30\xEB\x00\x31"), + _L8("\x80\x00\x38\x00\x30\x30\xEB\x00\x32"), + _L8("\x80\x00\x38\x00\x30\x30\xEB\x00\x33"), + _L8("\x80\x00\x38\x00\x30\x30\xEB\x00\x34")}; + + //second menu items use characters in Katakana + TPtrC8 idNames2[2] = + {_L8("\x80\x00\x38\x00\x30\x30\xEB\x00\x35"), + _L8("\x80\x00\x38\x00\x30\x30\xEB\x00\x36")}; + + CheckForeignSetUpMenuL(KMenu, idNames, idNames2); + } + + +/** +* auxiliary function for testing different types of menu alignment +* @param aAlign - type of alignment for tvl text formatting +*/ +void CCSatSetUpMenuFU::CheckMenuAlignmentL(TUint8 aAlign) + { + TUint8 cmdNumber = 1; + TUint8 noPref = 0; + const TInt KNumItems = 3; + _LIT8(KMenu1, "Toolkit Menu 1"); + + TUint8 ids[KNumItems] = {1, 2, 3}; + TPtrC8 idNames[KNumItems] = {_L8("Item 1"), _L8("Item 2"), _L8("Item 3")}; + TUint8 alphaFormatting[RSat::KTextAttributeBufSize] = + { + 0, //formatting position + 14, //text length + aAlign, + 0xB4 //Dark Green Foreground(0x04), Bright Yellow Background(0xB0) + }; + TUint8 itemsFormatting[KNumItems][RSat::KTextAttributeBufSize] = + {{ 0, 6, aAlign ,0xB4 }, + { 0, 6, aAlign ,0xB4 }, + { 0, 6, aAlign ,0xB4 }}; + + //Text attributes are not parsed in CSatNotifySetUpMenu::CompleteNotifyL() + + ERR_PRINTF2(_L("$CSATKnownFailure: defect id = %d"), 6); + + SetUpMenuL( cmdNumber, noPref, KMenu1, KNumItems, ids, idNames, NULL, + RSat::EIconQualifierNotSet, 0, RSat::EIconQualifierNotSet, NULL, + alphaFormatting, itemsFormatting ); + + + //generate the terminal response + RSat::TSetUpMenuRspV1 resp; + RSat::TSetUpMenuRspV1Pckg respPck(resp); + + resp.iGeneralResult = RSat::KSuccess; + resp.iInfoType = RSat::KNoAdditionalInfo; + resp.iAdditionalInfo.Zero(); + resp.SetPCmdNumber(cmdNumber); + GenerateTerminalResponseL(cmdNumber, KSetUpMenu, noPref, RSat::ESetUpMenu, + respPck, resp.iAdditionalInfo, resp.iGeneralResult); + AssertMockLtsyStatusL(); + + // now end session + EndProactiveSimSessionL(); + + // select second item + SelectMenuItemL(ids[1]); + + AssertMockLtsyStatusL(); + + // second menu + TUint8 ids2[KNumItems] = {4, 5, 6}; + TPtrC8 idNames2[KNumItems] = {_L8("Item 4"), _L8("Item 5"), _L8("Item 6") }; + _LIT8(KMenu2, "Toolkit Menu 2"); + + SetUpMenuL( cmdNumber, noPref, KMenu2, KNumItems, ids2, idNames2 ); + + GenerateTerminalResponseL(cmdNumber, KSetUpMenu, noPref, RSat::ESetUpMenu, + respPck, resp.iAdditionalInfo, resp.iGeneralResult); + AssertMockLtsyStatusL(); + + // now end session + EndProactiveSimSessionL(); + + // select second item + SelectMenuItemL(ids2[1]); + + AssertMockLtsyStatusL(); + } + + +/** +@SYMTestCaseID BA-CSAT-SUM-SNSUMPC-0001j +@SYMPREQ 1780 +@SYMComponent telephony_csat +@SYMTestCaseDesc Test support in CSAT for RSat::NotifySetUpMenuPCmd - SET UP MENU (normal) and ENVELOPE MENU SELECTION +@SYMTestPriority High +@SYMTestActions Invokes RSat::NotifySetUpMenuPCmd +@SYMTestExpectedResults Pass +@SYMTestType CT +*/ +void CCSatSetUpMenuFU::TestNotifySetUpMenuPCmd0001jL() + { + OpenEtelServerL(EUseExtendedError); + CleanupStack::PushL(TCleanupItem(Cleanup,this)); + OpenPhoneL(); + OpenSatL(); + + // Expected Sequence 1.1 + //(SET UP MENU and MENU SELECTION, without Help Request, Replace and Remove a Toolkit Menu) + // See ETSI TS 102 384 [26] in subclause 27.22.4.8.1.4.2, Expected Sequence 1.1. + + TUint8 cmdNumber = 1; + TUint8 noPref(0); // no selection preferences + const TInt KNumItems = 4; + + TUint8 ids[KNumItems] = {1, 2, 3, 4}; + TPtrC8 idNames[KNumItems] = {_L8("Item 1"), _L8("Item 2"), _L8("Item 3"), _L8("Item 4")}; + + SetUpMenuL( cmdNumber, noPref, _L8("Toolkit Menu"), KNumItems, ids, idNames ); + + //generate the terminal response + RSat::TSetUpMenuRspV1 resp; + RSat::TSetUpMenuRspV1Pckg respPck(resp); + + resp.iGeneralResult = RSat::KSuccess; + resp.iInfoType = RSat::KNoAdditionalInfo; + resp.iAdditionalInfo.Zero(); + resp.SetPCmdNumber(cmdNumber); + + GenerateTerminalResponseL(cmdNumber, KSetUpMenu, noPref, RSat::ESetUpMenu, + respPck, resp.iAdditionalInfo, resp.iGeneralResult); + AssertMockLtsyStatusL(); + + // now end session + EndProactiveSimSessionL(); + + // select second item + SelectMenuItemL(ids[1]); + + // making second menu instead of first + const TInt KNumItems2 = 2; + + TUint8 ids2[KNumItems2] = {11, 12}; + TPtrC8 idNames2[KNumItems2] = {_L8("One"), _L8("Two")}; + + SetUpMenuL( cmdNumber, noPref, _L8("Toolkit Menu"), KNumItems2, ids2, idNames2 ); + + //generate the terminal response + GenerateTerminalResponseL(cmdNumber, KSetUpMenu, noPref, + RSat::ESetUpMenu, respPck, resp.iAdditionalInfo, resp.iGeneralResult); + AssertMockLtsyStatusL(); + + // now end session + EndProactiveSimSessionL(); + + // select second item + SelectMenuItemL(ids2[1]); + + AssertMockLtsyStatusL(); + + // remove the menu + SetUpMenuL( cmdNumber, noPref, _L8("Toolkit Menu"), 0, NULL, NULL ); + + //generate the terminal response + GenerateTerminalResponseL(cmdNumber,KSetUpMenu, noPref, RSat::ESetUpMenu, + respPck, resp.iAdditionalInfo, resp.iGeneralResult); + AssertMockLtsyStatusL(); + + // now end session + EndProactiveSimSessionL(); + AssertMockLtsyStatusL(); + + //Expected Sequence 1.2 + //(SET UP MENU, Large Menu with many items or with large items or with Large Alpha Identifier) + //See ETSI TS 102 384 [26] in subclause 27.22.4.8.1.4.2, Expected Sequence 1.2. + + // setup large menu + const TInt KNumItems3 = 30; + + TUint8 ids3[KNumItems3] = + {0x50, 0x4f, 0x4e, 0x4d, 0x4c, 0x4b, 0x4a, 0x49, 0x48, 0x47, 0x46, 0x45, 0x44, 0x43, 0x42, 0x41, + 0x40, 0x3f, 0x3e, 0x3d, 0x3c, 0x3b, 0x3a, 0x39, 0x38, 0x37, 0x36, 0x35, 0x34, 0x33}; + TPtrC8 idNames3[KNumItems3] = + {_L8("Zero"), _L8("One"), _L8("Two"), _L8("Three"), _L8("Four"), _L8("Five"), _L8("Six"), _L8("Seven"), + _L8("Eight"), _L8("Nine"), _L8("Alpha"), _L8("Bravo"), _L8("Charlie"), _L8("Delta"), _L8("Echo"), + _L8("Fox-trot"), _L8("Black"), _L8("Brown"), _L8("Red"), _L8("Orange"), _L8("Yellow"), _L8("Green"), + _L8("Blue"), _L8("Violet"), _L8("Grey"), _L8("White"), _L8("milli"), _L8("micro"), _L8("nano"), _L8("pico")}; + + SetUpMenuL( cmdNumber, noPref, _L8("LargeMenu1"), KNumItems3, ids3, idNames3 ); + + //generate the terminal response + GenerateTerminalResponseL(cmdNumber, KSetUpMenu, noPref, RSat::ESetUpMenu, + respPck, resp.iAdditionalInfo, resp.iGeneralResult); + AssertMockLtsyStatusL(); + + // now end session + EndProactiveSimSessionL(); + + // select "Orange" 0x3d + SelectMenuItemL(ids3[20]); + + AssertMockLtsyStatusL(); + + // setup another large menu + const TInt KNumItems4 = 7; + + TUint8 ids4[KNumItems4] = {0xff, 0xfe, 0xfd, 0xfc, 0xfb, 0xfa, 0xf9}; + TPtrC8 idNames4[KNumItems4] = + {_L8("1 Call Forward Unconditional"), + _L8("2 Call Forward On User Busy"), + _L8("3 Call Forward On No Reply"), + _L8("4 Call Forward On User Not Reachable"), + _L8("5 Barring Of All Outgoing Calls"), + _L8("6 Barring Of All Outgoing Int Calls"), + _L8("7 CLI Presentation")}; + + SetUpMenuL( cmdNumber, noPref, _L8("LargeMenu2"), KNumItems4, ids4, idNames4 ); + + //generate the terminal response + GenerateTerminalResponseL(cmdNumber, KSetUpMenu, noPref, RSat::ESetUpMenu, + respPck, resp.iAdditionalInfo, resp.iGeneralResult); + AssertMockLtsyStatusL(); + + // now end session + EndProactiveSimSessionL(); + + // select 0xfb + SelectMenuItemL(ids4[4]); + + AssertMockLtsyStatusL(); + + // one more large menu + const TInt KNumItems5 = 1; + + _LIT8(KSetupMenuTest8,"The SIM shall supply a set of menu items, which shall be integrated with the\ +menu system (or other MMI facility) in order to give the user the opportunity to\ +choose one of these menu items at his own discretion. Each item comprises a sh"); + + TUint8 ids5[KNumItems5] = {0x01}; + TPtrC8 idNames5[KNumItems5] = {_L8("Y")}; + + SetUpMenuL( cmdNumber, noPref, KSetupMenuTest8, KNumItems5, ids5, idNames5 ); + + //generate the terminal response + GenerateTerminalResponseL(cmdNumber, KSetUpMenu, noPref, RSat::ESetUpMenu, + respPck, resp.iAdditionalInfo, resp.iGeneralResult); + AssertMockLtsyStatusL(); + + // now end session + EndProactiveSimSessionL(); + + // select 1 + SelectMenuItemL(ids5[0]); + + AssertMockLtsyStatusL(); + + CleanupStack::PopAndDestroy(1, this); + } + + +/** +@SYMTestCaseID BA-CSAT-SUM-SNSUMPC-0002 +@SYMPREQ 1780 +@SYMComponent telephony_csat +@SYMTestCaseDesc Test support in CSAT for cancelling of RSat::NotifySetUpMenuPCmd +@SYMTestPriority High +@SYMTestActions Invokes cancelling of RSat::NotifySetUpMenuPCmd +@SYMTestExpectedResults Pass +@SYMTestType CT +*/ +void CCSatSetUpMenuFU::TestNotifySetUpMenuPCmd0002L() + { + OpenEtelServerL(EUseExtendedError); + CleanupStack::PushL(TCleanupItem(Cleanup,this)); + OpenPhoneL(); + OpenSatL(); + + RBuf8 data; + CleanupClosePushL(data); + + TUint8 pcmdCode = KSetUpMenu; + TMockLtsyData1 expLtsyData(pcmdCode); + expLtsyData.SerialiseL(data); + iMockLTSY.ExpectL(MLtsyDispatchSatPCmdNotification::KLtsyDispatchSatPCmdNotificationApiId,data); + + RSat::TSetUpMenuV2 setupMenu; + RSat::TSetUpMenuV2Pckg setpPck(setupMenu); + TRequestStatus stat; + iSat.NotifySetUpMenuPCmd(stat, setpPck); + + iSat.CancelAsyncRequest(ESatNotifySetUpMenuPCmd); + + User::WaitForRequest(stat); + ASSERT_EQUALS(KErrCancel, stat.Int()); + + // There is no implementation for RSat::NotifySetUpMenuPCmdCancel(), declared in etelsat.h + ERR_PRINTF2(_L("$CSATKnownFailure: defect id = %d"), 3); + ASSERT_TRUE(EFalse); + + AssertMockLtsyStatusL(); + CleanupStack::PopAndDestroy(2, this); // data, this + } + + + +/** +@SYMTestCaseID BA-CSAT-SUM-SNSUMPC-0004 +@SYMPREQ 1780 +@SYMComponent telephony_csat +@SYMTestCaseDesc Test support in CSAT for multiple client requests to RSat::NotifySetUpMenuPCmd +@SYMTestPriority High +@SYMTestActions Invokes multiple client requests to RSat::NotifySetUpMenuPCmd +@SYMTestExpectedResults Pass +@SYMTestType CT +*/ +void CCSatSetUpMenuFU::TestNotifySetUpMenuPCmd0004L() + { + OpenEtelServerL(EUseExtendedError); + CleanupStack::PushL(TCleanupItem(Cleanup,this)); + OpenPhoneL(); + OpenSatL(); + + RBuf8 data; + CleanupClosePushL(data); + + // 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; + User::LeaveIfError(sat2.Open(phone2)); + CleanupClosePushL(sat2); + + TUint8 KPCmdNumber = 1; + + TTlv tlv; + tlv.Begin(KBerTlvProactiveSimCommandTag); + tlv.AddTag(KTlvCommandDetailsTag); + tlv.AddByte(KPCmdNumber);//ETLV_CommandNumber + tlv.AddByte(KSetUpMenu); //ETLV_TypeOfCommand + tlv.AddByte(0); //ETLV_CommandQualifier + + tlv.AddTag(KTlvDeviceIdentityTag); + tlv.AddByte(KSim); //ETLV_SourceDeviceIdentity + tlv.AddByte(KDisplay); //ETLV_DestinationDeviceIdentity + + tlv.AddTag(KTlvAlphaIdentifierTag); + _LIT8(KSetupMenuTest8,"Menu AlphaIdent"); + _LIT16(KSetupMenuTest16,"Menu AlphaIdent"); + tlv.AddData(KSetupMenuTest8);//ETLV_AlphaIdentifier + + const TUint8 KItemId = 77; + _LIT8(KItem8, "Item AlphaIdent1"); + _LIT16(KItem16, "Item AlphaIdent1"); + + tlv.AddTag(KTlvItemTag); + tlv.AddByte(KItemId); //item identifier + tlv.AddData(KItem8); + + TPtrC8 tlvDsc = tlv.End(); + TDesC8* tlvDscPtr = &tlvDsc; + + TMockLtsyData1 tlvDscPack(tlvDscPtr); + + // tell Mock about forthcoming RSat::NotifySetUpMenuPCmd + TUint8 pcmdCode = KSetUpMenu; + TMockLtsyData1 expLtsyData(pcmdCode); + expLtsyData.SerialiseL(data); + iMockLTSY.ExpectL(MLtsyDispatchSatPCmdNotification::KLtsyDispatchSatPCmdNotificationApiId,data); + data.Close(); + + tlvDscPack.SerialiseL(data); + iMockLTSY.CompleteL(KMockLtsyDispatchSatPcmdIndId, KErrNone, data, KDelay); + + RSat::TSetUpMenuV2 setupMenu; + RSat::TSetUpMenuV2 setupMenu2; + RSat::TSetUpMenuV2Pckg setpPck(setupMenu); + RSat::TSetUpMenuV2Pckg setpPck2(setupMenu2); + TRequestStatus stat; + TRequestStatus stat2; + iSat.NotifySetUpMenuPCmd(stat, setpPck); + sat2.NotifySetUpMenuPCmd(stat2, setpPck2); + + User::WaitForRequest(stat); + ASSERT_EQUALS(KErrNone, stat.Int()); + + ASSERT_EQUALS(KPCmdNumber, setupMenu.PCmdNumber()); + ASSERT_EQUALS(RSat::ENoSelectionPreference, setupMenu.iPreference); + ASSERT_EQUALS((TInt)EFalse, setupMenu.IsRemoveMenu()); + + RSat::TItem item; + ASSERT_EQUALS( KErrNone, setupMenu.GetItem( 1, item)); + ASSERT_EQUALS( KItemId, (item.iItemId)); + ASSERT_EQUALS(0, item.iItemString.Compare(KItem16)); + ASSERT_EQUALS((TUint)1, setupMenu.NumberOfItems()); + ASSERT_EQUALS(RSat::ENoHelpAvailable, setupMenu.iHelp); + ASSERT_EQUALS( RSat::ENoIconId, setupMenu.iIconId.iQualifier); + ASSERT_EQUALS( RSat::ENoIconId, setupMenu.iIconListQualifier); + + ASSERT_EQUALS(0, setupMenu.iAlphaId.iAlphaId.Compare(KSetupMenuTest16)); + ASSERT_EQUALS(RSat::EAlphaIdProvided, setupMenu.iAlphaId.iStatus); + + User::WaitForRequest(stat2); + ASSERT_EQUALS(KErrNone, stat2.Int()); + + ASSERT_EQUALS(KPCmdNumber, setupMenu2.PCmdNumber()); + ASSERT_EQUALS(RSat::ENoSelectionPreference, setupMenu2.iPreference); + ASSERT_EQUALS((TInt)EFalse, setupMenu2.IsRemoveMenu()); + ASSERT_EQUALS( KErrNone, setupMenu2.GetItem( 1, item)); + ASSERT_EQUALS( KItemId, item.iItemId); + ASSERT_EQUALS(0, item.iItemString.Compare(KItem16)); + ASSERT_EQUALS((TUint)1, setupMenu2.NumberOfItems()); + ASSERT_EQUALS(RSat::ENoHelpAvailable, setupMenu2.iHelp); + ASSERT_EQUALS( RSat::ENoIconId, setupMenu2.iIconId.iQualifier); + ASSERT_EQUALS( RSat::ENoIconId, setupMenu2.iIconListQualifier); + ASSERT_EQUALS(0, setupMenu2.iAlphaId.iAlphaId.Compare(KSetupMenuTest16)); + ASSERT_EQUALS(RSat::EAlphaIdProvided, setupMenu2.iAlphaId.iStatus); + + AssertMockLtsyStatusL(); + CleanupStack::PopAndDestroy(5, this); + } + + +/** +* auxiliary function for testing different fonts in set up menu +* @param aFontParam - type of font for tvl text formatting +*/ +void CCSatSetUpMenuFU::CheckMenuFontL(TUint8 aFontParam) + { + TUint8 cmdNumber = 1; + TUint8 noPref = 0; + const TInt KNumItems = 3; + _LIT8(KMenu1, "Toolkit Menu 1"); + + TUint8 ids[KNumItems] = {1, 2, 3}; + TPtrC8 idNames[KNumItems] = {_L8("Item 1"), _L8("Item 2"), _L8("Item 3")}; + TUint8 alphaFormatting[RSat::KTextAttributeBufSize] = + { + 0, //formatting position + 14, //text length + aFontParam, + 0xB4 //Dark Green Foreground(0x04), Bright Yellow Background(0xB0) + }; + TUint8 itemsFormatting[KNumItems][RSat::KTextAttributeBufSize] = + {{ 0, 6, aFontParam ,0xB4 }, + { 0, 6, aFontParam ,0xB4 }, + { 0, 6, aFontParam ,0xB4 }}; + + SetUpMenuL( cmdNumber, noPref, KMenu1, KNumItems, ids, idNames, NULL, + RSat::EIconQualifierNotSet, 0, RSat::EIconQualifierNotSet, NULL, + alphaFormatting, itemsFormatting ); + + + //generate the terminal response + RSat::TSetUpMenuRspV1 resp; + RSat::TSetUpMenuRspV1Pckg respPck(resp); + + resp.iGeneralResult = RSat::KSuccess; + resp.iInfoType = RSat::KNoAdditionalInfo; + resp.iAdditionalInfo.Zero(); + resp.SetPCmdNumber(cmdNumber); + GenerateTerminalResponseL(cmdNumber, KSetUpMenu, noPref, RSat::ESetUpMenu, + respPck, resp.iAdditionalInfo, resp.iGeneralResult); + AssertMockLtsyStatusL(); + + // now end session + EndProactiveSimSessionL(); + + // select second item + SelectMenuItemL(ids[1]); + + AssertMockLtsyStatusL(); + + // second menu + TUint8 ids2[KNumItems] = {4, 5, 6}; + TPtrC8 idNames2[KNumItems] = {_L8("Item 4"), _L8("Item 5"), _L8("Item 6") }; + _LIT8(KMenu2, "Toolkit Menu 2"); + + alphaFormatting[2] = 0x00; // normal font + itemsFormatting[0][2] = itemsFormatting[1][2] = itemsFormatting[2][2] = 0x00; + + SetUpMenuL( cmdNumber, noPref, KMenu2, KNumItems, ids2, idNames2, NULL, + RSat::EIconQualifierNotSet, 0, RSat::EIconQualifierNotSet, NULL, + alphaFormatting, itemsFormatting ); + + GenerateTerminalResponseL(cmdNumber, KSetUpMenu, noPref, RSat::ESetUpMenu, + respPck, resp.iAdditionalInfo, resp.iGeneralResult); + AssertMockLtsyStatusL(); + + // now end session + EndProactiveSimSessionL(); + + // select second item + SelectMenuItemL(ids2[1]); + + AssertMockLtsyStatusL(); + + // first menu again + alphaFormatting[2] = aFontParam; + itemsFormatting[0][2] = itemsFormatting[1][2] = itemsFormatting[2][2] = aFontParam; + + SetUpMenuL( cmdNumber, noPref, KMenu1, KNumItems, ids, idNames, NULL, + RSat::EIconQualifierNotSet, 0, RSat::EIconQualifierNotSet, NULL, + alphaFormatting, itemsFormatting ); + + GenerateTerminalResponseL(cmdNumber, KSetUpMenu, noPref, RSat::ESetUpMenu, + respPck, resp.iAdditionalInfo, resp.iGeneralResult); + AssertMockLtsyStatusL(); + + // now end session + EndProactiveSimSessionL(); + + // select second item + SelectMenuItemL(ids[1]); + + AssertMockLtsyStatusL(); + + // third menu + TUint8 ids3[KNumItems] = {7, 8, 9}; + TPtrC8 idNames3[KNumItems] = {_L8("Item 7"), _L8("Item 8"), _L8("Item 9") }; + _LIT8(KMenu3, "Toolkit Menu 3"); + + SetUpMenuL( cmdNumber, noPref, KMenu3, KNumItems, ids3, idNames3 ); + + GenerateTerminalResponseL(cmdNumber, KSetUpMenu, noPref, RSat::ESetUpMenu, + respPck, resp.iAdditionalInfo, resp.iGeneralResult); + AssertMockLtsyStatusL(); + + // now end session + EndProactiveSimSessionL(); + + // select second item + SelectMenuItemL(ids3[1]); + + AssertMockLtsyStatusL(); + } + + +/** +* End Proactive Sim Session +*/ +void CCSatSetUpMenuFU::EndProactiveSimSessionL() + { + RBuf8 data; + CleanupClosePushL(data); + + TRequestStatus reqStatus; + TRequestStatus mockLtsyStatus; + + TUint8 proactiveCommandType = KEndOfTheProactiveSession; + + //this is as a result of the NotifyProactiveSimSessionEnd call down to the LTSY, + //this tells the LTSY we are interested in a Sim Session End event + //CTSY -> LTSY + TMockLtsyData1 proactiveCommandTypeDataPack(proactiveCommandType); + proactiveCommandTypeDataPack.SerialiseL(data); + iMockLTSY.ExpectL(MLtsyDispatchSatPCmdNotification::KLtsyDispatchSatPCmdNotificationApiId,data); + data.Close(); + + //the client side call to be notifed when the Proactive Sim Session has ended. + iSat.NotifyProactiveSimSessionEnd(reqStatus); + + //sometime later the Sim Session ends, indicator up + //LTSY -> CTSY + + TUint8 statusWord1 = KSw1NormalEnding; + TUint8 statusWord2 = KSw2NormalEnding; + + TMockLtsyData2 notifyProactiveSimSessionEndDataPack(statusWord1,statusWord2); + notifyProactiveSimSessionEndDataPack.SerialiseL(data); + iMockLTSY.CompleteL(KMockLtsyDispatchSatNotifyProactiveSimSessionEndIndId,KErrNone,data, KDelay); + + //wait for the client side to be notified + User::WaitForRequest(reqStatus); + ASSERT_EQUALS(KErrNone, reqStatus.Int()); + AssertMockLtsyStatusL(); + + CleanupStack::PopAndDestroy(1); + } + + +/** +* prepare and call Set Sup Menu proactive command +* @param aCmdNum - command number +* @param aCmdQual - command details +* @param aAlpha - alpha identifier +* @param aNumItems - number of menu items +* @param aItemIds - array of menu items identifier +* @param aItemNames - array of menu items names +* @param aAction - array of next actions +* @param aIconQual - type of icon +* @param aIcon - icon itself +* @param aIconListQual - type of icons for menu items +* @param aIconList- array of icons for menu items +* @param aAlphaFormating- array of KTextAttributeBufSize bytes for alpha identifier formatting +* @param aItemFormating- array for item strings formating +*/ +void CCSatSetUpMenuFU::SetUpMenuL(TUint8 aCmdNum, + TUint8 aCmdQual, + const TDesC8& aAlpha, + TUint8 aNumItems, + TUint8 aItemIds[], + TPtrC8 aItemNames[], + TUint8 aAction[], + RSat::TIconQualifier aIconQual, + TUint8 aIcon, + RSat::TIconQualifier aIconListQual, + TUint8 aIconList[], + TUint8 aAlphaFormating[], + TUint8 aItemFormating[][RSat::KTextAttributeBufSize]) + { + RBuf8 data; + CleanupClosePushL(data); + + // tell Mock about forthcoming RSat::NotifySetUpMenuPCmd + TUint8 pcmdCode = KSetUpMenu; + TMockLtsyData1 expLtsyData(pcmdCode); + expLtsyData.SerialiseL(data); + iMockLTSY.ExpectL(MLtsyDispatchSatPCmdNotification::KLtsyDispatchSatPCmdNotificationApiId, data); + + TTlv tlv; + tlv.Begin(KBerTlvProactiveSimCommandTag); + tlv.AddTag(KTlvCommandDetailsTag); + tlv.AddByte(aCmdNum);//ETLV_CommandNumber + tlv.AddByte(KSetUpMenu); //ETLV_TypeOfCommand + tlv.AddByte(aCmdQual); //ETLV_CommandQualifier + + tlv.AddTag(KTlvDeviceIdentityTag); + tlv.AddByte(KSim); //ETLV_SourceDeviceIdentity + tlv.AddByte(KDisplay); //ETLV_DestinationDeviceIdentity + + if(0 < aAlpha.Size()) + { + tlv.AddTag(KTlvAlphaIdentifierTag); + tlv.AddData(aAlpha);//ETLV_AlphaIdentifier + } + + for( TInt i = 0; i < aNumItems; i++) + { + tlv.AddTag(KTlvItemTag); + tlv.AddByte(aItemIds[i]); //item identifier + tlv.AddData(aItemNames[i]); + } + + if(aAction) + { + tlv.AddTag(KTlvItemsNextActionIndicatorTag); + + for( TInt i = 0; i < aNumItems; i++) + { + tlv.AddByte(aAction[i]); + } + } + + // constants for coding icon details + const TUint8 KSelfExp = 0x00; + const TUint8 KNotSelfExp = 0x01; + + if(RSat::EIconQualifierNotSet != aIconQual) + { + tlv.AddTag(KTlvIconIdentifierTag); + tlv.AddByte((RSat::ESelfExplanatory == aIconQual) ? KSelfExp : KNotSelfExp); + tlv.AddByte(aIcon); + } + + if(RSat::EIconQualifierNotSet != aIconListQual) + { + tlv.AddTag(KTlvItemIconIdentifierListTag); + tlv.AddByte((RSat::ESelfExplanatory == aIconListQual) ? KSelfExp : KNotSelfExp); + + for( TInt i = 0; i < aNumItems; i++) + { + tlv.AddByte(aIconList[i]); + } + } + + if(aAlphaFormating) + { + tlv.AddTag(0x50); + tlv.AddByte(aAlphaFormating[0]); // text start + tlv.AddByte(aAlphaFormating[1]); // text length + tlv.AddByte(aAlphaFormating[2]); // formatting + tlv.AddByte(aAlphaFormating[3]); // colors + } + + if(aItemFormating) + { + tlv.AddTag(0x51); + + for(TInt i = 0; i < aNumItems; i++) + { + tlv.AddByte(aItemFormating[i][0]); + tlv.AddByte(aItemFormating[i][1]); + tlv.AddByte(aItemFormating[i][2]); + tlv.AddByte(aItemFormating[i][3]); + } + } + + TPtrC8 tlvDsc = tlv.End(); + TDesC8* tlvDscPtr = &tlvDsc; + + data.Close(); + + TMockLtsyData1 tlvDscPack(tlvDscPtr); + tlvDscPack.SerialiseL(data); + iMockLTSY.CompleteL(KMockLtsyDispatchSatPcmdIndId,KErrNone,data, KDelay); + + RSat::TSetUpMenuV5 setupMenu; + RSat::TSetUpMenuV5Pckg setpPck(setupMenu); + TRequestStatus requestStatus; + + iSat.NotifySetUpMenuPCmd(requestStatus, setpPck); + + User::WaitForRequest(requestStatus); + + ASSERT_EQUALS(KErrNone, requestStatus.Int()); + + ASSERT_EQUALS(aCmdNum, setupMenu.PCmdNumber()); + + if ( aCmdQual & KSelectionUsingSoftKey ) + { + ASSERT_EQUALS(RSat::ESoftKeyPreferred, setupMenu.iPreference); + } + else + { + ASSERT_EQUALS(RSat::ENoSelectionPreference, setupMenu.iPreference); + } + + if(0 < aNumItems) + { + ASSERT_EQUALS((TInt)EFalse, setupMenu.IsRemoveMenu()); + + RBuf16 data16; + CleanupClosePushL(data16); + + for(TInt i = 0; i < aNumItems; i++) + { + RSat::TItem item; + RSat::TTextAttribute attr; + ASSERT_EQUALS( KErrNone, setupMenu.GetItem( i + 1, item, attr)); + ASSERT_EQUALS( aItemIds[i], item.iItemId); + + data16.CreateL(aItemNames[i].Length()); + + TSatUtility::SetAlphaId( aItemNames[i], data16); + + ASSERT_EQUALS(0, item.iItemString.Compare(data16)); + + if(aItemFormating) + { + ASSERT_EQUALS(RSat::ETextAttributeProvided, attr.iStatus); + ASSERT_EQUALS(aItemFormating[i][0], attr.iTextAttributeData[0]); + ASSERT_EQUALS(aItemFormating[i][1], attr.iTextAttributeData[1]); + ASSERT_EQUALS(aItemFormating[i][2], attr.iTextAttributeData[2]); + ASSERT_EQUALS(aItemFormating[i][3], attr.iTextAttributeData[3]); + } + } + CleanupStack::PopAndDestroy(1); + } + else + { + ASSERT_EQUALS((TInt)ETrue, setupMenu.IsRemoveMenu()); + } + + ASSERT_EQUALS((TUint)aNumItems, setupMenu.NumberOfItems()); + + if ( aCmdQual & KHelpAvailabilityMask ) + { + ASSERT_EQUALS(RSat::EHelpAvailable, setupMenu.iHelp); + } + else + { + ASSERT_EQUALS(RSat::ENoHelpAvailable, setupMenu.iHelp); + } + + if(aAlphaFormating) + { + ASSERT_EQUALS(RSat::ETextAttributeProvided, setupMenu.iTextAttribute.iStatus); + ASSERT_EQUALS(aAlphaFormating[0], setupMenu.iTextAttribute.iTextAttributeData[0]); + ASSERT_EQUALS(aAlphaFormating[1], setupMenu.iTextAttribute.iTextAttributeData[1]); + ASSERT_EQUALS(aAlphaFormating[2], setupMenu.iTextAttribute.iTextAttributeData[2]); + ASSERT_EQUALS(aAlphaFormating[3], setupMenu.iTextAttribute.iTextAttributeData[3]); + } + else + { + ASSERT_EQUALS(RSat::ETextAttributeNotSet, setupMenu.iTextAttribute.iStatus); + } + + if(RSat::EIconQualifierNotSet != aIconQual) + { + ASSERT_EQUALS( aIconQual, setupMenu.iIconId.iQualifier); + ASSERT_EQUALS( aIcon, setupMenu.iIconId.iIdentifier); + } + else + { + ASSERT_EQUALS( RSat::ENoIconId, setupMenu.iIconId.iQualifier); + } + + if(RSat::EIconQualifierNotSet != aIconListQual) + { + RSat::TItem item; + TInt iconId; + + for( TInt i = 0; i < aNumItems; i++) + { + setupMenu.GetItemIcon(i+1, item, iconId); + ASSERT_EQUALS((TInt)aIconList[i], iconId); + } + } + else + { + ASSERT_EQUALS( RSat::ENoIconId, setupMenu.iIconListQualifier); + } + + if(aAction) + { + RSat::TItem item; + TInt action; + + for( TInt i = 0; i < aNumItems; i++) + { + setupMenu.GetItem(i+1, item, action); + ASSERT_EQUALS((TInt)aAction[i], action); + } + } + + RBuf16 data16; + CleanupClosePushL(data16); + + data16.CreateL(aAlpha.Length()); + + TSatUtility::SetAlphaId( aAlpha, data16); + + ASSERT_EQUALS(0, setupMenu.iAlphaId.iAlphaId.Compare(data16)); + ASSERT_EQUALS(RSat::EAlphaIdProvided, setupMenu.iAlphaId.iStatus); + + CleanupStack::PopAndDestroy(2); + } + + +/** +* prepare and make select menu call +* @param aItemId - item to select +* @param aRequestHelp - if help requested +* @param aErrorForExpect - error code to pass and expect +*/ +void CCSatSetUpMenuFU::SelectMenuItemL(TUint8 aItemId, TBool aRequestHelp, TInt aErrorForExpect ) + { + RBuf8 data; + CleanupClosePushL(data); + + TTlv menuSelTlv; + menuSelTlv.Begin( KBerTlvMenuSelectionTag ); + menuSelTlv.AddTag( KTlvDeviceIdentityTag ); + menuSelTlv.AddByte( KKeypad ); + menuSelTlv.AddByte( KSim ); + menuSelTlv.AddTag( KTlvItemIdentifierTag ); + menuSelTlv.AddByte( aItemId ); + if(aRequestHelp) + { + menuSelTlv.AddTag( KTlvHelpRequestTag ); + } + + TPtrC8 menuSelDsc = menuSelTlv.End(); + TDesC8* menuSelPtr = &menuSelDsc; + TMockLtsyData1 menuSelDescPck(menuSelPtr); + menuSelDescPck.SerialiseL(data); + + iMockLTSY.ExpectL(MLtsyDispatchSatMenuSelectionEnvelope::KLtsyDispatchSatMenuSelectionEnvelopeApiId, data, aErrorForExpect); + + RSat::TMenuSelectionV1 menuSel; + RSat::TMenuSelectionV1Pckg menuSelPckg(menuSel); + + menuSel.iItemId = aItemId; + menuSel.iHelp = aRequestHelp ? RSat::EHelpRequested : RSat::EHelpNotRequested; + + TRequestStatus stat; + + iSat.MenuSelection(stat, menuSelPckg); + User::WaitForRequest(stat); + ASSERT_EQUALS(aErrorForExpect, stat.Int()); + + CleanupStack::PopAndDestroy(1); + } + + +/** +* auxiliary function for testing different languages in set up menu +* @param aTitle - menu header +* @param aItemNames - first menu strings +* @param aItemNames - second menu strings +*/ +void CCSatSetUpMenuFU::CheckForeignSetUpMenuL(const TDesC8& aTitle, + TPtrC8 aItemNames[], + TPtrC8 aItemNames2[]) + { + OpenEtelServerL(EUseExtendedError); + CleanupStack::PushL(TCleanupItem(Cleanup,this)); + OpenPhoneL(); + OpenSatL(); + + //(SET UP MENU and MENU SELECTION, without Help Request, Replace and Remove a Toolkit Menu) + + TUint8 cmdNumber = 1; + TUint8 noPref(0); // no selection preferences + const TInt KNumItems = 4; + + TUint8 ids[KNumItems] = {1, 2, 3, 4}; + + SetUpMenuL( cmdNumber, noPref, aTitle, KNumItems, ids, aItemNames ); + + //generate the terminal response + RSat::TSetUpMenuRspV1 resp; + RSat::TSetUpMenuRspV1Pckg respPck(resp); + + resp.iGeneralResult = RSat::KSuccess; + resp.iInfoType = RSat::KNoAdditionalInfo; + resp.iAdditionalInfo.Zero(); + resp.SetPCmdNumber(cmdNumber); + GenerateTerminalResponseL(cmdNumber, KSetUpMenu, noPref, RSat::ESetUpMenu, + respPck, resp.iAdditionalInfo, resp.iGeneralResult); + AssertMockLtsyStatusL(); + + // now end session + EndProactiveSimSessionL(); + + // select second item + SelectMenuItemL(ids[1]); + + // making second menu instead of first + const TInt KNumItems2 = 2; + + TUint8 ids2[KNumItems2] = {11, 12}; + + SetUpMenuL( cmdNumber, noPref, aTitle, KNumItems2, ids2, aItemNames2 ); + + //generate the terminal response + GenerateTerminalResponseL(cmdNumber, KSetUpMenu, noPref, RSat::ESetUpMenu, + respPck, resp.iAdditionalInfo, resp.iGeneralResult); + AssertMockLtsyStatusL(); + + // now end session + EndProactiveSimSessionL(); + + // select second item + SelectMenuItemL(ids2[1]); + + AssertMockLtsyStatusL(); + + // remove the menu + SetUpMenuL( cmdNumber, noPref, aTitle, 0, NULL, NULL ); + + //generate the terminal response + GenerateTerminalResponseL(cmdNumber, KSetUpMenu, noPref, RSat::ESetUpMenu, + respPck, resp.iAdditionalInfo, resp.iGeneralResult); + AssertMockLtsyStatusL(); + + // now end session + EndProactiveSimSessionL(); + AssertMockLtsyStatusL(); + + CleanupStack::PopAndDestroy(1, this); + } +