lafagnosticuifoundation/animation/tef/TOomStep.cpp
changeset 0 2f259fa3e83a
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/lafagnosticuifoundation/animation/tef/TOomStep.cpp	Tue Feb 02 01:00:49 2010 +0200
@@ -0,0 +1,223 @@
+// Copyright (c) 2005-2009 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:
+//
+
+/**
+ @file 
+ @internalComponent - Internal Symbian test code 
+*/
+
+
+#include "TOomStep.h"
+#include "AnimationConfig.h"
+#include "AnimationTestServer.h"
+
+_LIT(KSymBallFile, "Z:\\Private\\10204F5B\\symball.gif");
+
+//
+// Windows:
+//
+COomAnimationWindow::COomAnimationWindow(RWsSession& aWsSession, CTestWindowGroup& aGroup, CWindowGc& aGc) : CTestWindow(aWsSession, aGroup, aGc)
+	{
+	}
+
+void COomAnimationWindow::SetAnimation(CBasicAnimation* aAnimation)
+	{
+	iAnimation = aAnimation;
+	}
+	
+void COomAnimationWindow::DrawL()
+	{
+	if(iAnimation)
+		iAnimation->Draw(iGc);
+	}
+	
+//
+// The test:
+//
+COomStep::COomStep()
+	{
+	SetTestStepName(KOomStep);
+	}
+	
+COomStep::~COomStep()
+	{
+	delete iOomWin;
+	}
+
+void COomStep::InitialiseL()
+	{
+	CAnimationTestStep::InitialiseL();
+	
+	ANIM_INFO1(_L("Begin test OOM"));
+
+	TInt winborder = 2;
+	iWinSize = Screen()->SizeInPixels();
+	iWinSize.iWidth /= 2;
+	iWinPosition = TPoint(iWinSize.iWidth + winborder, winborder);
+	iWinSize.iWidth -= winborder * 2;
+	iWinSize.iHeight -= winborder * 2;
+
+	iOomWin = new (ELeave) COomAnimationWindow(Ws(), *GroupWin(), *Gc());
+	iOomWin->Window()->SetRequiredDisplayMode(EColor256);
+	iOomWin->Window()->SetExtent(iWinPosition, iWinSize);
+	iOomWin->Window()->SetBackgroundColor(iBackgroundColor1);
+	iOomWin->Window()->SetVisible(ETrue);
+	iOomWin->Window()->Activate();
+	}
+
+/**
+	@SYMTestCaseID UIF-animation-TOomStep-TestLoopingL
+
+	@SYMTestCaseDesc 
+	This tests basic animation and sprite animation in a low memory
+	condition.
+
+	@SYMPREQ 269
+
+	@SYMTestStatus Implemented
+
+	@SYMTestPriority Medium
+
+	@SYMTestActions 
+	The test starts and stops animation for a basic and sprite
+	animation group in a low memory condition.  It initializes an animation
+	group with a basic and sprite animation and which it then starts and stops.
+	Finally the animation group and the animations are destroyed.
+
+	@SYMTestExpectedResults This function leaves with a memory failure if there
+	is insufficient memory for the test to run.
+
+*/	
+void COomStep::TestLoopingL()
+	{
+	TAnimationConfig config;
+	config.iFlags = TAnimationConfig::ELoop;
+	config.iData = -1;
+
+	CICLAnimationDataProvider* dataProvider;
+	dataProvider=new(ELeave)CICLAnimationDataProvider;
+	CleanupStack::PushL(dataProvider);
+	dataProvider->SetFileL(iFs, KSymBallFile());
+	CleanupStack::Pop(dataProvider);
+	CBasicAnimation * basicAnimation = CBasicAnimation::NewL(dataProvider, TPoint(0,0), Ws(), *iOomWin->Window());
+	CleanupStack::PushL(basicAnimation);
+	iOomWin->SetAnimation(basicAnimation);
+
+	dataProvider=new(ELeave)CICLAnimationDataProvider;
+	CleanupStack::PushL(dataProvider);
+	dataProvider->SetFileL(iFs, KSymBallFile());
+	CleanupStack::Pop(dataProvider);
+	CSpriteAnimation * spriteAnimation = CSpriteAnimation::NewL(dataProvider, TPoint(100,100), Ws(), *iOomWin->Window());
+	CleanupStack::PushL(spriteAnimation);
+
+	CAnimationGroup * animationGroup = CAnimationGroup::NewL();
+	CleanupStack::PushL(animationGroup);
+	animationGroup->Animations().Append(basicAnimation);
+	animationGroup->Animations().Append(spriteAnimation);
+
+	Wait(2000000); // Wait for the initialisation to complete
+	animationGroup->Start(config);
+	Wait(5000000);
+	animationGroup->Stop();
+
+	Wait(500000);
+
+	CleanupStack::PopAndDestroy(animationGroup);
+	CleanupStack::PopAndDestroy(spriteAnimation);
+	CleanupStack::PopAndDestroy(basicAnimation);
+	}
+	
+void COomStep::RunTestL(TInt aTest)
+	{
+	switch(aTest)
+		{
+		case 0:
+			TestLoopingL();
+			break;
+		default:
+			User::Leave(KErrArgument);
+		}
+	}
+/**
+
+	@SYMTestCaseID UIF-animation-TOomStep-doActiveTestStepL
+
+	@SYMTestCaseDesc 
+	This tests basic animation and sprite animation in a low memory
+	condition.
+
+	@SYMPREQ 269
+
+	@SYMTestStatus Implemented
+
+	@SYMTestPriority Medium
+
+	@SYMTestActions 
+	The test starts and stops animation for a basic and sprite
+	animation group in a low memory condition, and records how many cells are 
+	required to be available for the test to pass.  It starts at 1 free cell, and calls 
+	test RunTestL and increments then increments the number of free cells until TestLoopingL
+	operates without leaving.
+
+	@SYMTestExpectedResults Pass
+
+*/	
+TVerdict COomStep::doActiveTestStepL()
+	{
+	InitialiseL();
+
+	// ## Immediately return. It looks as though ICL leaks. Once that is fixed we can
+	// ## try running this test.
+	// ## see DEF050483
+	
+	const TInt KNumTests = 1;
+	Wait(2000000); // Wait for windows and things to initialise their own memory.
+	
+	if(TestStepResult() == EPass)
+		{
+		__UHEAP_MARK;
+		SetTestStepID(_L("UIF-animation-TOomStep-TestLoopingL"));
+		for (TInt stage = 0; stage < KNumTests; ++stage)
+			{
+			TInt fail = 1;
+			TInt passes = 0;
+			while (passes < 6)
+				{
+				__UHEAP_FAILNEXT(fail);
+				TRAPD(err, RunTestL(stage));
+				if (err == KErrNone)
+					++passes;
+				else if (err == KErrNoMemory)
+					passes = 0;
+				else
+					User::Leave(err);
+				__UHEAP_RESET;
+				++fail;
+				}
+			INFO_PRINTF3(_L("OOM Test %d passed after %d attempts"), stage, fail - passes);
+			}
+		REComSession::FinalClose();
+	    iAnimTestWin->iScreen.ReleaseFont(iAnimTestWin->iFont);
+	    delete iScreen;
+	    RFbsSession::Disconnect();
+		RecordTestResultL();
+		CloseTMSGraphicsStep();
+         __UHEAP_MARKEND;
+		RFbsSession::Connect();
+		}
+	
+	return TestStepResult();
+	}
+