mmshplugins/mmshaoplugin/tsrc/ut_aoplugin/src/ut_mustsypropertymonitor.cpp
author Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
Tue, 31 Aug 2010 15:12:07 +0300
branchRCL_3
changeset 22 73a1feb507fb
parent 0 f0cf47e981f9
child 23 bc78a40cd63c
permissions -rw-r--r--
Revision: 201032 Kit: 201035

/*
* 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:
*
*/


//  INTERNAL INCLUDES
#include "etelmm.h"
#include "e32property.h"
#include "centralrepository.h"
#include "ut_mustsypropertymonitor.h"
#include "mustsypropertymonitor.h"
#include "muscallmonitor.h"
#include "musvoipcallmonitor.h"
#include "muscallconferencemonitor.h"

//  SYSTEM INCLUDES
#include <digia/eunit/eunitmacros.h>
#include <CTSYDomainPSKeys.h>
#include <telremotepartyinformationpskeys.h>


_LIT(KTelNo,"1234");
_LIT( KTestProvideName, "VoIP" );
_LIT( KDefaultSipUri, "sip:default@uri" );

TName cs_call_1(_L("cs_call_1"));
TName cs_call_2(_L("cs_call_2"));
TName voip_call_1(_L("voip_call_1"));
TName voip_call_2(_L("voip_call_2"));

// -----------------------------------------------------------------------------
//
// -----------------------------------------------------------------------------
//
UT_CMusTsyPropertyMonitor* UT_CMusTsyPropertyMonitor::NewL()
    {
    UT_CMusTsyPropertyMonitor* self = UT_CMusTsyPropertyMonitor::NewLC();
    CleanupStack::Pop( self );
    return self;
    }


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


// -----------------------------------------------------------------------------
//
// -----------------------------------------------------------------------------
//
UT_CMusTsyPropertyMonitor::~UT_CMusTsyPropertyMonitor()
    {
    }


// -----------------------------------------------------------------------------
// Default constructor
// -----------------------------------------------------------------------------
//
UT_CMusTsyPropertyMonitor::UT_CMusTsyPropertyMonitor()
    {
    // NOP
    }


// -----------------------------------------------------------------------------
// Second phase construct
// -----------------------------------------------------------------------------
//
void UT_CMusTsyPropertyMonitor::ConstructL()
    {
    // The ConstructL from the base class CEUnitTestSuiteClass must be called.
    // It generates the test case table.
    CEUnitTestSuiteClass::ConstructL();
    }
    

// -----------------------------------------------------------------------------
//
// -----------------------------------------------------------------------------
//
void UT_CMusTsyPropertyMonitor::SetupL()
    {
    iMusCentralRepository = CRepository::NewL( MusSettingsKeys::KRepositoryUid );
    RProperty::Set( NMusSessionInformationApi::KCategoryUid,
                     NMusSessionInformationApi::KMusCallEvent,
                     0 );
    
    iMusTsyPropertyMonitor = CMusTsyPropertyMonitor::NewL( iPhone, *this );
    iMusTsyPropertyMonitor->iPropertyEvent.iPValue = EPSCTsyCallStateUninitialized;
    }


// -----------------------------------------------------------------------------
//
// -----------------------------------------------------------------------------
//
void UT_CMusTsyPropertyMonitor::Teardown()
    {
    delete iMusCentralRepository;
    iMusCentralRepository = NULL;
    delete iMusTsyPropertyMonitor;
    PropertyHelper::Close();
    iPhone.Close();

    }



// TEST CASES

// -----------------------------------------------------------------------------
//
// -----------------------------------------------------------------------------
//
void UT_CMusTsyPropertyMonitor::UT_CMusTsyPropertyMonitor_RunLL()
    {

    // Set intial call type too unintialiazed.
    if ( RProperty::Set( KPSUidCtsyCallInformation,KCTsyCallType,
                             EPSCTsyCallTypeUninitialized ))
        {
        User::Leave( KErrNoMemory );
        }
    // Set intial call count
    if ( RProperty::Set( NMusSessionInformationApi::KCategoryUid,
                         NMusSessionInformationApi::KMusCallCount,
                         0 ) != KErrNone )
        {
        User::Leave( KErrNoMemory );
        }
    
    EUNIT_ASSERT( iMusTsyPropertyMonitor);
    TInt val = KErrNone;
    
    iMusTsyPropertyMonitor->Cancel();
    iMusTsyPropertyMonitor->RunL();
    
    EUNIT_ASSERT( iMusTsyPropertyMonitor->iCallMonitorArray.Count() == 0 );

    
    iMusTsyPropertyMonitor->iPropertyEvent.iPValue = EPSCTsyCallStateNone;
    iMusTsyPropertyMonitor->SetStateL( NMusSessionInformationApi::ENoCall );

    iMusTsyPropertyMonitor->Cancel();
    iMusTsyPropertyMonitor->RunL();
    
    RProperty::Get( NMusSessionInformationApi::KCategoryUid,
                     NMusSessionInformationApi::KMusCallEvent,
                     val );
    EUNIT_ASSERT( val==NMusSessionInformationApi::ENoCall);
    

    iMusTsyPropertyMonitor->iPropertyEvent.iPValue = EPSCTsyCallStateDisconnecting;
    iMusTsyPropertyMonitor->SetStateL( NMusSessionInformationApi::ENoCall );

    iMusTsyPropertyMonitor->Cancel();
    iMusTsyPropertyMonitor->RunL();
    
    RProperty::Get( NMusSessionInformationApi::KCategoryUid,
                     NMusSessionInformationApi::KMusCallEvent,
                     val );
    EUNIT_ASSERT( val==NMusSessionInformationApi::ENoCall);

    
    iMusTsyPropertyMonitor->iPropertyEvent.iPValue = EPSCTsyCallStateAnswering;
    iMusTsyPropertyMonitor->SetStateL( NMusSessionInformationApi::ENoCall );

    iMusTsyPropertyMonitor->Cancel();
    iMusTsyPropertyMonitor->RunL();
    
    RProperty::Get( NMusSessionInformationApi::KCategoryUid,
                     NMusSessionInformationApi::KMusCallEvent,
                     val );
    EUNIT_ASSERT( val==NMusSessionInformationApi::ENoCall);

    iMusTsyPropertyMonitor->iPropertyEvent.iPValue = EPSCTsyCallStateConnected;
    iMusTsyPropertyMonitor->SetStateL( NMusSessionInformationApi::ENoCall );

    iMusTsyPropertyMonitor->Cancel();
    iMusTsyPropertyMonitor->RunL();
    
    RProperty::Get( NMusSessionInformationApi::KCategoryUid,
                     NMusSessionInformationApi::KMusCallEvent,
                     val );
    EUNIT_ASSERT( val==NMusSessionInformationApi::ENoCall);

    iMusTsyPropertyMonitor->iPropertyEvent.iPValue = EPSCTsyCallStateHold;
    iMusTsyPropertyMonitor->SetStateL( NMusSessionInformationApi::ENoCall );
	if ( RProperty::Set( NMusSessionInformationApi::KCategoryUid,
                     NMusSessionInformationApi::KMusCallCount,
                     1 ) != KErrNone )
        {
        User::Leave( KErrNoMemory );
        }
    //simulate multicall scenario
    TName callName(_L("Voice1"));
    iMusTsyPropertyMonitor->AddCallMonitorL( callName );
    callName.Copy(_L("Voice2"));
    iMusTsyPropertyMonitor->AddCallMonitorL( callName );
    iMusTsyPropertyMonitor->Cancel();
    iMusTsyPropertyMonitor->RunL();
    //
    RProperty::Get( NMusSessionInformationApi::KCategoryUid,
                     NMusSessionInformationApi::KMusCallEvent,
                     val );
    EUNIT_ASSERT( val==NMusSessionInformationApi::ECallHold);
    
    }



// -----------------------------------------------------------------------------
//
// -----------------------------------------------------------------------------
//
void UT_CMusTsyPropertyMonitor::UT_CMusTsyPropertyMonitor_DoCancelL()
    {
    EUNIT_ASSERT( iMusTsyPropertyMonitor );
    iMusTsyPropertyMonitor->Cancel();
    EUNIT_ASSERT( PropertyHelper::GetCalledFunction() == 
                                        RProperty::ECancel )
    }


// -----------------------------------------------------------------------------
//
// -----------------------------------------------------------------------------
//
void UT_CMusTsyPropertyMonitor::UT_CMusTsyPropertyMonitor_RunErrorL()
    {
    EUNIT_ASSERT( iMusTsyPropertyMonitor );
    TInt error = KErrNotFound;
    iMusTsyPropertyMonitor->RunError(error);
    }



// -----------------------------------------------------------------------------
//
// -----------------------------------------------------------------------------
//
void UT_CMusTsyPropertyMonitor::UT_CMusTsyPropertyMonitor_AddCallMonitorLL()
    {
    TName name = KTelNo();
    if ( RProperty::Set( NMusSessionInformationApi::KCategoryUid,
                     NMusSessionInformationApi::KMusCallCount,
                     0 ) != KErrNone )
        {
        User::Leave( KErrNoMemory );
        }
    iMusTsyPropertyMonitor->AddCallMonitorL( name );
    }

// -----------------------------------------------------------------------------
//
// -----------------------------------------------------------------------------
//
void UT_CMusTsyPropertyMonitor::UT_CMusTsyPropertyMonitor_RemoveCallMonitorL()
    {
    TName name = KTelNo();
    iMusTsyPropertyMonitor->RemoveCallMonitor( name );
    
    }

// -----------------------------------------------------------------------------
//
// -----------------------------------------------------------------------------
//
void UT_CMusTsyPropertyMonitor::UT_CMusTsyPropertyMonitor_MonitorCSCallLL()
    {
    if ( RProperty::Set( NMusSessionInformationApi::KCategoryUid,
                            NMusSessionInformationApi::KMusCallCount,
                            0 ) != KErrNone )
        {
        User::Leave( KErrNoMemory );
        }
    RTelHelper::SetCallStatus( (RMobileCall::TMobileCallStatus)RCall::EStatusIdle );
    EUNIT_ASSERT( iMusTsyPropertyMonitor->iCallMonitorArray.Count() == 0 );    
    iMusTsyPropertyMonitor->MonitorCSCallL();
    EUNIT_ASSERT( iMusTsyPropertyMonitor->iCallMonitorArray.Count() == 0 );
    
    RTelHelper::SetCallStatus( (RMobileCall::TMobileCallStatus)RCall::EStatusHangingUp );    
    iMusTsyPropertyMonitor->MonitorCSCallL();
    EUNIT_ASSERT( iMusTsyPropertyMonitor->iCallMonitorArray.Count() == 0 );
    
    RTelHelper::SetCallStatus( (RMobileCall::TMobileCallStatus)RCall::EStatusConnected );    
    iMusTsyPropertyMonitor->MonitorCSCallL();
    EUNIT_ASSERT( iMusTsyPropertyMonitor->iCallMonitorArray.Count() == 1 );
    
    iMusTsyPropertyMonitor->iCallMonitorArray.ResetAndDestroy();
    RTelHelper::SetCallStatus( (RMobileCall::TMobileCallStatus)RCall::EStatusAnswering );    
    iMusTsyPropertyMonitor->MonitorCSCallL();
    EUNIT_ASSERT( iMusTsyPropertyMonitor->iCallMonitorArray.Count() == 1 );

    iMusTsyPropertyMonitor->iCallMonitorArray.ResetAndDestroy();
    RTelHelper::SetCallStatus( (RMobileCall::TMobileCallStatus)RCall::EStatusIdle );
    iMusTsyPropertyMonitor->MonitorCSCallL();    
    EUNIT_ASSERT( iMusTsyPropertyMonitor->iCallMonitorArray.Count() == 0 );
    
    }


// -----------------------------------------------------------------------------
//
// -----------------------------------------------------------------------------
//
void UT_CMusTsyPropertyMonitor::UT_CMusTsyPropertyMonitor_MonitorVoipCallLL()
    {    
    EUNIT_ASSERT( iMusTsyPropertyMonitor->iVoipCallMonitorArray.Count() == 0 );
    if ( RProperty::Set( NMusSessionInformationApi::KCategoryUid,
                     NMusSessionInformationApi::KMusCallCount,
                     0 ) != KErrNone )
        {
        User::Leave( KErrNoMemory );
        }
    
    // State connected    
    TPSCTsyCallState callState = EPSCTsyCallStateConnected;    
    iMusTsyPropertyMonitor->MonitorVoipCallL( callState );
    EUNIT_ASSERT( iMusTsyPropertyMonitor->iVoipCallMonitorArray.Count() == 1 );
    
    // State answering
    iMusTsyPropertyMonitor->iVoipCallMonitorArray.ResetAndDestroy();
    EUNIT_ASSERT( iMusTsyPropertyMonitor->iVoipCallMonitorArray.Count() == 0 );
    callState = EPSCTsyCallStateAnswering ;    
    iMusTsyPropertyMonitor->MonitorVoipCallL( callState );
    EUNIT_ASSERT( iMusTsyPropertyMonitor->iVoipCallMonitorArray.Count() == 1 );
    
    // State disconnecting ( Atleast one previous voip call is present )    
    callState = EPSCTsyCallStateDisconnecting;    
    iMusTsyPropertyMonitor->MonitorVoipCallL( callState );
    EUNIT_ASSERT( iMusTsyPropertyMonitor->iVoipCallMonitorArray.Count() == 0 );
    }


// -----------------------------------------------------------------------------
//
// -----------------------------------------------------------------------------
//
void UT_CMusTsyPropertyMonitor::UT_CMusTsyPropertyMonitor_MonitorCallLL()
    {
    TInt tmp = 0;
    if ( RProperty::Set( NMusSessionInformationApi::KCategoryUid,
                         NMusSessionInformationApi::KMusCallCount,
                         0 ) != KErrNone )
       {
       User::Leave( KErrNoMemory );
       }
    iMusTsyPropertyMonitor->iCallMonitorArray.ResetAndDestroy();
    iMusTsyPropertyMonitor->iVoipCallMonitorArray.ResetAndDestroy();
    // Test : Cs call and call state is connected
    TPSCTsyCallState callState = EPSCTsyCallStateConnected;
    RTelHelper::SetCallStatus( (RMobileCall::TMobileCallStatus)RCall::EStatusConnected );    
    TPSCTsyCallType callType = EPSCTsyCallTypeCSVoice;
    iMusTsyPropertyMonitor->MonitorCallL(callState,callType);    
    EUNIT_ASSERT( iMusTsyPropertyMonitor->iCallMonitorArray.Count() == 1 );
    EUNIT_ASSERT( iMusTsyPropertyMonitor->iVoipCallMonitorArray.Count() == 0 );
    RProperty::Get( NMusSessionInformationApi::KCategoryUid,
                          NMusSessionInformationApi::KMusCallEvent,
                          tmp );
    EUNIT_ASSERT( tmp==NMusSessionInformationApi::ECallConnected);  
    
    // Test : unknown call type   
    iMusTsyPropertyMonitor->iCallMonitorArray.ResetAndDestroy();              
    callType = EPSCTsyCallTypeNone;
    iMusTsyPropertyMonitor->MonitorCallL(callState,callType);    
    EUNIT_ASSERT( iMusTsyPropertyMonitor->iCallMonitorArray.Count() == 0 );
    EUNIT_ASSERT( iMusTsyPropertyMonitor->iVoipCallMonitorArray.Count() == 0 );
    RProperty::Get( NMusSessionInformationApi::KCategoryUid,
                          NMusSessionInformationApi::KMusCallEvent,
                          tmp );
    EUNIT_ASSERT( tmp==NMusSessionInformationApi::ENoCall);    
    
    // Test : Voip call and call state is connected and factory settings not found  
    // if key not found then it should behave default = AllowedAllCalls.    
    callState = EPSCTsyCallStateConnected;      
    callType = EPSCTsyCallTypeVoIP;
    iMusTsyPropertyMonitor->MonitorCallL(callState,callType);    
    EUNIT_ASSERT( iMusTsyPropertyMonitor->iCallMonitorArray.Count() == 0 );
    EUNIT_ASSERT( iMusTsyPropertyMonitor->iVoipCallMonitorArray.Count() == 1 );
    RProperty::Get( NMusSessionInformationApi::KCategoryUid,
                          NMusSessionInformationApi::KMusCallEvent,
                          tmp );
    EUNIT_ASSERT( tmp==NMusSessionInformationApi::ECallConnected);    
    
    
    // Test : Voip call and call state is connected and factory settings set to 
    // all call supported.
    iMusTsyPropertyMonitor->iVoipCallMonitorArray.ResetAndDestroy();
    iMusCentralRepository->Set(MusSettingsKeys::KAllowOnlyWithActiveCSCall,
                                                      MusSettingsKeys::EAllowedAllCalls);
    callState = EPSCTsyCallStateConnected;      
    callType = EPSCTsyCallTypeVoIP;
    iMusTsyPropertyMonitor->MonitorCallL(callState,callType);    
    EUNIT_ASSERT( iMusTsyPropertyMonitor->iCallMonitorArray.Count() == 0 );
    EUNIT_ASSERT( iMusTsyPropertyMonitor->iVoipCallMonitorArray.Count() == 1 );
    RProperty::Get( NMusSessionInformationApi::KCategoryUid,
                          NMusSessionInformationApi::KMusCallEvent,
                          tmp );
    EUNIT_ASSERT( tmp==NMusSessionInformationApi::ECallConnected);    
        
    // Test : Voip call and call state is connected but factory settings are cs only
    iMusTsyPropertyMonitor->iVoipCallMonitorArray.ResetAndDestroy();
    iMusCentralRepository->Set(MusSettingsKeys::KAllowOnlyWithActiveCSCall,MusSettingsKeys::EAllowedCSOnly);    
    callState = EPSCTsyCallStateConnected;      
    callType = EPSCTsyCallTypeVoIP;
    iMusTsyPropertyMonitor->MonitorCallL(callState,callType);    
    EUNIT_ASSERT( iMusTsyPropertyMonitor->iCallMonitorArray.Count() == 0 );
    if ( iMusTsyPropertyMonitor->iVoipCallMonitorArray.Count() != 0 )
        {
        User::Leave( KErrNoMemory ); // Call was not removed because of memory running out was "silenty" handled.
        }
    EUNIT_ASSERT( iMusTsyPropertyMonitor->iVoipCallMonitorArray.Count() == 0 ); 
    RProperty::Get( NMusSessionInformationApi::KCategoryUid,
                          NMusSessionInformationApi::KMusCallEvent,
                          tmp );
    EUNIT_ASSERT( tmp==NMusSessionInformationApi::ENoCall);    
    }

// -----------------------------------------------------------------------------
//
// -----------------------------------------------------------------------------
//
void UT_CMusTsyPropertyMonitor::UT_CMusTsyPropertyMonitor_RemoveUnUsedCallMonitorsL()
    {
    TName callName(_L("Voice1"));
    if ( RProperty::Set( NMusSessionInformationApi::KCategoryUid,
                     NMusSessionInformationApi::KMusCallCount,
                     0 ) != KErrNone )
        {
        User::Leave( KErrNoMemory );
        }
    iMusTsyPropertyMonitor->AddCallMonitorL( callName );
    callName.Copy(_L("Voice2"));
    iMusTsyPropertyMonitor->AddCallMonitorL( callName );
    RTelHelper::SetCallStatus(RMobileCall::EStatusUnknown);
    iMusTsyPropertyMonitor->RemoveUnUsedCallMonitors();
    EUNIT_ASSERT( iMusTsyPropertyMonitor->iCallMonitorArray.Count()==0 );    
    }

// -----------------------------------------------------------------------------
//
// -----------------------------------------------------------------------------
//
void UT_CMusTsyPropertyMonitor::UT_CMusTsyPropertyMonitor_CheckCallCriteriaLL()
    {
    if ( RProperty::Set( NMusSessionInformationApi::KCategoryUid,
                            NMusSessionInformationApi::KMusCallCount,
                            0 ) != KErrNone )
          {
          User::Leave( KErrNoMemory );
          }
    TInt tmp = 0;
    iMusTsyPropertyMonitor->iCallMonitorArray.ResetAndDestroy();
    iMusTsyPropertyMonitor->iVoipCallMonitorArray.ResetAndDestroy();

    User::LeaveIfError( RProperty::Set( KPSUidTelRemotePartyInformation,
                                        KTelCLINumber,
                                        _L( "sip:somebody@somewhere" ) ) );
   
    // Test : no cs call , one voip call    
    iMusTsyPropertyMonitor->AddVoipCallMonitorL( voip_call_1 );
    iMusTsyPropertyMonitor->CheckCallCriteriaL();
    RProperty::Get( NMusSessionInformationApi::KCategoryUid,
                             NMusSessionInformationApi::KMusCallEvent,
                             tmp );
    EUNIT_ASSERT( tmp==NMusSessionInformationApi::ECallConnected);
    // Test : one cs call , multiple voip calls
    iMusTsyPropertyMonitor->iCallMonitorArray.ResetAndDestroy();
    iMusTsyPropertyMonitor->iVoipCallMonitorArray.ResetAndDestroy();
    iMusTsyPropertyMonitor->AddCallMonitorL( cs_call_1 );
    iMusTsyPropertyMonitor->AddVoipCallMonitorL( voip_call_1 );
    iMusTsyPropertyMonitor->AddVoipCallMonitorL( voip_call_2 );
    iMusTsyPropertyMonitor->CheckCallCriteriaL();
    RProperty::Get( NMusSessionInformationApi::KCategoryUid,
                                 NMusSessionInformationApi::KMusCallEvent,
                                 tmp );
    EUNIT_ASSERT( tmp==NMusSessionInformationApi::ECallHold);
    // Test: multiple cs call, one voip call
    iMusTsyPropertyMonitor->iCallMonitorArray.ResetAndDestroy();
    iMusTsyPropertyMonitor->iVoipCallMonitorArray.ResetAndDestroy();
    iMusTsyPropertyMonitor->AddCallMonitorL( cs_call_1 );
    iMusTsyPropertyMonitor->AddCallMonitorL( cs_call_2 );
    iMusTsyPropertyMonitor->AddVoipCallMonitorL( voip_call_1 );
    iMusTsyPropertyMonitor->CheckCallCriteriaL();
    RProperty::Get( NMusSessionInformationApi::KCategoryUid,
                                 NMusSessionInformationApi::KMusCallEvent,
                                 tmp );
    EUNIT_ASSERT( tmp==NMusSessionInformationApi::ECallHold);    
    
    // Test : multiple cs call , multiple voip calls
    iMusTsyPropertyMonitor->iCallMonitorArray.ResetAndDestroy();
    iMusTsyPropertyMonitor->iVoipCallMonitorArray.ResetAndDestroy();  
    iMusTsyPropertyMonitor->AddCallMonitorL( cs_call_1 );
    iMusTsyPropertyMonitor->AddCallMonitorL( cs_call_2 );
    iMusTsyPropertyMonitor->AddVoipCallMonitorL( voip_call_1 );
    iMusTsyPropertyMonitor->AddVoipCallMonitorL( voip_call_2 );
    iMusTsyPropertyMonitor->CheckCallCriteriaL();
    RProperty::Get( NMusSessionInformationApi::KCategoryUid,
                                  NMusSessionInformationApi::KMusCallEvent,
                                  tmp );
     EUNIT_ASSERT( tmp==NMusSessionInformationApi::ECallHold);       
    // Test : one cs call , one voip call
     iMusTsyPropertyMonitor->iCallMonitorArray.ResetAndDestroy();
     iMusTsyPropertyMonitor->iVoipCallMonitorArray.ResetAndDestroy();  
     iMusTsyPropertyMonitor->AddCallMonitorL( cs_call_1 );     
     iMusTsyPropertyMonitor->AddVoipCallMonitorL( voip_call_1 );  
     iMusTsyPropertyMonitor->CheckCallCriteriaL();
     RProperty::Get( NMusSessionInformationApi::KCategoryUid,
                                    NMusSessionInformationApi::KMusCallEvent,
                                    tmp );
     EUNIT_ASSERT( tmp==NMusSessionInformationApi::ECallHold);
     // Test: one cs call , no voip call
     iMusTsyPropertyMonitor->iCallMonitorArray.ResetAndDestroy();
     iMusTsyPropertyMonitor->iVoipCallMonitorArray.ResetAndDestroy(); 
     RTelHelper::SetCallStatus( RMobileCall::EStatusConnected );
     iMusTsyPropertyMonitor->AddCallMonitorL( cs_call_1 );    
     iMusTsyPropertyMonitor->CheckCallCriteriaL();
     RProperty::Get( NMusSessionInformationApi::KCategoryUid,
                         NMusSessionInformationApi::KMusCallEvent,
                         tmp );
     EUNIT_ASSERT( tmp==NMusSessionInformationApi::ECallConnected);
    }



// -----------------------------------------------------------------------------
// UT_CMusTsyPropertyMonitor::UT_CMusTsyPropertyMonitor_IsDataReadyLL()
// Test to query from corresponding monitors if they are ready.
// -----------------------------------------------------------------------------
//


void UT_CMusTsyPropertyMonitor::UT_CMusTsyPropertyMonitor_IsDataReadyLL()
    {
    TBool dataReady = EFalse;

    // Test-1: CS Call Ready:
    iMusTsyPropertyMonitor->iCallMonitorArray.ResetAndDestroy();
    iMusTsyPropertyMonitor->iVoipCallMonitorArray.ResetAndDestroy();

    if ( RProperty::Set( NMusSessionInformationApi::KCategoryUid,
                            NMusSessionInformationApi::KMusCallCount,
                            0 ) != KErrNone )
        {
        User::Leave( KErrNoMemory );
        }

    User::LeaveIfError( RProperty::Set( NMusSessionInformationApi::KCategoryUid,
                                            NMusSessionInformationApi::KMusTelNumber,
                                            KTelNo ));

    User::LeaveIfError( RProperty::Set( NMusSessionInformationApi::KCategoryUid,
                                            NMusSessionInformationApi::KMusCallDirection,
                                            NMusSessionInformationApi::ECallOrginated ));
    
    iMusTsyPropertyMonitor->AddCallMonitorL( cs_call_1 );
    dataReady = iMusTsyPropertyMonitor->IsDataReadyL();
    EUNIT_ASSERT_EQUALS( dataReady, ETrue )
    
    // Test-2: CS Call NotReady: 
    User::LeaveIfError( RProperty::Set( NMusSessionInformationApi::KCategoryUid,
                                            NMusSessionInformationApi::KMusTelNumber,
                                            KNullDesC ));
    
    dataReady = iMusTsyPropertyMonitor->IsDataReadyL();
    EUNIT_ASSERT_EQUALS( dataReady, EFalse )

    // Test-3 VoIP Call Ready
    iMusTsyPropertyMonitor->iCallMonitorArray.ResetAndDestroy();
    iMusTsyPropertyMonitor->AddVoipCallMonitorL( voip_call_1 );
    
    User::LeaveIfError( RProperty::Set(
                              NMusSessionInformationApi::KCategoryUid,
                              NMusSessionInformationApi::KMusTelNumber, 
                              KDefaultSipUri ));

    User::LeaveIfError(RProperty::Set( 
                              NMusSessionInformationApi::KCategoryUid,
                              NMusSessionInformationApi::KMUSCallProvider,
                              KTestProvideName ));
    
    dataReady = iMusTsyPropertyMonitor->IsDataReadyL();
    EUNIT_ASSERT_EQUALS( dataReady, ETrue )
    
    
    // Test-4 VoIP Call Not Ready
    User::LeaveIfError( RProperty::Set(
                          NMusSessionInformationApi::KCategoryUid,
                          NMusSessionInformationApi::KMUSCallProvider, 
                          KNullDesC ));
    
    dataReady = iMusTsyPropertyMonitor->IsDataReadyL();

    EUNIT_ASSERT_EQUALS( dataReady, EFalse )

    // Test-5: Conference Case
    iMusTsyPropertyMonitor->iCallMonitorArray.ResetAndDestroy();
    iMusTsyPropertyMonitor->iVoipCallMonitorArray.ResetAndDestroy(); 

    iMusTsyPropertyMonitor->AddVoipCallMonitorL( voip_call_1 );
    iMusTsyPropertyMonitor->AddVoipCallMonitorL( voip_call_2 );
    
    dataReady = iMusTsyPropertyMonitor->IsDataReadyL();
    EUNIT_ASSERT_EQUALS( dataReady, EFalse )
    iMusTsyPropertyMonitor->iVoipCallMonitorArray.ResetAndDestroy();
    
    // Test-3 Handling conference case.
    iMusTsyPropertyMonitor->iConferenceMonitor->iConfStatus = RMobileConferenceCall::EConferenceActive;
    dataReady = iMusTsyPropertyMonitor->IsDataReadyL();
    EUNIT_ASSERT_EQUALS( dataReady, ETrue )
    iMusTsyPropertyMonitor->iConferenceMonitor->iConfStatus = RMobileConferenceCall::EConferenceIdle;
    }


// -----------------------------------------------------------------------------
//  MusCallStateChanged from the MusCallStateObserver 
// -----------------------------------------------------------------------------
//
void UT_CMusTsyPropertyMonitor::MusCallStateChanged()
    {
    // NOP
    }

//  TEST TABLE

EUNIT_BEGIN_TEST_TABLE(
    UT_CMusTsyPropertyMonitor,
    "UT_CMusTsyPropertyMonitor",
    "UNIT" )

EUNIT_TEST(
    "RunL - test",
    "CMusTsyPropertyMonitor",
    "RunL",
    "FUNCTIONALITY",
    SetupL, UT_CMusTsyPropertyMonitor_RunLL, Teardown)

EUNIT_TEST(
    "DoCancel - test",
    "CMusTsyPropertyMonitor",
    "DoCancel",
    "FUNCTIONALITY",
    SetupL, UT_CMusTsyPropertyMonitor_DoCancelL, Teardown)

EUNIT_TEST(
    "RunError - test",
    "CMusTsyPropertyMonitor",
    "RunError",
    "FUNCTIONALITY",
    SetupL, UT_CMusTsyPropertyMonitor_RunErrorL, Teardown)

EUNIT_TEST(
    "UT_CMusTsyPropertyMonitor_RemoveUnUsedCallMonitorsL",
    "CMusCallStatusMonitor",
    "RemoveUnUsedCallMonitors",
    "FUNCTIONALITY",
    SetupL, UT_CMusTsyPropertyMonitor_RemoveUnUsedCallMonitorsL, Teardown)

EUNIT_TEST(
    "AddCallMonitorL - test",
    "CMusTsyPropertyMonitor",
    "AddCallMonitorL",
    "FUNCTIONALITY",
    SetupL, UT_CMusTsyPropertyMonitor_AddCallMonitorLL, Teardown)

EUNIT_TEST(
    "RemoveCallMonitor - test",
    "CMusTsyPropertyMonitor",
    "RemoveCallMonitor",
    "FUNCTIONALITY",
    SetupL, UT_CMusTsyPropertyMonitor_RemoveCallMonitorL, Teardown)
    
EUNIT_TEST(
    "MonitorCallL - test",
    "CMusTsyPropertyMonitor",
    "MonitorCallL",
    "FUNCTIONALITY",
    SetupL, UT_CMusTsyPropertyMonitor_MonitorCallLL, Teardown)
    
EUNIT_TEST(
    "MonitorCsCallL - test",
    "CMusTsyPropertyMonitor",
    "MonitorCsCallL",
    "FUNCTIONALITY",
    SetupL, UT_CMusTsyPropertyMonitor_MonitorCSCallLL, Teardown)
    
EUNIT_TEST(
    "MonitorVoipCallL - test",
    "CMusTsyPropertyMonitor",
    "MonitorVoipCallL",
    "FUNCTIONALITY",
    SetupL, UT_CMusTsyPropertyMonitor_MonitorVoipCallLL, Teardown)

EUNIT_TEST(
    "CheckCallCriteriaL - test",
    "CMusTsyPropertyMonitor",
    "CheckCallCriteriaL",
    "FUNCTIONALITY",
    SetupL, UT_CMusTsyPropertyMonitor_CheckCallCriteriaLL, Teardown)
    
EUNIT_TEST(
    "IsDataReadyL - test",
    "CMusTsyPropertyMonitor",
    "IsDataReadyL",
    "FUNCTIONALITY",
    SetupL, UT_CMusTsyPropertyMonitor_IsDataReadyLL, Teardown)
    
EUNIT_END_TEST_TABLE

//  END OF FILE