diff -r 000000000000 -r 2f259fa3e83a lafagnosticuifoundation/animation/tef/TOomStep.cpp --- /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(); + } +