// 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 backed up windows
//
//
/**
@file
@test
@internalComponent - Internal Symbian test code
*/
#include "TBACKUPW.H"
CTBackedUpWindow::CTBackedUpWindow(CTestStep* aStep):
CTWsGraphicsBase(aStep)
{
}
void CTBackedUpWindow::CheckWindow(CFbsBitmap *aBitmap)
{
TPoint oldPos=iBackedUpWindow.Position();
iBackedUpWindow.SetPosition(TPoint(0,0));
iCheckWindow.SetVisible(ETrue);
iCheckWindow.SetPosition(iCheckPos);
iCheckWindow.BeginRedraw();
TheGc->Activate(iCheckWindow);
TheGc->BitBlt(TPoint(0,0), aBitmap);
TheGc->Deactivate();
iCheckWindow.EndRedraw();
TheClient->iWs.Flush();
TheClient->WaitForRedrawsToFinish();
TBool retVal = TheClient->iScreen->RectCompare(TRect(iSize),TRect(iCheckPos,iSize));
TEST(retVal);
if (!retVal)
INFO_PRINTF3(_L("TheClient->iScreen->RectCompare(TRect(iSize),TRect(iCheckPos,iSize)) return value - Expected: %d , Actual: %d"), ETrue, retVal);
iCheckWindow.SetVisible(EFalse);
iBackedUpWindow.SetPosition(oldPos);
}
void CTBackedUpWindow::CheckWindow()
{
CheckWindow(&iBitmap);
}
void CTBackedUpWindow::Draw(TInt aDrawFunc, TAny *aParam)
{
TheGc->Activate(iBackedUpWindow);
Draw(aDrawFunc, aParam, TheGc, iBitGc);
TheGc->Deactivate();
}
void CTBackedUpWindow::DrawWithTwoGcsL()
{
RBlankWindow blank(TheClient->iWs);
User::LeaveIfError(blank.Construct(*(TheClient->iGroup->GroupWin()),ENullWsHandle));
blank.Activate();
CWindowGc *gc2;
User::LeaveIfError(TheClient->iScreen->CreateContext(gc2));
CleanupStack::PushL(gc2);
CFbsFont *font1;
TFontSpec fspec(KTestFontTypefaceName,200);
User::LeaveIfError(TheClient->iScreen->GetNearestFontToDesignHeightInTwips((CFont *&)font1,fspec));
CFbsFont *font2;
TFontSpec fspec2(KTestFontTypefaceName,400);
User::LeaveIfError(TheClient->iScreen->GetNearestFontToDesignHeightInTwips((CFont *&)font2,fspec2));
gc2->Activate(iBackedUpWindow);
gc2->UseFont(font2);
TheGc->Activate(iBackedUpWindow);
TheGc->UseFont(font1);
_LIT(KText,"Testing123");
TheGc->DrawText(KText,TPoint(20,20));
gc2->DrawText(KText,TPoint(20,40));
iBitGc->UseFont(font1);
iBitGc->DrawText(KText,TPoint(20,20));
iBitGc->UseFont(font2);
iBitGc->DrawText(KText,TPoint(20,40));
iBitGc->DiscardFont();
TheGc->Deactivate();
TheClient->iScreen->ReleaseFont(font2);
TheClient->iScreen->ReleaseFont(font1);
CleanupStack::PopAndDestroy();
blank.Close();
}
void CTBackedUpWindow::Draw(TInt aDrawFunc, TAny *aParam, CBitmapContext *gc1, CBitmapContext *gc2) //DDD
{
CBitmapContext *gc;
for(TInt mode=0;mode<2;mode++)
{
if (mode==0)
gc=gc1;
else
gc=gc2;
gc->Reset();
switch(aDrawFunc)
{
case 0:
gc->SetBrushColor(*((TRgb *)aParam));
gc->SetBrushStyle(CGraphicsContext::ESolidBrush);
gc->SetPenStyle(CGraphicsContext::ENullPen);
gc->DrawRect(TRect(iSize));
break;
case 1:
{
TSize half(iSize.iWidth/2,iSize.iHeight/2);
gc->DrawEllipse(TRect(half));
gc->DrawEllipse(TRect(TPoint(0,half.iHeight),half));
TRect rect1(half);
gc->SetOrigin(TPoint(half.iWidth,0));
gc->SetClippingRect(rect1);
gc->DrawEllipse(rect1);
gc->SetOrigin(TPoint(half.iWidth,half.iHeight));
gc->SetClippingRect(rect1);
gc->DrawEllipse(rect1);
gc->SetOrigin(TPoint(0,0));
gc->CancelClippingRect();
}
break;
case 2:
{
TInt param= *((TInt *)aParam);
if (param&0x1)
gc->DrawLine(TPoint(param+(param*27)%iSize.iWidth,0),
TPoint(iSize.iWidth-((param<<1)+(param*19)%iSize.iWidth),iSize.iHeight));
else
gc->DrawLine(TPoint(0, (param<<1)+(param*7)%iSize.iHeight),
TPoint(iSize.iWidth,param+(param*13)%iSize.iHeight));
}
break;
case 3:
{
TPoint pos;
for(;pos.iX<iSize.iWidth;pos.iX+=10)
gc->DrawLine(pos,pos+TSize(0,iSize.iHeight));
for(pos.iX=0;pos.iY<iSize.iHeight;pos.iY+=10)
gc->DrawLine(pos,pos+TSize(iSize.iWidth,0));
}
break;
}
}
}
CTBackedUpWindow::~CTBackedUpWindow()
{
iBackedUpWindow.Close();
iCheckWindow.Close();
iOomFrontWindow.Close();
delete iBitGc;
delete iBitmapDevice;
delete iTestBitmap;
delete iMaskBitmap;
}
void CopyToGray4L(CFbsBitmap*& aDestBitmap,const CFbsBitmap& aSrcBitmap)
{
aDestBitmap=new(ELeave) CFbsBitmap();
CleanupStack::PushL(aDestBitmap);
User::LeaveIfError(aDestBitmap->Create(aSrcBitmap.SizeInPixels(),EGray4));
CFbsBitmapDevice* device=CFbsBitmapDevice::NewL(aDestBitmap);
CleanupStack::PushL(device);
CFbsBitGc* gc;
User::LeaveIfError(device->CreateContext(gc));
gc->BitBlt(TPoint(),&aSrcBitmap);
delete gc;
CleanupStack::PopAndDestroy(device);
CleanupStack::Pop(aDestBitmap);
}
void CTBackedUpWindow::ConstructL()
{
iBackedUpWindow=RBackedUpWindow(TheClient->iWs);
iBackedUpWindow.Construct(*(TheClient->iGroup->GroupWin()),EGray4,ENullWsHandle);
TSize size=TheClient->iScreen->SizeInTwips();
iSize=TheClient->iScreen->SizeInPixels();
iSize.iWidth>>=1;
iSize.iHeight>>=1;
size.iWidth>>=1;
size.iHeight>>=1;
size.iWidth-=1; //Modification to get the mapping factor the same as the screen
size.iHeight-=1; //Ditto
iWinPos.SetXY(iSize.iWidth>>1,iSize.iHeight>>1);
User::LeaveIfError(iBackedUpWindow.SetExtentErr(iWinPos,iSize));
iBackedUpWindow.Activate();
iCheckPos.SetXY(iSize.iWidth,0);
iCheckWindow=RWindow(TheClient->iWs);
iCheckWindow.Construct(*(TheClient->iGroup->GroupWin()),ENullWsHandle);
iCheckWindow.SetSize(iSize);
iCheckWindow.SetVisible(EFalse);
iCheckWindow.Activate();
TInt col,grey;
TDisplayMode defMode=TheClient->iWs.GetDefModeMaxNumColors(col,grey);
User::LeaveIfError(iBitmap.Create(iSize,defMode));
iBitmap.SetSizeInTwips(size);
iBitmapDevice=CFbsBitmapDevice::NewL(&iBitmap);
User::LeaveIfError(iBitmapDevice->CreateContext(iBitGc));
TRgb rgb(TRgb::Gray4(2));
Draw(0,&rgb);
iTestBitmap=new(ELeave) CFbsBitmap();
User::LeaveIfError(iTestBitmap->Load(TEST_BITMAP_NAME,0));
iTestBitmap->SetSizeInTwips(TSize(1500,750));
iMaskBitmap=new(ELeave) CFbsBitmap();
User::LeaveIfError(iMaskBitmap->Load(TEST_BITMAP_NAME,0));
TDisplayMode defMode2=iMaskBitmap->DisplayMode();
if (defMode>EGray4)
{
CFbsBitmap* bitmap=iTestBitmap;
CopyToGray4L(iTestBitmap,*bitmap);
delete bitmap;
bitmap=iMaskBitmap;
CopyToGray4L(iMaskBitmap,*bitmap);
delete bitmap;
}
defMode2=iMaskBitmap->DisplayMode();
defMode2=iMaskBitmap->DisplayMode();
}
void CTBackedUpWindow::InvisVis()
{
iBackedUpWindow.SetVisible(EFalse);
TheClient->iWs.Flush();
iBackedUpWindow.SetVisible(ETrue);
TheClient->iWs.Flush();
}
void CTBackedUpWindow::WindowOnTop()
{
RBlankWindow blank(TheClient->iWs);
blank.Construct(*(TheClient->iGroup->GroupWin()),ENullWsHandle);
blank.Activate();
blank.Close();
TheClient->iWs.Flush();
TPoint pos;
TInt sizeMode=0;
TInt draw=13;
for(pos.iX=-iSize.iWidth;pos.iX<iSize.iWidth;pos.iX+=50)
for(pos.iY=-iSize.iHeight;pos.iY<iSize.iHeight;pos.iY+=50)
{
blank=RBlankWindow(TheClient->iWs);
blank.Construct(*(TheClient->iGroup->GroupWin()),ENullWsHandle);
blank.SetColor(TRgb::Gray256(220));
blank.SetShadowHeight(2);
blank.SetExtent(pos+iWinPos,TSize((sizeMode&0x1)?iSize.iWidth>>1:iSize.iWidth<<1,(sizeMode&0x2)?iSize.iHeight>>1:iSize.iHeight<<1));
sizeMode=(sizeMode+1)%4;
blank.Activate();
Draw(2,&draw);
TheClient->iWs.Flush();
draw++;
blank.Close();
}
}
void CTBackedUpWindow::Resize()
{
RBlankWindow blank(TheClient->iWs);
blank.Construct(*(TheClient->iGroup->GroupWin()),ENullWsHandle);
blank.SetColor(TRgb::Gray256(128));
blank.Activate();
TInt xtop=(iSize.iWidth)-(iSize.iWidth>>2);
TInt ytop=(iSize.iHeight)-(iSize.iHeight>>2);
for(TInt winMode=0;winMode<3;winMode++)
{
switch(winMode)
{
case 0:
blank.SetExtent(TPoint(0,ytop),TSize(iSize.iWidth,iSize.iHeight>>1));
break;
case 1:
blank.SetExtent(TPoint(xtop,0),TSize(iSize.iWidth>>1,iSize.iHeight));
break;
case 2:
blank.SetExtent(TPoint(xtop,ytop),TSize(iSize.iWidth>>1,iSize.iHeight>>1));
break;
}
blank.SetShadowHeight(winMode);
TPoint oldPos=iBackedUpWindow.Position();
TPoint pos=oldPos;
for(TUint i=0;i<sizeof(moveList)/sizeof(moveList[0]);i++)
{
pos+=moveList[i];
iBackedUpWindow.SetPosition(pos);
TheClient->iWs.Flush();
}
iBackedUpWindow.SetPosition(oldPos);
}
blank.Close();
}
void CTBackedUpWindow::ChildWindows()
{
TPoint pos;
TInt sizeMode=0;
TInt draw=13;
RBlankWindow blank(TheClient->iWs);
for(pos.iX=-(iSize.iWidth>>1);pos.iX<iSize.iWidth;pos.iX+=33)
for(pos.iY=-(iSize.iHeight>>1);pos.iY<iSize.iHeight;pos.iY+=33)
{
blank.Construct(iBackedUpWindow,ENullWsHandle);
blank.SetColor(TRgb::Gray256(220));
blank.SetShadowHeight(2);
blank.SetExtent(pos,TSize((sizeMode&0x1)?iSize.iWidth>>2:iSize.iWidth,(sizeMode&0x2)?iSize.iHeight>>2:iSize.iHeight));
sizeMode=(sizeMode+1)%4;
blank.Activate();
Draw(2,&draw);
TheClient->iWs.Flush();
draw++;
blank.Close();
}
}
void CTBackedUpWindow::DupBitmapTestL()
{
INFO_PRINTF1(_L("AUTO Dup Bitmap Test "));
CFbsBitmap *dup=new(ELeave) CFbsBitmap();
dup->Duplicate(iBackedUpWindow.BitmapHandle());
CheckWindow(dup);
TRgb rgb(TRgb::Gray4(1));
Draw(0,&rgb);
CheckWindow(dup);
INFO_PRINTF1(_L(" Done Window Drawing Test"));
CFbsBitmapDevice *dupDevice=NULL;
TRAPD(err,dupDevice=CFbsBitmapDevice::NewL(dup));
CFbsBitGc *gc;
if (err==KErrNone && dupDevice->CreateContext(gc)==KErrNone)
{
Draw(3,NULL,gc,iBitGc); // Draw directly to backup bitmap (and test bitmap)
iBackedUpWindow.UpdateScreen();
INFO_PRINTF1(_L(" First Bitmap Drawing"));
CheckWindow();
TRgb rgb(TRgb::Gray256(128));
TInt col,grey;
if (TheClient->iWs.GetDefModeMaxNumColors(col,grey)>EGray4)
rgb=TRgb::Gray4(2);
Draw(0,&rgb,gc,iBitGc);
Draw(1,NULL,gc,iBitGc);
iBackedUpWindow.UpdateScreen(TRegionFix<1>(TRect(iSize)));
INFO_PRINTF1(_L(" Second Bitmap Drawing"));
CheckWindow();
delete gc;
}
delete dupDevice;
delete dup;
}
void CTBackedUpWindow::UpdateBitmapTestL()
{
INFO_PRINTF1(_L("AUTO UpdateBitmap "));
CheckWindow();
CFbsBitmap *dup=new(ELeave) CFbsBitmap();
dup->Duplicate(iBackedUpWindow.BitmapHandle());
Draw(3,NULL);
iBackedUpWindow.UpdateBackupBitmap();
INFO_PRINTF1(_L(" First Drawing"));
CheckWindow(dup);
TRgb rgb;
if (iSupState==0)
rgb=TRgb::Gray256(128);
else
rgb=TRgb::Gray4(2);
Draw(0,&rgb);
Draw(1,NULL);
iBackedUpWindow.UpdateBackupBitmap();
INFO_PRINTF1(_L(" Second Drawing"));
CheckWindow(dup);
delete dup;
}
void CTBackedUpWindow::OOML()
{
iOomFrontWindow=RBlankWindow(TheClient->iWs);
TSize size(iBackedUpWindow.Size());
size.iWidth>>=1;
size.iHeight>>=1;
TPoint pos(size.iWidth*3/2,size.iHeight*3/2);
iOomFrontWindow.Construct(*(TheClient->iGroup->GroupWin()),ENullWsHandle);
iOomFrontWindow.SetColor(TRgb(TRgb::Gray4(1)));
iOomFrontWindow.SetExtent(pos,size);
iOomFrontWindow.Activate();
TheClient->iWs.Flush();
TPoint buwPos=iBackedUpWindow.Position();
TSize buwSize=iBackedUpWindow.Size();
for(TInt count=0;count<100;count++)
{
iOomFrontWindow.SetVisible(ETrue);
TheClient->iWs.HeapSetFail(RHeap::EDeterministic,count);
iBackedUpWindow.SetPosition(buwPos+TPoint(10,5));
iBackedUpWindow.SetPosition(buwPos);
iOomFrontWindow.SetSize(size+TSize(10,5));
iOomFrontWindow.SetSize(size);
iBackedUpWindow.SetSizeErr(buwSize+TSize(13,7));
iBackedUpWindow.SetSizeErr(buwSize);
iOomFrontWindow.SetVisible(EFalse);
TheClient->iWs.HeapSetFail(RHeap::ENone,0);
User::LeaveIfError(iBackedUpWindow.SetSizeErr(buwSize));
TheClient->WaitForRedrawsToFinish();
CheckWindow();
}
iOomFrontWindow.Close();
}
void CTBackedUpWindow::doGraphicFunctionsL(CBitmapContext *gc,TBool aExtraDrawBitMap)
{
TSize size=iBackedUpWindow.Size();
CFbsFont *aFont;
_LIT(KFontName,"Swiss");
TFontSpec fspec(KFontName,190);
User::LeaveIfError(TheClient->iScreen->GetNearestFontToDesignHeightInTwips((CFont *&)aFont,fspec));
CFbsBitmap* aBitmap=iTestBitmap;
CFbsBitmap* aMaskBitmap=iMaskBitmap;
#include "DLLDRAW.H" // Draws to a Gc called 'gc'
TheClient->iScreen->ReleaseFont(aFont);
}
void CTBackedUpWindow::AllGraphicFunctionsL(RBlankWindow &aBlank,TBool aExtraDrawBitMap/*=ETrue*/)
{
aExtraDrawBitMap=EFalse; //Check out when bitblit scaling has changed again
aBlank.SetVisible(ETrue);
TheGc->Activate(iBackedUpWindow);
TRAPD(err,doGraphicFunctionsL(TheGc,aExtraDrawBitMap));
TheGc->Deactivate();
User::LeaveIfError(err);
iBitGc->Reset();
iBitGc->SetUserDisplayMode(EGray4);
doGraphicFunctionsL(iBitGc,aExtraDrawBitMap);
aBlank.SetVisible(EFalse);
CheckWindow();
}
void CTBackedUpWindow::AllGraphicFunctionsTestsL()
{
RBlankWindow blank(TheClient->iWs);
TInt xtop=(iSize.iWidth)-(iSize.iWidth>>1);
TInt ytop=(iSize.iHeight)-(iSize.iHeight>>1);
blank.Construct(*(TheClient->iGroup->GroupWin()),ENullWsHandle);
blank.SetColor(TRgb::Gray256(128));
blank.Activate();
blank.SetExtent(TPoint(0,ytop),TSize(iSize.iWidth,iSize.iHeight>>2));
AllGraphicFunctionsL(blank);
blank.SetExtent(TPoint(0,ytop+10),TSize(iSize.iWidth,iSize.iHeight>>2));
AllGraphicFunctionsL(blank);
blank.SetExtent(TPoint(xtop,ytop),TSize(iSize.iWidth>>1,iSize.iHeight));
AllGraphicFunctionsL(blank,EFalse);
blank.SetExtent(TPoint(xtop+(iSize.iWidth>>1),ytop),TSize(iSize.iWidth>>1,iSize.iHeight));
AllGraphicFunctionsL(blank,EFalse);
blank.SetExtent(TPoint(xtop+10,iSize.iHeight),TSize(iSize.iWidth,iSize.iHeight));
AllGraphicFunctionsL(blank,EFalse);
blank.SetExtent(TPoint(xtop,ytop),iSize);
AllGraphicFunctionsL(blank,EFalse);
blank.SetExtent(TPoint(0,0),TSize(0,0));
AllGraphicFunctionsL(blank);
blank.Close();
}
void CTBackedUpWindow::RunTestCaseL(TInt /*aCurTestCase*/)
{
switch(iSupState)
{
case 0:
for (TInt iSubTest=0;iSubTest<KLastSubtest;iSubTest++)
{
DoSubTestL(iSubTest);
}
iBackedUpWindow.MaintainBackup(); //Putting this line here is a work around
break;
case 1:
for (TInt iSubTest=0;iSubTest<KLastSubtest;iSubTest++)
{
DoSubTestL(iSubTest);
}
break;
default:
TestComplete();
break;
}
iSupState++;
}
void CTBackedUpWindow::DoSubTestL(TInt iState)
{
_LIT(KTest0,"Simple draw");
_LIT(KTest1,"Resizing");
_LIT(KTest2,"Invisible/Visible");
_LIT(KTest3,"Windows on top");
_LIT(KTest4,"Child Windows");
_LIT(KTest5,"OOM");
_LIT(KTest6,"Update Bitmap");
_LIT(KTest7,"Bitmap duplicate");
_LIT(KTest8,"Two Graphic Contexts");
_LIT(KTest9,"All Graphic Functions");
_LIT(KTest10,"Reactivate");
_LIT(KTest11,"DoDrawCommand");
TRgb rgb1(255,255,255);
TRgb rgb2(255,255,255);
TRgb rgb3(255,255,255);
TRgb rgb4(255,255,255);
TRgb rgb5(255,255,255);
TRgb rgb6(255,255,255);
TRgb rgb7(255,255,255);
TRgb color(TRgb::Gray4(2));
iTest->iState=iState;
((CTBackedUpWindowStep*)iStep)->SetTestStepID(KUnknownSYMTestCaseIDName);
switch(iState)
{
/**
@SYMTestCaseID GRAPHICS-WSERV-0202-0001
@SYMDEF DEF081259
@SYMTestCaseDesc Test drawing in a backed up window
@SYMTestPriority High
@SYMTestStatus Implemented
@SYMTestActions Draw in a backed up window and a normal window and check
the two drawings are the same
@SYMTestExpectedResults The two drawings are exactly the same
*/
case 0:
((CTBackedUpWindowStep*)iStep)->SetTestStepID(_L("GRAPHICS-WSERV-0202-0001"));
iTest->LogSubTest(KTest0);
Draw(1,NULL);
CheckWindow();
break;
/**
@SYMTestCaseID GRAPHICS-WSERV-0202-0002
@SYMDEF DEF081259
@SYMTestCaseDesc Test drawing in a backed up window
@SYMTestPriority High
@SYMTestStatus Implemented
@SYMTestActions Draw in a backed up window and a normal window and check
the two drawings are the same
@SYMTestExpectedResults The two drawings are exactly the same
*/
case 1:
((CTBackedUpWindowStep*)iStep)->SetTestStepID(_L("GRAPHICS-WSERV-0202-0002"));
iTest->LogSubTest(KTest1);
Draw(0,&rgb1);
Draw(3,NULL);
Resize();
CheckWindow();
break;
/**
@SYMTestCaseID GRAPHICS-WSERV-0203
@SYMDEF DEF081259
@SYMTestCaseDesc Test making a backed up window invisible
@SYMTestPriority High
@SYMTestStatus Implemented
@SYMTestActions Draw in a backed up window and a normal window, make
the backed up window invisible then visible and
then check the two drawings are the same
@SYMTestExpectedResults The two drawings are exactly the same
*/
case 2:
((CTBackedUpWindowStep*)iStep)->SetTestStepID(_L("GRAPHICS-WSERV-0203"));
iTest->LogSubTest(KTest2);
Draw(0,&rgb2);
Draw(1,NULL);
InvisVis();
CheckWindow();
break;
/**
@SYMTestCaseID GRAPHICS-WSERV-0204
@SYMDEF DEF081259
@SYMTestCaseDesc Test drawing in a backed up window and then placing a
window on top of it
@SYMTestPriority High
@SYMTestStatus Implemented
@SYMTestActions Draw in a backed up window and a normal window, then
place a window on top of the backed up window and then
check the two drawings are the same
@SYMTestExpectedResults The two drawings are exactly the same
*/
case 3:
((CTBackedUpWindowStep*)iStep)->SetTestStepID(_L("GRAPHICS-WSERV-0204"));
iTest->LogSubTest(KTest3);
//TRgb rgb(220,220,220);
Draw(0,&rgb3);
Draw(1,NULL);
WindowOnTop();
CheckWindow();
break;
/**
@SYMTestCaseID GRAPHICS-WSERV-0205
@SYMDEF DEF081259
@SYMTestCaseDesc Test drawing in a backed up window and then drawing in
a child window
@SYMTestPriority High
@SYMTestStatus Implemented
@SYMTestActions Draw in a backed up window and a normal window, then
create and draw in a child window and then
check the two original drawings are the same
@SYMTestExpectedResults The two drawings are exactly the same
*/
case 4:
((CTBackedUpWindowStep*)iStep)->SetTestStepID(_L("GRAPHICS-WSERV-0205"));
iTest->LogSubTest(KTest4);
Draw(0,&rgb4);
Draw(3,NULL);
ChildWindows();
CheckWindow();
break;
/**
@SYMTestCaseID GRAPHICS-WSERV-0206
@SYMDEF DEF081259
@SYMTestCaseDesc Out of memeory test for backed up windows
@SYMTestPriority High
@SYMTestStatus Implemented
@SYMTestActions Out of memeory test for backed up windows
@SYMTestExpectedResults Backed up window responds correctly when out
of memory
*/
case 5:
((CTBackedUpWindowStep*)iStep)->SetTestStepID(_L("GRAPHICS-WSERV-0206"));
iTest->LogSubTest(KTest5);
if (!iTest->IsFullRomL())
{
Draw(0,&rgb5);
Draw(3,NULL);
OOML();
CheckWindow();
}
break;
/**
@SYMTestCaseID GRAPHICS-WSERV-0207
@SYMDEF DEF081259
@SYMTestCaseDesc Test updating a bitmap in a backed up window
@SYMTestPriority High
@SYMTestStatus Implemented
@SYMTestActions Update a bitmap in a backed up window and a normal window
and check the two bitmaps are the same
@SYMTestExpectedResults The two bitmaps are exactly the same
*/
case 6:
((CTBackedUpWindowStep*)iStep)->SetTestStepID(_L("GRAPHICS-WSERV-0207"));
iTest->LogSubTest(KTest6);
Draw(0,&rgb6);
Draw(1,NULL);
UpdateBitmapTestL();
break;
/**
@SYMTestCaseID GRAPHICS-WSERV-0208
@SYMDEF DEF081259
@SYMTestCaseDesc Test updating a duplicate bitmap in a backed up window
@SYMTestPriority High
@SYMTestStatus Implemented
@SYMTestActions Update a duplicated bitmap in a backed up window and a normal window
and check the two bitmaps are the same
@SYMTestExpectedResults The two bitmaps are exactly the same
*/
case 7:
((CTBackedUpWindowStep*)iStep)->SetTestStepID(_L("GRAPHICS-WSERV-0208"));
if (iSupState==0) //Will fail unless the window is fully backup.
break;
iTest->LogSubTest(KTest7);
Draw(0,&rgb7);
Draw(1,NULL);
DupBitmapTestL();
break;
/**
@SYMTestCaseID GRAPHICS-WSERV-0209
@SYMDEF DEF081259
@SYMTestCaseDesc Test drawing with two graphic contexts in a backed up window
@SYMTestPriority High
@SYMTestStatus Implemented
@SYMTestActions Draw using two graphic contexts in a backed up window and a normal
window and check the two drawings are the same
@SYMTestExpectedResults The two drawings are exactly the same
*/
case 8:
((CTBackedUpWindowStep*)iStep)->SetTestStepID(_L("GRAPHICS-WSERV-0209"));
iTest->LogSubTest(KTest8);
Draw(0,&color);
Draw(1,NULL);
DrawWithTwoGcsL();
CheckWindow();
break;
/**
@SYMTestCaseID GRAPHICS-WSERV-0210
@SYMDEF DEF081259
@SYMTestCaseDesc Test drawing using all the graphic functions in a backed up window
@SYMTestPriority High
@SYMTestStatus Implemented
@SYMTestActions Draw using all the graphic functions in a backed up window and a normal
window and check the two drawings are the same
@SYMTestExpectedResults The two drawings are exactly the same
*/
case 9:
((CTBackedUpWindowStep*)iStep)->SetTestStepID(_L("GRAPHICS-WSERV-0210"));
iTest->LogSubTest(KTest9);
if(TheClient->iScreen->SizeInPixels() == TSize(640,240))
AllGraphicFunctionsTestsL();
break;
//A Coverage test, nothing spectacular just making the code
//go into CWsGc::Reactivate
case 10:
{
/**
@SYMTestCaseID GRAPHICS-WSERV-0502
*/
((CTBackedUpWindowStep*)iStep)->SetTestStepID(_L("GRAPHICS-WSERV-0502"));
iTest->LogSubTest(KTest10);
TheGc->Deactivate();
RBackedUpWindow extentWindow;
extentWindow=RBackedUpWindow(TheClient->iWs);
extentWindow.Construct(*(TheClient->iGroup->GroupWin()),EGray4,ENullWsHandle);
TheGc->Activate(extentWindow);
TheClient->Flush();
User::LeaveIfError(extentWindow.SetExtentErr(TPoint(2,2), TSize(4,4)));
extentWindow.Activate();
extentWindow.Close();
TheGc->Deactivate();
break;
}
//Coverage for various messages for CWsGc::DoDrawCommand
case 11:
{
/**
@SYMTestCaseID GRAPHICS-WSERV-0507
*/
((CTBackedUpWindowStep*)iStep)->SetTestStepID(_L("GRAPHICS-WSERV-0507"));
iTest->LogSubTest(KTest11);
TheGc->Activate(iBackedUpWindow);
TheGc->Reset();
iBitGc->Reset();
iBitGc->SetUserDisplayMode(EGray4);
// EWsGcOpDrawWsGraphic
TheGc->DrawWsGraphic(TWsGraphicId(0), TRect(0,0,10,10));
//create a large junk buffer so that messages with Ptr suffix will be sent
RBuf8 junkBuf8;
RBuf junkBuf;
junkBuf8.CreateMax(650); // a large enough buffer to sent as Ptr (this value used to crash the code before)
junkBuf.CreateMax(650); // a large enough buffer to sent as Ptr
for (int i=0; i<junkBuf.MaxLength()-1;i++)
{
junkBuf8[i] = 'A';
junkBuf[i] = 'A';
}
junkBuf8[junkBuf8.MaxLength()-1] = '\0';
junkBuf[junkBuf.MaxLength()-1] = '\0';
// EWsGcOpDrawWsGraphicPtr
TheGc->DrawWsGraphic(TWsGraphicId(0), TRect(0,0,10,10), junkBuf8);
// Set font for drawing on screen
CFbsFont *font1;
TFontSpec fspec(KTestFontTypefaceName,200);
User::LeaveIfError(TheClient->iScreen->GetNearestFontToDesignHeightInTwips((CFont *&)font1,fspec));
TheGc->UseFont(font1);
iBitGc->UseFont(font1);
// EWsGcOpDrawTextPtr
TheGc->DrawText(junkBuf, TPoint(0,0));
iBitGc->DrawText(junkBuf, TPoint(0,0));
// EWsGcOpDrawBoxText - unreachable 299-too lo, 300-too hi
// EWsGcOpDrawBoxTextPtr
TheGc->DrawText(junkBuf, TRect(0,0,10,10), 0, CGraphicsContext::ELeft, 0);
iBitGc->DrawText(junkBuf, TRect(0,0,10,10), 0, CGraphicsContext::ELeft, 0);
// EWsGcOpDrawTextVerticalPtr
TheGc->DrawTextVertical(junkBuf, TPoint(0,0), ETrue);
iBitGc->DrawTextVertical(junkBuf, TPoint(0,0), ETrue);
// EWsGcOpDrawBoxTextVerticalPtr
TheGc->DrawTextVertical(junkBuf, TRect(0,0,10,10), 0, ETrue, CGraphicsContext::ELeft, 0);
iBitGc->DrawTextVertical(junkBuf, TRect(0,0,10,10), 0, ETrue, CGraphicsContext::ELeft, 0);
// EWsGcOpMoveBy
TheGc->MoveBy(TPoint(2,2));
iBitGc->MoveBy(TPoint(2,2));
// a bitmap for bitblt ops
CWsBitmap bmp(TheClient->iWs);
bmp.Create(TSize(16,16), iBackedUpWindow.DisplayMode());
// EWsGcOpGdiWsBlt2
TheGc->BitBlt(TPoint(0,0), &bmp);
iBitGc->BitBlt(TPoint(0,0), &bmp);
// EWsGcOpGdiWsBlt3
TheGc->BitBlt(TPoint(0,0), &bmp, TRect(0,0,10,10));
iBitGc->BitBlt(TPoint(0,0), &bmp, TRect(0,0,10,10));
// EWsGcOpGdiWsBltMasked
TheGc->BitBltMasked(TPoint(0,0), &bmp, TRect(0,0,10,10), &bmp, EFalse);
iBitGc->BitBltMasked(TPoint(0,0), &bmp, TRect(0,0,10,10), &bmp, EFalse);
// EWsGcOpGdiWsAlphaBlendBitmaps
TheGc->AlphaBlendBitmaps(TPoint(0,0), &bmp, TRect(0,0,10,10), &bmp, TPoint(1,1));
iBitGc->AlphaBlendBitmaps(TPoint(0,0), &bmp, TRect(0,0,10,10), &bmp, TPoint(1,1));
// EWsGcOpWsDrawBitmapMasked
TheGc->DrawBitmapMasked(TRect(0,0,10,10), &bmp, TRect(0,0,8,8), &bmp, ETrue);
iBitGc->DrawBitmapMasked(TRect(0,0,10,10), &bmp, TRect(0,0,8,8), &bmp, ETrue);
// EWsGcOpDrawBitmap
TheGc->DrawBitmap(TPoint(0,0), &bmp);
iBitGc->DrawBitmap(TPoint(0,0), &bmp);
// EWsGcOpDrawBitmapMasked
TheGc->DrawBitmapMasked(TRect(0,0,10,10), static_cast<const CFbsBitmap*>(&bmp),
TRect(0,0,8,8), static_cast<const CFbsBitmap*>(&bmp),
EFalse);
iBitGc->DrawBitmapMasked(TRect(0,0,10,10), static_cast<const CFbsBitmap*>(&bmp),
TRect(0,0,8,8), static_cast<const CFbsBitmap*>(&bmp),
EFalse);
// EWsGcOpDrawPolyLineContinued
TheGc->DrawPolyLine(reinterpret_cast<const TPoint*>(junkBuf8.Ptr()),
TInt(junkBuf8.Size()/sizeof(TPoint)));
iBitGc->DrawPolyLine(reinterpret_cast<const TPoint*>(junkBuf8.Ptr()),
TInt(junkBuf8.Size()/sizeof(TPoint)));
// EWsGcOpCopyRect
TheGc->CopyRect(TPoint(0,0), TRect(0,0,10,10));
iBitGc->CopyRect(TPoint(0,0), TRect(0,0,10,10));
//cleanup
TheClient->Flush();
TheGc->DiscardFont();
iBitGc->DiscardFont();
TheClient->iScreen->ReleaseFont(font1);
junkBuf.Close();
junkBuf8.Close();
TheGc->Deactivate();
CheckWindow();
//the following have no client equivalent methods
// EWsGcOpMapColorsLocal
// EWsGcOpDrawPolyLineLocalBufLen
// EWsGcOpDrawPolyLineLocal
// EWsGcOpDrawPolygonLocalBufLen
// EWsGcOpDrawPolygonLocal
// EWsGcOpDrawBitmapLocal
// EWsGcOpDrawBitmap2Local
// EWsGcOpDrawBitmap3Local
// EWsGcOpDrawBitmapMaskedLocal
// EWsGcOpDrawTextPtr1
// EWsGcOpDrawBoxTextPtr1
// EWsGcOpDrawTextVerticalPtr1
// EWsGcOpDrawBoxTextVerticalPtr1
// EWsGcOpDrawTextLocal
// EWsGcOpDrawBoxTextLocal
// EWsGcOpGdiBlt2Local
// EWsGcOpGdiBlt3Local
// EWsGcOpGdiBltMaskedLocal
((CTBackedUpWindowStep*)iStep)->CloseTMSGraphicsStep();
break;
}
default:
((CTBackedUpWindowStep*)iStep)->SetTestStepID(KNotATestSYMTestCaseIDName);
((CTBackedUpWindowStep*)iStep)->CloseTMSGraphicsStep();
break;
}
((CTBackedUpWindowStep*)iStep)->RecordTestResultL();
}
__WS_CONSTRUCT_STEP__(BackedUpWindow)