Re-merge fixes for bug 1362, bug 1666, bug 1863, KhronosRI and bld.inf.
// 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:
//
#include "tbrushandpen.h"
#include <e32math.h>
/**
default brush and pen drawing target size
*/
const TSize KDrawBrushPenDefaultSize(640, 450);
CTBrushAndPen::CTBrushAndPen()
{
SetTestStepName(KTDirectGdiBrushAndPenStep);
}
CTBrushAndPen::~CTBrushAndPen()
{
}
/**
@SYMTestCaseID
GRAPHICS-DIRECTGDI-PENBRUSH-0001
@SYMPREQ
PREQ39
@SYMREQ
REQ9195
REQ9201
REQ9202
REQ9222
REQ9223
REQ9236
REQ9237
@SYMTestCaseDesc
Test drawing with brush.
@SYMTestPriority
High
@SYMTestStatus
Implemented
@SYMTestActions
Basic test for pen and brush methods.
Test the following brush settings:
- colour
- style
Call drawing functions with the following parameters:
colours from the COLOR_TABLE.
aBrushStyle
ENullBrush
ESolidBrush
EPatternedBrush
EVerticalHatchBrush
EForwardDiagonalHatchBrush
EHorizontalHatchBrush
ERearwardDiagonalHatchBrush
ESquareCrossHatchBrush
EDiamondCrossHatchBrush
Issue shape drawing operations: DrawRect, DrawRoundRect, DrawEllipse, DrawPie, DrawPolygon.
Draw overlapping shapes to test correctness of brush transparency.
Repeat the drawing in write alpha mode (DrawModeWriteAlpha bitmap).
@SYMTestExpectedResults
Brush colours and styles should be correctly drawn for each shape and each draw mode.
Valid bitmap should be created. This bitmap shall be compared to a reference bitmap.
@param aDrawMode the draw mode to run this test in, only DirectGdi::EDrawModePEN and DirectGdi::EDrawModeWriteAlpha
are supported
*/
void CTBrushAndPen::TestBrushColorAndStyleL(const DirectGdi::TDrawMode aDrawMode)
{
_LIT(KTestName, "PenBrush-BrushColourStyle_%S"); //test case name
_LIT(KDrawModePEN, "DrawModePen");
_LIT(KDrawModeWriteAlpha, "DrawModeWriteAlpha");
TBuf<50> testCaseName;
switch (aDrawMode)
{
case DirectGdi::EDrawModePEN:
testCaseName.Format(KTestName, &KDrawModePEN);
break;
case DirectGdi::EDrawModeWriteAlpha:
testCaseName.Format(KTestName, &KDrawModeWriteAlpha);
break;
default:
// This method should only be called aDrawMode set to DirectGdi::EDrawModePEN or DirectGdi::EDrawModeWriteAlpha
TESTL(EFalse);
break;
}
if(!iRunningOomTests)
{
INFO_PRINTF1(testCaseName);
}
ResetGc();
// Set the draw mode
iGc->SetDrawMode(aDrawMode);
TESTNOERROR(iGc->GetError());
iGc->SetPenStyle(DirectGdi::ESolidPen);
// print two row of shapes
// the second one has overlapping shapes to test alpha blending
for(TInt j =0; j<2; j++)
{
// draw 8 columns of different shapes with various pen colours
// brush colours, and brush styles
for(TInt i = 0; i<8; i++)
{
iGc->SetBrushStyle(KBrushStyleTable[i==1?1:i+1]);
TInt startx = 10+i*70 - j*i*10;
TInt endx = 70+i*70;
TInt starty = j*263;
//this is setter helper function, see below method definition
SetHashColors(i,j,1);
iGc->DrawRect(TRect(startx,starty+10,endx,starty+30));
SetHashColors(i,j,2);
iGc->DrawRoundRect(TRect(startx,starty+40,endx,starty+60), TSize(10,10));
SetHashColors(i,j,3);
iGc->DrawPie(TRect(startx,starty+65,endx,starty+125), TPoint(startx,starty+65) , TPoint(endx,starty+65));
// below shapes are not necessary to test alpha blending,
// so there are drawn only three above shapes with increasing overlap
if(j == 0)
{
SetHashColors(i,j,4);
iGc->DrawEllipse(TRect(startx,starty+130 ,endx,starty+190 ));
SetHashColors(i,j,5);
CArrayFixFlat<TPoint>* pointList = new (ELeave) CArrayFixFlat<TPoint>(6);
CleanupStack::PushL(pointList);
pointList->AppendL(TPoint(startx,starty+192));
pointList->AppendL(TPoint(startx + 50,starty+242));
pointList->AppendL(TPoint(startx + 10,starty+242));
pointList->AppendL(TPoint(endx,starty+192));
pointList->AppendL(TPoint(endx,starty+262));
pointList->AppendL(TPoint(startx,starty+262));
DirectGdi::TFillRule fillrule = i%2==0 ? DirectGdi::EAlternate : DirectGdi::EWinding;
iGc->DrawPolygon(*pointList ,fillrule);
CleanupStack::PopAndDestroy(pointList);
}
}
}
// For coverage - test the BrushColor() method works correctly
iGc->SetBrushColor(KRgbRed);
TESTL(iGc->BrushColor() == KRgbRed);
TEST(KErrNone == WriteTargetOutput(iTestParams, TPtrC(testCaseName)));
}
/**
Helper method that sets the current pen and brush colours from a color table. The color table used contains a
palette of 16 standard colors ranging from white to black.
@param aGeneralIndex Used when indexing into the color table for the pen and brush colors, and for setting their alpha values.
@param aAlphaStep Used when setting an alpha value for the pen and the brush, the alpha value is set to (255-aAlphaStep*aGeneralIndex*32).
@param aPenBrushIndex Used when indexing into the color table for the pen and brush colors. The pen color is set to
KColor16Table[(3*aGeneralIndex+aPenBrushIndex)%16] and the brush color is set to KColor16Table[(5*aGeneralIndex+aPenBrushIndex)%16].
*/
void CTBrushAndPen::SetHashColors(TInt aGeneralIndex, TInt aAlphaStep, TInt aPenBrushIndex)
{
TRgb penColor;
TRgb brushColor;
penColor = KColor16Table[(3*aGeneralIndex+aPenBrushIndex)%16];
penColor.SetAlpha(255-aAlphaStep*aGeneralIndex*32);
iGc->SetPenColor(penColor);
brushColor = KColor16Table[(5*aGeneralIndex+aPenBrushIndex)%16];
brushColor.SetAlpha(255-aAlphaStep*aGeneralIndex*32);
iGc->SetBrushColor(brushColor);
}
/**
@SYMTestCaseID
GRAPHICS-DIRECTGDI-PENBRUSH-0002
@SYMPREQ
PREQ39
@SYMREQ
REQ9195
REQ9201
REQ9202
REQ9222
REQ9223
REQ9236
REQ9237
@SYMTestCaseDesc
Test for brush pattern functionality: set a brush pattern for a CDirectGdiContext object,
then check it has a brush pattern. Test that the SetBrushOrigin() method works as expected.
@SYMTestPriority
High
@SYMTestStatus
Implemented
@SYMTestActions
Test various brush pattern usage scenarios:
Set it's brush pattern, then check it has a brush pattern.
Check setting a brush pattern both from a CFbsBitmap and from a handle.
Test resetting of brush pattern.
Call functions that use brush during shapes drawing.
Create a brush pattern image and set it as the brush pattern. Draw a rectangle, move
the brush origin to various positions and draw more shapes.
@SYMTestExpectedResults
The rectangle is filled correctly for each different brush origins.
Valid bitmap should be created. This bitmap shall be compared to a reference bitmap.
*/
void CTBrushAndPen::TestBrushPatternOriginL()
{
_LIT(KTestName, "PenBrush-BrushPatternOrigin"); //test case name
if(!iRunningOomTests)
{
INFO_PRINTF1(KTestName);
}
ResetGc();
// create patterns programatically so we can test EPatternedBrush
TUidPixelFormat pixelFormat = iTestParams.iTargetPixelFormat;
TSize patternSize(56,56);
CFbsBitmap* pattern = CreateCheckedBoardBitmapL(pixelFormat, patternSize);
CleanupStack::PushL(pattern);
CFbsBitmap* pattern2 = CreateCheckedBoardBitmapL(pixelFormat, patternSize);
CleanupStack::PushL(pattern2);
//draw nine columns of different shapes with various settings
// of brush style and brush origin
for(TInt i = 0; i<9; i++)
{
switch(i)
{
case 0:
{
// (for coverage)
iGc->ResetBrushPattern();
// Set a brush pattern using CFbsBitmap
iGc->SetBrushPattern(*pattern);
TESTNOERRORL(iGc->GetError());
TEST(iGc->HasBrushPattern());
iGc->SetBrushStyle(DirectGdi::EPatternedBrush);
break;
}
case 1:
{
// Check that ResetBrushPattern works
iGc->ResetBrushPattern();
TEST(iGc->HasBrushPattern() == EFalse);
// Set a brush pattern using a handle
iGc->SetBrushPattern(pattern2->Handle());
TEST(iGc->HasBrushPattern());
iGc->SetBrushStyle(DirectGdi::EPatternedBrush);
break;
}
//change brush origin, and use last settings of brush style
case 2:
{
// Set a NULL brush pattern, then set the pattern using the handle
// for pattern2 (for coverage)
if(iUseDirectGdi)
{
iGc->SetBrushPattern(KNullHandle);
TESTL(iGc->GetError() == KErrBadHandle);
}
iGc->SetBrushPattern(pattern2->Handle());
iGc->SetBrushOrigin(TPoint(10,10));
break;
}
//change brush style and set brush origin
// in case 4 change only brush origin
case 3:
{
iGc->SetBrushStyle(DirectGdi::EForwardDiagonalHatchBrush);
iGc->SetPenColor(KRgbGreen);
iGc->SetBrushColor(KRgbRed);
iGc->SetBrushOrigin(TPoint(i,i));
break;
}
//change brush style and set brush origin
// in case 6 change only brush origin
case 5:
{
iGc->SetBrushStyle(DirectGdi::ESquareCrossHatchBrush);
iGc->SetPenColor(KRgbGreen);
iGc->SetBrushColor(KRgbRed);
iGc->SetBrushOrigin(TPoint(i,i));
break;
}
//change brush style and set brush origin
// in case 8 change only brush origin
case 7:
{
iGc->SetBrushStyle(DirectGdi::EDiamondCrossHatchBrush);
iGc->SetPenColor(KRgbGreen);
iGc->SetBrushColor(KRgbRed);
iGc->SetBrushOrigin(TPoint(i,i));
break;
}
case 4:
case 6:
case 8:
{
iGc->SetBrushOrigin(TPoint(i,i));
break;
}
}
//draw a set of shapes using current brush
TInt startx = 10+i*70;
TInt endx = 70+i*70;
TInt starty = 0;
iGc->DrawRect(TRect(startx,starty+10,endx,starty+30));
iGc->DrawRoundRect(TRect(startx,starty+40,endx,starty+60), TSize(10,10));
iGc->DrawPie(TRect(startx,starty+70,endx,starty+130), TPoint(startx,starty+70) , TPoint(endx,starty+70));
iGc->DrawEllipse(TRect(startx,starty+130 ,endx,starty+190 ));
CArrayFixFlat<TPoint>* pointList = new (ELeave) CArrayFixFlat<TPoint>(6);
CleanupStack::PushL(pointList);
pointList->AppendL(TPoint(startx,starty+200));
pointList->AppendL(TPoint(startx + 50,starty+250));
pointList->AppendL(TPoint(startx + 10,starty+250));
pointList->AppendL(TPoint(endx,starty+200));
pointList->AppendL(TPoint(endx,starty+270));
pointList->AppendL(TPoint(startx,starty+270));
iGc->DrawPolygon(*pointList ,DirectGdi::EAlternate);
CleanupStack::PopAndDestroy(pointList);
}
// Check that ResetBrushPattern() works
iGc->ResetBrushPattern();
TEST(iGc->HasBrushPattern() == EFalse);
pattern2->Reset();
TESTNOERROR(iGc->GetError());
TEST(KErrNone == WriteTargetOutput(iTestParams, KTestName()));
CleanupStack::PopAndDestroy(2, pattern);
}
/**
@SYMTestCaseID
GRAPHICS-DIRECTGDI-PENBRUSH-0003
@SYMPREQ
PREQ39
@SYMREQ
REQ9195
REQ9201
REQ9202
REQ9222
REQ9223
REQ9236
REQ9237
@SYMTestCaseDesc
Test pen drawing functionality.
@SYMTestPriority
High
@SYMTestStatus
Implemented.
@SYMTestActions
Test setting pen colour and size.
Change pen settings:
colours from the COLOR_TABLE.
Iterate over various pen sizes.
Perform drawing operations that use the pen.
Use also overlapping shapes to test alpha blending.
@SYMTestExpectedResults
Valid bitmap should be created. Shapes will be drawn with correct pen colour and size.
This bitmap shall be compared to a reference bitmap.
*/
void CTBrushAndPen::TestPenColorSizeL(const DirectGdi::TDrawMode aDrawMode)
{
_LIT(KTestName, "PenBrush-PenColorSize_%S"); //test case name
_LIT(KDrawModePEN, "DrawModePen");
_LIT(KDrawModeWriteAlpha, "DrawModeWriteAlpha");
TBuf<50> testCaseName;
switch (aDrawMode)
{
case DirectGdi::EDrawModePEN:
testCaseName.Format(KTestName, &KDrawModePEN);
break;
case DirectGdi::EDrawModeWriteAlpha:
testCaseName.Format(KTestName, &KDrawModeWriteAlpha);
break;
default:
// This method should only be called aDrawMode set to DirectGdi::EDrawModePEN or DirectGdi::EDrawModeWriteAlpha
TESTL(EFalse);
break;
}
if(!iRunningOomTests)
{
INFO_PRINTF1(testCaseName);
}
ResetGc();
//draw nine columns of different shapes
// the last four overlaps to test alpha blending
for(TInt i = 0 ; i < 9; i++)
{
if(i==0)
{
iGc->SetBrushStyle(DirectGdi::ESolidBrush);
iGc->SetBrushColor(KRgbDarkRed);
}
else
{
iGc->SetBrushStyle(DirectGdi::ENullBrush);
}
TInt stfact = (i<5 ? 0 : i);
TInt startx = 10+i*70 - stfact*10;
TInt endx = 70+i*70;
TRgb penColor;
iGc->SetPenSize(TSize(i,i));
// The sw version allocates memory when you set a pen size and this memory is not freed
// until after the __UHEAP_MARKEND macro when running OOM tests, this causes a memory
// leak when this test leaves. The following TCleanupItem has been added to reset the pen
// size to 1,1 on account of a leave as settting the pen size to 1,1 deletes the allocated
// pen memory.
CleanupStack::PushL(TCleanupItem(ResetPenSize, iGc));
penColor = KColor16Table[(5*i+1)%15+1];
penColor.SetAlpha(255-stfact*30);
iGc->SetPenColor(penColor);
iGc->DrawRect(TRect(startx,10,endx,30));
penColor = KColor16Table[(5*i+2)%15+1];
penColor.SetAlpha(255-stfact*30);
iGc->SetPenColor(penColor);
iGc->DrawRoundRect(TRect(startx,40,endx,60), TSize(10,10));
penColor = KColor16Table[(5*i+3)%15+1];
penColor.SetAlpha(255-stfact*30);
iGc->SetPenColor(penColor);
iGc->DrawPie(TRect(startx,70,endx,130), TPoint(startx,70), TPoint(endx,70));
penColor = KColor16Table[(5*i+4)%15+1];
penColor.SetAlpha(255-stfact*30);
iGc->SetPenColor(penColor);
iGc->DrawEllipse(TRect(startx,135 ,endx,195 ));
penColor = KColor16Table[(5*i+5)%15+1];
penColor.SetAlpha(255-stfact*30);
CArrayFixFlat<TPoint>* pointList = new (ELeave) CArrayFixFlat<TPoint>(6);
CleanupStack::PushL(pointList);
pointList->AppendL(TPoint(startx,200));
pointList->AppendL(TPoint(startx+50,250));
pointList->AppendL(TPoint(startx+10,250));
pointList->AppendL(TPoint(endx,200));
pointList->AppendL(TPoint(endx,270));
pointList->AppendL(TPoint(startx,270));
iGc->SetPenColor(penColor);
iGc->DrawPolygon(*pointList ,DirectGdi::EAlternate);
CleanupStack::PopAndDestroy(pointList);
penColor = KColor16Table[(5*i+6)%15+1];
penColor.SetAlpha(255-stfact*30);
CArrayFixFlat<TPoint>* pointListPolyLine = new (ELeave) CArrayFixFlat<TPoint>(4);
CleanupStack::PushL(pointListPolyLine);
pointListPolyLine->AppendL(TPoint(startx,280));
pointListPolyLine->AppendL(TPoint(endx,320));
pointListPolyLine->AppendL(TPoint(startx,320));
pointListPolyLine->AppendL(TPoint(endx,280));
iGc->SetPenColor(penColor);
iGc->DrawPolyLine(*pointListPolyLine);
CleanupStack::PopAndDestroy(pointListPolyLine);
penColor = KColor16Table[(5*i+7)%15+1];
penColor.SetAlpha(255-stfact*30);
iGc->SetPenColor(penColor);
iGc->DrawArc(TRect(startx,330 ,endx, 360),TPoint(endx,330),TPoint(startx,330));
penColor = KColor16Table[(5*i+8)%15+1];
penColor.SetAlpha(255-stfact*30);
iGc->SetPenColor(penColor);
iGc->DrawLine(TPoint(startx,355),TPoint(endx,375));
penColor = KColor16Table[(5*i+8)%15+1];
penColor.SetAlpha(255-stfact*30);
pointListPolyLine = new (ELeave) CArrayFixFlat<TPoint>(4);
CleanupStack::PushL(pointListPolyLine);
pointListPolyLine->AppendL(TPoint(startx,400));
pointListPolyLine->AppendL(TPoint(endx,440));
pointListPolyLine->AppendL(TPoint(startx,440));
pointListPolyLine->AppendL(TPoint(endx,400));
iGc->SetPenColor(penColor);
iGc->DrawPolyLineNoEndPoint(*pointListPolyLine);
CleanupStack::PopAndDestroy(pointListPolyLine);
CleanupStack::PopAndDestroy(1);
}
TEST(KErrNone == WriteTargetOutput(iTestParams, TPtrC(testCaseName)));
}
/**
@SYMTestCaseID
GRAPHICS-DIRECTGDI-PENBRUSH-0004
@SYMPREQ
PREQ39
@SYMREQ
REQ9195
REQ9201
REQ9202
REQ9222
REQ9223
REQ9236
REQ9237
@SYMTestCaseDesc
Test drawing with various brush styles.
@SYMTestPriority
High
@SYMTestStatus
Implemented
@SYMTestActions
Test setting pen style.
Set pen style:
Call functions that use pen during shapes drawing and are affected by the pen
style (DrawLine(), DrawPolyLine(), DrawRect(), DrawPolygon();.
@SYMTestExpectedResults
Valid bitmap should be created. Shapes will be drawn with correct pen style. This
bitmap shall be compared to a reference bitmap.
*/
void CTBrushAndPen::TestPenStyleL()
{
_LIT(KTestName, "PenBrush-PenStyle"); //test case name
if(!iRunningOomTests)
{
INFO_PRINTF1(KTestName);
}
ResetGc();
//draw nine columns of different shapes with
// various pen style settigns
for(TInt i = 0 ; i < 9; i++)
{
TInt colindx = ( i < 6 ? i : i+1 );
iGc->SetPenStyle(KPenStyleTable[colindx%6]);
iGc->SetPenColor(KColor16Table[(i+6)%16]);
iGc->DrawRect(TRect(10+i*70,10,70+i*70,30));
iGc->DrawLine(TPoint(10+i*70,40),TPoint(70+i*70,190));
iGc->DrawLine(TPoint(70+i*70,40),TPoint(10+i*70,190));
CArrayFixFlat<TPoint>* pointList = new (ELeave) CArrayFixFlat<TPoint>(6);
CleanupStack::PushL(pointList);
pointList->AppendL(TPoint(10+i*70,200));
pointList->AppendL(TPoint(60+i*70,250));
pointList->AppendL(TPoint(20+i*70,250));
pointList->AppendL(TPoint(70+i*70,200));
pointList->AppendL(TPoint(70+i*70,270));
pointList->AppendL(TPoint(10+i*70,270));
iGc->DrawPolygon(*pointList ,DirectGdi::EAlternate);
CleanupStack::PopAndDestroy(pointList);
CArrayFixFlat<TPoint>* pointListPolyLine = new (ELeave) CArrayFixFlat<TPoint>(4);
CleanupStack::PushL(pointListPolyLine);
pointListPolyLine->AppendL(TPoint(10+i*70,280));
pointListPolyLine->AppendL(TPoint(70+i*70,320));
pointListPolyLine->AppendL(TPoint(10+i*70,320));
pointListPolyLine->AppendL(TPoint(70+i*70,280));
iGc->DrawPolyLine(*pointListPolyLine);
CleanupStack::PopAndDestroy(pointListPolyLine);
iGc->DrawLine(TPoint(10+i*70,370),TPoint(70+i*70,370));
}
TEST(KErrNone == WriteTargetOutput(iTestParams, KTestName()));
}
/**
@SYMTestCaseID
GRAPHICS-DIRECTGDI-PENBRUSH-0005
@SYMPREQ
PREQ39
@SYMREQ
REQ9195
REQ9201
REQ9202
REQ9222
REQ9223
REQ9236
REQ9237
@SYMTestPriority
High
@SYMTestStatus
Implemented
@SYMTestCaseDesc
Test shape drawing functions invalid pen and brush parameters handling.
@SYMTestActions
Draw a rectangle with pen style not from DirectGdi::TPenStyle enum.
Draw a ellipse with brush style not from DirectGdi::TBrushStyle enum.
Use negative pen size.
@SYMTestExpectedResults
Shapes should be drawn with default brush and pen settings when invalid paramaters are used.
*/
void CTBrushAndPen::TestBrushAndPenInvalidParametersL()
{
//there is no way in BitGDI to check if KErrArgument error occured,
//so this is test only in DirectGDI
if(!iUseDirectGdi)
return;
_LIT(KTestName, "PenBrush-InvalidParameters"); //test case name
if(!iRunningOomTests)
{
INFO_PRINTF1(KTestName);
}
ResetGc();
TInt i;
for(i = 0; i<6; i++)
{
switch (i)
{
case 0:
{
iGc->SetPenStyle(static_cast<DirectGdi::TPenStyle>(-1));
CheckErrorsL(KErrArgument, KErrNone, (TText8*)__FILE__, __LINE__);
break;
}
case 1:
{
iGc->SetPenStyle(static_cast<DirectGdi::TPenStyle>(10));
CheckErrorsL(KErrArgument, KErrNone, (TText8*)__FILE__, __LINE__);
iGc->SetPenSize(TSize(3,3));
break;
}
case 2:
{
iGc->SetPenStyle(DirectGdi::ESolidPen);
iGc->SetPenSize(TSize(-1,-1));
CheckErrorsL(KErrArgument, KErrNone, (TText8*)__FILE__, __LINE__);
break;
}
case 3:
{
iGc->SetPenStyle(static_cast<DirectGdi::TPenStyle>(-1));
CheckErrorsL(KErrArgument, KErrNone, (TText8*)__FILE__, __LINE__);
iGc->SetPenSize(TSize(-3,-3));
CheckErrorsL(KErrArgument, KErrNone, (TText8*)__FILE__, __LINE__);
break;
}
case 4:
{
iGc->SetPenStyle(DirectGdi::ESolidPen);
iGc->SetPenSize(TSize(1,1));
iGc->SetBrushStyle(static_cast<DirectGdi::TBrushStyle>(-1));
CheckErrorsL(KErrArgument, KErrNone, (TText8*)__FILE__, __LINE__);
break;
}
case 5:
{
iGc->SetPenStyle(DirectGdi::ESolidPen);
iGc->SetPenSize(TSize(1,1));
iGc->SetBrushStyle(static_cast<DirectGdi::TBrushStyle>(20));
CheckErrorsL(KErrArgument, KErrNone, (TText8*)__FILE__, __LINE__);
break;
}
}
TInt startx = 5+i*70;
TInt endx = 65+i*70;
iGc->DrawRect(TRect(startx,10,endx,30));
TESTNOERROR(iGc->GetError());
iGc->DrawRoundRect(TRect(startx,40,endx,60), TSize(10,10));
TESTNOERROR(iGc->GetError());
iGc->DrawPie(TRect(startx,70,endx,130), TPoint(30,0), TPoint(150,0));
TESTNOERROR(iGc->GetError());
iGc->DrawEllipse(TRect(startx,130,endx,190));
TESTNOERROR(iGc->GetError());
iGc->DrawArc(TRect(startx,190,endx,250),TPoint(endx,250),TPoint(startx,190));
TESTNOERROR(iGc->GetError());
iGc->DrawLine(TPoint(startx,270), TPoint(endx,270));
TESTNOERROR(iGc->GetError());
}
TEST(KErrNone == WriteTargetOutput(iTestParams, KTestName()));
}
/**
Override of base class virtual
@leave Gets system wide error code
@return - TVerdict code
*/
TVerdict CTBrushAndPen::doTestStepPreambleL()
{
CTDirectGdiStepBase::doTestStepPreambleL();
return TestStepResult();
}
/**
Override of base class pure virtual
Our implementation only gets called if the base class doTestStepPreambleL() did
not leave. That being the case, the current test result value will be EPass.
@leave Gets system wide error code
@return TVerdict code
*/
TVerdict CTBrushAndPen::doTestStepL()
{
// Test for each pixel format
for(TInt targetPixelFormatIndex = iTargetPixelFormatArray.Count() - 1; targetPixelFormatIndex >= 0 ; targetPixelFormatIndex--)
{
iTestParams.iTargetPixelFormat = iTargetPixelFormatArray[targetPixelFormatIndex];
SetTargetL(iTestParams.iTargetPixelFormat, EOneContextOneTarget, KDrawBrushPenDefaultSize);
RunTestsL();
RunOomTestsL();
}
CloseTMSGraphicsStep();
return TestStepResult();
}
/**
Override of base class pure virtual
Lists the tests to be run
*/
void CTBrushAndPen::RunTestsL()
{
SetTestStepID(_L("GRAPHICS-DIRECTGDI-PENBRUSH-0001"));
TestBrushColorAndStyleL(DirectGdi::EDrawModePEN);
RecordTestResultL();
SetTestStepID(_L("GRAPHICS-DIRECTGDI-PENBRUSH-0005"));
TestBrushAndPenInvalidParametersL();
RecordTestResultL();
SetTestStepID(_L("GRAPHICS-DIRECTGDI-PENBRUSH-0002"));
TestBrushPatternOriginL();
RecordTestResultL();
SetTestStepID(_L("GRAPHICS-DIRECTGDI-PENBRUSH-0004"));
TestPenStyleL();
RecordTestResultL();
if(!iRunningOomTests || iUseDirectGdi) // disable pen color and size tests for BitGdi Oom
{
SetTestStepID(_L("GRAPHICS-DIRECTGDI-PENBRUSH-0003"));
TestPenColorSizeL(DirectGdi::EDrawModePEN);
RecordTestResultL();
SetTestStepID(_L("GRAPHICS-DIRECTGDI-PENBRUSH-0003"));
TestPenColorSizeL(DirectGdi::EDrawModeWriteAlpha);
RecordTestResultL();
}
}