photosgallery/slideshow/engine/tsrc/t_cshwtimercontrol/t_cshwtimercontrol.cpp
changeset 0 4e91876724a2
child 16 0bc0ea26031e
child 18 bcb43dc84c44
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/photosgallery/slideshow/engine/tsrc/t_cshwtimercontrol/t_cshwtimercontrol.cpp	Thu Dec 17 08:45:44 2009 +0200
@@ -0,0 +1,274 @@
+/*
+* Copyright (c) 2007-2007 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:  Test for timer control for the slideshow
+ *
+*/
+
+
+
+//  CLASS HEADER
+#include "t_cshwtimercontrol.h"
+
+//  EXTERNAL INCLUDES
+#include <digia/eunit/EUnitMacros.h>
+#include <digia/eunit/EUnitDecorators.h>
+
+//  INTERNAL INCLUDES
+#include "shwevent.h"
+#include "shwautoptr.h"
+#include "shwcallback.h"
+
+// CONSTRUCTION
+T_CShwTimerControl* T_CShwTimerControl::NewL()
+    {
+    T_CShwTimerControl* self = T_CShwTimerControl::NewLC();
+    CleanupStack::Pop();
+
+    return self;
+    }
+
+T_CShwTimerControl* T_CShwTimerControl::NewLC()
+    {
+    T_CShwTimerControl* self = new( ELeave ) T_CShwTimerControl;
+    CleanupStack::PushL( self );
+
+    self->ConstructL();
+
+    return self;
+    }
+
+// Destructor (virtual by CBase)
+T_CShwTimerControl::~T_CShwTimerControl()
+    {
+    }
+
+// Default constructor
+T_CShwTimerControl::T_CShwTimerControl()
+    {
+    }
+
+// Second phase construct
+void T_CShwTimerControl::ConstructL()
+    {
+    // The ConstructL from the base class CEUnitTestSuiteClass must be called.
+    // It generates the test case table.
+    CEUnitTestSuiteClass::ConstructL();
+    }
+
+//  METHODS
+
+void T_CShwTimerControl::SendEventL( MShwEvent* aEvent )
+	{
+	// need to clone the event since the caller goes out of scope
+	iEvent = aEvent->CloneLC();
+	CleanupStack::Pop();
+	
+	// stop the scheduler loop if its started
+	if( iWait.IsStarted() )
+		{
+		iWait.AsyncStop();
+		}
+	}
+
+TInt T_CShwTimerControl::TimerCallBack()
+	{
+	iStoppedForTimer = ETrue;
+	iWait.AsyncStop();
+	return 0;
+	}
+
+void T_CShwTimerControl::SetupL()
+    {
+    iCShwTimerControl = CShwTimerControl::NewL();
+	// set the event queue
+	iCShwTimerControl->SetEventQueue( this );
+    }
+
+void T_CShwTimerControl::Teardown()
+    {
+    delete iCShwTimerControl;
+    iCShwTimerControl = NULL;
+    
+    delete iEvent;
+    iEvent = NULL;
+    }
+
+void T_CShwTimerControl::Empty()
+	{
+	}
+
+void T_CShwTimerControl::TestConstructL()
+	{
+	// create timer
+    iCShwTimerControl = CShwTimerControl::NewL();
+	// set the event queue
+	iCShwTimerControl->SetEventQueue( this );
+	// test that object exists
+	EUNIT_ASSERT_DESC( iCShwTimerControl, "object created" );
+	// delete timer
+    delete iCShwTimerControl;
+    iCShwTimerControl = NULL;
+    // EUnit checks for memory leaks
+	}
+
+void T_CShwTimerControl::T_TimeTickLL()
+	{
+	// call timetick
+	iCShwTimerControl->SendTimerBeatL();
+	// check that we got the event
+	EUNIT_ASSERT_DESC( iEvent, "event was received" );
+	TShwEventTimerBeat* timer = dynamic_cast<TShwEventTimerBeat*>( iEvent );
+	EUNIT_ASSERT_DESC( timer, "event was TShwEventTimerBeat" );
+	}
+
+void T_CShwTimerControl::T_NotifyLL()
+    {
+    // if should evaluate true: else if( eventStartView )
+    TShwEventStartView start( 123 );
+    iCShwTimerControl->NotifyL( &start );
+
+	// Need to let the scheduler loop
+	iWait.Start();
+
+	EUNIT_ASSERT_DESC( iEvent, "event was received" );
+	TShwEventTimerBeat* timer = dynamic_cast<TShwEventTimerBeat*>( iEvent );
+	EUNIT_ASSERT_DESC( timer, "event was TShwEventTimerBeat" );
+    }
+    
+void T_CShwTimerControl::T_NotifyL2L()
+    {
+    // if should evaluate false: else if( eventStartView )
+    MShwEvent* iParam1 = NULL;
+    iCShwTimerControl->NotifyL( iParam1 );
+
+	EUNIT_ASSERT_DESC( !iEvent, "event was not received" );
+    }
+    
+void T_CShwTimerControl::T_PauseL()
+	{
+    // should evaluate true: else if( eventStartView )
+    // NOTE timer multiplies this with 1000 so this is milliseconds
+    TShwEventStartView start( 123 );
+    iCShwTimerControl->NotifyL( &start );
+
+	// then send Pause
+	// should evaluate true: if ( eventPause )
+	TShwEventPause pause;
+    iCShwTimerControl->NotifyL( &pause );
+	// send pause again, its a no-op
+    iCShwTimerControl->NotifyL( &pause );
+
+	// create timer to give us callback
+	TShwAutoPtr< CPeriodic > timer = CPeriodic::NewL( CActive::EPriorityStandard );
+	// start a timer to stop the asynch loop since we dont expect the 
+	// iCShwTimerControl to send any event
+	// start asynch wait for 1 second
+	iStoppedForTimer = EFalse;
+	timer->Start( 
+		1 * 1000000, 
+		1 * 1000000, 
+		TShwCallBack< T_CShwTimerControl, TimerCallBack >( this ) );
+
+	// Need to let the scheduler loop
+	iWait.Start();
+	timer->Cancel();
+	
+	EUNIT_ASSERT_DESC( iStoppedForTimer, "stopped in timer, SendEventL not called" );
+	EUNIT_ASSERT_DESC( !iEvent, "event was not received" );
+
+	// send resume
+	// should evaluate true: else if( eventResume )
+	TShwEventResume resume;
+    iCShwTimerControl->NotifyL( &resume );
+
+	// start the timer again
+	iStoppedForTimer = EFalse;
+	timer->Start( 
+		1 * 1000000, 
+		1 * 1000000, 
+		TShwCallBack< T_CShwTimerControl, TimerCallBack >( this ) );
+
+	// Need to let the scheduler loop
+	iWait.Start();
+	timer->Cancel();
+
+	EUNIT_ASSERT_DESC( !iStoppedForTimer, "SendEventL was called" );
+	EUNIT_ASSERT_DESC( iEvent, "event was received" );
+	EUNIT_ASSERT_DESC( dynamic_cast<TShwEventTimerBeat*>( iEvent ), "event was timer beat" );
+	// release the event
+	delete iEvent; iEvent = NULL;
+
+	// send resume again
+	// should evaluate true: else if( eventResume )
+	TShwEventResume resume2;
+    iCShwTimerControl->NotifyL( &resume2 );
+	// start the timer again
+	iStoppedForTimer = EFalse;
+	timer->Start( 
+		1 * 1000000, 
+		1 * 1000000, 
+		TShwCallBack< T_CShwTimerControl, TimerCallBack >( this ) );
+	// Need to let the scheduler loop
+	iWait.Start();
+	timer->Cancel();
+	EUNIT_ASSERT_DESC( iStoppedForTimer, "stopped in timer, SendEventL not called" );
+	EUNIT_ASSERT_DESC( !iEvent, "event was not received" );
+	}
+
+//  TEST TABLE
+EUNIT_BEGIN_TEST_TABLE(
+    T_CShwTimerControl,
+    "Test suite for CShwTimerControl",
+    "UNIT" )
+
+EUNIT_ALLOC_TEST(
+    "Constructor test",
+    "CShwTimerControl",
+    "NewL",
+    "FUNCTIONALITY",
+    Empty, TestConstructL, Empty )
+
+EUNIT_ALLOC_TEST(
+    "TimeTickL - test0",
+    "CShwTimerControl",
+    "TimeTickL",
+    "ERRORHANDLING",
+    SetupL, T_TimeTickLL, Teardown)
+
+// these cant be decorated as the EUnit
+// scheduler does not implement Error method
+EUNIT_NOT_DECORATED_TEST(
+    "NotifyL - test0",
+    "CShwTimerControl",
+    "NotifyL",
+    "FUNCTIONALITY",
+    SetupL, T_NotifyLL, Teardown)
+    
+EUNIT_NOT_DECORATED_TEST(
+    "NotifyL - test1",
+    "CShwTimerControl",
+    "NotifyL",
+    "FUNCTIONALITY",
+    SetupL, T_NotifyL2L, Teardown)
+
+EUNIT_NOT_DECORATED_TEST(
+    "Pause test",
+    "CShwTimerControl",
+    "NotifyL",
+    "FUNCTIONALITY",
+    SetupL, T_PauseL, Teardown)
+
+EUNIT_END_TEST_TABLE
+
+//  END OF FILE