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) 1996-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 out of memory redraws
//
//
/**
@file
@test
@internalComponent - Internal Symbian test code
*/
#include "TOOMDRAW.H"
void DrawTestScreen(CWindowGc *aGc, const TSize &aSize)
{
aGc->SetPenSize(TSize(10,10));
aGc->SetBrushStyle(CGraphicsContext::EVerticalHatchBrush);
aGc->DrawRect(TRect(aSize));
}
CTestWin::CTestWin()
{
}
void CTestWin::Draw()
{
#if defined(FULLLOGGING)
_LIT(KLog,"Drawing Test Win:%d %d,%d");
TLogMessageText buf;
buf.Format(KLog,Size().iWidth>320?1:0,Size().iWidth,Size().iHeight);
TheClient->LogMessage(buf);
#endif
DrawTestScreen(iGc,Size());
}
CBaseTestWin::CBaseTestWin() : CTBackedUpWin(EGray4)
{}
void CBaseTestWin::Resized(const TSize &aNewSize)
{
TheGc->Activate(*DrawableWin());
DrawTestScreen(TheGc,aNewSize);
TheGc->Deactivate();
}
CToomDraw::CToomDraw(CTestStep* aStep):
CTWsGraphicsBase(aStep)
{
}
CToomDraw::~CToomDraw()
{
TheClient->iWs.HeapSetFail(RHeap::ENone,0); //In case the test crashes and it hasn't been reset
DeleteWindows();
}
void CToomDraw::DeleteWindows()
{
delete iTestWin;
iTestWin=NULL;
delete iBaseWin;
iBaseWin=NULL;
delete iBackWin;
iBackWin=NULL;
delete iBlankWin;
iBlankWin=NULL;
}
void CToomDraw::ConstructL()
{
iScrSize=TheClient->iScreen->SizeInPixels();
iBlankWin=new(ELeave) CTBlankWindow;
iBlankWin->ConstructL(*TheClient->iGroup);
iBlankWin->SetColor(TRgb::Gray4(2)); //Grey
iBlankWin->Activate();
iBackWin=new(ELeave) CTestWin();
iBackWin->SetUpL(TPoint(0,iScrSize.iHeight/4), TSize(iScrSize.iWidth,iScrSize.iHeight/2), TheClient->iGroup, *TheClient->iGc);
iBaseWin=new(ELeave) CBaseTestWin();
iBaseWin->SetUpL(TPoint(iScrSize.iWidth*2/3,0), TSize(iScrSize.iWidth/3,iScrSize.iHeight), TheClient->iGroup, *TheClient->iGc);
}
void CToomDraw::CreateTestWinL()
{
iTestWin=new(ELeave) CTestWin();
iTestWin->ConstructL(*TheClient->iGroup);
iTestWin->SetExtL(TPoint(0,0), TSize(iScrSize.iWidth/3,iScrSize.iHeight));
iTestWin->AssignGC(*TheClient->iGc);
iTestWin->BaseWin()->SetShadowHeight(2);
}
void CToomDraw::TriggerOomDrawsL(TInt aCount)
{
if(iTestWin)
{
iTestWin->SetExtL(TPoint(),iScrSize);
}
delete iTestWin;
iTestWin=NULL;
CreateTestWinL();
TheClient->iWs.HeapSetFail(RHeap::EDeterministic,aCount);
iTestWin->Activate();
TheClient->iWs.Finish();
}
TBool CToomDraw::CheckWindowsL()
{
TLogMessageText buf;
TBool pass = DoCheckRect(iTestWin,iBaseWin);
if (pass)
{
TEST(ETrue); //Adds one to test count
#if defined(FULLLOGGING)
_LIT(KLog,"OOM Draw Test Pass, State=%d");
buf.Format(KLog,iState);
#endif
iRetryCount=0;
}
else
{
if (iRetryCount==4)
{
if ((iTest->RedrawStoreTypeL()==EPartialRedraw_PreserveStoredCmds ||
iTest->RedrawStoreTypeL()==EPartialRedraw_FullRedrawSupport) && (iState==19 || iState==30) ||
((iState>=2 && iState<=6) && (iTest->RedrawStoreTypeL()==EPartialRedraw_None || iTest->RedrawStoreTypeL()==EPartialRedraw_FullRedrawSupport)))
{
#if defined(FULLLOGGING)
_LIT(KLog,"OOM Draw Test Known F a i l, State=%d");
buf.Format(KLog,iState);
#endif
pass=ETrue;
}
else
{
if (iFailAt==0)
iFailAt=iState;
++iFails; //mark this test as failed
#if defined(LOGGING)
_LIT(KLog,"OOM Draw Test FAIL, State=%d <------- FAIL");
buf.Format(KLog,iState);
#endif
++iState; //and advance to next test
}
iRetryCount=0;
}
else
{
#if defined(FULLLOGGING)
_LIT(KLog,"OOM Draw Test F a i l, State=%d retrying");
buf.Format(KLog,iState);
#endif
if (++iRetryCount%2==0)
iBackWin->DrawNow();
}
}
if (buf.Length()>0)
TheClient->LogMessage(buf);
return pass;
}
void CToomDraw::RunTestCaseL(TInt aCurTestCase)
{
TBool testFinished = false;
((CToomDrawStep*)iStep)->SetTestStepID(KUnknownSYMTestCaseIDName);
switch(aCurTestCase)
{
/**
@SYMTestCaseID GRAPHICS-WSERV-0110
@SYMDEF DEF081259
@SYMTestCaseDesc Test trying to draw when out of memory
@SYMTestPriority High
@SYMTestStatus Implemented
@SYMTestActions Set out of memory and try drawing
@SYMTestExpectedResults Out of memory drawing is handle correctly
*/
case 1:
((CToomDrawStep*)iStep)->SetTestStepID(_L("GRAPHICS-WSERV-0110"));
while (!testFinished)
{
if (iDoCheck)
{
TheClient->iWs.HeapSetFail(RHeap::ENone,0);
TheClient->WaitForRedrawsToFinish();
if (CheckWindowsL())
{
++iState;
if (iState==EMaxOOMState)
DeleteWindows();
}
iDoCheck=EFalse;
TheClient->iWs.Finish();
}
else
{
if (iState==EMaxOOMState)
{
if (iFails>0)
{
#if defined(LOGING)
_LIT(KLog,"OOM Draw Test Failed, First Fail At %d, Number of Fails %d");
TLogMessageText buf;
buf.Format(KLog,iFailAt,iFails);
TheClient->LogMessage(buf);
#endif
TEST(iFails==0);
}
User::After(500000); // Let the rest of the world catch up after OOM death
testFinished = true;
}
else if (iState < 3 && iTest->IsFullRomL())
testFinished = true;
else
TriggerOomDrawsL(iState);
iDoCheck=ETrue;
}
}
break;
case 2:
((CToomDrawStep*)iStep)->SetTestStepID(KNotATestSYMTestCaseIDName);
((CToomDrawStep*)iStep)->CloseTMSGraphicsStep();
TestComplete();
break;
}
((CToomDrawStep*)iStep)->RecordTestResultL();
}
__WS_CONSTRUCT_STEP__(oomDraw)