--- a/photosgallery/slideshow/engine/tsrc/t_cshweffectcontrol/t_cshweffectcontrol.cpp Thu Jul 15 18:39:01 2010 +0300
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,932 +0,0 @@
-/*
-* Copyright (c) 2006-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 effect control for the slideshow
- *
-*/
-
-
-
-
-// CLASS HEADER
-#include "t_cshweffectcontrol.h"
-
-// EXTERNAL INCLUDES
-#include <EUnitMacros.h>
-#include <EUnitDecorators.h>
-
-// INTERNAL INCLUDES
-#include "shwslideshowenginepanic.h"
-#include "shweffectcontrol.h"
-#include "shwevent.h"
-#include "shwthumbnailcontext.h"
-#include "shwautoptr.h"
-
-#include "stub_tglxlayoutsplitter.h"
-#include "stub_glxfetchcontexts.h"
-
-// -----------------------------------------------------------------------------
-// Stub for NShwEngine::Panic -->
-// -----------------------------------------------------------------------------
-TBool gNShwEnginePanicCalled = EFalse;
-namespace NShwEngine
- {
- extern void Panic( TShwEnginePanic aPanic )
- {
- gNShwEnginePanicCalled = ETrue;
- // in test situation just do a leave
- User::Leave( aPanic );
- }
- }
-
-// -----------------------------------------------------------------------------
-// <-- Stub for NShwEngine::Panic
-// -----------------------------------------------------------------------------
-
-// CONSTRUCTION
-T_CShwEffectControl* T_CShwEffectControl::NewL()
- {
- T_CShwEffectControl* self = T_CShwEffectControl::NewLC();
- CleanupStack::Pop( self );
- return self;
- }
-
-T_CShwEffectControl* T_CShwEffectControl::NewLC()
- {
- T_CShwEffectControl* self = new( ELeave ) T_CShwEffectControl();
- CleanupStack::PushL( self );
-
- self->ConstructL();
-
- return self;
- }
-
-// Destructor (virtual by CBase)
-T_CShwEffectControl::~T_CShwEffectControl()
- {
- }
-
-// Default constructor
-T_CShwEffectControl::T_CShwEffectControl() :
- iStubEffectManager( this )
- {
- }
-
-// Second phase construct
-void T_CShwEffectControl::ConstructL()
- {
- // The ConstructL from the base class CEUnitTestSuiteClass must be called.
- // It generates the test case table.
- CEUnitTestSuiteClass::ConstructL();
- }
-
-// METHODS
-void T_CShwEffectControl::MGlxMediaList_MethodCalled( TMGlxMediaListMethodId aMethodId )
- {
- // append the methodid in the array
- TInt error = iMediaListCalls.Append( aMethodId );
- // check that append succeeded
- if( error != KErrNone )
- {
- // critical error, not enough space to append messages
- User::Panic( _L("T_CShwEffectControl::MGlxMediaList_MethodCalled"), __LINE__ );
- }
- }
-
-void T_CShwEffectControl::MGlxVisualList_MethodCalled( TMGlxVisualListMethodId aMethodId )
- {
- // append the methodid in the array
- TInt error = iVisualListCalls.Append( aMethodId );
- // check that append succeeded
- if( error != KErrNone )
- {
- // critical error, not enough space to append messages
- User::Panic( _L("TestError:AppendFail"), -1 );
- }
- }
-
-void T_CShwEffectControl::MShwEffectManager_MethodCalled( TMShwEffectManagerMethodId aMethodId )
- {
- // append the methodid in the array
- TInt error = iEffectCalls.Append( aMethodId );
- // check that append succeeded
- if( error != KErrNone )
- {
- // critical error, not enough space to append messages
- User::Panic( _L("TestError:AppendFail"), -2 );
- }
- }
-
-TInt gSendEventLeaveCode = KErrNone;
-void T_CShwEffectControl::SendEventL( MShwEvent* aEvent )
- {
- // need to clone the event since the caller goes out of scope
- TInt error = iEvents.Append( aEvent->CloneLC() );
- CleanupStack::Pop(); // aEvent->CloneLC()
-
- // check that append succeeded
- if( error != KErrNone )
- {
- // critical error, not enough space to append events
- User::Panic( _L("T_CShwEffectControl::NotifyL"), __LINE__ );
- }
- User::LeaveIfError( gSendEventLeaveCode );
-
- // stop the scheduler loop if its started
- if( iWait.IsStarted() )
- {
- iWait.AsyncStop();
- }
- }
-
-void T_CShwEffectControl::EmptySetupL()
- {
- gNShwEnginePanicCalled = EFalse; // by default no panic was called
- gSendEventLeaveCode = KErrNone; // by default no leaves in SendEventL
- // make room for 20 entries on each array
- iVisualListCalls.ReserveL( 20 );
- iMediaListCalls.ReserveL( 20 );
- iEffectCalls.ReserveL( 20 );
- iEvents.ReserveL( 20 );
-
- iStubVisualList = new( ELeave ) TMGlxVisualList_Adapter( this );
- iStubMediaList = new( ELeave ) TMGlxMediaList_Stub( this );
-
- // set the size and focus of the list
- iStubVisualList->iSize = 3;
- iStubVisualList->iFocus = 1;
- iStubMediaList->iCount = 3;
- iStubMediaList->iFocus = 1;
-
- iStubEffectManager.iViewDuration = 0;
- iStubEffectManager.iTransitionDuration = 0;
-
- // reset the visuals of effect stub
- iStubEffectManager.iPrepareVisual = reinterpret_cast<CHuiVisual*>( KErrNotFound );
- iStubEffectManager.iViewVisual = reinterpret_cast<CHuiVisual*>( KErrNotFound );
- iStubEffectManager.iTransitionVisual = reinterpret_cast<CHuiVisual*>( KErrNotFound );
-
- // tell the thumbnail stub to add attributes
- // this tells the thumbnailcontext stub to add entries to the
- // array which then tell the thumbnail loader that the
- // thumbnail was not yet loaded
- gThumbnailContextRequestCount = 1;
- // by default size is available
- gTGlxMediaGetDimensions = ETrue;
- // by default we dont want alloc behavior
- gFetchContextAllocTest = EFalse;
- }
-
-void T_CShwEffectControl::SetupL()
- {
- // reuse the empty version to create the stubs
- EmptySetupL();
- // create the effect control
- iCShwEffectControl =
- CShwEffectControl::NewL(
- iStubEffectManager, *iStubVisualList, *iStubMediaList, TSize( 320, 240 ) );
- // set the event queue
- iCShwEffectControl->SetEventQueue( this );
-
- // perform the second phase of construction
- TShwEventInitialize initEvent;
- iCShwEffectControl->NotifyL( &initEvent );
- }
-
-void T_CShwEffectControl::Teardown()
- {
- // delete effect control
- delete iCShwEffectControl;
- iCShwEffectControl = NULL;
- // close the arrays
- iEffectCalls.Close();
- iVisualListCalls.Close();
- iMediaListCalls.Close();
- // release events
- for( TInt i=0; i<iEvents.Count(); i++ )
- {
- MShwEvent* event = iEvents[ i ];
- delete event;
- }
- iEvents.Close();
- // release the visual list stub
- delete iStubVisualList;
- iStubVisualList = NULL;
- // delete the media list stub
- delete iStubMediaList;
- iStubMediaList = NULL;
- }
-
-void T_CShwEffectControl::TestConstructionL()
- {
- // we want alloc behavior
- gFetchContextAllocTest = ETrue;
- // reset stub
- iStubVisualList->iSize = 11;
- iStubVisualList->iFocus = 10;
- // reset the state as setup uses splitter
- gSplitterAddLayoutLCalled = EFalse;
- gSplitterRemoveLayoutLCalled = EFalse;
- // create an effect control
- CShwEffectControl* tmp =
- CShwEffectControl::NewL(
- iStubEffectManager, *iStubVisualList, *iStubMediaList, TSize( 320, 240 ) );
- // need to put to cleanupstack in case NotifyL leaves
- CleanupStack::PushL( tmp );
-
- EUNIT_ASSERT_DESC( tmp, "Construction successfull");
-
- EUNIT_ASSERT_EQUALS_DESC( 0, iEffectCalls.Count(), "Effect manager was not called" );
-
- // perform the second phase of construction
- TShwEventInitialize initEvent;
- tmp->NotifyL( &initEvent );
-
- // check that the calls made by CShwEffectControl were correct ones
- EUNIT_ASSERT_EQUALS_DESC( 2, iEffectCalls.Count(), "Effect manager was called 2 times" );
- EUNIT_ASSERT_EQUALS_DESC( E_MShwEffect_p_CurrentEffect, iEffectCalls[ 0 ], "current effect was called" );
- EUNIT_ASSERT_EQUALS_DESC( E_MGlxLayout_PrepareViewL, iEffectCalls[ 1 ], "current effect was called" );
-
- // test notify again with size not available
- gTGlxMediaGetDimensions = EFalse;
- // call notify again
- tmp->NotifyL( &initEvent );
- // check that the calls made by CShwEffectControl were correct ones
- EUNIT_ASSERT_EQUALS_DESC( 4, iEffectCalls.Count(), "Effect manager was called 4 times" );
- EUNIT_ASSERT_EQUALS_DESC( E_MShwEffect_p_CurrentEffect, iEffectCalls[ 2 ], "current effect was called" );
- EUNIT_ASSERT_EQUALS_DESC( E_MGlxLayout_PrepareViewL, iEffectCalls[ 3 ], "current effect was called" );
-
- // check splitter usage
- EUNIT_ASSERT_DESC( !gSplitterAddLayoutLCalled, "layout was not set" );
- EUNIT_ASSERT_DESC( !gSplitterRemoveLayoutLCalled, "layout was not removed" );
-
- CleanupStack::PopAndDestroy( tmp );
- }
-
-void T_CShwEffectControl::TransitionCompletedL()
- {
- // reset the state as setup uses splitter
- gSplitterAddLayoutLCalled = EFalse;
- gSplitterRemoveLayoutLCalled = EFalse;
-
- // call transition completed
- iCShwEffectControl->SendTransitionReadyL();
-
- // check that we got the correct event
- EUNIT_ASSERT_DESC( iEvents.Count() > 0, "we got an event");
- EUNIT_ASSERT_DESC(
- dynamic_cast<TShwEventTransitionReady*>( iEvents[ 0 ] ),
- "event was correct class" );
-
- // check splitter usage
- EUNIT_ASSERT_DESC( !gSplitterAddLayoutLCalled, "layout was not set" );
- EUNIT_ASSERT_DESC( !gSplitterRemoveLayoutLCalled, "layout was not removed" );
- }
-
-void T_CShwEffectControl::TransitionCompleted2L()
- {
- // tell the thumbnail context that the thumbnail is already loaded
- // so that the thumbnail loader will immediately make the callback
- gThumbnailContextRequestCount = 0;
- // tell the medialist stub to notify that we have the first thumbnail loaded
- iStubMediaList->NotifyAttributesAvailableL( iStubMediaList->iFocus );
-
- // check that we dont have event
- EUNIT_ASSERT_EQUALS_DESC( 1, iEvents.Count(), "event received");
- // check that we got the correct event
- EUNIT_ASSERT_DESC(
- dynamic_cast<TShwEventReadyToView*>( iEvents[ 0 ] ),
- "event was correct class" );
-
- // send the event
- TShwEventStartTransition trans( 123 );
- iCShwEffectControl->NotifyL( &trans );
-
- // start the wait loop
- iWait.Start();
- // check that we got event
- EUNIT_ASSERT_EQUALS_DESC( 3, iEvents.Count(), "we got an event");
- // check that we got the correct events
- EUNIT_ASSERT_DESC(
- dynamic_cast<TShwEventReadyToView*>( iEvents[ 1 ] ),
- "event was correct class" );
- EUNIT_ASSERT_DESC(
- dynamic_cast<TShwEventTransitionReady*>( iEvents[ 2 ] ),
- "event was correct class" );
- }
-
-void T_CShwEffectControl::NotifyLL()
- {
- TInt initialEffectCalls = iEffectCalls.Count();
- TInt initialVisualCalls = iVisualListCalls.Count();
-
- // reset the state as setup uses splitter
- gSplitterAddLayoutLCalled = EFalse;
- gSplitterRemoveLayoutLCalled = EFalse;
- // reset the visuals
- iStubEffectManager.iPrepareVisual = reinterpret_cast<CHuiVisual*>( KErrNotFound );
- iStubEffectManager.iViewVisual = reinterpret_cast<CHuiVisual*>( KErrNotFound );
- iStubEffectManager.iTransitionVisual = reinterpret_cast<CHuiVisual*>( KErrNotFound );
-
- // test not supported event path
- iCShwEffectControl->NotifyL( NULL );
-
- // check that there was no new calls made by CShwEffectControl to visual list or effect manager
- EUNIT_ASSERT_EQUALS_DESC( initialEffectCalls, iEffectCalls.Count(), "Effect manager was not called" );
- EUNIT_ASSERT_EQUALS_DESC( initialVisualCalls, iVisualListCalls.Count(), "Visual list was not called" );
-
- // test if( viewEvent )
-
- // tell the stub context that a request is complete
- gThumbnailContextRequestCount = KErrNone;
- // tell the media list stub to notify that thumbnail in focus is loaded
- iStubMediaList->NotifyAttributesAvailableL( iStubMediaList->iFocus );
-
- // check that we got the event
- EUNIT_ASSERT_EQUALS_DESC( 1, iEvents.Count(), "we got an event");
- // this was the first time the event was received so we get init complete event
- EUNIT_ASSERT_DESC(
- dynamic_cast< TShwEventReadyToView* >( iEvents[ 0 ] ),
- "TShwEventReadyToView received" );
-
- // tell the stub context that its request is complete, at this point there is no
- // context so we only test that thumbnail context works without one
- gThumbnailContextRequestCount = KErrNone;
- // tell the media list stub to notify that next thumbnail is loaded
- // remember the modulo
- iStubMediaList->NotifyAttributesAvailableL(
- ( iStubMediaList->iFocus + 1 )%iStubMediaList->iCount );
-
- // if( view_event ) : true
- // if( iLoopStarted ) : false
- TShwEventStartView start( 999 );
- iCShwEffectControl->NotifyL( &start );
-
- // thumbnail notify is always asynchronous so first check we did not yet get the event
- EUNIT_ASSERT_EQUALS_DESC( 1, iEvents.Count(), "we got only previous event");
- // start async wait
- iWait.Start();
-
- // check that we got view ready event
- EUNIT_ASSERT_EQUALS_DESC( 2, iEvents.Count(), "we got an event");
- EUNIT_ASSERT_DESC( dynamic_cast<TShwEventReadyToAdvance*>( iEvents[ 1 ] ), "TShwEventReadyToAdvance received" );
-
- // check the visual given to effect
- EUNIT_ASSERT_EQUALS_DESC( (TInt)iStubEffectManager.iPrepareVisual, 2, "prepare was given visual 2 (focus is on 1)" );
- EUNIT_ASSERT_EQUALS_DESC( (TInt)iStubEffectManager.iViewVisual, 1, "view was given visual 1 (focus is on 1)" );
- EUNIT_ASSERT_EQUALS_DESC( (TInt)iStubEffectManager.iTransitionVisual, KErrNotFound, "transition was not given visual" );
- // check splitter usage
- EUNIT_ASSERT_DESC( gSplitterAddLayoutLCalled, "layout was set (view layout)" );
- EUNIT_ASSERT_DESC( gSplitterRemoveLayoutLCalled, "layout was removed (old view layout)" );
-
- // test path:
- EUNIT_PRINT( _L("if( view_event ) : false") );
- EUNIT_PRINT( _L("else if( trans_event ) : true") );
- // if( view_event ) : false
- // else if( trans_event ) : true
- TInt effectCalls = iEffectCalls.Count();
- TInt visualCalls = iVisualListCalls.Count();
- // reset the visuals
- iStubEffectManager.iPrepareVisual = reinterpret_cast<CHuiVisual*>( KErrNotFound );
- iStubEffectManager.iViewVisual = reinterpret_cast<CHuiVisual*>( KErrNotFound );
- iStubEffectManager.iTransitionVisual = reinterpret_cast<CHuiVisual*>( KErrNotFound );
- // send the event
- TShwEventStartTransition trans( 666 );
- iCShwEffectControl->NotifyL( &trans );
- // check that view duration was stored from view event
- EUNIT_ASSERT_EQUALS_DESC( 999, iStubEffectManager.iViewDuration, "view duration is set correctly" );
- // check that transition duration was given as parameter
- EUNIT_ASSERT_EQUALS_DESC( 666, iStubEffectManager.iTransitionDuration, "transition duration is set correctly" );
- // check the visual given to effect
- EUNIT_ASSERT_EQUALS_DESC( (TInt)iStubEffectManager.iPrepareVisual, KErrNotFound, "prepare was not given visual" );
- EUNIT_ASSERT_EQUALS_DESC( (TInt)iStubEffectManager.iViewVisual, 2, "view was given visual 2 (focus is on 2)" );
- EUNIT_ASSERT_EQUALS_DESC( (TInt)iStubEffectManager.iTransitionVisual, 1, "transition was given visual 1 (focus is on 1)" );
- // check splitter usage
- EUNIT_ASSERT_DESC( gSplitterAddLayoutLCalled, "layout was set" );
- EUNIT_ASSERT_DESC( gSplitterRemoveLayoutLCalled, "layout was removed" );
-
- // test path:
- EUNIT_PRINT( _L("if( view_event ) : true") );
- EUNIT_PRINT( _L("if( iLoopStarted ) : true") );
- EUNIT_PRINT( _L("else if( trans_event ) : false") );
- // if( view_event ) : true
- // if( iLoopStarted ) : true
- // reset the state of splitter stub
- gSplitterAddLayoutLCalled = EFalse;
- gSplitterRemoveLayoutLCalled = EFalse;
- effectCalls = iEffectCalls.Count();
- visualCalls = iVisualListCalls.Count();
- // reset the visuals
- iStubEffectManager.iPrepareVisual = reinterpret_cast<CHuiVisual*>( KErrNotFound );
- iStubEffectManager.iViewVisual = reinterpret_cast<CHuiVisual*>( KErrNotFound );
- iStubEffectManager.iTransitionVisual = reinterpret_cast<CHuiVisual*>( KErrNotFound );
- // move focus to 2
- iStubVisualList->iFocus = 2;
- iStubMediaList->iFocus = 2;
-
- // tell the stub context that its request is complete
- gThumbnailContextRequestCount = KErrNone;
- // tell the media list stub to notify that thumbnail is loaded
- // remember the modulo
- iStubMediaList->NotifyAttributesAvailableL(
- ( iStubMediaList->iFocus + 1 )%iStubMediaList->iCount );
-
- // send the event
- TShwEventStartView start2( 123 );
- iCShwEffectControl->NotifyL( &start2 );
-
- // check we got the ready to view event
- EUNIT_ASSERT_EQUALS_DESC( 3, iEvents.Count(), "we got ready to view");
- EUNIT_ASSERT_DESC( dynamic_cast<TShwEventReadyToView*>( iEvents[ 2 ] ), "TShwEventReadyToView received" );
- // start async wait
- iWait.Start();
-
- // check that view duration was not set
- EUNIT_ASSERT_EQUALS_DESC( 999, iStubEffectManager.iViewDuration, "view duration is same as last, see above" );
- // check the visual given to effect
- EUNIT_ASSERT_EQUALS_DESC( (TInt)iStubEffectManager.iPrepareVisual, 0, "prepare view was given visual 0 (focus is on 2, size is 3)" );
- EUNIT_ASSERT_EQUALS_DESC( (TInt)iStubEffectManager.iViewVisual, KErrNotFound, "view was not given visual" );
- EUNIT_ASSERT_EQUALS_DESC( (TInt)iStubEffectManager.iTransitionVisual, 1, "exit transition was given visual 1 (focus is on 2)" );
- // check that we got view ready event
- EUNIT_ASSERT_EQUALS_DESC( 4, iEvents.Count(), "event received" );
- EUNIT_ASSERT_DESC( dynamic_cast<TShwEventReadyToAdvance*>( iEvents[ 3 ] ), "TShwEventReadyToAdvance received" );
-
- // check splitter usage
- EUNIT_ASSERT_DESC( !gSplitterAddLayoutLCalled, "layout was not set" );
- EUNIT_ASSERT_DESC( gSplitterRemoveLayoutLCalled, "layout was removed" );
- }
-
-void T_CShwEffectControl::SlowImageLoadL()
- {
- // test path:
- EUNIT_PRINT( _L("if( view_event ) : true") );
- EUNIT_PRINT( _L("if( iLoopStarted ) : false") );
- EUNIT_PRINT( _L("else if( trans_event ) : false") );
-
- // tell the stub context that its request is complete
- gThumbnailContextRequestCount = KErrNone;
- // tell the media list stub to notify that thumbnail in focus is loaded
- iStubMediaList->NotifyAttributesAvailableL( iStubMediaList->iFocus );
-
- // check that we got the event
- EUNIT_ASSERT_EQUALS_DESC( 1, iEvents.Count(), "we got an event");
- // this was the first time the event was received so we get init complete event
- EUNIT_ASSERT_DESC(
- dynamic_cast< TShwEventReadyToView* >( iEvents[ 0 ] ),
- "TShwEventReadyToView received" );
-
- // tell the stub context that its request is not complete
- gThumbnailContextRequestCount = 1;
-
- // if( view_event ) : true
- // if( iLoopStarted ) : false
- TShwEventStartView start( 999 );
- iCShwEffectControl->NotifyL( &start );
- // variable iLoopStarted is initialized as false so we dont go through the loop
- // check that we got view ready event
- EUNIT_ASSERT_EQUALS_DESC( 1, iEvents.Count(), "new event not received" );
-
- // tell the stub context that its request is complete
- gThumbnailContextRequestCount = KErrNone;
- // tell the media list stub to notify that thumbnail is loaded
- // remember the modulo
- iStubMediaList->NotifyAttributesAvailableL(
- ( iStubMediaList->iFocus + 1 )%iStubMediaList->iCount );
-
- EUNIT_ASSERT_EQUALS_DESC( 2, iEvents.Count(), "we got an event");
- EUNIT_ASSERT_DESC( dynamic_cast<TShwEventReadyToAdvance*>( iEvents[ 1 ] ), "TShwEventReadyToAdvance received" );
- }
-
-void T_CShwEffectControl::SlowImageLoad2L()
- {
- // set the size and focus of the list
- iStubVisualList->iSize = 10;
- iStubVisualList->iFocus = 1;
- iStubMediaList->iCount = 10;
- iStubMediaList->iFocus = 1;
- // test path:
- EUNIT_PRINT( _L("if( view_event ) : true") );
- EUNIT_PRINT( _L("if( iLoopStarted ) : false") );
- EUNIT_PRINT( _L("else if( trans_event ) : false") );
-
- // tell the stub context that its request is complete
- gThumbnailContextRequestCount = KErrNone;
- // tell the media list stub to notify that thumbnail in focus is loaded
- iStubMediaList->NotifyAttributesAvailableL( iStubMediaList->iFocus );
-
- // check that we got the event
- EUNIT_ASSERT_EQUALS_DESC( 1, iEvents.Count(), "we got an event");
- // this was the first time the event was received so we get init complete event
- EUNIT_ASSERT_DESC(
- dynamic_cast< TShwEventReadyToView* >( iEvents[ 0 ] ),
- "TShwEventReadyToView received" );
-
- // tell the stub context that its request is not complete
- gThumbnailContextRequestCount = 1;
-
- // if( view_event ) : true
- // if( iLoopStarted ) : false
- TShwEventStartView start( 999 );
- iCShwEffectControl->NotifyL( &start );
- // variable iLoopStarted is initialized as false so we dont go through the loop
- // check that we got view ready event
- EUNIT_ASSERT_EQUALS_DESC( 1, iEvents.Count(), "new event not received" );
-
- // tell the stub context that its request is complete
- gThumbnailContextRequestCount = KErrNone;
- // tell the media list stub to notify that thumbnail is loaded
- // remember the modulo
- iStubMediaList->NotifyAttributesAvailableL(
- ( iStubMediaList->iFocus + 3 )%iStubMediaList->iCount );
- EUNIT_ASSERT_EQUALS_DESC( 1, iEvents.Count(), "new event not received" );
-
- // tell the media list stub to notify that thumbnail is loaded
- // remember the modulo
- iStubMediaList->NotifyAttributesAvailableL(
- ( iStubMediaList->iFocus + 2 )%iStubMediaList->iCount );
- EUNIT_ASSERT_EQUALS_DESC( 1, iEvents.Count(), "new event not received" );
-
- // tell the stub context that its request is not complete
- gThumbnailContextRequestCount = 1;
- // tell the media list stub to notify that thumbnail is loaded
- // remember the modulo
- iStubMediaList->NotifyAttributesAvailableL(
- ( iStubMediaList->iFocus + 1 )%iStubMediaList->iCount );
- EUNIT_ASSERT_EQUALS_DESC( 1, iEvents.Count(), "new event not received" );
-
- // tell the stub context that its request is complete
- gThumbnailContextRequestCount = KErrNone;
- iStubMediaList->NotifyAttributesAvailableL(
- ( iStubMediaList->iFocus + 1 )%iStubMediaList->iCount );
- EUNIT_ASSERT_EQUALS_DESC( 2, iEvents.Count(), "event received" );
- // this was second time the event was received so we get view complete event
- EUNIT_ASSERT_DESC(
- dynamic_cast<TShwEventReadyToAdvance*>( iEvents[ 1 ] ),
- "TShwEventViewReady received" );
- }
-
-void T_CShwEffectControl::HandleFocusChangedL()
- {
- TInt initialVisualListCalls = iVisualListCalls.Count();
- iCShwEffectControl->HandleFocusChangedL( 0, 0, NULL, NGlxListDefs::EUnknown );
- EUNIT_ASSERT_NOT_EQUALS_DESC(
- initialVisualListCalls, iVisualListCalls.Count(), "Visual list was called" );
- }
-
-void T_CShwEffectControl::TestThumbnailLoadingL()
- {
- // create shw thumbnail context for index 1 and size 100,100
- const TInt thumbIndex = 1;
- CShwThumbnailContext* context = CShwThumbnailContext::NewLC(thumbIndex,
- TSize(100, 100), iStubMediaList);
-
- // test that the index is returned
- // set iterator to first
- context->SetToFirst(iStubMediaList);
- // then iterate once
- TInt index = (*context)++;
- EUNIT_ASSERT_EQUALS_DESC(thumbIndex, index, "check first iterated index");
-
- index = (*context)++;
- EUNIT_ASSERT_EQUALS_DESC( KErrNotFound, index, "next index is KErrNotFound" );
-
- // check range
- EUNIT_ASSERT_DESC( !context->InRange( thumbIndex-1 ), "thumbIndex-1 is not in range" );
- EUNIT_ASSERT_DESC( !context->InRange( thumbIndex+1 ), "thumbIndex+1 is not in range" );
- EUNIT_ASSERT_DESC( context->InRange( thumbIndex ), "thumbIndex is in range" );
-
- CleanupStack::PopAndDestroy(context);
- }
-
-void T_CShwEffectControl::TestErrorsInThumbnailLoadingL()
- {
- // set the size and focus of the list
- iStubVisualList->iSize = 10;
- iStubVisualList->iFocus = 1;
- iStubMediaList->iCount = 10;
- iStubMediaList->iFocus = 1;
-// first test that first thumbnail does not load
- // tell the stub context that its request has error
- gThumbnailContextRequestCount = KErrCorrupt;
- {
- // create an effect control, no need to delete or cleanupstack
- TShwAutoPtr< CShwEffectControl > tmp =
- CShwEffectControl::NewL(
- iStubEffectManager, *iStubVisualList, *iStubMediaList, TSize( 320, 240 ) );
- // need to set the event queue
- tmp->SetEventQueue( this );
- // perform the second phase of construction
- TShwEventInitialize initEvent;
- tmp->NotifyL( &initEvent );
-
- // check that we did not get an event
- EUNIT_ASSERT_EQUALS_DESC( 0, iEvents.Count(), "we did not yet get an event");
-
- // start async wait loop
- iWait.Start();
-
- // check that we got the event
- EUNIT_ASSERT_EQUALS_DESC( 1, iEvents.Count(), "we got an event");
- // this was the first time the event was received so we get init complete event
- EUNIT_ASSERT_DESC(
- dynamic_cast< TShwEventReadyToView* >( iEvents[ 0 ] ),
- "TShwEventReadyToView received" );
- // delete and remove the event
- delete iEvents[ 0 ];
- iEvents.Remove( 0 );
- // tmp gets deleted here, EUnit checks for memory
- }
-
-// test that second thumbnail does not load
- // tell the stub context that its request is not yet completed
- gThumbnailContextRequestCount = 1;
- {
- // create an effect control, no need to delete or cleanupstack
- TShwAutoPtr< CShwEffectControl > tmp =
- CShwEffectControl::NewL(
- iStubEffectManager, *iStubVisualList, *iStubMediaList, TSize( 320, 240 ) );
- // need to set the event queue
- tmp->SetEventQueue( this );
- // perform the second phase of construction
- TShwEventInitialize initEvent;
- tmp->NotifyL( &initEvent );
- // check that we did not get an event
- EUNIT_ASSERT_EQUALS_DESC( 0, iEvents.Count(), "we did not yet get new event");
-
- // tell the stub context that the request has error
- gThumbnailContextRequestCount = KErrCorrupt;
- // tell the media list stub to notify that first thumbnail is loaded
- iStubMediaList->NotifyAttributesAvailableL( iStubMediaList->iFocus );
-
- // check that we got the event
- EUNIT_ASSERT_EQUALS_DESC( 1, iEvents.Count(), "we got an event");
- // this was the first time the event was received so we get init complete event
- EUNIT_ASSERT_DESC(
- dynamic_cast< TShwEventReadyToView* >( iEvents[ 0 ] ),
- "TShwEventReadyToView received" );
- // delete and remove the event
- delete iEvents[ 0 ];
- iEvents.Remove( 0 );
- // tmp gets deleted here, EUnit checks for memory
- }
-
-// test HandleError call before first thumbnail
- // tell the stub context that its request is not yet completed
- gThumbnailContextRequestCount = 1;
- {
- // create an effect control, no need to delete or cleanupstack
- TShwAutoPtr< CShwEffectControl > tmp =
- CShwEffectControl::NewL(
- iStubEffectManager, *iStubVisualList, *iStubMediaList, TSize( 320, 240 ) );
- // need to set the event queue
- tmp->SetEventQueue( this );
- // perform the second phase of construction
- TShwEventInitialize initEvent;
- tmp->NotifyL( &initEvent );
- // check that we did not get an event
- EUNIT_ASSERT_EQUALS_DESC( 0, iEvents.Count(), "we did not yet get new event");
-
- // tell the stub context that the request has error
- gThumbnailContextRequestCount = KErrCorrupt;
- // tell the media list stub to notify that there was an error
- iStubMediaList->NotifyError( KErrNoMemory );
-
- // start async wait loop
- iWait.Start();
-
- // check that we got the event
- EUNIT_ASSERT_EQUALS_DESC( 1, iEvents.Count(), "we got an event");
- // this was the first time the event was received so we get init complete event
- EUNIT_ASSERT_DESC(
- dynamic_cast< TShwEventReadyToView* >( iEvents[ 0 ] ),
- "TShwEventReadyToView received" );
- // delete and remove the event
- delete iEvents[ 0 ];
- iEvents.Remove( 0 );
- // tmp gets deleted here, EUnit checks for memory
- }
-
-// test HandleError call after first thumbnail
- // tell the stub context that its request is completed
- gThumbnailContextRequestCount = KErrNone;
- {
- // create an effect control, no need to delete or cleanupstack
- TShwAutoPtr< CShwEffectControl > tmp =
- CShwEffectControl::NewL(
- iStubEffectManager, *iStubVisualList, *iStubMediaList, TSize( 320, 240 ) );
- // need to set the event queue
- tmp->SetEventQueue( this );
- // perform the second phase of construction
- TShwEventInitialize initEvent;
- tmp->NotifyL( &initEvent );
- // check that we did not get an event
- EUNIT_ASSERT_EQUALS_DESC( 0, iEvents.Count(), "we did not yet get new event");
-
- // start async wait loop
- iWait.Start();
-
- // check that we got the event
- EUNIT_ASSERT_EQUALS_DESC( 1, iEvents.Count(), "we got an event");
- // this was the first time the event was received so we get init complete event
- EUNIT_ASSERT_DESC(
- dynamic_cast< TShwEventReadyToView* >( iEvents[ 0 ] ),
- "TShwEventReadyToView received" );
- // delete and remove the event
- delete iEvents[ 0 ];
- iEvents.Remove( 0 );
-
- // tell the stub context that its request is not yet completed
- gThumbnailContextRequestCount = 1;
- // send start view
- TShwEventStartView startView( 123 );
- tmp->NotifyL( &startView );
-
- // tell the stub context that the request has error
- gThumbnailContextRequestCount = KErrCorrupt;
- // tell the media list stub to notify that there was an error
- iStubMediaList->NotifyError( KErrNoMemory );
-
- // start async wait loop
- iWait.Start();
-
- // check that we got the event
- EUNIT_ASSERT_EQUALS_DESC( 1, iEvents.Count(), "we got an event");
- // this was the first time the event was received so we get init complete event
- EUNIT_ASSERT_DESC(
- dynamic_cast< TShwEventReadyToAdvance* >( iEvents[ 0 ] ),
- "TShwEventReadyToView received" );
- // delete and remove the event
- delete iEvents[ 0 ];
- iEvents.Remove( 0 );
- // tmp gets deleted here, EUnit checks for memory
- }
-
-// test HandleItemRemovedL call
- // tell the stub context that its request is not completed
- gThumbnailContextRequestCount = KErrNone;
- {
- // create an effect control, no need to delete or cleanupstack
- TShwAutoPtr< CShwEffectControl > tmp =
- CShwEffectControl::NewL(
- iStubEffectManager, *iStubVisualList, *iStubMediaList, TSize( 320, 240 ) );
- // need to set the event queue
- tmp->SetEventQueue( this );
- // perform the second phase of construction
- TShwEventInitialize initEvent;
- tmp->NotifyL( &initEvent );
- // check that we did not get an event
- EUNIT_ASSERT_EQUALS_DESC( 0, iEvents.Count(), "we did not yet get new event");
-
- // start async wait loop
- iWait.Start();
-
- // check that we got the event
- EUNIT_ASSERT_EQUALS_DESC( 1, iEvents.Count(), "we got an event");
- // this was the first time the event was received so we get init complete event
- EUNIT_ASSERT_DESC(
- dynamic_cast< TShwEventReadyToView* >( iEvents[ 0 ] ),
- "TShwEventReadyToView received" );
- // delete and remove the event
- delete iEvents[ 0 ];
- iEvents.Remove( 0 );
-
- // tell medialist stub to call HandleItemRemovedL
- iStubMediaList->NotifyItemRemoved( 0, 1 );
- // this time the list was not empty so nothing done
- // check that we got no event
- EUNIT_ASSERT_EQUALS_DESC( 0, iEvents.Count(), "we got no event");
- // remove items from stub medialist
- iStubMediaList->iCount = 0;
- // tell medialist stub to call HandleItemRemovedL
- iStubMediaList->NotifyItemRemoved( 0, 1 );
-
- // check that we got the event
- EUNIT_ASSERT_EQUALS_DESC( 1, iEvents.Count(), "we got an event");
- // this was the first time the event was received so we get init complete event
- EUNIT_ASSERT_DESC(
- dynamic_cast< TShwEventFatalError* >( iEvents[ 0 ] ),
- "TShwEventReadyToView received" );
- // delete and remove the event
- delete iEvents[ 0 ];
- iEvents.Remove( 0 );
-
- // tell medialist stub to call HandleItemRemovedL again
- iStubMediaList->NotifyItemRemoved( 0, 1 );
- // this does nothing as the thumbnail loader was deleted and all contexts removed
- // check that we got no event
- EUNIT_ASSERT_EQUALS_DESC( 0, iEvents.Count(), "we got an event");
- // tmp gets deleted here, EUnit checks for memory
- }
-
- // test also leave on SendEventL
- // tell the stub context that its request is not completed
- gThumbnailContextRequestCount = KErrNone;
- {
- // create an effect control, no need to delete or cleanupstack
- TShwAutoPtr< CShwEffectControl > tmp =
- CShwEffectControl::NewL(
- iStubEffectManager, *iStubVisualList, *iStubMediaList, TSize( 320, 240 ) );
- // need to set the event queue
- tmp->SetEventQueue( this );
- // perform the second phase of construction
- TShwEventInitialize initEvent;
- tmp->NotifyL( &initEvent );
- // start async wait loop
- iWait.Start();
- // remove items from stub medialist
- iStubMediaList->iCount = 0;
- // tell SendEventL to leave
- gSendEventLeaveCode = KErrNoMemory;
- // tell medialist stub to call HandleItemRemovedL
- TRAPD( error, iStubMediaList->NotifyItemRemoved( 0, 1 ) );
- // check that engine did panic
- EUNIT_ASSERT_DESC( gNShwEnginePanicCalled, "Engine panic was called" );
- EUNIT_ASSERT_EQUALS_DESC(
- NShwEngine::EEngineFatalError, error, "panic code was fatal error");
- }
-
- }
-
-
-// TEST TABLE
-EUNIT_BEGIN_TEST_TABLE(
- T_CShwEffectControl,
- "Test suite for CShwEffectControl",
- "UNIT" )
-
-EUNIT_ALLOC_TEST(
- "Construct-destruct test",
- "CShwEffectControl",
- "CShwEffectControl",
- "FUNCTIONALITY",
- EmptySetupL, TestConstructionL, Teardown ) // needs to have teardown as alloc test
-
-EUNIT_ALLOC_TEST(
- "test TransitionCompleted",
- "CShwEffectControl",
- "TransitionCompleted",
- "FUNCTIONALITY",
- SetupL, TransitionCompletedL, Teardown )
-
-EUNIT_NOT_DECORATED_TEST( // cant be decorated as active objects
- "test TransitionCompleted",
- "CShwEffectControl",
- "TransitionCompleted",
- "FUNCTIONALITY",
- SetupL, TransitionCompleted2L, Teardown )
-
-EUNIT_NOT_DECORATED_TEST( // cant be decorated as active objects
- "test NotifyL",
- "CShwEffectControl",
- "NotifyL",
- "FUNCTIONALITY",
- SetupL, NotifyLL, Teardown )
-
-EUNIT_NOT_DECORATED_TEST( // cant be decorated as active objects
- "slow image load",
- "CShwEffectControl",
- "NotifyL",
- "FUNCTIONALITY",
- SetupL, SlowImageLoadL, Teardown )
-
-EUNIT_NOT_DECORATED_TEST( // cant be decorated as active objects
- "slow image load",
- "CShwEffectControl",
- "NotifyL",
- "FUNCTIONALITY",
- SetupL, SlowImageLoad2L, Teardown )
-
-EUNIT_TEST(
- "HandleFocusChangedL",
- "CShwEffectControl",
- "HandleFocusChangedL",
- "FUNCTIONALITY",
- SetupL, HandleFocusChangedL, Teardown )
-
-EUNIT_TEST(
- "Thumbnail loading",
- "CShwThumbnailContext",
- "multiple",
- "FUNCTIONALITY",
- SetupL, TestThumbnailLoadingL, Teardown )
-
-EUNIT_TEST(
- "Thumbnail errors",
- "CShwThumbnailLoader",
- "multiple",
- "FUNCTIONALITY",
- EmptySetupL, TestErrorsInThumbnailLoadingL, Teardown )
-
-EUNIT_END_TEST_TABLE
-
-// END OF FILE