phoneapp/phoneuicontrol/tsrc/ut_cphonenumberentrymanager/Src/ut_cphonenumberentrymanager.cpp
author Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
Mon, 04 Oct 2010 00:16:48 +0300
changeset 77 2be0b271d017
permissions -rw-r--r--
Revision: 201037 Kit: 201039

/*
* 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 "ut_cphonenumberentrymanager.h"
#include <EUnitMacros.h>
#include <EUnitDecorators.h>
#include <coemain.h>

#include "CPhoneStateMachineGSM.h"
#include "mock_cphoneviewcommandhandle.h"
#include "CPhoneCenRepProxy.h"
#include "TPhoneCmdParamInteger.h"
#include "TPhoneCmdParamString.h"
#include "phonerssbase.h"
#include "phoneappcommands.hrh"
#include "cpeengineinfo.h"
#include "cpeengineinfoimpl.h"

CPhoneCenRepProxy* GlobalCPhoneCenRepProxy;
HBufC* GlobalHBufC;

#include <csmcmockcontext.h>
#include <msmcmockspecbuilder.h>

// needed for mocking CPhoneMainResourceResolver::Instance()
class CPhoneMainResourceResolverMock : public CPhoneMainResourceResolver
    {
    
    };

//CONSTANS
_LIT( KTestString, "050123456" );

// 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::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;
    }

// - Construction -----------------------------------------------------------

ut_cphonenumberentrymanager* ut_cphonenumberentrymanager::NewL()
    {
    ut_cphonenumberentrymanager* self = ut_cphonenumberentrymanager::NewLC();
    CleanupStack::Pop();
    return self;
    }

ut_cphonenumberentrymanager* ut_cphonenumberentrymanager::NewLC()
    {
    ut_cphonenumberentrymanager* self = new( ELeave ) ut_cphonenumberentrymanager();
    CleanupStack::PushL( self );
    self->ConstructL();
    return self;
    }

ut_cphonenumberentrymanager::~ut_cphonenumberentrymanager()
    {
    CSmcMockContext::Release();
    }

ut_cphonenumberentrymanager::ut_cphonenumberentrymanager()
    {
    }

void ut_cphonenumberentrymanager::ConstructL()
    {
    CEUnitTestSuiteClass::ConstructL();
    iMockContext = CSmcMockContext::InstanceL();
    }

// - Test methods -----------------------------------------------------------


void ut_cphonenumberentrymanager::SetupL(  )
    {
    iCPhoneMainResourceResolverMock = new ( ELeave ) CPhoneMainResourceResolverMock();
    SmcDefaultValue<CPhoneMainResourceResolver*>::SetL( iCPhoneMainResourceResolverMock );
    
    iCoeEnvMock = new (ELeave ) CCoeEnv();
    SmcDefaultValue<CCoeEnv*>::SetL( iCoeEnvMock );
    
    iViewCommandHandle = new CPhoneViewCommandHandleMock();
    iStateMachine = CPhoneStateMachineGSM::NewL( iViewCommandHandle );
    
    iCustomization = NULL;
    iCPhoneNumberEntryManager = NULL;
    
    iPhoneStateMock = new (ELeave) CPhoneState(iStateMachine, iViewCommandHandle, iCustomization );
    
    iEngineInfoMock = CPEEngineInfo::NewL();
    SmcDefaultValue<MPEEngineInfo*>::SetL( iEngineInfoMock );
    
    iCmdManagerMock = CPhoneUiCommandManager::NewL(
            iPhoneStateMock,
            *iViewCommandHandle,
            *iStateMachine );
    
    iCPhoneNumberEntryManager = CPhoneNumberEntryManager::NewL(
                    iPhoneStateMock,
                    *iViewCommandHandle,
                    *iStateMachine,
                    iCustomization,
                    *iCmdManagerMock );
    
    GlobalCPhoneCenRepProxy = NULL;
    
    doNotCheckParamId = EFalse;
    }
    

void ut_cphonenumberentrymanager::Teardown(  )
    {
    delete iCPhoneNumberEntryManager;
    iCPhoneNumberEntryManager = NULL;
    
    delete iViewCommandHandle;
    iViewCommandHandle = NULL;
    
    delete iStateMachine;
    iStateMachine = NULL;
    
    delete iPhoneStateMock;
    iPhoneStateMock = NULL;
    
    delete iCmdManagerMock;
    iCmdManagerMock = NULL;
    
    delete iCustomization;
    iCustomization = NULL;
    
    delete iCoeEnvMock;
    iCoeEnvMock = NULL;
    SmcDefaultValue<CCoeEnv*>::Reset();
    
    delete iEngineInfoMock;
    iEngineInfoMock = NULL;
    SmcDefaultValue<MPEEngineInfo*>::Reset();
    
    delete GlobalHBufC;
    GlobalHBufC = NULL;
    
    delete GlobalCPhoneCenRepProxy;
    GlobalCPhoneCenRepProxy = NULL;
    
    delete iCPhoneMainResourceResolverMock;
    iCPhoneMainResourceResolverMock = NULL;
    SmcDefaultValue<CPhoneMainResourceResolver*>::Reset();
    
    iMockContext->Reset();
    }
    
void ut_cphonenumberentrymanager::T_EmptyL(  )
    {
    //EMPTY CASE
    }


void ut_cphonenumberentrymanager::GetNumberEntryCount(
        TPhoneViewCommandId /*aCmdId*/,
        TPhoneCommandParam* aCommandParam )
      {
      if ( aCommandParam->ParamId() ==
              TPhoneCommandParam::EPhoneParamIdInteger )
          {
          TPhoneCmdParamInteger* intParam =
              static_cast<TPhoneCmdParamInteger*>( aCommandParam );
          intParam->SetInteger(9);
          }
      }

void ut_cphonenumberentrymanager::GetNumberFromEntry(
        TPhoneViewCommandId /*aCmdId*/,
        TPhoneCommandParam* aCommandParam )
      {
      if ( aCommandParam->ParamId() ==
              TPhoneCommandParam::EPhoneParamIdString )
          {
          TPhoneCmdParamString* stringParam =
              static_cast<TPhoneCmdParamString*>( aCommandParam );
          GlobalHBufC->Des().Copy(KTestString);
          stringParam->SetString(&GlobalHBufC->Des());
          }
      }

void ut_cphonenumberentrymanager::SaveNumberToStoreL()
    {
    GlobalHBufC = HBufC::NewL( KPhoneNumberEntryBufferSize );
    GlobalHBufC->Des().Copy(KTestString);
    
    TPhoneCmdParamInteger intParam;
    iMockContext->ExpectCallL( "CPhoneViewCommandHandleMock::ExecuteCommandL(int, TPhoneCommandParam *)" ).
        WithL<TPhoneViewCommandId, TPhoneCommandParam&> ( EPhoneViewGetNumberEntryCount, intParam ).
        WillOnceL( InvokeL( this, &GetNumberEntryCount));
    
    TPhoneCmdParamString stringParam;
    iMockContext->ExpectCallL( "CPhoneViewCommandHandleMock::ExecuteCommandL(int, TPhoneCommandParam *)" ).
            WithL<TPhoneViewCommandId, TPhoneCommandParam&> ( EPhoneViewGetNumberFromEntry, stringParam ).
            WillOnceL( InvokeL( this, &GetNumberFromEntry));
    iCPhoneNumberEntryManager->StoreNumberEntryContentL();
    }

void ut_cphonenumberentrymanager::T_StoreNumberEntryContentAndCheckStoreL()
    {
    /*Check that there is no number stored.*/
    EUNIT_ASSERT_EQUALS( EFalse, iCPhoneNumberEntryManager->IsNumberEntryContentStored() );
    SaveNumberToStoreL();
    /*Check that number was stored.*/
    EUNIT_ASSERT_EQUALS( ETrue, iCPhoneNumberEntryManager->IsNumberEntryContentStored() );
    EUNIT_ASSERT_EQUALS( KErrNone, iMockContext->VerifyExpectations() );
    }

void ut_cphonenumberentrymanager::T_ClearNumberEntryContentCacheL()
    {
    /*Save number to store.*/
    SaveNumberToStoreL();
    /*Check that number was stored.*/
    EUNIT_ASSERT_EQUALS( ETrue, iCPhoneNumberEntryManager->IsNumberEntryContentStored() );
    iCPhoneNumberEntryManager->ClearNumberEntryContentCache();
    /*Check that number was cleared from store.*/
    EUNIT_ASSERT_EQUALS( EFalse, iCPhoneNumberEntryManager->IsNumberEntryContentStored() );
    EUNIT_ASSERT_EQUALS( KErrNone, iMockContext->VerifyExpectations() );
    }

void ut_cphonenumberentrymanager::T_SetNumberEntryVisibilityL()
    {
    TPhoneCmdParamBoolean booleanParam;
    booleanParam.SetBoolean( ETrue );
    iMockContext->ExpectCallL( "CPhoneViewCommandHandleMock::ExecuteCommandL" ).
            WithL<TPhoneViewCommandId, TPhoneCommandParam&> ( EPhoneViewSetNumberEntryVisible, booleanParam );
    iMockContext->ExpectCallL( "CPhoneViewCommandHandleMock::HandleCommandL" ).
            WithL<TPhoneViewCommandId> ( EPhoneViewGetNumberEntryIsVisibleStatus ).
            ReturnsL(EPhoneViewResponseSuccess);
    iCPhoneNumberEntryManager->SetNumberEntryVisibilityL(ETrue);
    EUNIT_ASSERT_EQUALS( ETrue, iCPhoneNumberEntryManager->IsNumberEntryVisibleL());
    EUNIT_ASSERT_EQUALS( KErrNone, iMockContext->VerifyExpectations() );
    
    booleanParam.SetBoolean( EFalse );
    iMockContext->ExpectCallL( "CPhoneViewCommandHandleMock::ExecuteCommandL" ).
            WithL<TPhoneViewCommandId, TPhoneCommandParam&> ( EPhoneViewSetNumberEntryVisible, booleanParam );
    iMockContext->ExpectCallL( "CPhoneViewCommandHandleMock::HandleCommandL" ).
            WithL<TPhoneViewCommandId> ( EPhoneViewGetNumberEntryIsVisibleStatus ).
            ReturnsL(EPhoneViewResponseFailed);
    iCPhoneNumberEntryManager->SetNumberEntryVisibilityL(EFalse);
    EUNIT_ASSERT_EQUALS( EFalse, iCPhoneNumberEntryManager->IsNumberEntryVisibleL());
    EUNIT_ASSERT_EQUALS( KErrNone, iMockContext->VerifyExpectations() );
    }

void ut_cphonenumberentrymanager::T_SetVisibilityIfNumberEntryUsedL()
    {
    /*1- NumberEntry is used and client sets number entry visibility to true*/
    iMockContext->ExpectCallL( "CPhoneViewCommandHandleMock::HandleCommandL" ).
           WithL<TPhoneViewCommandId> ( EPhoneViewGetNumberEntryIsUsedStatus ).
           ReturnsL(EPhoneViewResponseSuccess);
    TPhoneCmdParamBoolean booleanParam;
    booleanParam.SetBoolean( ETrue );
    iMockContext->ExpectCallL( "CPhoneViewCommandHandleMock::ExecuteCommandL" ).
           WithL<TPhoneViewCommandId, TPhoneCommandParam&> ( EPhoneViewSetNumberEntryVisible, booleanParam );
    /*SetVisibilityIfNumberEntryUsedL should return true*/
    EUNIT_ASSERT_EQUALS( ETrue, iCPhoneNumberEntryManager->SetVisibilityIfNumberEntryUsedL(ETrue));
    EUNIT_ASSERT_EQUALS( KErrNone, iMockContext->VerifyExpectations() );
    
    /*2- NumberEntry is used and client sets number entry visibility to false*/
    iMockContext->ExpectCallL( "CPhoneViewCommandHandleMock::HandleCommandL" ).
           WithL<TPhoneViewCommandId> ( EPhoneViewGetNumberEntryIsUsedStatus ).
           ReturnsL(EPhoneViewResponseSuccess);
    booleanParam.SetBoolean( EFalse );
    iMockContext->ExpectCallL( "CPhoneViewCommandHandleMock::ExecuteCommandL" ).
           WithL<TPhoneViewCommandId, TPhoneCommandParam&> ( EPhoneViewSetNumberEntryVisible, booleanParam );
    /*SetVisibilityIfNumberEntryUsedL should return true*/
    EUNIT_ASSERT_EQUALS( ETrue, iCPhoneNumberEntryManager->SetVisibilityIfNumberEntryUsedL(EFalse));
    EUNIT_ASSERT_EQUALS( KErrNone, iMockContext->VerifyExpectations() );
    
    /*3- NumberEntry is not used and client sets number entry visibility to true*/
    iMockContext->ExpectCallL( "CPhoneViewCommandHandleMock::HandleCommandL" ).
           WithL<TPhoneViewCommandId> ( EPhoneViewGetNumberEntryIsUsedStatus ).
           ReturnsL(EPhoneViewResponseFailed);
    iMockContext->ExpectCallL( "CPhoneViewCommandHandleMock::ExecuteCommandL" ).
           WithL<TPhoneViewCommandId, TPhoneCommandParam&> ( EPhoneViewSetNumberEntryVisible, booleanParam ).
           TimesL(0); // EPhoneViewSetNumberEntryVisible should not be called at all.
    /*SetVisibilityIfNumberEntryUsedL should return false*/
    EUNIT_ASSERT_EQUALS( EFalse, iCPhoneNumberEntryManager->SetVisibilityIfNumberEntryUsedL(ETrue));
    EUNIT_ASSERT_EQUALS( KErrNone, iMockContext->VerifyExpectations() );
    }

void ut_cphonenumberentrymanager::T_RemoveNumberEntryIfVisibilityIsFalseL()
    {
    /*1- Number entry is not visible so EPhoneViewRemoveNumberEntry command should occure*/
    iMockContext->ExpectCallL( "CPhoneViewCommandHandleMock::HandleCommandL" ).
           WithL<TPhoneViewCommandId> ( EPhoneViewGetNumberEntryIsVisibleStatus ).
           ReturnsL(EPhoneViewResponseFailed);
    iMockContext->ExpectCallL( "CPhoneViewCommandHandleMock::ExecuteCommandL" ).
           WithL<TPhoneViewCommandId> ( EPhoneViewRemoveNumberEntry ).
           TimesL(1);
    iCPhoneNumberEntryManager->RemoveNumberEntryIfVisibilityIsFalseL();
    EUNIT_ASSERT_EQUALS( KErrNone, iMockContext->VerifyExpectations() );
    
    /*2- Number entry is visible so EPhoneViewRemoveNumberEntry command shouldnt occure*/
    iMockContext->ExpectCallL( "CPhoneViewCommandHandleMock::HandleCommandL" ).
            WithL<TPhoneViewCommandId> ( EPhoneViewGetNumberEntryIsVisibleStatus ).
            ReturnsL(EPhoneViewResponseSuccess);
    iMockContext->ExpectCallL( "CPhoneViewCommandHandleMock::ExecuteCommandL" ).
           WithL<TPhoneViewCommandId> ( EPhoneViewRemoveNumberEntry ).
           TimesL(0);
    iCPhoneNumberEntryManager->RemoveNumberEntryIfVisibilityIsFalseL();
    EUNIT_ASSERT_EQUALS( KErrNone, iMockContext->VerifyExpectations() );
    }

void ut_cphonenumberentrymanager::T_ClearNumberEntryContentCacheIfContentStoredL()
    {
    /*Check that there is no number stored.*/
    EUNIT_ASSERT_EQUALS( EFalse, iCPhoneNumberEntryManager->IsNumberEntryContentStored() );
    SaveNumberToStoreL();
    /*Check that number was stored.*/
    EUNIT_ASSERT_EQUALS( ETrue, iCPhoneNumberEntryManager->IsNumberEntryContentStored() );
    
    iCPhoneNumberEntryManager->ClearNumberEntryContentCacheIfContentStored();
    /*Check that store is empty.*/
    EUNIT_ASSERT_EQUALS( EFalse, iCPhoneNumberEntryManager->IsNumberEntryContentStored() );
    EUNIT_ASSERT_EQUALS( KErrNone, iMockContext->VerifyExpectations() );
    }

void ut_cphonenumberentrymanager::T_CallFromNumberEntryL()
    {
    iMockContext->ExpectCallL( "CPhoneViewCommandHandleMock::HandleCommandL" ).
           WithL<TPhoneViewCommandId> ( EPhoneIsCustomizedDialerVisible ).
           ReturnsL(EPhoneViewResponseFailed);
    
    GlobalHBufC = HBufC::NewL( KPhoneNumberEntryBufferSize );
    TPhoneCmdParamString stringParam;
    iMockContext->ExpectCallL( "CPhoneViewCommandHandleMock::ExecuteCommand" ).
            WithL<TPhoneViewCommandId, TPhoneCommandParam&>( EPhoneViewGetNumberFromEntry, stringParam ).
            WillOnceL( InvokeL( this, &GetNumberFromEntry));
    
    iMockContext->ExpectCallL( "CPhoneViewCommandHandleMock::ExecuteCommandL" ).
            WithL(EPhoneViewRemoveNumberEntry);
    iMockContext->ExpectCallL( "CPhoneState::HandleNumberEntryClearedL" );
    iMockContext->ExpectCallL( "CPhoneState::DialVoiceCallL" );
    
    iCPhoneNumberEntryManager->CallFromNumberEntryL();
    EUNIT_ASSERT_EQUALS( KErrNone, iMockContext->VerifyExpectations() );
    }

void ut_cphonenumberentrymanager::T_PhoneNumberFromEntryLC()
    {
    GlobalHBufC = HBufC::NewL( KPhoneNumberEntryBufferSize );
    TPhoneCmdParamString stringParam;
    iMockContext->ExpectCallL( "CPhoneViewCommandHandleMock::ExecuteCommand" ).
            WithL<TPhoneViewCommandId, TPhoneCommandParam&>( EPhoneViewGetNumberFromEntry, stringParam ).
            WillOnceL( InvokeL( this, &GetNumberFromEntry));
    HBufC* number = iCPhoneNumberEntryManager->PhoneNumberFromEntryLC();
    EUNIT_ASSERT_EQUALS( KErrNone, iMockContext->VerifyExpectations() );
    CleanupStack::PopAndDestroy( number );
    }

void ut_cphonenumberentrymanager::T_NumberEntryClearL()
    {
    iMockContext->ExpectCallL( "CPhoneViewCommandHandleMock::ExecuteCommandL" ).
            WithL(EPhoneViewClearNumberEntryContent);
    iCPhoneNumberEntryManager->NumberEntryClearL();
    EUNIT_ASSERT_EQUALS( KErrNone, iMockContext->VerifyExpectations() );
    }

// - EUnit test table -------------------------------------------------------

EUNIT_BEGIN_TEST_TABLE(
    ut_cphonenumberentrymanager,
    "Add test suite description here.",
    "UNIT" )

EUNIT_TEST(
    "test0 - CPhoneNumberEntryManager - const./desct",
    "CPhoneNumberEntryManager",
    "test0 - Setup-teardown",
    "FUNCTIONALITY",
    SetupL, T_EmptyL, Teardown)
 
EUNIT_TEST(
    "test1 - StoreNumberEntryContentAndCheckStoreL",
    "CPhoneNumberEntryManager",
    "test1 - StoreNumberEntryContentAndCheckStoreL",
    "FUNCTIONALITY",
    SetupL, T_StoreNumberEntryContentAndCheckStoreL, Teardown)
    
EUNIT_TEST(
    "test2 - ClearNumberEntryContentCacheL",
    "CPhoneNumberEntryManager",
    "test2 - ClearNumberEntryContentCacheL",
    "FUNCTIONALITY",
    SetupL, T_ClearNumberEntryContentCacheL, Teardown)
 
EUNIT_TEST(
    "test3 - SetNumberEntryVisibilityL",
    "CPhoneNumberEntryManager",
    "test3 - SetNumberEntryVisibilityL",
    "FUNCTIONALITY",
    SetupL, T_SetNumberEntryVisibilityL, Teardown)
    
EUNIT_TEST(
    "test4 - SetVisibilityIfNumberEntryUsedL",
    "CPhoneNumberEntryManager",
    "test4 - SetVisibilityIfNumberEntryUsedL",
    "FUNCTIONALITY",
    SetupL, T_SetVisibilityIfNumberEntryUsedL, Teardown)
    
EUNIT_TEST(
    "test5 - RemoveNumberEntryIfVisibilityIsFalseL",
    "CPhoneNumberEntryManager",
    "test5 - RemoveNumberEntryIfVisibilityIsFalseL",
    "FUNCTIONALITY",
    SetupL, T_RemoveNumberEntryIfVisibilityIsFalseL, Teardown)
    
EUNIT_TEST(
    "test6 - ClearNumberEntryContentCacheIfContentStoredL",
    "CPhoneNumberEntryManager",
    "test6 - ClearNumberEntryContentCacheIfContentStoredL",
    "FUNCTIONALITY",
    SetupL, T_ClearNumberEntryContentCacheIfContentStoredL, Teardown)
    
EUNIT_TEST(
    "test7 - CallFromNumberEntryL",
    "CPhoneNumberEntryManager",
    "test7 - CallFromNumberEntryL",
    "FUNCTIONALITY",
    SetupL, T_CallFromNumberEntryL, Teardown)
    
EUNIT_TEST(
    "test8 - PhoneNumberFromEntryLC",
    "CPhoneNumberEntryManager",
    "test8 - PhoneNumberFromEntryLC",
    "FUNCTIONALITY",
    SetupL, T_PhoneNumberFromEntryLC, Teardown)

EUNIT_TEST(
    "test9 - NumberEntryClearL",
    "CPhoneNumberEntryManager",
    "test9 - NumberEntryClearL",
    "FUNCTIONALITY",
    SetupL, T_NumberEntryClearL, Teardown)

EUNIT_END_TEST_TABLE