mmshplugins/mmshaoplugin/tsrc/ut_aoplugin/src/ut_mustsypropertymonitor.cpp
changeset 22 496ad160a278
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mmshplugins/mmshaoplugin/tsrc/ut_aoplugin/src/ut_mustsypropertymonitor.cpp	Fri Jun 11 13:36:18 2010 +0300
@@ -0,0 +1,736 @@
+/*
+* 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
+
+