photosgallery/slideshow/engine/tsrc/t_cshwdefaulteffectmanager/t_cshwdefaulteffectmanager.cpp
changeset 0 4e91876724a2
child 2 7d9067c6fcb1
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/photosgallery/slideshow/engine/tsrc/t_cshwdefaulteffectmanager/t_cshwdefaulteffectmanager.cpp	Thu Dec 17 08:45:44 2009 +0200
@@ -0,0 +1,359 @@
+/*
+* 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 default effect order manager
+ *
+*/
+
+
+
+//  CLASS HEADER
+#include "t_cshwdefaulteffectmanager.h"
+
+//  EXTERNAL INCLUDES
+#include <Digia/eunit/eunitmacros.h>
+#include <digia/eunit/EUnitDecorators.h>
+
+//  INTERNAL INCLUDES
+#include "shwdefaulteffectmanager.h"
+#include "shweffect.h"
+#include "shwslideshowenginepanic.h"
+
+//	STUBS
+#include "stub_mshweffect.h"
+
+// -----------------------------------------------------------------------------
+// Stub for NShwEngine -->
+// -----------------------------------------------------------------------------
+namespace NShwEngine
+	{
+	extern void Panic( TShwEnginePanic aPanic )
+		{
+		// do a leave in test situation
+		User::Leave( aPanic );
+		}
+	}
+// -----------------------------------------------------------------------------
+// <-- Stub for NShwEngine
+// -----------------------------------------------------------------------------
+
+// CONSTRUCTION
+T_CShwDefaultEffectManager* T_CShwDefaultEffectManager::NewL()
+    {
+    T_CShwDefaultEffectManager* self = T_CShwDefaultEffectManager::NewLC();
+    CleanupStack::Pop();
+
+    return self;
+    }
+
+T_CShwDefaultEffectManager* T_CShwDefaultEffectManager::NewLC()
+    {
+    T_CShwDefaultEffectManager* self = new( ELeave ) T_CShwDefaultEffectManager();
+    CleanupStack::PushL( self );
+
+    self->ConstructL();
+
+    return self;
+    }
+
+// Destructor (virtual by CBase)
+T_CShwDefaultEffectManager::~T_CShwDefaultEffectManager()
+    {
+    }
+
+// Default constructor
+T_CShwDefaultEffectManager::T_CShwDefaultEffectManager()
+    {
+    }
+
+// Second phase construct
+void T_CShwDefaultEffectManager::ConstructL()
+    {
+    // The ConstructL from the base class CEUnitTestSuiteClass must be called.
+    // It generates the test case table.
+    CEUnitTestSuiteClass::ConstructL();
+    }
+
+//  METHODS
+void T_CShwDefaultEffectManager::EmptySetupL()
+    {
+    }
+
+void T_CShwDefaultEffectManager::SetupL()
+    {
+	// create a default effect manager
+	iDefaultEffectManager = CShwDefaultEffectManager::NewL();
+    }
+    
+
+void T_CShwDefaultEffectManager::Teardown()
+    {
+    delete iDefaultEffectManager;
+    iDefaultEffectManager = NULL; // set to NULL to prevent double delete
+    }
+   
+void T_CShwDefaultEffectManager::TestConstructionL()
+	{
+	EUNIT_PRINT( _L("TestConstructionL") );
+
+	// create a default effect manager
+	CShwDefaultEffectManager* tmp = CShwDefaultEffectManager::NewL();
+
+	EUNIT_ASSERT_DESC( tmp, "Construction successful");
+
+	delete tmp;
+	}
+
+void T_CShwDefaultEffectManager::TestAddEffectL()
+    {
+    T_MShwTestEffect* effect = new(ELeave) T_MShwTestEffect( 0 );
+
+    CleanupStack::PushL( effect );
+    iDefaultEffectManager->AddEffectL( effect );  // takes ownership
+    CleanupStack::Pop( effect );
+
+	// TRAP since we expect it to leave
+	TRAPD( error, iDefaultEffectManager->CurrentEffect() );
+    EUNIT_ASSERT_EQUALS_DESC( 
+    	NShwEngine::EIncorrectEffectIndex, error, "iEffects was not set");
+	// get effects info
+   	TShwEffectInfo info = effect->EffectInfo();
+	// set effect order
+	iDefaultEffectManager->SetDefaultEffectL( info );
+	// ask for effect again
+	MShwEffect* current = iDefaultEffectManager->CurrentEffect();
+	// and check that it is the same one as this
+    EUNIT_ASSERT_DESC( 
+    	current == static_cast<MShwEffect*>( effect ), "current effect was set");   
+    }
+
+void T_CShwDefaultEffectManager::TestAddNullEffectL()
+    {
+    iDefaultEffectManager->AddEffectL( NULL );
+
+	// TRAP since we expect it to leave
+	TRAPD( error, iDefaultEffectManager->CurrentEffect() );
+    EUNIT_ASSERT_EQUALS_DESC( 
+    	NShwEngine::EIncorrectEffectIndex, error, "iEffects was not set");
+
+	// create empty effect info
+   	TShwEffectInfo info;
+	// set effect order
+	TRAP( error, iDefaultEffectManager->SetDefaultEffectL( info ) );
+	// ask for effect again
+    EUNIT_ASSERT_EQUALS_DESC( KErrArgument, error, "illegal argument");
+    }
+    
+void T_CShwDefaultEffectManager::TestNextEffectL()
+    {
+    // Create two effects
+    T_MShwTestEffect* effect0 = new(ELeave) T_MShwTestEffect(0);
+    CleanupStack::PushL( effect0 );
+
+    // Add the effects
+    iDefaultEffectManager->AddEffectL( effect0 );  // takes ownership
+    CleanupStack::Pop( effect0 );
+
+	// get first effects info
+   	TShwEffectInfo info = effect0->EffectInfo();
+	// set default effect, this means that we will take a clone
+	// of the first effect and return either the original or the
+	// clone
+	iDefaultEffectManager->SetDefaultEffectL( info );
+    
+    // Check the current effect
+    MShwEffect* effect1 = iDefaultEffectManager->CurrentEffect();
+    // Expect to get the effects in the order they were added...
+    EUNIT_ASSERT( effect1 == static_cast<MShwEffect*>( effect0 ) );
+    // get the next effect
+    MShwEffect* effect2 = iDefaultEffectManager->Effect( 1 );
+    
+    // Proceed to next
+    iDefaultEffectManager->ProceedToEffect( 1 );
+
+	// 
+    EUNIT_ASSERT( effect2 == iDefaultEffectManager->CurrentEffect() );
+    EUNIT_ASSERT( effect1 == iDefaultEffectManager->Effect( 1 ) );
+    EUNIT_ASSERT( effect1 == iDefaultEffectManager->Effect( -1 ) );
+    EUNIT_ASSERT( effect2 == iDefaultEffectManager->Effect( 2 ) );
+    }
+
+/*
+void T_CShwDefaultEffectManager::TestProgrammedEffectL()
+    {
+    // Create two effects
+    T_MShwTestEffect* effect0 = new(ELeave) T_MShwTestEffect(0);
+    CleanupStack::PushL(effect0);
+    T_MShwTestEffect* effect1 = new(ELeave) T_MShwTestEffect(1);
+    CleanupStack::PushL(effect1);
+    
+    // Add the effects
+    iDefaultEffectManager->AddEffectL(effect0);  // takes ownership
+    iDefaultEffectManager->AddEffectL(effect1);  // takes ownership
+    
+    CleanupStack::Pop(2, effect0);
+    
+    // Specify programmed order
+    iDefaultEffectManager->SetEffectOrder(MShwEffectManager::EShwEffectOrderProgrammed);
+    
+    // Create the programmed order
+    RArray<MShwEffect*> programme;
+    CleanupClosePushL(programme);
+//    CleanupStack::PushL(&programme);
+    programme.AppendL(effect1);
+    programme.AppendL(effect0);
+    programme.AppendL(effect1);
+    
+    // Set the order
+    iDefaultEffectManager->SetProgrammedEffects(programme);
+    
+    // 
+    // Check the first effect
+    MShwEffect* inEffect = static_cast<MShwEffect*>(effect1);
+    MShwEffect* outEffect = iDefaultEffectManager->CurrentEffect();
+    EUNIT_ASSERT_EQUALS(inEffect, outEffect);
+   
+    inEffect = static_cast<MShwEffect*>(effect0); 
+    outEffect = iDefaultEffectManager->NextEffect(); 
+    EUNIT_ASSERT_EQUALS(inEffect, outEffect);
+
+    iDefaultEffectManager->ProceedToNextEffect();
+    
+    inEffect = static_cast<MShwEffect*>(effect1); 
+    outEffect = iDefaultEffectManager->NextEffect(); 
+    EUNIT_ASSERT_EQUALS(inEffect, outEffect);
+    
+    CleanupStack::PopAndDestroy(&programme);
+    }
+ 
+    
+void T_CShwDefaultEffectManager::TestMultiProgrammedEffectL()
+    {
+    // Create two effects
+    T_MShwTestEffect* effect0 = new(ELeave) T_MShwTestEffect(0);
+    CleanupStack::PushL(effect0);
+    T_MShwTestEffect* effect1 = new(ELeave) T_MShwTestEffect(1);
+    CleanupStack::PushL(effect1);
+    T_MShwTestEffect* effect2 = new(ELeave) T_MShwTestEffect(2);
+    CleanupStack::PushL(effect2);
+    
+    // Add the effects
+    iDefaultEffectManager->AddEffectL(effect0);  // takes ownership
+    iDefaultEffectManager->AddEffectL(effect1);  // takes ownership
+    iDefaultEffectManager->AddEffectL(effect2);  // takes ownership
+    
+    CleanupStack::Pop(3, effect0);
+    
+    // Specify programmed order
+    iDefaultEffectManager->SetEffectOrder(MShwEffectManager::EShwEffectOrderProgrammed);
+    
+    // Create the programmed order
+    RArray<MShwEffect*> programme;
+    CleanupClosePushL(programme);
+//    CleanupStack::PushL(&programme);
+    programme.AppendL(effect2);
+    programme.AppendL(effect1);
+    programme.AppendL(effect0);
+    programme.AppendL(effect2);
+    programme.AppendL(effect1);
+    programme.AppendL(effect0); 
+       
+    // Set the order
+    iDefaultEffectManager->SetProgrammedEffects(programme);
+    
+    // 
+    // Check the effect order is retrieved as 2, 1, 0
+    MShwEffect* inEffect = static_cast<MShwEffect*>(effect2);
+    MShwEffect* outEffect = iDefaultEffectManager->CurrentEffect();
+    EUNIT_ASSERT_EQUALS(inEffect, outEffect);
+
+    inEffect = static_cast<MShwEffect*>(effect1); 
+    outEffect = iDefaultEffectManager->NextEffect(); 
+    EUNIT_ASSERT_EQUALS(inEffect, outEffect);
+    
+    iDefaultEffectManager->ProceedToNextEffect();
+       
+    inEffect = static_cast<MShwEffect*>(effect2); 
+    outEffect = iDefaultEffectManager->NextEffect(); 
+    EUNIT_ASSERT_EQUALS(inEffect, outEffect);
+    
+    iDefaultEffectManager->ProceedToNextEffect();
+       
+    inEffect = static_cast<MShwEffect*>(effect1); 
+    outEffect = iDefaultEffectManager->NextEffect(); 
+    EUNIT_ASSERT_EQUALS(inEffect, outEffect);
+    
+    iDefaultEffectManager->ProceedToNextEffect();
+       
+    inEffect = static_cast<MShwEffect*>(effect0); 
+    outEffect = iDefaultEffectManager->NextEffect(); 
+    EUNIT_ASSERT_EQUALS(inEffect, outEffect);    
+    iDefaultEffectManager->ProceedToNextEffect();
+       
+    CleanupStack::PopAndDestroy(&programme);
+    }
+*/    
+
+//  TEST TABLE
+EUNIT_BEGIN_TEST_TABLE(
+    T_CShwDefaultEffectManager,
+    "Test suite for CShwDefaultEffectManager.",
+    "UNIT" )
+
+EUNIT_ALLOC_TEST(
+    "Construct - Destruct Test",
+    "CShwDefaultEffectManager",
+    "CShwDefaultEffectManager",
+    "FUNCTIONALITY",
+    EmptySetupL, TestConstructionL, Teardown )	// needs to have teardown as alloc test
+
+EUNIT_TEST(
+    "Add Effect Test",
+    "CShwDefaultEffectManager",
+    "CShwDefaultEffectManager",
+    "FUNCTIONALITY",
+    SetupL, TestAddEffectL, Teardown )
+    
+EUNIT_TEST(
+    "Add NULL Effect Test",
+    "CShwDefaultEffectManager",
+    "CShwDefaultEffectManager",
+    "FUNCTIONALITY",
+    SetupL, TestAddNullEffectL, Teardown )
+    
+EUNIT_TEST(
+    "Next Effect Test",
+    "CShwDefaultEffectManager",
+    "CShwDefaultEffectManager",
+    "FUNCTIONALITY",
+    SetupL, TestNextEffectL, Teardown )
+    
+/*    
+EUNIT_TEST(
+    "Programmed Effect Test",
+    "CShwDefaultEffectManager",
+    "CShwDefaultEffectManager",
+    "FUNCTIONALITY",
+    SetupL, TestProgrammedEffectL, Teardown )
+    
+EUNIT_TEST(
+    "Multi Prog Test",
+    "CShwDefaultEffectManager",
+    "CShwDefaultEffectManager",
+    "FUNCTIONALITY",
+    SetupL, TestMultiProgrammedEffectL, Teardown )
+*/    
+
+EUNIT_END_TEST_TABLE
+
+//  END OF FILE