mmshplugins/mmshaoplugin/tsrc/ut_aoplugin/src/ut_muslineeventmonitor.cpp
changeset 0 f0cf47e981f9
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mmshplugins/mmshaoplugin/tsrc/ut_aoplugin/src/ut_muslineeventmonitor.cpp	Thu Dec 17 08:44:37 2009 +0200
@@ -0,0 +1,369 @@
+/*
+* Copyright (c) 2005-2006 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:  Monitor that observes the status of the current CS call
+*
+*/
+
+
+#include "ut_muslineeventmonitor.h"
+#include "muslineeventmonitor.h"
+#include "muscalleventmonitor.h"
+#include "muspttcallmonitor.h"
+
+//#include "musmanagerstub.h"    
+//#include "muscallmonitorobserver.h"
+ 
+#include <etelmm.h>
+#include <e32svr.h>
+#include <mmtsy_names.h>
+#include <digia/eunit/eunitmacros.h>
+
+#ifdef RD_KODIAK_POC 
+    #include <CTSYDomainPSKeys.h>
+#else
+    //just for compilation . we never use this.
+    const TUid KPSUidCtsyCallInformation = {0x102029AC};
+    const TUint32 KCTsyKodiakPtt = 0x00000003;    
+    enum TPSCTsyKodiakPtt
+     {
+     EPSCTsyKodiakPttNotActive,
+     EPSCTsyKodiakPttActive
+     };
+#endif
+
+#pragma warn_illtokenpasting off
+
+// -----------------------------------------------------------------------------
+// Symbian two-phase constructor.
+// -----------------------------------------------------------------------------
+//
+UT_CMusLineEventMonitor* UT_CMusLineEventMonitor::NewLC()
+    {    
+    UT_CMusLineEventMonitor* self = new (ELeave) UT_CMusLineEventMonitor();
+    CleanupStack::PushL( self );
+    self->ConstructL();    
+    return self;
+    }
+
+
+// -----------------------------------------------------------------------------
+// Symbian second-phase constructor.
+// -----------------------------------------------------------------------------
+//
+void UT_CMusLineEventMonitor::ConstructL()
+    {
+    CEUnitTestSuiteClass::ConstructL();
+    }
+
+
+// -----------------------------------------------------------------------------
+// 
+// -----------------------------------------------------------------------------
+//
+void UT_CMusLineEventMonitor::StatusChanged()
+    {
+    }
+    
+
+// -----------------------------------------------------------------------------
+// C++ constructor.
+// -----------------------------------------------------------------------------
+//
+UT_CMusLineEventMonitor::UT_CMusLineEventMonitor() 
+    : CEUnitTestSuiteClass()
+    {
+    // nothing
+    }
+
+
+// -----------------------------------------------------------------------------
+// C++ destructor.
+// -----------------------------------------------------------------------------
+//
+UT_CMusLineEventMonitor::~UT_CMusLineEventMonitor()
+    {
+    }
+   
+// -----------------------------------------------------------------------------
+// 
+// -----------------------------------------------------------------------------
+//
+void UT_CMusLineEventMonitor::UT_GetLineL()
+    {
+    RMobileLine& line = iMonitor->GetLine();
+
+    // Just check something is returned..
+    RLine::TCallInfo callInfo;
+    User::LeaveIfError( line.GetCallInfo( 0, callInfo ) );
+    EUNIT_ASSERT( callInfo.iStatus );
+    }
+    
+    
+// -----------------------------------------------------------------------------
+// 
+// -----------------------------------------------------------------------------
+//
+void UT_CMusLineEventMonitor::UT_RemoteHoldCountL()
+    {
+
+    // without any calls
+    EUNIT_ASSERT( iMonitor->RemoteHoldCount() == 0 )
+    
+    // Local hold
+    _LIT( callname, "MyCall" );
+    CMusCallEventMonitor* callEventMonitor = 
+                                CMusCallEventMonitor::NewL( iMonitor->GetLine(), 
+                                                            callname,
+                                                            *this );             
+    CleanupStack::PushL( callEventMonitor );
+
+    callEventMonitor->iCallEvent = RMobileCall::ELocalHold;        
+    iMonitor->iCallEventArray.AppendL( callEventMonitor );
+    CleanupStack::Pop( callEventMonitor );
+    EUNIT_ASSERT( iMonitor->RemoteHoldCount() == 0 )
+
+    // Remote hold
+    callEventMonitor = CMusCallEventMonitor::NewL( iMonitor->GetLine(), 
+                                                   callname,
+                                                   *this );             
+
+    CleanupStack::PushL( callEventMonitor );
+    callEventMonitor->iCallEvent = RMobileCall::ERemoteHold;        
+    iMonitor->iCallEventArray.AppendL( callEventMonitor );
+    CleanupStack::Pop( callEventMonitor );
+    EUNIT_ASSERT( iMonitor->RemoteHoldCount() == 1 )
+
+    // Cleanup
+    iMonitor->iCallEventArray.ResetAndDestroy();
+    
+    }
+   
+
+// -----------------------------------------------------------------------------
+// 
+// -----------------------------------------------------------------------------
+//
+void UT_CMusLineEventMonitor::UT_RunLL()
+    {
+    
+    //RCall::whatever
+    RTelHelper::SetCallStatus( RMobileCall::EStatusHold );    
+    iMonitor->RunL();
+    EUNIT_ASSERT_EQUALS( iMonitor->iCallEventArray.Count(), 0 );
+    iMonitor->Cancel();
+    
+    //RCall::EStatusConnected
+    RTelHelper::SetCallStatus( RMobileCall::EStatusConnected );
+    iMonitor->RunL();
+    EUNIT_ASSERT_EQUALS( iMonitor->iCallEventArray.Count(), 1 );
+    iMonitor->Cancel();
+
+    //RCall::EStatusIdle
+    RTelHelper::SetCallStatus( RMobileCall::EStatusIdle );
+    iMonitor->RunL();
+    EUNIT_ASSERT_EQUALS( iMonitor->iCallEventArray.Count(), 0 );
+    iMonitor->Cancel();
+
+    //RCall::EStatusConnected
+    RTelHelper::SetCallStatus( RMobileCall::EStatusConnected );
+    iMonitor->RunL();
+    iMonitor->Cancel();
+
+    //RCall::EStatusHangingUp
+    RTelHelper::SetCallStatus( RMobileCall::EStatusDisconnecting );
+    iMonitor->RunL();
+    EUNIT_ASSERT_EQUALS( iMonitor->iCallEventArray.Count(), 0 );
+    iMonitor->Cancel();
+    
+    
+    }
+
+
+// -----------------------------------------------------------------------------
+// 
+// -----------------------------------------------------------------------------
+//
+void UT_CMusLineEventMonitor::UT_DoCancelL()
+    {
+    iMonitor->DoCancel();
+    EUNIT_ASSERT( RTelHelper::GetCalledFunction()==
+                         RTelSubSessionBase::ECancelAsyncRequest )
+    }
+
+
+// -----------------------------------------------------------------------------
+// 
+// -----------------------------------------------------------------------------
+//
+void UT_CMusLineEventMonitor::UT_RunErrorL()
+    {
+    EUNIT_ASSERT_EQUALS( iMonitor->RunError( KErrNone ), KErrNone );
+    // Make sure RunError handles the error compleatly and returns
+    // KErrNone
+    EUNIT_ASSERT( iMonitor->RunError( KErrGeneral ) == KErrNone );
+    }
+
+
+// -----------------------------------------------------------------------------
+// 
+// -----------------------------------------------------------------------------
+//
+void UT_CMusLineEventMonitor::UT_AddCallEventMonitorLL()
+    {
+    RProperty::Set(KPSUidCtsyCallInformation, KCTsyKodiakPtt,                       
+                       EPSCTsyKodiakPttActive );
+    iMonitor->iPTTCallMonitor->Cancel();
+    iMonitor->iPTTCallMonitor->RunL();
+    iMonitor->iPTTCallMonitor->Cancel();
+    // Add first call
+    _LIT( KCallName, "FirstCall" );
+    iMonitor->AddCallEventMonitorL( KCallName() );
+    EUNIT_ASSERT_EQUALS( iMonitor->iCallEventArray.Count(), 1 );
+
+    // Trying add same call again 
+    iMonitor->AddCallEventMonitorL( KCallName() );
+    EUNIT_ASSERT_EQUALS( iMonitor->iCallEventArray.Count(), 1 );
+
+    // Add second call
+    _LIT( KCallName2, "SecondCall" );
+    iMonitor->AddCallEventMonitorL( KCallName2() );
+    EUNIT_ASSERT_EQUALS( iMonitor->iCallEventArray.Count(), 2 );
+
+    RProperty::Set(KPSUidCtsyCallInformation, KCTsyKodiakPtt,                       
+                       EPSCTsyKodiakPttNotActive );
+    iMonitor->iPTTCallMonitor->RunL();
+    iMonitor->iPTTCallMonitor->Cancel();
+    // Add first call    
+    iMonitor->AddCallEventMonitorL( KCallName() );
+    EUNIT_ASSERT_EQUALS( iMonitor->iCallEventArray.Count(), 0 );  
+    }
+    
+// -----------------------------------------------------------------------------
+// 
+// -----------------------------------------------------------------------------
+//
+void UT_CMusLineEventMonitor::UT_RemoveCallEventMonitorLL()
+    {
+
+    // Precondition add call
+    _LIT( KCallName, "FirstCall" );
+    iMonitor->AddCallEventMonitorL( KCallName() );
+    EUNIT_ASSERT_EQUALS( iMonitor->iCallEventArray.Count(), 1 );
+    
+    _LIT( KCallName2, "SecondCall" );
+    iMonitor->AddCallEventMonitorL( KCallName2() );
+    EUNIT_ASSERT_EQUALS( iMonitor->iCallEventArray.Count(), 2 );
+
+    // Remove call with wrong name
+    _LIT( KCallName3, "ThirdCall" );
+    iMonitor->RemoveCallEventMonitorL( KCallName3() );
+    EUNIT_ASSERT_EQUALS( iMonitor->iCallEventArray.Count(), 2 );
+    
+    // Remove second call remove 
+    iMonitor->RemoveCallEventMonitorL( KCallName2() );
+    EUNIT_ASSERT_EQUALS( iMonitor->iCallEventArray.Count(), 1 );
+
+    // Remove added call
+    iMonitor->RemoveCallEventMonitorL( KCallName() );
+    EUNIT_ASSERT_EQUALS( iMonitor->iCallEventArray.Count(), 0 );
+
+    // Trying overload remove 
+    iMonitor->RemoveCallEventMonitorL( KCallName() );
+    EUNIT_ASSERT_EQUALS( iMonitor->iCallEventArray.Count(), 0 );
+    
+    }
+
+
+// -----------------------------------------------------------------------------
+// 
+// -----------------------------------------------------------------------------
+//
+void UT_CMusLineEventMonitor::SetupL()
+    {
+    RMobilePhone phone;
+    iMonitor = CMusLineEventMonitor::NewL( phone, *this );
+    iMonitor->Cancel();
+    }
+
+
+// -----------------------------------------------------------------------------
+// 
+// -----------------------------------------------------------------------------
+//
+void UT_CMusLineEventMonitor::Teardown()
+    {
+    delete iMonitor;
+    }
+
+// test table
+
+EUNIT_BEGIN_TEST_TABLE(
+    UT_CMusLineEventMonitor,
+    "UT_CMusLineEventMonitor",
+    "UNIT" )
+
+EUNIT_TEST(
+    "GetLine - test",
+    "CMusAoCallMonitor",
+    "GetLine",
+    "FUNCTIONALITY",
+    SetupL, UT_GetLineL, Teardown)
+
+EUNIT_TEST(
+    "RemoteHoldCount - test",
+    "CMusAoCallMonitor",
+    "RemoteHoldCount",
+    "FUNCTIONALITY",
+    SetupL, UT_RemoteHoldCountL, Teardown)
+
+EUNIT_TEST(
+    "RunL - test",
+    "CMusAoCallMonitor",
+    "RunL",
+    "FUNCTIONALITY",
+    SetupL, UT_RunLL, Teardown)
+
+EUNIT_TEST(
+    "DoCancel - test",
+    "CMusAoCallMonitor",
+    "DoCancel",
+    "FUNCTIONALITY",
+    SetupL, UT_DoCancelL, Teardown)
+
+EUNIT_TEST(
+    "RunError - test",
+    "CMusAoCallMonitor",
+    "RunError",
+    "FUNCTIONALITY",
+    SetupL, UT_RunErrorL, Teardown)
+
+EUNIT_TEST(
+    "AddCallEventMonitorL - test",
+    "CMusAoCallMonitor",
+    "AddCallEventMonitorL",
+    "FUNCTIONALITY",
+    SetupL, UT_AddCallEventMonitorLL, Teardown)
+
+EUNIT_TEST(
+    "RemoveCallEventMonitorL - test",
+    "CMusAoCallMonitor",
+    "RemoveCallEventMonitorL",
+    "FUNCTIONALITY",
+    SetupL, UT_RemoveCallEventMonitorLL, Teardown)
+
+
+
+
+
+EUNIT_END_TEST_TABLE