mmsharing/mmshavailability/tsrc/ut_availability/src/UT_CMusAvaOptionHandler.cpp
branchRCL_3
changeset 22 73a1feb507fb
parent 0 f0cf47e981f9
child 23 bc78a40cd63c
--- a/mmsharing/mmshavailability/tsrc/ut_availability/src/UT_CMusAvaOptionHandler.cpp	Thu Aug 19 09:51:39 2010 +0300
+++ b/mmsharing/mmshavailability/tsrc/ut_availability/src/UT_CMusAvaOptionHandler.cpp	Tue Aug 31 15:12:07 2010 +0300
@@ -42,6 +42,7 @@
 #include "musavasip.h"
 #include "CSipSseTestTls.h"
 #include "musavacapabilitytesthelper.h"
+#include "musavasettingsobserverimp.h"
 
 
 // CONSTRUCTION
@@ -86,7 +87,9 @@
     {
     iSharedObject = CMusAvaSharedObject::GetSingletonL();
     iAvailabilityObserver = CMusAvaAvailabilityObserverImp::NewL();
+    iSettingsObserver = CMusAvaSettingsObserverImp::NewL();
     iConcreteSettings = CMusAvaSettingsImp::NewL();
+    iConcreteSettings->SetObserver( *iSettingsObserver );
     iOptionHandler = CMusAvaOptionHandler::NewL( *iAvailabilityObserver,
                                     *iConcreteSettings );
 
@@ -95,6 +98,9 @@
     CSIP& sip = iSharedObject->MusAvaSip().Sip();
     CSipSseTestTls::OpenL();
     iStorage = CSipSseTestTls::Storage();
+    iStorage->Set( MusSettingsKeys::KFastStartupMode, 
+        MusSettingsKeys::EFastModeOff );
+
     iSharedObject->MusAvaSip().CreateProfileL();
     iProfile = iSharedObject->MusAvaSip().Profile();
     iSharedObject->MusAvaSip().ConnectionL( );
@@ -125,6 +131,9 @@
         iStorage = NULL;
         }
     delete iOptionHandler;
+    delete iSettingsObserver;
+    
+    PropertyHelper::Close();
     }
 
 void UT_CMusAvaOptionHandler::UT_CMusAvaOptionHandler_NewLL(  )
@@ -322,6 +331,143 @@
     
     }
 
+void UT_CMusAvaOptionHandler::UT_CMusAvaOptionHandler_DoSetStateL()
+    {
+    // Set some state which does not cause special handling
+    iOptionHandler->iFastModeCapable = EFalse;
+    iOptionHandler->DoSetState( MMusAvaObserver::EMusAvaStatusOptionsSent );
+    EUNIT_ASSERT( iOptionHandler->iState == MMusAvaObserver::EMusAvaStatusOptionsSent );
+    
+    // Set special handling state, but fast mode is not enabled
+    iOptionHandler->DoSetState( MMusAvaObserver::EMusAvaStatusAvailable );
+    EUNIT_ASSERT( iOptionHandler->iState == MMusAvaObserver::EMusAvaStatusAvailable );
+    EUNIT_ASSERT( !iSettingsObserver->iApplicationStarted );
+        
+    // Set special handling state, fast capable but mode is not enabled
+    iOptionHandler->iFastModeCapable = ETrue;
+    iConcreteSettings->SetFastMode( MusSettingsKeys::EFastModeOff );
+    iOptionHandler->DoSetState( MMusAvaObserver::EMusAvaStatusAvailable );
+    EUNIT_ASSERT( iOptionHandler->iState == MMusAvaObserver::EMusAvaStatusAvailable );
+    EUNIT_ASSERT( !iSettingsObserver->iApplicationStarted );
+    }
+
+void UT_CMusAvaOptionHandler::UT_CMusAvaOptionHandler_DoSetStateFastModeL()
+    {
+    iOptionHandler->iFastModeCapable = ETrue;
+    iConcreteSettings->SetFastMode( MusSettingsKeys::EFastModeOn );
+    iOptionHandler->iSettings.SetCallDirection( 1 );
+    
+    // State which does not have special handling
+    iOptionHandler->DoSetState( MMusAvaObserver::EMusAvaFailureCode );
+    EUNIT_ASSERT( iOptionHandler->iState == MMusAvaObserver::EMusAvaFailureCode );
+    EUNIT_ASSERT( !iOptionHandler->iFastModeAvailabilityDelayed );
+    
+    // OptionsNotSent handling
+    //
+        
+    // MT, not answered
+    iOptionHandler->iSettings.SetCallDirection( 2 );
+    iOptionHandler->iCapabilityQueryAnswered = EFalse;
+    iOptionHandler->DoSetState( MMusAvaObserver::EMusAvaStatusOptionsNotSent );
+    EUNIT_ASSERT( iOptionHandler->iState == MMusAvaObserver::EMusAvaStatusOptionsNotSent );
+    EUNIT_ASSERT( !iOptionHandler->iFastModeAvailabilityDelayed );
+        
+    // MT, answered (makes state available delayed)
+    iOptionHandler->iCapabilityQueryAnswered = ETrue;
+    iOptionHandler->DoSetState( MMusAvaObserver::EMusAvaStatusOptionsNotSent );
+    EUNIT_ASSERT( iOptionHandler->iState == MMusAvaObserver::EMusAvaStatusOptionsNotSent );
+    EUNIT_ASSERT( iOptionHandler->iFastModeAvailabilityDelayed );
+    
+    // Available handling
+    //
+    
+    // MO, start app
+    iOptionHandler->iSettings.SetCallDirection( 1 );
+    iSettingsObserver->iApplicationStarted = EFalse;
+    iOptionHandler->iFastModeAvailabilityDelayed = EFalse;
+    iOptionHandler->DoSetState( MMusAvaObserver::EMusAvaStatusAvailable );
+    EUNIT_ASSERT( iOptionHandler->iState == MMusAvaObserver::EMusAvaStatusAvailable );
+    EUNIT_ASSERT( !iOptionHandler->iFastModeAvailabilityDelayed );
+    EUNIT_ASSERT( iSettingsObserver->iApplicationStarted );
+    
+    // App already started by going to available state, do not do twice
+    iSettingsObserver->iApplicationStarted = EFalse;
+    iOptionHandler->DoSetState( MMusAvaObserver::EMusAvaStatusAvailable );
+    EUNIT_ASSERT( iOptionHandler->iState == MMusAvaObserver::EMusAvaStatusAvailable );
+    EUNIT_ASSERT( !iOptionHandler->iFastModeAvailabilityDelayed );
+    EUNIT_ASSERT( !iSettingsObserver->iApplicationStarted );
+     
+    // MT, delayed availability publishing (state not changed yet)
+    iOptionHandler->iSettings.SetCallDirection( 2 );
+    iOptionHandler->iFastModeAvailabilityDelayed = EFalse;
+    iSettingsObserver->iApplicationStarted = EFalse;
+    iOptionHandler->iState = MMusAvaObserver::EMusAvaStatusOptionsNotSent;
+    iOptionHandler->DoSetState( MMusAvaObserver::EMusAvaStatusAvailable );
+    EUNIT_ASSERT( iOptionHandler->iState == MMusAvaObserver::EMusAvaStatusOptionsNotSent );
+    EUNIT_ASSERT( iOptionHandler->iFastModeAvailabilityDelayed );
+    EUNIT_ASSERT( !iSettingsObserver->iApplicationStarted );
+    
+    // Invite ends availability delaying
+    iOptionHandler->PrepareForReceivedInviteL();
+    EUNIT_ASSERT( iOptionHandler->iState == MMusAvaObserver::EMusAvaStatusAvailable );
+    EUNIT_ASSERT( !iOptionHandler->iFastModeAvailabilityDelayed );
+    
+    // No effect if no delay pending
+    iOptionHandler->iState = MMusAvaObserver::EMusAvaStatusOptionsNotSent;
+    iOptionHandler->PrepareForReceivedInviteL();
+    EUNIT_ASSERT( iOptionHandler->iState == MMusAvaObserver::EMusAvaStatusOptionsNotSent );
+    
+    // OptionNotAvailable handling
+    //
+    
+    // Normal handling when no pending availabilty publishing nor state is
+    // not already available
+    iOptionHandler->iFastModeAvailabilityDelayed = EFalse;
+    iOptionHandler->DoSetState( MMusAvaObserver::EMusAvaOptionNotAvailable );
+    EUNIT_ASSERT( iOptionHandler->iState == MMusAvaObserver::EMusAvaOptionNotAvailable );
+    
+    // If already set to available by succesfull answer, sending failure
+    // does not clear availability
+    iOptionHandler->iState = MMusAvaObserver::EMusAvaStatusAvailable;
+    iOptionHandler->DoSetState( MMusAvaObserver::EMusAvaOptionNotAvailable );
+    EUNIT_ASSERT( iOptionHandler->iState == MMusAvaObserver::EMusAvaStatusAvailable );
+    }
+
+void UT_CMusAvaOptionHandler::UT_CMusAvaOptionHandler_FastModeResolvedL()
+    {
+    iOptionHandler->iFastModeCapable = ETrue;
+    
+    // Normal case  
+    iOptionHandler->iSettings.SetFastMode( MusSettingsKeys::EFastModeOff );
+    iOptionHandler->FastModeResolved( MusSettingsKeys::EFastModeOn );
+    EUNIT_ASSERT( iOptionHandler->iSettings.FastMode() == MusSettingsKeys::EFastModeOn )
+    
+    // MO side fast mode negotiation has failed, value is not set
+    iOptionHandler->iSettings.SetFastMode( MusSettingsKeys::EFastModeOff );
+    iOptionHandler->iSettings.SetCallDirection( 1 );
+    iOptionHandler->iState = MMusAvaObserver::EMusAvaOptionNotAvailable;
+    iOptionHandler->FastModeResolved( MusSettingsKeys::EFastModeOn );
+    EUNIT_ASSERT( iOptionHandler->iSettings.FastMode() == MusSettingsKeys::EFastModeOff )
+    }
+
+void UT_CMusAvaOptionHandler::UT_CMusAvaOptionHandler_CapabilityQueryAnsweredL()
+    {
+    iOptionHandler->iFastModeCapable = ETrue;
+    
+    // If fast mode MO side, no special handling for answer
+    iOptionHandler->CapabilityQueryAnswered( ETrue );
+    EUNIT_ASSERT( iOptionHandler->iCapabilityQueryAnswered )
+    EUNIT_ASSERT( !iOptionHandler->iFastModeAvailabilityDelayed );
+    
+    // If fast mode MT side, MT can start waiting for invite already after answering
+    iOptionHandler->iCapabilityQueryAnswered = EFalse;
+    iOptionHandler->iSettings.SetFastMode( MusSettingsKeys::EFastModeOn );
+    iOptionHandler->iSettings.SetCallDirection( 2 );
+    iOptionHandler->CapabilityQueryAnswered( ETrue );
+    EUNIT_ASSERT( iOptionHandler->iCapabilityQueryAnswered )
+    EUNIT_ASSERT( iOptionHandler->iFastModeAvailabilityDelayed );
+    }
+
 //  TEST TABLE
 
 EUNIT_BEGIN_TEST_TABLE( 
@@ -396,6 +542,38 @@
     SetupL,UT_CMusAvaOptionHandler_VideoCodecsResolvedLL, 
     Teardown) 
 
+EUNIT_TEST(
+    "DoSetState - test ",
+    "CMusAvaOptionHandler",
+    "DoSetState",
+    "FUNCTIONALITY",
+    SetupL,UT_CMusAvaOptionHandler_DoSetStateL, 
+    Teardown) 
+
+EUNIT_TEST(
+    "DoSetState - fastmode test ",
+    "CMusAvaOptionHandler",
+    "DoSetState",
+    "FUNCTIONALITY",
+    SetupL,UT_CMusAvaOptionHandler_DoSetStateFastModeL, 
+    Teardown) 
+
+EUNIT_TEST(
+    "FastModeResolved - test ",
+    "CMusAvaOptionHandler",
+    "FastModeResolved",
+    "FUNCTIONALITY",
+    SetupL,UT_CMusAvaOptionHandler_FastModeResolvedL, 
+    Teardown) 
+
+EUNIT_TEST(
+    "CapabilityQueryAnswered - test ",
+    "CMusAvaOptionHandler",
+    "CapabilityQueryAnswered",
+    "FUNCTIONALITY",
+    SetupL,UT_CMusAvaOptionHandler_CapabilityQueryAnsweredL, 
+    Teardown) 
+
 EUNIT_END_TEST_TABLE
 
 //  END OF FILE