phoneapp/phoneuicontrol/tsrc/ut_cphonestate/src/ut_cphonestate.cpp
changeset 77 2be0b271d017
child 76 cfea66083b62
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/phoneapp/phoneuicontrol/tsrc/ut_cphonestate/src/ut_cphonestate.cpp	Mon Oct 04 00:16:48 2010 +0300
@@ -0,0 +1,1033 @@
+/*
+* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies). 
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:
+*
+*/
+
+#include <csmcmockcontext.h>
+#include <smcdefaultvalue.h>
+#include <msmcmockspecbuilder.h>
+#include <smcobjecttotypemapper.h>
+#include <smcmacros.h>
+#include <msmcmockaction.h>
+#include <EUnitMacros.h>
+#include <EUnitDecorators.h>
+#include <featmgr.h>
+#include <eikmenup.h>
+#include <eikmenub.h> 
+#include <HWRMDomainPSKeys.h>
+#include <PhoneUI.rsg>
+#include <StartupDomainPSKeys.h>
+#include <coreapplicationuisdomainpskeys.h>
+
+#include "ut_cphonestate.h"
+#include "CPhoneMainResourceResolver.h"
+#include "CPhoneStateMachineGSM.h"
+#include "PEVirtualEngine.h"
+#include "MPhoneKeyEvents.h"
+#include "TPhoneCommandParam.h"
+#include "TPhoneCmdParamCallHeaderData.h"
+#include "TPhoneCmdParamAudioOutput.h"
+#include "cpeengineinfo.h"
+#include "cpeengineinfoimpl.h"
+#include "phonerssbase.h"
+#include "phonestatedefinitionsgsm.h"
+#include "TPhoneCmdParamInteger.h"
+#include "TPhoneCmdParamKeyEvent.h"
+#include "TPhoneCmdParamGlobalNote.h"
+#include "TPhoneCmdParamBoolean.h"
+#include "TPhoneCmdParamString.h"
+#include "TPhoneCmdParamCallStateData.h"
+#include "mphonecustomization.h"
+#include "telephonyvariant.hrh"
+#include "phoneappcommands.hrh"
+#include "phoneconstants.h"
+#include "cphonecustomizationvoip.h"
+#include "tphonecmdparamglobalnote.h"
+
+#define private friend class ut_cphonestate;private
+#include "cphonestate_tester.h"
+
+// needed for mocking CPhoneMainResourceResolver::Instance()
+class CPhoneMainResourceResolverMock : public CPhoneMainResourceResolver
+    {
+    };
+
+TPEPhoneAudioRouteParameters routeParameters;
+
+// this is set true if there is no need check param id value.
+TBool doNotCheckParamId;
+
+// -----------------------------------------------------------------------------
+// operator for comparing parameter expected and result value.
+// -
+// -----------------------------------------------------------------------------
+//
+TBool operator==(const TPhoneCommandParam& param1, const TPhoneCommandParam& param2 )
+    {
+    TBool ret( ETrue );
+    
+    if ( param1.ParamId() == param2.ParamId() )
+        {
+    
+        if ( TPhoneCommandParam::EPhoneParamIdInteger == param1.ParamId() )
+            {
+            const TPhoneCmdParamInteger  &value1 = static_cast<const TPhoneCmdParamInteger&> (param1);
+            const TPhoneCmdParamInteger  &value2 = static_cast<const TPhoneCmdParamInteger&> (param2);
+            if ( value1.Integer() != value2.Integer() )
+                {
+                ret = EFalse;
+                }
+            }
+        else if ( TPhoneCommandParam::EPhoneParamIdKeyEvent == param1.ParamId() )
+            {
+            const TPhoneCmdParamKeyEvent  &value1 = static_cast<const TPhoneCmdParamKeyEvent&> (param1);
+            const TPhoneCmdParamKeyEvent  &value2 = static_cast<const TPhoneCmdParamKeyEvent&> (param2);
+            if ( value1.EventCode() != value2.EventCode() )
+                {
+                ret = EFalse;
+                }
+            }
+        else if ( TPhoneCommandParam::EPhoneParamIdGlobalNote == param1.ParamId() )
+            {
+            const TPhoneCmdParamGlobalNote  &value1 = static_cast<const TPhoneCmdParamGlobalNote&> (param1);
+            const TPhoneCmdParamGlobalNote  &value2 = static_cast<const TPhoneCmdParamGlobalNote&> (param2);
+            if ( value1.Type() != value2.Type() )
+                {
+                ret = EFalse;
+                }
+            }
+        else if ( TPhoneCommandParam::EPhoneParamIdBoolean == param1.ParamId() && !doNotCheckParamId )
+            {
+            const TPhoneCmdParamBoolean  &value1 = static_cast<const TPhoneCmdParamBoolean&> (param1);
+            const TPhoneCmdParamBoolean  &value2 = static_cast<const TPhoneCmdParamBoolean&> (param2);
+            if ( value1.Boolean() != value2.Boolean() )
+                {
+                ret = EFalse;
+                }
+            } 
+        else
+            {
+            ret = ETrue;  // just paramiId compared
+            }
+        }
+    return ret;
+    }
+
+class CPhoneViewController : public CBase, public MPhoneViewCommandHandle
+{
+public:
+    CPhoneViewController() {}
+    ~CPhoneViewController() {}
+
+    void ExecuteCommandL( 
+        TPhoneViewCommandId aCmdId )
+    {
+        SMC_MOCK_METHOD1(void, TPhoneViewCommandId, aCmdId);
+    }
+
+
+    void ExecuteCommandL( 
+        TPhoneViewCommandId aCmdId, 
+        TInt aCallId )
+    {
+        SMC_MOCK_METHOD2(void, TPhoneViewCommandId, aCmdId, TInt, aCallId);
+    }
+
+
+    void ExecuteCommandL( 
+        TPhoneViewCommandId aCmdId, 
+        TPhoneCommandParam* aCommandParam )
+    {
+        SMC_MOCK_METHOD2(void, 
+            TPhoneViewCommandId, aCmdId, 
+            TPhoneCommandParam*, aCommandParam);
+    }
+
+    void ExecuteCommandL( 
+        TPhoneViewCommandId aCmdId, 
+        TInt aCallId, 
+        TPhoneCommandParam* aCommandParam )
+    {
+        SMC_MOCK_METHOD3(void, 
+            TPhoneViewCommandId, aCmdId,
+            TInt, aCallId, 
+            TPhoneCommandParam*, aCommandParam);
+    }
+
+    void ExecuteCommandL( 
+        TPhoneViewCommandId aCmdId, 
+        TInt aCallId, 
+        TDesC& aMessage )
+    {
+        SMC_MOCK_METHOD3(void, 
+            TPhoneViewCommandId, aCmdId,
+            TInt, aCallId, 
+            TDesC&, aMessage);
+    }
+
+    TPhoneViewResponseId HandleCommandL( 
+        TPhoneViewCommandId aCmdId )
+    {
+        SMC_MOCK_METHOD1(TPhoneViewResponseId, 
+            TPhoneViewCommandId, aCmdId);
+    }
+
+    TPhoneViewResponseId HandleCommandL( 
+        TPhoneViewCommandId aCmdId, 
+        TPhoneCommandParam* aCommandParam )
+    {
+        SMC_MOCK_METHOD2(TPhoneViewResponseId, 
+            TPhoneViewCommandId, aCmdId,
+            TPhoneCommandParam*, aCommandParam);
+    }
+
+    void ExecuteCommand( 
+        TPhoneViewCommandId aCmdId )
+    {
+        SMC_MOCK_METHOD1(void, 
+            TPhoneViewCommandId, aCmdId);
+    }
+        
+    void ExecuteCommand( 
+        TPhoneViewCommandId aCmdId, 
+        TPhoneCommandParam* aCommandParam )
+    {
+        SMC_MOCK_METHOD2(void, 
+            TPhoneViewCommandId, aCmdId,
+            TPhoneCommandParam*, aCommandParam);
+    }
+    
+    const TDesC& FetchContent() 
+    {
+        SMC_MOCK_METHOD0(const TDesC&);
+    };
+};
+
+// - Construction -----------------------------------------------------------
+
+ut_cphonestate* ut_cphonestate::NewL()
+    {
+    ut_cphonestate* self = ut_cphonestate::NewLC();
+    CleanupStack::Pop();
+    return self;
+    }
+
+ut_cphonestate* ut_cphonestate::NewLC()
+    {
+    ut_cphonestate* self = new( ELeave ) ut_cphonestate();
+    CleanupStack::PushL( self );
+    self->ConstructL();
+    return self;
+    }
+
+ut_cphonestate::~ut_cphonestate()
+    {
+    CSmcMockContext::Release();
+    }
+
+ut_cphonestate::ut_cphonestate()
+    {
+    }
+
+void ut_cphonestate::ConstructL()
+    {
+    CEUnitTestSuiteClass::ConstructL();
+    iMockContext = CSmcMockContext::InstanceL();
+    }
+
+// - Test methods -----------------------------------------------------------
+
+void ut_cphonestate::SetupL()
+    {
+    iMockContext->InitializeL();
+    
+    SmcDefaultValue<const TPESimState&>::SetL( EPESimUsable );
+    SmcDefaultValue<const TPEAudioOutput&>::SetL( EPENotActive );
+    SmcDefaultValue<const TPEPhoneAudioRouteParameters&>::SetL( routeParameters );
+    SmcDefaultValue<const TBool&>::SetL( EFalse );
+    SmcDefaultValue<const TProfileRingingType&>::SetL( EProfileRingingTypeRinging );
+     
+      
+    iCPhoneMainResourceResolverMock = new ( ELeave ) CPhoneMainResourceResolverMock();
+        SmcDefaultValue<CPhoneMainResourceResolver*>::SetL( iCPhoneMainResourceResolverMock );
+
+    iViewCmdHandleMock = new (ELeave) CPhoneViewController();
+
+    iStateMachineMock = CPhoneStateMachineGSM::NewL( iViewCmdHandleMock );
+
+    iEngineInfoMock = CPEEngineInfo::NewL();
+        SmcDefaultValue<MPEEngineInfo*>::SetL( iEngineInfoMock );
+        
+    iPhoneState = new( ELeave ) cphonestate_tester( iStateMachineMock, iViewCmdHandleMock, NULL );
+    iPhoneState->BaseConstructL();
+       
+    doNotCheckParamId = EFalse;
+    }
+
+void ut_cphonestate::Teardown(  )
+    {
+    delete iViewCmdHandleMock;
+        iViewCmdHandleMock = NULL;
+        
+    delete iCustomizationMock;
+        iCustomizationMock = NULL;
+            
+    delete iPhoneState;
+        iPhoneState = NULL;
+        
+    delete iStateMachineMock;
+        iStateMachineMock = NULL;
+        
+    delete iEngineInfoMock;
+        iEngineInfoMock = NULL;
+        
+    delete iCPhoneMainResourceResolverMock;
+        iCPhoneMainResourceResolverMock = NULL;
+        
+    SmcDefaultValue<const TPESimState&>::Reset();
+    SmcDefaultValue<const TPEAudioOutput&>::Reset();
+    SmcDefaultValue<const TPEPhoneAudioRouteParameters&>::Reset();
+    SmcDefaultValue<const TBool&>::Reset();
+    SmcDefaultValue<const TProfileRingingType&>::Reset();
+
+    iMockContext->Reset();
+    }
+    
+/**
+ *  Test name: Construction and destruct.
+ *  Use case: Construction and destruct.
+ *  Motivation: None.
+ *  stif ref: None.
+ */
+void ut_cphonestate::T_ConstructionL(  )
+    {
+    // SetupL and Teardown does the test.
+    }
+
+/**
+ *  Test name: Test method DisplayCallTerminationNoteL.
+ *  Use case: Test method DisplayCallTerminationNoteL.
+ *  Motivation: BDJR-7JLF76
+ *  stif ref: None.
+ */
+void ut_cphonestate::T_DisplayCallTerminationNoteL( )
+    {
+    
+    TPhoneCmdParamGlobalNote globalNoteParam;
+        globalNoteParam.SetType( EPhoneMessageBoxInformation );
+   
+    iMockContext->ExpectCallL( "CPhoneViewController::ExecuteCommandL" ).
+        WithL<TPhoneViewCommandId, TPhoneCommandParam&> ( 
+                EPhoneViewShowGlobalNote, 
+                globalNoteParam );
+      
+    iPhoneState->T_DisplayCallTerminationNoteL();
+    
+    EUNIT_ASSERT_EQUALS( KErrNone, iMockContext->VerifyExpectations() ); 
+    }
+
+/**
+ *  Test name: T_HandleKeyEventUpArrowNENotVisibleL
+ *  Use case: NumberEntry is not in use and "->" key is pressed. -> volume is increased  
+ *  Motivation: TTEN-7LYF76
+ *  stif ref: None.
+ * */
+void ut_cphonestate::T_HandleKeyEventUpArrowNENotVisibleL( )
+    {
+    TInt volume( KPhoneDefaultVolume );
+    TKeyEvent keyEvent;
+    keyEvent.iScanCode = EStdKeyUpArrow; //
+    keyEvent.iCode = EKeyUpArrow;
+    keyEvent.iRepeats = 0;
+    TEventCode eventCode(EEventKey);
+    iMockContext->ExpectCallL( "CPEEngineInfoImpl::AudioVolume" ).
+            ReturnsL( volume );
+    TPhoneCmdParamInteger volumeParam;
+    volumeParam.SetInteger( volume+1 );
+    iMockContext->ExpectCallL( "CPhoneViewController::ExecuteCommandL" ).
+        WithL<TPhoneViewCommandId, TPhoneCommandParam&> ( EPhoneViewSetNaviPaneAudioVolume, volumeParam );
+         
+    iPhoneState->HandleKeyEventL( keyEvent, eventCode );
+     
+    EUNIT_ASSERT_EQUALS( KErrNone, iMockContext->VerifyExpectations() ); 
+    }
+
+/**
+ *  Test name: T_HandleKeyEventDownArrowNENotVisibleL
+ *  Use case: NumberEntry is not in use and "<-" key is pressed. -> volume is decreased  
+ *  Motivation: test coverage.
+ *  stif ref: None.
+ * */
+void ut_cphonestate::T_HandleKeyEventDownArrowNENotVisibleL( )
+    {
+    TInt volume( KPhoneDefaultVolume );
+    TKeyEvent keyEvent;
+    keyEvent.iScanCode = EStdKeyDownArrow; //
+    keyEvent.iCode = EKeyDownArrow;
+    keyEvent.iRepeats = 0;
+    TEventCode eventCode(EEventKey);
+    iMockContext->ExpectCallL( "CPEEngineInfoImpl::AudioVolume" ).
+            ReturnsL( volume );
+    TPhoneCmdParamInteger volumeParam;
+    volumeParam.SetInteger( volume-1 );
+    iMockContext->ExpectCallL( "CPhoneViewController::ExecuteCommandL" ).
+        WithL<TPhoneViewCommandId, TPhoneCommandParam&> ( EPhoneViewSetNaviPaneAudioVolume, volumeParam );
+         
+    iPhoneState->HandleKeyEventL( keyEvent, eventCode );
+     
+    EUNIT_ASSERT_EQUALS( KErrNone, iMockContext->VerifyExpectations() ); 
+    }
+
+/**
+ *  Test name: T_HandleDtmfKeyToneStarkeyL
+ *  Use case: send event to phoneengine that DTMF tone for "*" key is played
+ *  Motivation: TTEN-7LYF76
+ *  stif ref: None.
+ */
+void ut_cphonestate::T_HandleDtmfKeyToneStarkeyL()
+    {
+    TKeyEvent keyEvent;
+    keyEvent.iScanCode = EStdKeyNkpAsterisk; //key:'*'
+    keyEvent.iCode = KPhoneDtmfStarCharacter;
+    keyEvent.iRepeats = 0;
+    keyEvent.iModifiers = 0;
+    TEventCode eventCode(EEventKey);
+    
+    iMockContext->ExpectCallL( "CPhoneNumberEntryManager::IsNumberEntryUsedL" ).
+        ReturnsL( ETrue );
+    _LIT( KPhoneNumber, "12345" );
+    HBufC* phoneNumber = KPhoneNumber().AllocL();
+    iMockContext->ExpectCallL( "CPhoneNumberEntryManager::PhoneNumberFromEntryLC" ).
+         ReturnsL(phoneNumber);
+           
+    //phone-engine receives message
+    iMockContext->ExpectCallL( "CPEEngineInfoImpl::SetPhoneNumber" );
+     
+    iMockContext->ExpectCallL( "CPhoneKeys::IsDtmfTone" ).
+        WithL( keyEvent, eventCode ).
+        ReturnsL( ETrue );
+       
+    iPhoneState->HandleDtmfKeyToneL( keyEvent, eventCode );
+       
+    EUNIT_ASSERT_EQUALS( KErrNone, iMockContext->VerifyExpectations() );
+    }
+
+/**
+ *  Test name: T_HandleDtmfKeyTone1KeyL 
+ *  Use case: do not send event to phoneengine 
+ *  Motivation: TTEN-7LYF76
+ *  stif ref: None.
+ */
+void ut_cphonestate::T_HandleDtmfKeyTone1KeyL()
+    {
+     
+    TKeyEvent keyEvent;
+    keyEvent.iScanCode = EStdKeyNkp1; //key:'1'
+    keyEvent.iCode = KPhoneDtmf1Character;
+    keyEvent.iRepeats = 0;
+    keyEvent.iModifiers = 0;
+    TEventCode eventCode(EEventKey);
+    TChar expChar(keyEvent.iCode);
+    
+    iMockContext->ExpectCallL( "CPhoneNumberEntryManager::IsNumberEntryUsedL" ).
+            ReturnsL( ETrue );
+    _LIT( KPhoneNumber, "12345" );
+    HBufC* phoneNumber = KPhoneNumber().AllocL();
+    iMockContext->ExpectCallL( "CPhoneNumberEntryManager::PhoneNumberFromEntryLC" ).
+         ReturnsL(phoneNumber);
+    //phone-engine receives message
+    iMockContext->ExpectCallL( "CPEEngineInfoImpl::SetPhoneNumber" );
+     
+    iMockContext->ExpectCallL( "CPhoneKeys::IsDtmfTone" ).
+        WithL( keyEvent, eventCode ).
+        ReturnsL( ETrue );
+      
+    iPhoneState->HandleDtmfKeyToneL( keyEvent, eventCode );
+      
+    EUNIT_ASSERT_EQUALS( KErrNone, iMockContext->VerifyExpectations() );
+    
+    }
+ 
+/**
+ *  Test name: T_HandleAudioOutputChangedL 
+ *  Use case: Call audio route output has been changed
+ *  Motivation: EBNI-7KM8N4
+ *  stif ref: -
+ */
+void ut_cphonestate::T_HandleAudioOutputChangedL()
+    {        
+    iMockContext->ExpectCallL( "CPhoneUiCommandManager::UpdateUiCommands" );
+    
+  
+    iPhoneState->HandlePhoneEngineMessageL(
+        MEngineMonitor::EPEMessageAudioOutputChanged, 
+        0 );
+    
+    EUNIT_ASSERT_EQUALS( KErrNone, iMockContext->VerifyExpectations() );
+    }
+
+/**
+ *  Test name:Test method StartShowSecurityNoteL 
+ *  Use case: StartShowSecurityNoteL called EPhoneViewSetSecurityMode gets called.
+ *  Motivation: TRLM-7Q3HVZ 
+ */
+void ut_cphonestate::T_StartShowSecurityNoteL()
+    {
+    TPhoneCmdParamBoolean securityMode;
+    securityMode.SetBoolean( ETrue );
+    iMockContext->ExpectCallL( "CPhoneViewController::ExecuteCommandL" ).
+        WithL<TPhoneViewCommandId, TPhoneCommandParam&> ( 
+                EPhoneViewSetSecurityMode, 
+                securityMode );
+        
+    iPhoneState->T_StartShowSecurityNoteL();
+    EUNIT_ASSERT_EQUALS( KErrNone, iMockContext->VerifyExpectations() );
+    }
+
+
+/**
+ *  Test name: T_HandleDtmfKeyToneL_ModeChange
+ *  Use case: DTMF tone is played when number entry in numeric mode and not played in alpha mode 
+ *  Motivation: EDXU-7T69N4
+ *  stif ref: None.
+ **/
+void ut_cphonestate::T_HandleDtmfKeyToneL_ModeChange()
+    {
+    TKeyEvent keyEvent;
+    keyEvent.iScanCode = EStdKeyNkp1; //key:'1'
+    keyEvent.iCode = KPhoneDtmf1Character;  
+    keyEvent.iRepeats = 0;
+    keyEvent.iModifiers = 0;
+    TEventCode eventCode( EEventKey );
+    
+    iMockContext->ExpectCallL( "CPhoneKeys::IsDtmfTone" ).
+           WithL( keyEvent, eventCode ).
+           ReturnsL( ETrue );
+    
+    iMockContext->ExpectCallL( "CPhoneNumberEntryManager::IsNumberEntryUsedL" ).
+            ReturnsL( ETrue );
+    _LIT( KPhoneNumber, "12345" );
+    HBufC* phoneNumber = KPhoneNumber().AllocL();
+    iMockContext->ExpectCallL( "CPhoneNumberEntryManager::PhoneNumberFromEntryLC" ).
+         ReturnsL(phoneNumber);
+    iMockContext->ExpectCallL( "CPhoneStateMachine::SendPhoneEngineMessage" ).
+        WithL( MPEPhoneModel::EPEMessagePlayDTMF ).
+        TimesL( 1 );   
+  
+    iPhoneState->HandleDtmfKeyToneL( keyEvent, eventCode ); 
+    
+    iMockContext->ExpectCallL( "CPhoneStateMachine::SendPhoneEngineMessage" ).
+        TimesL( 0 );
+    
+    iPhoneState->HandleDtmfKeyToneL( keyEvent, eventCode ); 
+    
+    EUNIT_ASSERT_EQUALS( KErrNone, iMockContext->VerifyExpectations() );
+    }
+
+/**
+ *  Test name: T_HandleDisconnectingL
+ *  Use case: 
+ *  Motivation: 
+ *  stif ref: None.
+ **/
+void ut_cphonestate::T_HandleDisconnectingL()
+    {
+    iMockContext->ExpectCallL( "CPhoneViewController::ExecuteCommandL" ).
+        WithL( EPhoneViewStopRingTone );
+    iMockContext->ExpectCallL( "CPhoneClearBlacklist::ClearBlackListOnNextKey" );
+    TInt callId = 0;
+    iPhoneState->T_HandleDisconnectingL(callId);
+    EUNIT_ASSERT_EQUALS( KErrNone, iMockContext->VerifyExpectations() );
+    }
+
+/**
+ *  Test name: T_HandleBTActivatedL 
+ *  Use case: Call audio route output has been changed to bt 
+ *  Motivation: ou1cimx1#218924
+ *  stif ref: -
+ */
+void ut_cphonestate::T_HandleBTActivatedL()
+    {        
+    
+    iMockContext->ExpectCallL( "CPEEngineInfoImpl::AudioOutput" ).
+        ReturnsL( EPEBTAudioAccessory );
+    
+    const TPEAudioOutput audioOutput = EPEBTAudioAccessory;
+    const TPEAudioOutput previousOutput = EPEHandset;
+    TPEPhoneAudioRouteParameters routeParameters;
+    routeParameters.iAudioOutput = audioOutput;
+    routeParameters.iPreviousOutput = previousOutput;
+
+    iMockContext->ExpectCallL( "CPEEngineInfoImpl::RouteParameters" ).
+        ReturnsL( routeParameters );
+
+    iMockContext->ExpectCallL( "CPEEngineInfoImpl::AudioOutputAvailable" ).
+        WithL( EPEBTAudioAccessory ).
+        ReturnsL( ETrue );
+
+    iMockContext->ExpectCallL( "CPhoneAccessoryBTHandler::ShowBTActivatedL" );
+    
+    iPhoneState->HandlePhoneEngineMessageL(
+        MEngineMonitor::EPEMessageAudioOutputChanged, 
+        0 );
+    
+    EUNIT_ASSERT_EQUALS( KErrNone, iMockContext->VerifyExpectations() );
+    }
+/**
+ * Test name: T_OnlySideVolumeKeySupported_VolumeKeysFALSEandSideVolumeKeysTRUE_L
+ * PreConditions set in this case:
+ *          KTelephonyLVFlagScrollVolumeKeys = EFalse
+ *          KFeatureIdSideVolumeKeys         = ETRue
+ *          
+ * Motivation: REQ 417-4164
+ */
+void ut_cphonestate::T_OnlySideVolumeKeySupported_VolumeKeysFALSEandSideVolumeKeysTRUE_L()
+    {
+    iMockContext->ExpectCallL( "CPhoneCenRepProxy::IsTelephonyFeatureSupported" ).
+        WithL(KTelephonyLVFlagScrollVolumeKeys).
+        ReturnsL(EFalse);
+    iMockContext->ExpectCallL( "FeatureManager::FeatureSupported" ).
+        WithL(KFeatureIdSideVolumeKeys).
+        ReturnsL(ETrue);
+    EUNIT_ASSERT_EQUALS( ETrue, iPhoneState->OnlySideVolumeKeySupported() );
+    EUNIT_ASSERT_EQUALS( KErrNone, iMockContext->VerifyExpectations() );
+    }
+
+/**
+ * Test name: T_OnlySideVolumeKeySupported_VolumeKeysFALSEandSideVolumeKeysFALSE_L * 
+ * PreConditions set in this case:
+ *          KTelephonyLVFlagScrollVolumeKeys = EFalse
+ *          KFeatureIdSideVolumeKeys         = EFalse
+ *          
+ * Motivation: REQ 417-4164
+ */
+void ut_cphonestate::T_OnlySideVolumeKeySupported_VolumeKeysFALSEandSideVolumeKeysFALSE_L()
+    {
+    iMockContext->ExpectCallL( "CPhoneCenRepProxy::IsTelephonyFeatureSupported" ).
+        WithL(KTelephonyLVFlagScrollVolumeKeys).
+        ReturnsL(EFalse);
+    iMockContext->ExpectCallL( "FeatureManager::FeatureSupported" ).
+        WithL(KFeatureIdSideVolumeKeys).
+        ReturnsL(EFalse);
+    EUNIT_ASSERT_EQUALS( EFalse, iPhoneState->OnlySideVolumeKeySupported() );
+    EUNIT_ASSERT_EQUALS( KErrNone, iMockContext->VerifyExpectations() );
+    }
+
+/**
+ * Test name: T_OnlySideVolumeKeySupported_VolumeKeysTRUEandSideVolumeKeysFALSE_L
+ * PreConditions set in this case:
+ *          KTelephonyLVFlagScrollVolumeKeys = ETrue
+ *          KFeatureIdSideVolumeKeys         = EFalse
+ *          
+ * Motivation: REQ 417-4164
+ */
+void ut_cphonestate::T_OnlySideVolumeKeySupported_VolumeKeysTRUEandSideVolumeKeysFALSE_L()
+    {    
+    iMockContext->ExpectCallL( "CPhoneCenRepProxy::IsTelephonyFeatureSupported" ).
+        WithL(KTelephonyLVFlagScrollVolumeKeys).
+        ReturnsL(ETrue);
+    EUNIT_ASSERT_EQUALS( EFalse, iPhoneState->OnlySideVolumeKeySupported() );
+    EUNIT_ASSERT_EQUALS( KErrNone, iMockContext->VerifyExpectations() );
+    }
+
+/**
+ * Test name: T_DisplayCallSetup_SetNEVisibilityFalseL
+ * Motivation: Refactor & Test Coverage
+ */
+void ut_cphonestate::T_DisplayCallSetup_SetNEVisibilityFalseL()
+    {
+    TInt magicCallId(1);
+    iMockContext->ExpectCallL( 
+            "CPhoneViewController::ExecuteCommand" ).
+            WithL( EPhoneViewBeginUpdate );
+    iMockContext->ExpectCallL( 
+            "CPhoneNumberEntryManager::SetNumberEntryVisibilityL" ).
+            WithL( EFalse );
+    iMockContext->ExpectCallL( 
+            "CPhoneViewController::ExecuteCommandL" ).
+            WithL( EPhoneViewRemovePhoneDialogs );
+    iMockContext->ExpectCallL( 
+            "CPhoneViewController::ExecuteCommandL" ).
+            WithL( EPhoneViewBringPhoneAppToForeground );
+    
+    iMockContext->ExpectCallL( 
+            "CPhoneViewController::ExecuteCommandL" ).
+            WithL<TPhoneViewCommandId, TInt> 
+                ( EPhoneViewCreateCallHeader, magicCallId );
+    
+    iMockContext->ExpectCallL( 
+            "CPhoneUiCommandManager::UpdateUiCommands" );
+    
+    iPhoneState->DisplayCallHeaderL(magicCallId, CPhoneState::ESetNEVisibilityFalse);
+    EUNIT_ASSERT_EQUALS( KErrNone, iMockContext->VerifyExpectations() );
+    }
+
+/**
+ * Test name: T_DisplayCallSetup_CheckIfNEUsedBeforeSettingVisibilityFalseL
+ * Motivation: Refactor & Test Coverage
+ */
+void ut_cphonestate::T_DisplayCallSetup_CheckIfNEUsedBeforeSettingVisibilityFalseL()
+    {
+    TInt magicCallId(1);
+    iMockContext->ExpectCallL( 
+            "CPhoneViewController::ExecuteCommand" ).
+            WithL( EPhoneViewBeginUpdate );
+    iMockContext->ExpectCallL( 
+            "CPhoneNumberEntryManager::SetVisibilityIfNumberEntryUsedL" ).
+            WithL( EFalse );
+    iMockContext->ExpectCallL( 
+            "CPhoneViewController::ExecuteCommandL" ).
+            WithL( EPhoneViewRemovePhoneDialogs );
+    iMockContext->ExpectCallL( 
+            "CPhoneViewController::ExecuteCommandL" ).
+            WithL( EPhoneViewBringPhoneAppToForeground );
+    
+    iMockContext->ExpectCallL( 
+            "CPhoneViewController::ExecuteCommandL" ).
+            WithL<TPhoneViewCommandId, TInt> 
+                ( EPhoneViewCreateCallHeader, magicCallId );
+    
+    iMockContext->ExpectCallL( 
+            "CPhoneUiCommandManager::UpdateUiCommands" );
+    
+    iPhoneState->DisplayCallHeaderL(
+            magicCallId, 
+            CPhoneState::ECheckIfNEUsedBeforeSettingVisibilityFalse);
+    EUNIT_ASSERT_EQUALS( KErrNone, iMockContext->VerifyExpectations() );
+    }
+
+// Old VOIP related test cases.
+/*void ut_cphonestate::SetupWithVoipL(  )
+    {
+    iMockContext->InitializeL();
+        
+    SmcDefaultValue<const TPESimState&>::SetL( EPESimUsable );
+    SmcDefaultValue<const TPEAudioOutput&>::SetL( EPENotActive );
+    SmcDefaultValue<const TPEPhoneAudioRouteParameters&>::SetL( routeParameters );
+    SmcDefaultValue<const TBool&>::SetL( EFalse );
+    SmcDefaultValue<const TProfileRingingType&>::SetL( EProfileRingingTypeRinging );
+      
+    iCPhoneMainResourceResolverMock = new ( ELeave ) CPhoneMainResourceResolverMock();
+        SmcDefaultValue<CPhoneMainResourceResolver*>::SetL( iCPhoneMainResourceResolverMock );
+
+    iViewCmdHandleMock = new (ELeave) CPhoneViewController();
+
+    iStateMachineMock = CPhoneStateMachineGSM::NewL( iViewCmdHandleMock );
+
+    iEngineInfoMock = CPEEngineInfo::NewL();
+        SmcDefaultValue<MPEEngineInfo*>::SetL( iEngineInfoMock );
+    
+    iCustomizationMock = 
+          CPhoneCustomizationVoip::NewL( *iStateMachineMock, *iViewCmdHandleMock );
+        
+    iPhoneState = new( ELeave ) cphonestate_tester( iStateMachineMock, iViewCmdHandleMock, iCustomizationMock );
+    
+    doNotCheckParamId = EFalse;
+    }*/
+/**
+ * Test name: T_HandleCommandL_CallsPhoneCustomization_L
+ * Use case: Command is handled in phone customization
+ * Motivation: 
+ */
+/*void ut_cphonestate::T_HandleCommandL_CallsPhoneCustomization_L()
+    {
+    const TInt KCommand = 1000000;
+    iMockContext->ExpectCallL( "CPhoneCustomizationVoip::HandleCommandL" ).
+        WithL( KCommand );
+    iPhoneState->HandleCommandL( KCommand ); 
+    EUNIT_ASSERT_EQUALS( KErrNone, iMockContext->VerifyExpectations() );
+    }*/
+/**
+ * Test name: T_HandlePhoneEngineMessage_EPEMessageCallSecureStatusChanged_L
+ * Use case: Secure status of call changes 
+ * Motivation: 
+ */
+/*void ut_cphonestate::T_HandlePhoneEngineMessage_EPEMessageCallSecureStatusChanged_L()
+    {
+    const TInt KCallId = 1;
+    iMockContext->ExpectCallL( "CPhoneCustomizationVoip::HandlePhoneEngineMessageL" ).
+        WithL( MEngineMonitor::EPEMessageCallSecureStatusChanged, KCallId );
+    iPhoneState->HandlePhoneEngineMessageL( 
+        MEngineMonitor::EPEMessageCallSecureStatusChanged, KCallId ); 
+    EUNIT_ASSERT_EQUALS( KErrNone, iMockContext->VerifyExpectations() );
+    }*/
+/**
+ * Test name: T_HandlePhoneEngineMessage_CallsPhoneCustomization_L
+ * Use case: Phoneengine message is handled by phone customization
+ * Motivation: 
+ */
+/*void ut_cphonestate::T_HandlePhoneEngineMessage_CallsPhoneCustomization_L()
+    {
+    const TInt KMessage = 1000000;
+    const TInt KCallId = 1;
+    iMockContext->ExpectCallL( "CPhoneCustomizationVoip::HandlePhoneEngineMessageL" ).
+        WithL( KMessage, KCallId ).
+        ReturnsL( ETrue );
+    iPhoneState->HandlePhoneEngineMessageL( KMessage,KCallId ); 
+    EUNIT_ASSERT_EQUALS( KErrNone, iMockContext->VerifyExpectations() );
+    }*/
+/**
+ * Test name: T_ShowNumberBusyNoteL_CallsCustomizeBusyNoteText_L
+ * Use case: Number busy note text gets customized
+ * Motivation: 
+ */
+/*void ut_cphonestate::T_ShowNumberBusyNoteL_CallsCustomizeBusyNoteText_L()
+    {
+    iMockContext->ExpectCallL( "CPhoneCustomizationVoip::CustomizeBusyNoteText" );
+    iPhoneState->T_ShowNumberBusyNoteL(); 
+    EUNIT_ASSERT_EQUALS( KErrNone, iMockContext->VerifyExpectations() );
+    }*/
+/**
+ * Test name: T_PhoneNumberFromEntryLC
+ * Use case:
+ * Motivation: 
+ */
+/*void ut_cphonestate::T_PhoneNumberFromEntryLC()
+    {
+    TPhoneCmdParamString stringParam;
+      
+    iMockContext->ExpectCallL( "CPhoneViewController::ExecuteCommand" ).
+        WithL<TPhoneViewCommandId, TPhoneCommandParam&>(
+                   EPhoneViewGetNumberFromEntry,
+                   stringParam );
+    
+    HBufC* number = iPhoneState->T_PhoneNumberFromEntryLC();
+      
+    EUNIT_ASSERT_EQUALS( KErrNone, iMockContext->VerifyExpectations() );
+    CleanupStack::PopAndDestroy( number );
+    }*/
+/**
+ * Test name: T_UpdateRemoteInfoDataL
+ * Use case: 
+ * Motivation: 
+ */
+/*void ut_cphonestate::T_UpdateRemoteInfoDataL()
+    {
+    const TInt KCallId = 1;
+    TPhoneCmdParamCallHeaderData callHeaderData;
+    iMockContext->ExpectCallL( "CPhoneCallHeaderManager::UpdateCallHeaderInfoL" ).
+        WithL( KCallId ).
+        ReturnsL( callHeaderData );
+    iMockContext->ExpectCallL( "CPhoneCallHeaderManager::GetInCallNumberTextL" ).
+        WithL( KCallId, KNullDesC() );
+        
+    iMockContext->ExpectCallL( "CPhoneCustomizationVoip::ModifyCallHeaderTexts" );
+  
+    
+    TPhoneCmdParamCallHeaderData callHeaderParam;
+
+    iMockContext->ExpectCallL( "CPhoneViewController::ExecuteCommandL" ).
+           WithL<TPhoneViewCommandId, TInt, TPhoneCommandParam&> ( EPhoneViewUpdateCallHeaderRemoteInfoData, 
+                   KCallId, callHeaderParam );
+    
+    iPhoneState->T_UpdateRemoteInfoDataL( KCallId );
+    EUNIT_ASSERT_EQUALS( KErrNone, iMockContext->VerifyExpectations() );
+    }*/
+// CaptureKeysDuringCallNotificationL( it callsAknLayoutUtils::PenEnabled(), which crash some reason)
+// call crash this case.
+/*void ut_cphonestate::T_UpdateSingleActiveCallL_VoIPcallL( )
+    {
+    SmcDefaultValue<TPECallType>::SetL( EPECallTypeVoIP );
+    TInt callId = 0;
+    TPhoneCmdParamCallHeaderData callHeaderData;
+    
+    iMockContext->ExpectCallL( "CPhoneCallHeaderManager::UpdateCallHeaderInfoL" ).
+          WithL<TInt>( callId ).
+          ReturnsL( callHeaderData );
+    
+    iMockContext->ExpectCallL( "CPhoneCallHeaderManager::GetInCallNumberTextL" );
+  //      WithL( callId, KNullDesC() );
+    
+    iMockContext->ExpectCallL( "CPhoneCustomizationVoip::ModifyCallHeaderTexts" );
+      
+    iPhoneState->T_UpdateSingleActiveCallL( callId );
+    EUNIT_ASSERT_EQUALS( KErrNone, iMockContext->VerifyExpectations() );   
+    
+    SmcDefaultValue<TPECallType>::Reset();
+    }*/
+
+// - EUnit test table -------------------------------------------------------
+
+EUNIT_BEGIN_TEST_TABLE(
+    ut_cphonestate,
+    "Add test suite description here.",
+    "UNIT" )
+
+EUNIT_TEST(
+    "T_ConstructionL",
+    "",
+    "T_ConstructionL",
+    "FUNCTIONALITY",
+    SetupL, T_ConstructionL, Teardown)
+
+EUNIT_TEST(
+    "DisplayCallTerminationNoteL",
+    "",
+    "DisplayCallTerminationNoteL",
+    "FUNCTIONALITY",
+    SetupL, T_DisplayCallTerminationNoteL, Teardown)
+
+EUNIT_TEST(
+    "T_HandleKeyEventUpArrowNENotVisibleL",
+    "",
+    "T_HandleKeyEventUpArrowNENotVisibleL",
+    "FUNCTIONALITY",
+    SetupL,  T_HandleKeyEventUpArrowNENotVisibleL, Teardown)
+   
+EUNIT_TEST(
+    "T_HandleKeyEventDownArrowNENotVisibleL",
+    "",
+    "T_HandleKeyEventDownArrowNENotVisibleL",
+    "FUNCTIONALITY",
+    SetupL,  T_HandleKeyEventDownArrowNENotVisibleL, Teardown)
+
+EUNIT_TEST(
+    "T_HandleDtmfKeyToneStarkeyL",
+    "",
+    "T_HandleDtmfKeyToneStarkeyL",
+    "FUNCTIONALITY",
+    SetupL, T_HandleDtmfKeyToneStarkeyL, Teardown)
+
+EUNIT_TEST(
+    "T_HandleDtmfKeyTone1KeyL",
+    "",
+    "T_HandleDtmfKeyTone1KeyL",
+    "FUNCTIONALITY",
+    SetupL, T_HandleDtmfKeyTone1KeyL, Teardown)
+
+EUNIT_TEST(
+    "T_HandleAudioOutputChangedL",
+    "",
+    "T_HandleAudioOutputChangedL",
+    "FUNCTIONALITY",
+    SetupL, T_HandleAudioOutputChangedL, Teardown)
+
+EUNIT_TEST(
+    "T_OnlySideVolumeKeySupported_VolumeKeysFALSEandSideVolumeKeysTRUE_L",
+    "",
+    "T_OnlySideVolumeKeySupported_VolumeKeysFALSEandSideVolumeKeysTRUE_L",
+    "FUNCTIONALITY",
+    SetupL, T_OnlySideVolumeKeySupported_VolumeKeysFALSEandSideVolumeKeysTRUE_L, Teardown)
+    
+EUNIT_TEST(
+    "T_OnlySideVolumeKeySupported_VolumeKeysFALSEandSideVolumeKeysFALSE_L",
+    "",
+    "T_OnlySideVolumeKeySupported_VolumeKeysFALSEandSideVolumeKeysFALSE_L",
+    "FUNCTIONALITY",
+    SetupL, T_OnlySideVolumeKeySupported_VolumeKeysFALSEandSideVolumeKeysFALSE_L, Teardown)
+    
+EUNIT_TEST(
+    "T_OnlySideVolumeKeySupported_VolumeKeysTRUEandSideVolumeKeysFALSE_L",
+    "",
+    "T_OnlySideVolumeKeySupported_VolumeKeysTRUEandSideVolumeKeysFALSE_L",
+    "FUNCTIONALITY",
+    SetupL, T_OnlySideVolumeKeySupported_VolumeKeysTRUEandSideVolumeKeysFALSE_L, Teardown)
+
+EUNIT_TEST(
+    "T_StartShowSecurityNoteL",
+    "",
+    "T_StartShowSecurityNoteL",
+    "FUNCTIONALITY",
+    SetupL, T_StartShowSecurityNoteL, Teardown)
+
+EUNIT_TEST(
+    "T_HandleDtmfKeyToneL_ModeChange",
+    "",
+    "T_HandleDtmfKeyToneL_ModeChange",
+    "FUNCTIONALITY",
+    SetupL, T_HandleDtmfKeyToneL_ModeChange, Teardown)
+
+EUNIT_TEST(
+    "T_HandleDisconnectingL",
+    "",
+    "T_HandleDisconnectingL",
+    "FUNCTIONALITY",
+    SetupL, T_HandleDisconnectingL, Teardown)
+
+EUNIT_TEST(
+    "T_HandleBTActivatedL",
+    "",
+    "T_HandleBTActivatedL",
+    "FUNCTIONALITY",
+    SetupL, T_HandleBTActivatedL, Teardown)
+    
+EUNIT_TEST(
+    "T_DisplayCallSetup_SetNEVisibilityFalseL",
+    "",
+    "T_DisplayCallSetup_SetNEVisibilityFalseL",
+    "FUNCTIONALITY",
+    SetupL, T_DisplayCallSetup_SetNEVisibilityFalseL, Teardown)
+    
+EUNIT_TEST(
+    "T_DisplayCallSetup_CheckIfNEUsedBeforeSettingVisibilityFalseL",
+    "",
+    "T_DisplayCallSetup_CheckIfNEUsedBeforeSettingVisibilityFalseL",
+    "FUNCTIONALITY",
+    SetupL, T_DisplayCallSetup_CheckIfNEUsedBeforeSettingVisibilityFalseL, Teardown)
+
+/*    
+// Cannot run because call AknLayoutUtils::PenEnabled()( called by CPhoneState::CaptureKeysDuringCallNotificationL)
+// call crash this case.
+/*EUNIT_TEST(
+    "T_UpdateSingleActiveCallL_VoIPcallL",
+    "",
+    "T_UpdateSingleActiveCallL_VoIPcallL",
+    "FUNCTIONALITY",
+    SetupWithVoipL, T_UpdateSingleActiveCallL_VoIPcallL, Teardown) */
+/*
+EUNIT_TEST(
+    "T_HandleCommandL_CallsPhoneCustomization_L",
+    "",
+    "T_HandleCommandL_CallsPhoneCustomization_L",
+    "FUNCTIONALITY",
+    SetupWithVoipL, T_HandleCommandL_CallsPhoneCustomization_L, Teardown)
+    
+EUNIT_TEST(
+    "T_HandlePhoneEngineMessage_EPEMessageCallSecureStatusChanged_L",
+    "",
+    "T_HandlePhoneEngineMessage_EPEMessageCallSecureStatusChanged_L",
+    "FUNCTIONALITY",
+    SetupWithVoipL, T_HandlePhoneEngineMessage_EPEMessageCallSecureStatusChanged_L, Teardown)
+
+EUNIT_TEST(
+    "T_HandlePhoneEngineMessage_CallsPhoneCustomization_L",
+    "",
+    "T_HandlePhoneEngineMessage_CallsPhoneCustomization_L",
+    "FUNCTIONALITY",
+    SetupWithVoipL, T_HandlePhoneEngineMessage_CallsPhoneCustomization_L, Teardown)
+
+EUNIT_TEST(
+    "T_ShowNumberBusyNoteL_CallsCustomizeBusyNoteText_L",
+    "",
+    "T_ShowNumberBusyNoteL_CallsCustomizeBusyNoteText_L",
+    "FUNCTIONALITY",
+    SetupWithVoipL, T_ShowNumberBusyNoteL_CallsCustomizeBusyNoteText_L, Teardown)
+    
+EUNIT_TEST(
+    "T_PhoneNumberFromEntryLC",
+    "",
+    "T_PhoneNumberFromEntryLC",
+    "FUNCTIONALITY",
+    SetupWithVoipL, T_PhoneNumberFromEntryLC, Teardown)
+    
+EUNIT_TEST(
+    "T_UpdateRemoteInfoDataL",
+    "",
+    "T_UpdateRemoteInfoDataL",
+    "FUNCTIONALITY",
+    SetupWithVoipL, T_UpdateRemoteInfoDataL, Teardown)
+*/
+
+EUNIT_END_TEST_TABLE