author | Gareth Stockwell <gareth.stockwell@accenture.com> |
Fri, 22 Oct 2010 11:38:29 +0100 | |
branch | bug235_bringup_0 |
changeset 206 | c170e304623f |
parent 0 | 5d03bc08d59c |
permissions | -rw-r--r-- |
// Copyright (c) 2008-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 "textendedbitmap.h" const TDisplayMode KDisplayMode[] = {EColor16MAP, EColor16MA, EColor16MU, EColor16M, EColor64K, EColor4K, EColor256, EColor16, EGray256, EGray16, EGray4, EGray2}; // The only display modes supported by the example rasterizer are EGray256, EColor64K, // EColor16MU and EColor16MAP, these tests will fail if KBitmapMode is changed to a // display mode that is not one of these modes. const TDisplayMode KBitmapMode = EColor16MAP; const TSize KBitmapSize(640,240); const TInt KNumColors = 3; const TRgb KColors[KNumColors] = {TRgb(0,255,255), TRgb(255,0,255), TRgb(255,255,0)}; const TUid KUidExampleExtendedBitmap = {0x10285A78}; //---------------------------------------------------------------------------- // Positive Extended Bitmap Tests //---------------------------------------------------------------------------- CTExtendedBitmap::CTExtendedBitmap(CTestStep* aStep) : CTGraphicsBase(aStep) { } void CTExtendedBitmap::ConstructL() { #ifdef USE_SCREEN_DEVICE // Create a screen device TInt ii = 0; TInt err = KErrNotSupported; for(;(ii<TInt(sizeof(KDisplayMode)/sizeof(KDisplayMode[0]))) && (err == KErrNotSupported);++ii) { TRAP(err, iDevice = CFbsScreenDevice::NewL(_L("scdv"),KDisplayMode[ii])); } if (err != KErrNone) { _LIT(KLog,"Failed to create screen device %S return value %d"); INFO_PRINTF3(KLog,&ColorModeName(KDisplayMode[ii]),err); User::Leave(err); } else { _LIT(KLog,"Created Screen Device with mode %S"); INFO_PRINTF2(KLog,&ColorModeName(KDisplayMode[ii])); } static_cast<CFbsScreenDevice*>(iDevice)->SetAutoUpdate(ETrue); #else // Create a standard bitmap, bitmap device iBitmap = new(ELeave) CFbsBitmap; User::LeaveIfError(iBitmap->Create(KBitmapSize, KBitmapMode)); iDevice = CFbsBitmapDevice::NewL(iBitmap); #endif INFO_PRINTF2(_L("Testing CFbsBitGc with an extended bitmap, display mode %d"), KBitmapMode); // Create a graphics context from chosen device User::LeaveIfError(iDevice->CreateContext(iBitGc)); // Check to see if the example rasterizer is available CTExtendedBitmapGc::TDrawMode drawMode = CTExtendedBitmapGc::EDrawFlag; if (CFbsBitmap::Rasterizer() == NULL) drawMode = CTExtendedBitmapGc::EDrawWhite; switch (drawMode) { case CTExtendedBitmapGc::EDrawFlag: INFO_PRINTF1(_L("Testing WITH the example rasterizer - Rasterizer Available")); break; case CTExtendedBitmapGc::EDrawWhite: INFO_PRINTF1(_L("Testing WITHOUT the example rasterizer - Rasterizer NOT Available")); break; default: ERR_PRINTF1(_L("Unknown draw mode")); break; } iExtendedBitmapGcTests = CTExtendedBitmapGc::NewL(this, *iBitGc, drawMode, KBitmapMode); } CTExtendedBitmap::~CTExtendedBitmap() { ((CTExtendedBitmapStep*)iStep)->CloseTMSGraphicsStep(); delete iExtendedBitmapGcTests; delete iBitGc; delete iDevice; #ifndef USE_SCREEN_DEVICE delete iBitmap; #endif } /** @SYMTestCaseID GRAPHICS-BITGDI-0103 @SYMTestCaseDesc Test extended bitmaps are drawn correctly to an offscreen bitmap using CFbsBitGc. Test that shapes are filled correctly when an extended bitmap is set as the brush pattern using CFbsBitGc::UseBrushPattern(). @SYMPREQ PREQ2096 @SYMREQ REQ10847 REQ10857 REQ10859 @SYMTestPriority High @SYMTestStatus Implemented @SYMTestActions Create an extended bitmap with extended data to generate a flag pattern when rendered, if the example rasterizer is available. Create a matching standard bitmap. Draw the extended bitmap on the left of the screen and the standard bitmap on the right, using each of the following CFbsBitGc APIs. This is done with both vertical and horizonatal flag orientations, and with and without an active region of interest: - BitBlt() (one version tested as both versions call through to DoBitBlt()) - BitBltMasked() - DrawBitmap() (one version tested as both versions call through to DoDrawBitmap()) - DrawBitmapMasked() - UseBrushPattern() - AlphaBlendBitmaps(const TPoint& aDestPt, const CFbsBitmap* aSrcBmp1, const CFbsBitmap* aSrcBmp2, const TRect& aSrcRect1, const TPoint& aSrcPt2, const CFbsBitmap* aAlphaBmp, const TPoint& aAlphaPt); - AlphaBlendBitmaps(const TPoint& aDestPt, const CFbsBitmap* aSrcBmp, const TRect& aSrcRect, const CFbsBitmap* aAlphaBmp, const TPoint& aAlphaPt); To test that shapes are filled correctly using an extended bitmap, an extended bitmap that would generate a flag pattern if the example rasterizer is available, and a matching standard bitmap are in turn set as the brush pattern using CFbsBitGc::UseBrushPattern(). Each of the following APIs are used to draw a shape, using the extended bitmap as a brush on the left, and the standard bitmap on the right. Calling each of these APIs is necessary as each one contains code specific to extended bitmaps. - DrawPie() - DrawRoundRect() - DrawPolygon() (2 versions) - DrawEllipse() - DrawRect() - DrawText() - DrawTextVertical() Note that the test cases are actually run from a separate test DLL that is built as part of the FbServ tests (textendedbitmapgc.dll). This DLL allows the same extended bitmap tests to be run using different graphics contexts. @SYMTestExpectedResults When the rasterizer is available both sides of the test screen should show a horizontally/vertically striped rectangle for every test case, when the rasterizer is not present both sides of the test screen should show a white rectangle for each test case. The left and right side of the test should always match exactly for each test case, i.e. what is drawn using an extended bitmap on the left of the screen should match what is drawn using a corresponding standard bitmap on the right of the screen. */ void CTExtendedBitmap::RunTestCaseL(TInt aCurTestCase) { ((CTExtendedBitmapStep*)iStep)->SetTestStepID(_L("GRAPHICS-BITGDI-0103")); iExtendedBitmapGcTests->RunTestCaseL(aCurTestCase); // Compare the two sides of the screen, they should match exactly TSize scrSize = iDevice->SizeInPixels(); TEST(iDevice->RectCompare(TRect(0,0,scrSize.iWidth>>1,scrSize.iHeight), *iDevice, TRect(scrSize.iWidth>>1,0,scrSize.iWidth,scrSize.iHeight))); ((CTExtendedBitmapStep*)iStep)->RecordTestResultL(); } CTestExecuteLogger& CTExtendedBitmap::Logger() { return CTGraphicsBase::Logger(); } void CTExtendedBitmap::TestTrue(TBool aCondition) { TEST(aCondition); } void CTExtendedBitmap::TestComplete() { CTGraphicsBase::TestComplete(); } __CONSTRUCT_STEP__(ExtendedBitmap) //---------------------------------------------------------------------------- // Negative Extended Bitmap Tests //---------------------------------------------------------------------------- CTExtendedBitmapNegative::CTExtendedBitmapNegative(CTestStep* aStep) : CTGraphicsBase(aStep) { } void CTExtendedBitmapNegative::RunTestCaseL(TInt aCurTestCase) { ((CTExtendedBitmapNegativeStep*)iStep)->SetTestStepID(KUnknownSYMTestCaseIDName); switch(aCurTestCase) { case 1: ((CTExtendedBitmapNegativeStep*)iStep)->SetTestStepID(_L("GRAPHICS-BITGDI-0104")); TestCFbsBitmapDeviceNewLLeavesL(); break; default: ((CTExtendedBitmapNegativeStep*)iStep)->SetTestStepID(KNotATestSYMTestCaseIDName); ((CTExtendedBitmapNegativeStep*)iStep)->CloseTMSGraphicsStep(); TestComplete(); break; } ((CTExtendedBitmapNegativeStep*)iStep)->RecordTestResultL(); } /** @SYMTestCaseID GRAPHICS-BITGDI-0104 @SYMTestCaseDesc Test that passing an extended bitmap to CFbsBitmapDevice::NewL() leaves with error KErrAccessDenied. @SYMPREQ PREQ2096 @SYMREQ REQ10847 REQ10856 @SYMTestPriority High @SYMTestStatus Implemented @SYMTestActions Create an extended bitmap using test data and test Uid. Call CFbsBitmapDevice::NewL() with the extended bitmap as the parameter. @SYMTestExpectedResults CFbsBitmapDevice::NewL() leaves with error KErrAccessDenied. */ void CTExtendedBitmapNegative::TestCFbsBitmapDeviceNewLLeavesL() { INFO_PRINTF1(_L("Test that CFbsBitmapDevice leaves with KErrAccessDenied when created with an extended bitmap")); TInt dataSize = sizeof(KColors)+sizeof(TUint8); // estimate the data size TUint8* data = new(ELeave) TUint8[dataSize]; CleanupStack::PushL(data); // Write the colours to be used in the extended bitmap to the data CTExtendedBitmapGc::WriteExtendedBitmapInfoL(data, dataSize, KColors, CTExtendedBitmapGc::EHorizontalStripe); CFbsBitmap* bmp = new(ELeave) CFbsBitmap; CleanupStack::PushL(bmp); TInt err = bmp->CreateExtendedBitmap(TSize(10,10), KBitmapMode, KUidExampleExtendedBitmap, data, dataSize); TEST(err == KErrNone); // CFbsBitmapDevice::NewL() should leave with KErrAccessDenied CFbsBitmapDevice* bmpDevice1 = NULL; TRAPD(error, bmpDevice1 = CFbsBitmapDevice::NewL(bmp)); TEST(error == KErrAccessDenied); delete bmpDevice1; CleanupStack::PopAndDestroy(2, data); } __CONSTRUCT_STEP__(ExtendedBitmapNegative)