phoneapp/phonemediatorcenter/tsrc/ut_mediatorsender/Src/T_MediatorSender.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 "T_MediatorSender.h"
#include <EUnitMacros.h>
#include <EUnitDecorators.h>

#include <PEVirtualEngine.h>
#include <mediatoreventsfromtelephonyapi.h>
#include <videotelcontrolmediatorapi.h>
#include <MediatorEventProvider.h>
//#include <bmbubblemanager.h>
#include "mphoneshutdowncommand.h"
#include "phoneui.pan"
#include "TPhoneCmdParamBoolean.h"
#include "TPhoneCmdParamCallHeaderData.h"
#include "PhoneViewCommandDefinitions.h"
#include "CPhoneMediatorSender.h"
#include "MediatorDomainUIDs.h"

CPhoneMediatorSender* coeEnvMediatorSenderInstance;

// Mediator registeration
TInt mediatorRegisterationReturnValue;
TUid domain;
TUid category;
MediatorService::REventList eventList;

// Raise event
TUid raiseEventDomain;
TUid raiseEventCategory;
TInt raiseEventEventId;
TVersion raiseEventVersion;
HBufC8* raiseEventData;

// Issue command
TInt issueCommandReturnValue;
TUid issueCommandDomain;
TUid issueCommandCategory;
TInt issueCommandCommandId;
TVersion issueCommandVersion;
HBufC8* issueCommandData;




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

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

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

T_MediatorSender::~T_MediatorSender()
    {
    }

T_MediatorSender::T_MediatorSender()
    {
    }

void T_MediatorSender::ConstructL()
    {
    CEUnitTestSuiteClass::ConstructL();
    }

class CShutdownCommandMock : public CBase, public MPhoneShutdownCommand
    {
public:
    
    static CShutdownCommandMock* NewL() { return new( ELeave )CShutdownCommandMock(); }
    
    void ExecuteLD() { iExecuteLDCalled = ETrue; }
    
    TBool iExecuteLDCalled;
    };

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



void T_MediatorSender::SetupL(  )
    {
    eventList = MediatorService::REventList();
    coeEnvMediatorSenderInstance = NULL;
    domain = TUid::Null();
    category = TUid::Null();
    mediatorRegisterationReturnValue = KErrNone;
    issueCommandDomain = raiseEventDomain = TUid::Null();
    issueCommandCategory = raiseEventCategory = TUid::Null();
    issueCommandCommandId = raiseEventEventId = 0;
    issueCommandVersion = raiseEventVersion = TVersion(); 
    issueCommandData = raiseEventData = NULL;
    issueCommandReturnValue = KErrNone;
    iSender = CPhoneMediatorSender::Instance();
    }    

void T_MediatorSender::Teardown(  )
    {
    eventList.Close();
    delete iSender;
    delete raiseEventData;
    delete issueCommandData;
    }

void T_MediatorSender::VerifyIssueCommandBoilerplateL()
    {
    EUNIT_ASSERT( issueCommandDomain == KMediatorVideoTelephonyDomain );
    EUNIT_ASSERT( issueCommandCategory == KCatPhoneToVideotelCommands );
    EUNIT_ASSERT( issueCommandVersion.iMajor == KPhoneToVideotelCmdVersionMajor );
    EUNIT_ASSERT( issueCommandVersion.iMinor == KPhoneToVideotelCmdVersionMinor );
    EUNIT_ASSERT( issueCommandVersion.iBuild == KPhoneToVideotelCmdVersionBuild );
    }

void T_MediatorSender::VerifyRaiseEventBoilerplateL()
    {
    EUNIT_ASSERT( raiseEventDomain == KMediatorTelephonyDomain );
    EUNIT_ASSERT( raiseEventCategory == KCatEventsFromTelephony );
    EUNIT_ASSERT( raiseEventEventId == EPhoneEventCallData );
    EUNIT_ASSERT( raiseEventVersion.iMajor == KTelephonyEventsVersionMajor );
    EUNIT_ASSERT( raiseEventVersion.iMinor == KTelephonyEventsVersionMinor );
    EUNIT_ASSERT( raiseEventVersion.iBuild == KTelephonyEventsVersionBuild );

    }
    
void T_MediatorSender::FreeIssueCommandGlobals()
    {
    issueCommandDomain = TUid::Null();
    issueCommandCategory = TUid::Null();
    issueCommandCommandId = 0;
    issueCommandVersion = TVersion(); 
    delete issueCommandData; issueCommandData = NULL; 
    }

void T_MediatorSender::TestInstanceGotFromCoeEnvL()
    {
    coeEnvMediatorSenderInstance = reinterpret_cast<CPhoneMediatorSender*>( 0xdeadbeef );
    
    CPhoneMediatorSender* instance = CPhoneMediatorSender::Instance();
    EUNIT_ASSERT( instance == coeEnvMediatorSenderInstance );
    }

void T_MediatorSender::TestInstanceCreatedL()
    {
    CPhoneMediatorSender* instance = CPhoneMediatorSender::Instance();
    EUNIT_ASSERT( instance != NULL );
    delete instance;
    }

void T_MediatorSender::TestGenericEventsAreRegisteredL()
    {    
    EUNIT_ASSERT( domain == KMediatorTelephonyDomain );
    EUNIT_ASSERT( category == KCatEventsFromTelephony );
    EUNIT_ASSERT( eventList.Count() == 1 );
    MediatorService::TEvent event = eventList[0];
    EUNIT_ASSERT( event.iEventId == EPhoneEventCallData );
    EUNIT_ASSERT( event.iVersion.iMajor == KTelephonyEventsVersionMajor );
    EUNIT_ASSERT( event.iVersion.iMinor == KTelephonyEventsVersionMinor );
    EUNIT_ASSERT( event.iVersion.iBuild == KTelephonyEventsVersionBuild );
    }

void T_MediatorSender::TestGenericEventRegisterationFailsL()
    {    
    mediatorRegisterationReturnValue = KErrGeneral;
    EUNIT_ASSERT_PANIC( CPhoneMediatorSender::Instance(), "Common phone", EPhoneMediatorCenterRegistrationFailed  );
    }

void T_MediatorSender::TestSendingCallDataWhenCallHeaderIsRemovedL()
    {       
    iSender->SendEvent( EPhoneViewRemoveCallHeader, 2 );
    
    VerifyRaiseEventBoilerplateL();
    
    TTelephonyCallDataParamPackage pckg;
    pckg.Copy( *raiseEventData );
    const TTelephonyCallDataParam params = pckg();  

    EUNIT_ASSERT( params.iCallId == 2 );
    EUNIT_ASSERT( params.iCallState == ECallStateIdle );   
    }

void T_MediatorSender::TestSendingAudioMuteCommandL()
    {
    TPhoneCmdParamBoolean param;
    param.SetBoolean( ETrue );
    
    iSender->SendEvent( EPhoneViewActivateMuteUIChanges, param );
    
    VerifyIssueCommandBoilerplateL();
    EUNIT_ASSERT( issueCommandCommandId == EVtCmdMute );
    EUNIT_ASSERT( issueCommandData->Match( KNullDesC8 ) == KErrNone );  
    }

void T_MediatorSender::TestSendingAudioUnMuteCommandL()
    {
    TPhoneCmdParamBoolean param;
    param.SetBoolean( EFalse );
    
    iSender->SendEvent( EPhoneViewActivateMuteUIChanges, param );
    
    VerifyIssueCommandBoilerplateL();
    EUNIT_ASSERT( issueCommandCommandId == EVtCmdUnmute );
    EUNIT_ASSERT( issueCommandData->Match( KNullDesC8 ) == KErrNone );  
    }

void T_MediatorSender::TestAudioMuteCommandBufferedIfMediatorBusyAndResendWhenResponseArrivesL()
    {
    issueCommandReturnValue = KErrInUse; // Make the mediator busy
    
    TPhoneCmdParamBoolean param;
    param.SetBoolean( ETrue );
    iSender->SendEvent( EPhoneViewActivateMuteUIChanges, param );
    
    // Clear the issue command sensing globals, because SendEvent tries to send the data and we need to verify
    // that when response arrives the mute command is send again.
    FreeIssueCommandGlobals();
    
    iSender->CommandResponseL( TUid::Null(), TUid::Null(), 0, 0, KNullDesC8() );
    
    
    VerifyIssueCommandBoilerplateL();
    EUNIT_ASSERT( issueCommandCommandId == EVtCmdMute );
    EUNIT_ASSERT( issueCommandData->Match( KNullDesC8 ) == KErrNone ); 
    
    // Verify that next response wont send the mute command
    FreeIssueCommandGlobals();
    iSender->CommandResponseL( TUid::Null(), TUid::Null(), 0, 0, KNullDesC8() );
    
    EUNIT_ASSERT( issueCommandDomain == TUid::Null() );
    }


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

EUNIT_BEGIN_TEST_TABLE(
    T_MediatorSender,
    "Tests for CPhoneMediatorSender",
    "UNIT" )

EUNIT_TEST(
    "Instance got from coeenv",
    "CPhoneMediatorSender",
    "Instance",
    "FUNCTIONALITY",
    SetupL, TestInstanceGotFromCoeEnvL, Teardown)
    
EUNIT_TEST(
    "Instance created",
    "CPhoneMediatorSender",
    "Instance",
    "FUNCTIONALITY",
    SetupL, TestInstanceCreatedL, Teardown)
    
EUNIT_TEST(
    "Generic event registeration",
    "CPhoneMediatorSender",
    "SendEvent",
    "FUNCTIONALITY",
    SetupL, TestGenericEventsAreRegisteredL, Teardown)
    
EUNIT_TEST(
    "Generic event registeration fails",
    "CPhoneMediatorSender",
    "SendEvent",
    "FUNCTIONALITY",
    SetupL, TestGenericEventRegisterationFailsL, Teardown)

    
EUNIT_TEST(
    "Sending call data when call header is removed",
    "CPhoneMediatorSender",
    "SendEvent",
    "FUNCTIONALITY",
    SetupL, TestSendingCallDataWhenCallHeaderIsRemovedL, Teardown)

EUNIT_TEST(
    "Sending audio mute command",
    "CPhoneMediatorSender",
    "SendEvent",
    "FUNCTIONALITY",
    SetupL, TestSendingAudioMuteCommandL, Teardown)

EUNIT_TEST(
    "Sending audio unmute command",
    "CPhoneMediatorSender",
    "SendEvent",
    "FUNCTIONALITY",
    SetupL, TestSendingAudioUnMuteCommandL, Teardown)
    
EUNIT_TEST(
    "Mute command sending buffered",
    "CPhoneMediatorSender",
    "CommandResponseL",
    "FUNCTIONALITY",
    SetupL, TestAudioMuteCommandBufferedIfMediatorBusyAndResendWhenResponseArrivesL, Teardown)

EUNIT_END_TEST_TABLE