diff -r 57c618273d5c -r bbf46f59e123 windowing/windowserver/test/tauto/THeartBeat.CPP --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/windowing/windowserver/test/tauto/THeartBeat.CPP Tue Aug 31 16:31:06 2010 +0300 @@ -0,0 +1,659 @@ +// Copyright (c) 2007-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: +// Test the Wserv heart beat switch on and off +// +// + +/** + @file + @test + @internalComponent - Internal Symbian test code +*/ + +#include "THeartBeat.h" +#include + +CTHeartBeatTest::CTHeartBeatTest(CTestStep* aStep) : + CTWsGraphicsBase(aStep) + { + } + +CTHeartBeatTest::~CTHeartBeatTest() + { + iAnimDll.Close(); + delete iHbTestWin; + } + +void CTHeartBeatTest::ConstructL() + { + TSize screenSize=TheClient->iGroup->Size(); + TInt winWidth=(screenSize.iWidth/3)-10; + TInt winHeight=screenSize.iHeight-10; + iHbTestWin=new(ELeave) CAnimWindow(EFalse, CAnimWindow::ERedraw); + iHbTestWin->ConstructL(TPoint(screenSize.iWidth/3*2+5,5),TSize(winWidth,winHeight)); + iAnimDll=RAnimDll(TheClient->iWs); + User::LeaveIfError(iAnimDll.Load(KAnimDLLName)); + } + +void CTHeartBeatTest::SetCursor(const TPoint& aPos,const TSize& aSize, TUint aFlags/*=0*/) + { // Default aFlags=0 gives a flashing cursor + TTextCursor tc; + tc.iType=TTextCursor::ETypeRectangle; + tc.iHeight=aSize.iHeight; + tc.iAscent=aSize.iHeight*4/5; + tc.iWidth=aSize.iWidth; + tc.iFlags=aFlags; + tc.iColor=KRgbGreen; + TheClient->iGroup->GroupWin()->SetTextCursor(*iHbTestWin->BaseWin(),TPoint(aPos.iX,aPos.iY+tc.iAscent),tc); + } + +TBool CTHeartBeatTest::SetAutoHeartBeatPauseState(TBool aState) const + { + return(TheClient->iWs.DebugInfo(EWsDebugSetAutoHeartBeatPauseState,aState)); + } + +TBool CTHeartBeatTest::GetHeartBeatTimerState() const + { + return(TheClient->iWs.DebugInfo(EWsDebugHeartBeatState)); + } + +void CTHeartBeatTest::CancelTextCursor() + { + TheClient->iGroup->GroupWin()->CancelTextCursor(); + } + +void CTHeartBeatTest::TestTextCursorTimerL() + { + TEST(!GetHeartBeatTimerState()); + SetCursor(TPoint(0,0),TSize(10,10)); + TEST(GetHeartBeatTimerState()); + CancelTextCursor(); + TEST(!GetHeartBeatTimerState()); +// + TPoint testCursorPos; + TSize testCursorSize(10,10); + SetCursor(testCursorPos,testCursorSize); + TEST(GetHeartBeatTimerState()); + iHbTestWin->BaseWin()->SetVisible(EFalse); + TEST(!GetHeartBeatTimerState()); + iHbTestWin->BaseWin()->SetVisible(ETrue); + TEST(GetHeartBeatTimerState()); +// +// Cover the cursor and check heartbeat disabled + RWindow coverCursor(TheClient->iWs); + CleanupClosePushL(coverCursor); + User::LeaveIfError(coverCursor.Construct(*iHbTestWin->BaseWin(), 0xBADBAD)); + coverCursor.SetExtent(testCursorPos,testCursorSize); + coverCursor.Activate(); + TEST(!GetHeartBeatTimerState()); +// Now fractionally expose the cursor and check heartbeat re-enabled + coverCursor.SetExtent(testCursorPos+TPoint(1,1),testCursorSize); + TEST(GetHeartBeatTimerState()); +// Re-cover it + coverCursor.SetExtent(testCursorPos,testCursorSize); + TEST(!GetHeartBeatTimerState()); +// Enlarge cursor to expose itself then check heartbeat + SetCursor(testCursorPos,TSize(testCursorSize.iWidth+1,testCursorSize.iHeight)); + TEST(GetHeartBeatTimerState()); +// Shrink cursor then check heartbeat + SetCursor(testCursorPos,testCursorSize); + TEST(!GetHeartBeatTimerState()); +// Turn off auto heart beat pausing, should turn timer back on + SetAutoHeartBeatPauseState(EFalse); + TEST(GetHeartBeatTimerState()); +// With auto pausing enabled covering/uncovering the cursor should have no effect, +// timer will always be on + coverCursor.SetVisible(EFalse); + TEST(GetHeartBeatTimerState()); + coverCursor.SetVisible(ETrue); + TEST(GetHeartBeatTimerState()); +// Re-enable auto-pause should turn timer back off + SetAutoHeartBeatPauseState(ETrue); + TEST(!GetHeartBeatTimerState()); +// Destroy covering window and check heartbeat re-enabled + CleanupStack::PopAndDestroy(&coverCursor); + TEST(GetHeartBeatTimerState()); +// Check using no flash flag turns timer off + SetCursor(testCursorPos,testCursorSize,TTextCursor::EFlagNoFlash); + TEST(!GetHeartBeatTimerState()); +// and turning no flash flag off turns timer back on + SetCursor(testCursorPos,testCursorSize); + TEST(GetHeartBeatTimerState()); +// Preparing for switch off should disable the heartbeat until another event is received + TheClient->iWs.PrepareForSwitchOff(); + TEST(!GetHeartBeatTimerState()); +// Any event should wake the hearbeat back up again + TRawEvent rawEvent; + rawEvent.Set(TRawEvent::EPointerMove,0,0); + TheClient->iWs.SimulateRawEvent(rawEvent); + TEST(GetHeartBeatTimerState()); +// + CancelTextCursor(); + TEST(!GetHeartBeatTimerState()); +// Check heartbeat still off as expected + TheClient->iWs.PrepareForSwitchOff(); + TEST(!GetHeartBeatTimerState()); +// Check when hearbeat not required that it's not turned back when coming out of PrepareForSwitchOff() mode. + TheClient->iWs.SimulateRawEvent(rawEvent); + TheClient->Flush(); + TEST(!GetHeartBeatTimerState()); + } + +void CTHeartBeatTest::doTestActiveInactiveEvents(TBool aCursorOn, TBool aAutoPauseOn) + { + SetAutoHeartBeatPauseState(aAutoPauseOn); + if (aCursorOn) + SetCursor(TPoint(0,0),TSize(10,10)); +// Should disable timer, regardless of other states + TRawEvent event; + event.Set(TRawEvent::EInactive); + UserSvr::AddEvent(event); + TEST(!GetHeartBeatTimerState()); +// ...and switch it back on + event.Set(TRawEvent::EActive); + UserSvr::AddEvent(event); + TBool testResult1=EFalse; + if (aAutoPauseOn) + testResult1=aCursorOn; // Only on if cursor is on without auto pause enabled + else + testResult1=ETrue; // Always on if auto pause disabled + TBool hbState=GetHeartBeatTimerState(); + if ((!hbState)!=(!testResult1)) + { + _LIT(KLog,"Fail in TestActiveInactiveEvents(%d.%d) HBState=%d result=%d"); + LOG_MESSAGE5(KLog,aCursorOn,aAutoPauseOn,hbState,testResult1); + } + TEST((!GetHeartBeatTimerState())==(!testResult1)); //Works with any positive value for True +// + if (aCursorOn) + CancelTextCursor(); + } + +void CTHeartBeatTest::TestActiveInactiveEvents() + { + doTestActiveInactiveEvents(EFalse,EFalse); + doTestActiveInactiveEvents(ETrue,EFalse); + doTestActiveInactiveEvents(EFalse,ETrue); + doTestActiveInactiveEvents(ETrue,ETrue); + } + +void CTHeartBeatTest::FailCursorHbTest(const TDesC& aErrorBase, const TDesC* aExtraText, TBool aHbState, TBool aHbCheckState) + { + TBuf<256> error(aErrorBase); + if (aExtraText) + { + error.Append(*aExtraText); + } + _LIT(KHbErrorAppendFmt," HB=%d (Testing for %d)"); + error.AppendFormat(KHbErrorAppendFmt,aHbState,aHbCheckState); + LOG_MESSAGE(error); + TEST(EFalse); + } + +TBool CTHeartBeatTest::ChangeTransAndCheckHeartBeat(TInt aTestMode, RWindow& aTransWin, const TRect& aGraphicRect, TInt aExtraWinTestMode, const TDesC* aErrorMsg, TBool aSetVisibleAfterTransUpdate) + { + TRect cursorRect(aGraphicRect); + cursorRect.Move(iHbTestWin->BaseWin()->InquireOffset(aTransWin)); + TRect winRect(aTransWin.Size()); + __ASSERT_ALWAYS(winRect.Contains(cursorRect.iTl) && winRect.Contains(cursorRect.iBr),AutoPanic(EAutoPanicHeartBeatCursorRect)); +// + TRegionFix<8> transRegion; + TBool heartBeatCheck=EFalse; + switch(aTestMode) + { + case ECursorTransWinTestModeFullTrans: + transRegion.AddRect(winRect); + heartBeatCheck=ETrue; + break; + case ECursorTransWinTestNoTrans: + break; + case ECursorTransWinTestPartialTransCoveringCursor: + transRegion.AddRect(winRect); + transRegion.SubRect(cursorRect); + break; + case ECursorTransWinTestPartialTransExposingCursor: + transRegion.AddRect(cursorRect); + heartBeatCheck=ETrue; + break; + default: + ASSERT(EFalse); + } + TBool invisHeartBeatCheck=ETrue; + switch(aExtraWinTestMode) + { + case ECursorTransWinTestNoTrans: + case ECursorTransWinTestPartialTransCoveringCursor: + heartBeatCheck=EFalse; + invisHeartBeatCheck=EFalse; + break; + default: + break; + } +// + ASSERT(!transRegion.CheckError()); + if (aSetVisibleAfterTransUpdate) + aTransWin.SetVisible(EFalse); + aTransWin.SetTransparentRegion(transRegion); + if (aSetVisibleAfterTransUpdate) + aTransWin.SetVisible(ETrue); +// + TBool testSuccess=ETrue; + TBool heartBeatState=GetHeartBeatTimerState(); + TBool failed1stTest=EFalse; + if ((!heartBeatState)!=(!heartBeatCheck)) //Works with any positive value for True + { + failed1stTest=ETrue; + _LIT(KFailedHbTest,"Failed "); + FailCursorHbTest(KFailedHbTest,aErrorMsg,heartBeatState,heartBeatCheck); + testSuccess=EFalse; + } +// + aTransWin.SetVisible(EFalse); + heartBeatState=GetHeartBeatTimerState(); + _LIT(KGoingInvisAfterTestAppend," after %S"); + TBuf<256> errorExtra; + if (aErrorMsg) + { + errorExtra.Format(KGoingInvisAfterTestAppend,aErrorMsg); + } + if ((!heartBeatState)!=(!invisHeartBeatCheck)) //Works with any positive value for True + { + _LIT(KFailedGoingInvis,"Failed setting trans win invisible"); + FailCursorHbTest(KFailedGoingInvis,&errorExtra,heartBeatState,invisHeartBeatCheck); + testSuccess=EFalse; + } +// + aTransWin.SetVisible(ETrue); + heartBeatState=GetHeartBeatTimerState(); + if (!failed1stTest && (!heartBeatState)!=(!heartBeatCheck)) //Works with any positive value for True + { + _LIT(KFailedResettingVis,"Failed re-setting trans win visible"); + FailCursorHbTest(KFailedResettingVis,&errorExtra,heartBeatState,heartBeatCheck); + testSuccess=EFalse; + } + return(testSuccess); + } + +void CTHeartBeatTest::LoopThroughTransWinTestModes(RWindow& aTransWin, const TRect& aGraphicRect, TInt aExtraWinTestMode) + { + TBuf<256> error; + for(TInt setVisMode=0;setVisMode<2;setVisMode++) + { + if (setVisMode==0) + continue; // zzz setinvis/makevis needed to flush out changes it seems + const TBool setVisibleAfterTransUpdate=setVisMode>0; + for(TInt startTestMode=0;startTestModeiWs); + User::LeaveIfError(transWin1.Construct(*TheClient->iGroup->GroupWin(),0xDEADBAD1)); + CleanupClosePushL(transWin1); + if (transWin1.SetTransparencyFactor(TRgb::Gray256(128))!=KErrNone) + { // Transparency not enabled, skip tests + CleanupStack::PopAndDestroy(&transWin1); + return; + } + transWin1.Activate(); + TEST(GetHeartBeatTimerState()); +// First simply check activating default full screen transparent window doesn't disable the heartbeat + _LIT(KBasicTransCursorTests,"Running basic transparent window cursor heartbeat tests"); + LOG_MESSAGE(KBasicTransCursorTests); + LoopThroughTransWinTestModes(transWin1, aGraphicRect, ECursorTransWinTestNA); +// +// Lots of test code disabled due to bugs in handling of transparent window regions +// See DEF110677, hopefully when the issues in there are addressed the rest of the +// test code here can be enabled +// See sections marked with zzz for places where certain tests are disabled, once DEF110677 +// is marked as fixed these sections should be re-enabled and if problems still occur they +// need to be investigated. +// +// +// Now check more complex modes with two transparent windows over the test window + RWindow transWin2(TheClient->iWs); + User::LeaveIfError(transWin2.Construct(*TheClient->iGroup->GroupWin(),0xDEADBAD2)); + CleanupClosePushL(transWin2); + User::LeaveIfError(transWin2.SetTransparencyFactor(TRgb::Gray256(128))); + TSize screenSize=TheClient->iGroup->Size(); + screenSize.iWidth-=10; + transWin1.SetExtent(TPoint(0,0),screenSize); + transWin2.SetExtent(TPoint(10,0),screenSize); + transWin2.Activate(); + for(TInt win1OrdPos=0;win1OrdPos<2;win1OrdPos++) + { + transWin1.SetOrdinalPosition(win1OrdPos); + _LIT(KOrdinalTransCursorTests,"Running tests with transwin1 ordinal pos=%d"); + LOG_MESSAGE2(KOrdinalTransCursorTests,win1OrdPos); + for(TInt topWinTestMode=0;topWinTestMode msg; + msg.Format(KTopTransWinCursorTest,topWinTestMode); + LOG_MESSAGE(msg); + ChangeTransAndCheckHeartBeat(0, transWin2, aGraphicRect, topWinTestMode, NULL, ETrue); + LoopThroughTransWinTestModes(transWin1, aGraphicRect, topWinTestMode); + } + } + ChangeTransAndCheckHeartBeat(0, transWin2, aGraphicRect, 0, NULL, ETrue); + CleanupStack::PopAndDestroy(&transWin2); + TEST(GetHeartBeatTimerState()); +// + CleanupStack::PopAndDestroy(&transWin1); + TEST(GetHeartBeatTimerState()); + } + +void CTHeartBeatTest::TestTextCursorTimerTransL() + { + TSize testWinSize(iHbTestWin->BaseWin()->Size()); + TRect cursorRect(testWinSize.iWidth/4,testWinSize.iHeight/3,testWinSize.iWidth*3/4,testWinSize.iHeight*2/3); + TEST(!GetHeartBeatTimerState()); + SetCursor(cursorRect.iTl,cursorRect.Size()); + TEST(GetHeartBeatTimerState()); + RunTransWinTestsL(cursorRect); + CancelTextCursor(); + TEST(!GetHeartBeatTimerState()); + } + +void CTHeartBeatTest::TestHeartBeatStopStart(TBool aHeartbeatStateOff,TBool aHeartbeatStateOn,const TDesC& aOffText,const TDesC& aOnText) + { + TEST(!aHeartbeatStateOff); + if (aHeartbeatStateOff) + LOG_MESSAGE2(_L("%S failed to disable heartbeat timer"),&aOffText); + TEST(aHeartbeatStateOn); + if (!aHeartbeatStateOn) + LOG_MESSAGE2(_L("%S failed to re-enable heartbeat timer"),&aOnText); + } + +void CTHeartBeatTest::TestAnimDllL(TBool aSpriteMode, TUint aSpriteFlags) + { + RTestAnim anim(iAnimDll); + TEST(!GetHeartBeatTimerState()); + TSize testWinSize(iHbTestWin->BaseWin()->Size()); + TRect animRect(1,1,testWinSize.iWidth/3,testWinSize.iWidth/5); + TPckgC rectPckg(animRect); + RWsSprite sprite(TheClient->iWs); + CleanupClosePushL(sprite); + if (aSpriteMode) + { + sprite.Construct(*iHbTestWin->BaseWin(),TPoint(),aSpriteFlags); + CFbsBitmap* bitmap1=new(ELeave) CFbsBitmap(); + CleanupStack::PushL(bitmap1); + CFbsBitmap* bitmap2=new(ELeave) CFbsBitmap(); + CleanupStack::PushL(bitmap2); + CFbsBitmap* bitmap3=new(ELeave) CFbsBitmap(); + CleanupStack::PushL(bitmap3); + TSize animSize(animRect.Size()); + User::LeaveIfError(bitmap1->Create(TSize(animSize.iWidth/2,animSize.iHeight/2),EGray4)); + User::LeaveIfError(bitmap2->Create(TSize(animSize.iWidth,animSize.iHeight/3),EGray4)); + User::LeaveIfError(bitmap3->Create(TSize(animSize.iWidth/3,animSize.iHeight),EGray4)); +// + TSpriteMember member1; + member1.iMaskBitmap=NULL; + member1.iInvertMask=EFalse; + member1.iDrawMode=CGraphicsContext::EDrawModePEN; + member1.iOffset=TPoint(); + member1.iInterval=TTimeIntervalMicroSeconds32(1); + member1.iBitmap=bitmap1; + member1.iMaskBitmap=bitmap1; + sprite.AppendMember(member1); +// + TSpriteMember member2; + member2.iInvertMask=EFalse; + member2.iDrawMode=CGraphicsContext::EDrawModeXOR; + member2.iOffset=TPoint(1,2); + member2.iInterval=TTimeIntervalMicroSeconds32(2); + member2.iBitmap=bitmap2; + member2.iMaskBitmap=bitmap2; + sprite.AppendMember(member2); +// + TSpriteMember member3; + member3.iInvertMask=ETrue; + member3.iDrawMode=CGraphicsContext::EDrawModeOR; + member3.iOffset=TPoint(3,4); + member3.iInterval=TTimeIntervalMicroSeconds32(3); + member3.iBitmap=bitmap3; + member3.iMaskBitmap=bitmap3; + sprite.AppendMember(member3); +// + User::LeaveIfError(anim.Construct(sprite,EAnimTypeSprite,rectPckg)); + CleanupStack::PopAndDestroy(3,bitmap1); + } + else + { + User::LeaveIfError(anim.Construct(*iHbTestWin->BaseWin(),EAnimTypeTest3,rectPckg)); + } + CleanupClosePushL(anim); + TEST(GetHeartBeatTimerState()); + + // Cover up the window with the animation and check this disables the heartbeat timer. + RBlankWindow blankwin1(TheClient->iWs); + User::LeaveIfError(blankwin1.Construct(*TheClient->iGroup->GroupWin(),123)); + TPoint winOffset(iHbTestWin->BaseWin()->InquireOffset(*TheClient->iGroup->GroupWin())); + if (aSpriteMode) + blankwin1.SetExtent(winOffset,testWinSize); + else + blankwin1.SetExtent(winOffset+animRect.iTl,animRect.Size()); + blankwin1.Activate(); + TBool heartbeatStateOff=GetHeartBeatTimerState(); + TEST(!heartbeatStateOff); + if (heartbeatStateOff) + { + LOG_MESSAGE(_L("Covering window failed to disable heartbeat timer")); + } + TBool heartbeatStateOn; + if (!aSpriteMode) + { + // Resize the anim so it becomes visible, then shrink back down again + animRect.iBr.iX++; + anim.Command(EADllSetRect,rectPckg); + heartbeatStateOn=GetHeartBeatTimerState(); + animRect.iBr.iX--; + anim.Command(EADllSetRect,rectPckg); + heartbeatStateOff=GetHeartBeatTimerState(); + TestHeartBeatStopStart(heartbeatStateOff,heartbeatStateOn,_L("Shrinking anim"),_L("Growing anim")); + } +// + blankwin1.Close(); + heartbeatStateOn=GetHeartBeatTimerState(); + TEST(heartbeatStateOn); + if (!heartbeatStateOn) + { + LOG_MESSAGE(_L("Un-covering window failed to disable heartbeat timer")); + } + + // Put a transparent window over the animation and check the heartbeat timer is not disabled + RWindow transWin(TheClient->iWs); + User::LeaveIfError(transWin.Construct(*TheClient->iGroup->GroupWin(),123)); + if (transWin.SetTransparencyFactor(TRgb::Gray256(128))==KErrNone) + { + transWin.Activate(); + heartbeatStateOn=GetHeartBeatTimerState(); + TEST(heartbeatStateOn); + if (!heartbeatStateOn) + LOG_MESSAGE(_L("Transparent window caused heartbeat timer to be disabled")); + TRegionFix<1> emptyRegion; + transWin.SetTransparentRegion(emptyRegion); + heartbeatStateOff=GetHeartBeatTimerState(); + TRegionFix<1> fullRegion(transWin.Size()); + transWin.SetTransparentRegion(fullRegion); + heartbeatStateOn=GetHeartBeatTimerState(); + TestHeartBeatStopStart(heartbeatStateOff,heartbeatStateOn,_L("Making covering window opaque"),_L("Making covering window transparent")); + if (aSpriteMode) + { + RBlankWindow blankwin2(TheClient->iWs); + User::LeaveIfError(blankwin2.Construct(*iHbTestWin->BaseWin(),1234)); + blankwin2.Activate(); + heartbeatStateOn=GetHeartBeatTimerState(); + // With ESpriteNoChildClip the heartbeat should still be on as the sprite will still be visible + // Without it blankwin2 will cover up the sprite and cancel the heartbeat + TBool heartBeatCheck=aSpriteFlags&ESpriteNoChildClip; + TEST((!heartbeatStateOn)==(!heartBeatCheck)); //Works with any positive value for True + blankwin2.Close(); + } + transWin.SetTransparentRegion(emptyRegion); + heartbeatStateOff=GetHeartBeatTimerState(); + transWin.Close(); + heartbeatStateOn=GetHeartBeatTimerState(); + TestHeartBeatStopStart(heartbeatStateOff,heartbeatStateOn,_L("Making covering window opaque"),_L("Un-covering window")); + } + else + transWin.Close(); + + // Make the window with the animation invisible and check this disables the heartbeat timer. + iHbTestWin->BaseWin()->SetVisible(EFalse); + heartbeatStateOff=GetHeartBeatTimerState(); + iHbTestWin->BaseWin()->SetVisible(ETrue); + heartbeatStateOn=GetHeartBeatTimerState(); + TestHeartBeatStopStart(heartbeatStateOff,heartbeatStateOn,_L("Making window invisible"),_L("Making window visible")); + + // Move the window with the animation off screen and check this disables the heartbeat timer. + TSize screenSize=TheClient->iGroup->Size(); + TPoint oldPos(iHbTestWin->BaseWin()->Position()); + iHbTestWin->BaseWin()->SetPosition(screenSize.AsPoint()); + heartbeatStateOff=GetHeartBeatTimerState(); + iHbTestWin->BaseWin()->SetPosition(oldPos); + heartbeatStateOn=GetHeartBeatTimerState(); + TestHeartBeatStopStart(heartbeatStateOff,heartbeatStateOn,_L("Moving window offscreen"),_L("Moving window back onscreen")); + TEST(GetHeartBeatTimerState()); + CleanupStack::PopAndDestroy(&anim); + TEST(!GetHeartBeatTimerState()); + CleanupStack::PopAndDestroy(&sprite); + } + +void CTHeartBeatTest::TestAnimDllTransL() + { + RTestAnim anim(iAnimDll); + TSize testWinSize(iHbTestWin->BaseWin()->Size()); + TRect animRect(testWinSize.iWidth/4,testWinSize.iHeight/3,testWinSize.iWidth*3/4,testWinSize.iHeight*2/3); + TPckgBuf rectPckg; + rectPckg()=animRect; + TEST(!GetHeartBeatTimerState()); + User::LeaveIfError(anim.Construct(*iHbTestWin->BaseWin(),EAnimTypeTest3,rectPckg)); + CleanupClosePushL(anim); + TEST(GetHeartBeatTimerState()); +// + RunTransWinTestsL(animRect); +// + CleanupStack::PopAndDestroy(&anim); + TEST(!GetHeartBeatTimerState()); + } + +void CTHeartBeatTest::RunTestCaseL(TInt /*aCurTestCase*/) + { + + switch(++iTest->iState) + { + case 1: +/** +@SYMTestCaseID GRAPHICS-WSERV-0568 +*/ + ((CTHeartBeatTestStep*)iStep)->SetTestStepID(_L("GRAPHICS-WSERV-0568")); + _LIT(KTestTextCursorTimer,"Basic heartbeat timer test"); + iTest->LogSubTest(KTestTextCursorTimer); + TestTextCursorTimerL(); + break; + case 2: +/** +@SYMTestCaseID GRAPHICS-WSERV-0569 +*/ + ((CTHeartBeatTestStep*)iStep)->SetTestStepID(_L("GRAPHICS-WSERV-0569")); + _LIT(KTestTextCursorTimerTrans,"Heartbeat timer test with transparent windows"); + iTest->LogSubTest(KTestTextCursorTimerTrans); + TestTextCursorTimerTransL(); + break; + case 3: +/** +@SYMTestCaseID GRAPHICS-WSERV-0570 +*/ + ((CTHeartBeatTestStep*)iStep)->SetTestStepID(_L("GRAPHICS-WSERV-0570")); + _LIT(KTestAnimDll1,"Anim DLL Heartbeat check (Win)"); + iTest->LogSubTest(KTestAnimDll1); + TestAnimDllL(EFalse,0); + break; + case 4: +/** +@SYMTestCaseID GRAPHICS-WSERV-0571 +*/ + ((CTHeartBeatTestStep*)iStep)->SetTestStepID(_L("GRAPHICS-WSERV-0571")); + _LIT(KTestAnimDll2,"Anim DLL Heartbeat check (Sprite)"); + iTest->LogSubTest(KTestAnimDll2); + TestAnimDllL(ETrue,0); + TestAnimDllL(ETrue,ESpriteNoChildClip); + break; + case 5: +/** +@SYMTestCaseID GRAPHICS-WSERV-0572 +*/ + ((CTHeartBeatTestStep*)iStep)->SetTestStepID(_L("GRAPHICS-WSERV-0572")); + _LIT(KTestAnimDllTrans,"Anim DLL Heartbeat check with transparent windows"); + iTest->LogSubTest(KTestAnimDllTrans); + TestAnimDllTransL(); + break; + case 6: +/** +@SYMTestCaseID GRAPHICS-WSERV-0573 +*/ + ((CTHeartBeatTestStep*)iStep)->SetTestStepID(_L("GRAPHICS-WSERV-0573")); + _LIT(KTestActiveInactiveEvents,"Handling of TRawEvent::EInactive and EActive"); + iTest->LogSubTest(KTestActiveInactiveEvents); + TestActiveInactiveEvents(); + break; + default: + ((CTHeartBeatTestStep*)iStep)->SetTestStepID(KNotATestSYMTestCaseIDName); + ((CTHeartBeatTestStep*)iStep)->CloseTMSGraphicsStep(); + TestComplete(); + break; + } + ((CTHeartBeatTestStep*)iStep)->RecordTestResultL(); + } + +__WS_CONSTRUCT_STEP__(HeartBeatTest)