Applied patch 1, to provide a syborg specific minigui oby file.
Need to compare this with the "stripped" version currently in the tree.
This supplied version applies for Nokia builds, but need to repeat the
test for SF builds to see if pruning is needed, or if the file needs to
be device-specific.
// 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 <w32debug.h>
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;startTestMode<ENumCursorTransWinTestModes;startTestMode++)
{
if (startTestMode==ECursorTransWinTestNoTrans)
continue;// zzz bugged trans win problem
_LIT(KTcHbModeSetFail,"setting test mode %d (vis mode %d)");
error.Format(KTcHbModeSetFail,startTestMode,setVisibleAfterTransUpdate);
for(TInt switchToTestMode=0;switchToTestMode<ENumCursorTransWinTestModes;switchToTestMode++)
{
if (switchToTestMode==ECursorTransWinTestNoTrans)
continue;// zzz bugged trans win problem
if (startTestMode==switchToTestMode)
continue;
if (ChangeTransAndCheckHeartBeat(startTestMode, aTransWin, aGraphicRect, aExtraWinTestMode, &error, setVisibleAfterTransUpdate))
{
_LIT(KTcHbModeSwitchFail,"switching from test mode %d to %d (vis mode %d)");
error.Format(KTcHbModeSwitchFail, startTestMode, switchToTestMode, setVisibleAfterTransUpdate);
ChangeTransAndCheckHeartBeat(switchToTestMode, aTransWin, aGraphicRect, aExtraWinTestMode, &error, setVisibleAfterTransUpdate);
}
}
}
ChangeTransAndCheckHeartBeat(0, aTransWin, aGraphicRect, aExtraWinTestMode, NULL, setVisibleAfterTransUpdate);
}
}
void CTHeartBeatTest::RunTransWinTestsL(const TRect& aGraphicRect)
{
// Test a variety of patterns of changing the layout of transparent windows over the cursor
// cause the heartbeat state to be modified accordingly.
//
// Each transparent window has four specific states to test:
// i) Transparency area is the whole window
// ii) Partial transparency that exposes the cursor
// iii) Partial transparency that covers the cursor
// iv) Empty transparent region, i.e. totally opaque
//
// We need to test various transitions between these states, first on a single window, then
// in a various layouts with transparent windows layered over each other.
//
RWindow transWin1(TheClient->iWs);
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<ENumCursorTransWinTestModes;topWinTestMode++)
{
if (topWinTestMode==ECursorTransWinTestNoTrans)
continue;// zzz bugged transparent window problem
if (topWinTestMode==ECursorTransWinTestPartialTransCoveringCursor)
continue;// zzz bugged transparent window problem
_LIT(KTopTransWinCursorTest,"Setting top trans win mode %d");
TBuf<256> 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<TRect> 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<TRect> 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)