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) 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 "tdrawbitmap.h" CTDrawBitmap::CTDrawBitmap() { SetTestStepName(KTDirectGdiDrawBitmapStep); } CTDrawBitmap::~CTDrawBitmap() { } /** Override of base class pure virtual Lists the tests to be run */ void CTDrawBitmap::RunTestsL() { if (iUseDirectGdi && !iUseSwDirectGdi) { // In the event that a test leaves after a BitBlt() or DrawBitmap() has occurred // the vgimage cache will need to be reset. // This needs to be the first item on the cleanupstack, // as some tests perform pushes and pops of bitmaps. CleanupStack::PushL(TCleanupItem(ResetCache, iVgImageCache)); } if(!iLargeTarget) { iTestParams.iDoCompressed = ETrue; SetTestStepID(_L("GRAPHICS-DIRECTGDI-DRAWBITMAP-0001")); TestBasicL(); RecordTestResultL(); iTestParams.iDoCompressed = EFalse; SetTestStepID(_L("GRAPHICS-DIRECTGDI-DRAWBITMAP-0003")); TestInvalidParametersL(); RecordTestResultL(); SetTestStepID(_L("GRAPHICS-DIRECTGDI-DRAWBITMAP-0005")); TestSourceBitmapCloningL(); RecordTestResultL(); SetTestStepID(_L("GRAPHICS-DIRECTGDI-DRAWBITMAP-0006")); TestDrawModeL(); RecordTestResultL(); SetTestStepID(_L("GRAPHICS-DIRECTGDI-DRAWBITMAP-0007")); TestSetOriginL(); RecordTestResultL(); } else { SetTestStepID(_L("GRAPHICS-DIRECTGDI-DRAWBITMAP-0002")); TestPositioningL(); RecordTestResultL(); SetTestStepID(_L("GRAPHICS-DIRECTGDI-DRAWBITMAP-0004")); TestScalingL(); RecordTestResultL(); } if (iUseDirectGdi && !iUseSwDirectGdi) { CleanupStack::PopAndDestroy(iVgImageCache); } } /** @SYMTestCaseID GRAPHICS-DIRECTGDI-DRAWBITMAP-0001 @SYMPREQ PREQ39 @SYMREQ REQ9199 REQ9204 REQ9195 REQ9201 REQ9202 REQ9222 REQ9223 REQ9236 REQ9237 @SYMTestCaseDesc Bitmap drawing basic functionality test. @SYMTestPriority Critical @SYMTestStatus Implemented @SYMTestActions Test bitmap drawing for simple and valid parameters: - Set the origin at TPoint(-35,80) - Draw a stretched bitmap at TPoint(55,-60) @SYMTestExpectedResults Source bitmap should be copied into drawing target. Valid bitmap should be created. This bitmap shall be compared to a reference bitmap. */ void CTDrawBitmap::TestBasicL() { _LIT(KTestName, "DrawBitmap-Basic"); if(!iRunningOomTests) { INFO_PRINTF1(KTestName); } ResetGc(); CFbsBitmap* bitmap; if(iTestParams.iDoCompressed) { bitmap = iCompressedBitmap; } else { bitmap = iCheckedBoardBitmap2; } iGc->DrawBitmap(TRect(TPoint(20, 20), bitmap->SizeInPixels()), *bitmap, TRect(10, 10, 130, 130)); TESTNOERRORL(iGc->GetError()); if(!iTestParams.iDoCompressed) WriteTargetOutput(KTestName()); } /** @SYMTestCaseID GRAPHICS-DIRECTGDI-DRAWBITMAP-0002 @SYMPREQ PREQ39 @SYMREQ REQ9199 REQ9204 REQ9195 REQ9201 REQ9202 REQ9222 REQ9223 REQ9236 REQ9237 @SYMTestCaseDesc Test regularity of bitmap positioning. @SYMTestPriority Critical @SYMTestStatus Implemented @SYMTestActions Test positioning functionality of DrawBitmap() methods. Test boundary conditions and clipping to surface area. Covers the whole target bitmap starting from TPoint(-30,-30) with staggered blits of a small 8x8 bitmap. @SYMTestExpectedResults Source bitmap should be drawn tiled in a staggered fashion across the whole target. Clipping should be applied. Valid bitmap should be created. This bitmap shall be compared to a reference bitmap. */ void CTDrawBitmap::TestPositioningL() { _LIT(KTestName, "DrawBitmap-Positioning"); if(!iRunningOomTests) { INFO_PRINTF1(KTestName); } iTestParams.iDoCompressed = ETrue; TestPositioningBaseL(KTestName(), EDrawBitmap); iTestParams.iDoCompressed = EFalse; TestPositioningBaseL(KTestName(), EDrawBitmap); } /** @SYMTestCaseID GRAPHICS-DIRECTGDI-DRAWBITMAP-0003 @SYMPREQ PREQ39 @SYMREQ REQ9199 REQ9204 REQ9195 REQ9222 REQ9223 REQ9236 REQ9237 @SYMTestCaseDesc Test functions behaviour after calling with invalid parameters. @SYMTestPriority Critical @SYMTestStatus Implemented @SYMTestActions Set valid parameters (see DrawBitmap-BasicL). Replace individual parameters with Invalid ones: Invalid source rectangles aSourceRect : negative source rectangle starting point or size TRect( TPoint( -30, -30), TSize(-10, -10) ) aSourceRect : source rectangle not compatible with bitmap TRect( TSize(aBitmap->SizeInPixel(). iWidth + 10, aBitmap->SizeInPixel(). IHeight + 10)) aSourceRect : swapped points in source rectangle TRect( TPoint( 100, 100 ) , TPoint( 0, 0 ) ) Invalid destination rectangle (aDestRect): negative size Invalid source bitmap zero size bitmap not initialized bitmap @SYMTestExpectedResults Function should detect invalid parameters and return. Nothing will be drawn on the target surface. */ void CTDrawBitmap::TestInvalidParametersL() { _LIT(KTestName, "DrawBitmap-InvalidParameters"); if(!iRunningOomTests) { INFO_PRINTF1(KTestName); } TestInvalidParametersBaseL(KTestName(), EDrawBitmap); } /** @SYMTestCaseID GRAPHICS-DIRECTGDI-DRAWBITMAP-0004 @SYMPREQ PREQ39 @SYMREQ REQ9199 REQ9204 REQ9195 REQ9201 REQ9202 REQ9222 REQ9223 REQ9236 REQ9237 @SYMTestCaseDesc Test regularity of bitmap scaling. @SYMTestPriority Critical @SYMTestStatus Implemented @SYMTestActions Test scaling implementation of DrawBitmap() methods : scaling down of a normal bitmap and scaling up of a bitmap fragment. @SYMTestExpectedResults Scaled bitmap should be drawn in a target area. Valid bitmap should be created. The bitmap should be properly scaled. This bitmap shall be compared to a reference bitmap. */ void CTDrawBitmap::TestScalingL() { _LIT(KTestName, "DrawBitmap-Scaling"); if(!iRunningOomTests) { INFO_PRINTF1(KTestName); } TInt width = iGdiTarget->SizeInPixels().iWidth; TInt height = iGdiTarget->SizeInPixels().iHeight; CFbsBitmap* bitmap1 = iCheckedBoardBitmap1; TInt bmp1Width = bitmap1->SizeInPixels().iWidth; TInt bmp1Height = bitmap1->SizeInPixels().iHeight; CFbsBitmap* bitmap2 = iCheckedBoardBitmap2; TInt bmp2Width = bitmap2->SizeInPixels().iWidth; TInt bmp2Height = bitmap2->SizeInPixels().iHeight; ResetGc(); // small bitmap - extrem magnification TReal32 scale = 1.0f; TReal32 scaleFactor = 1.55f; TInt posX = 1; for(TInt j=0; j<6; j++) { TSize size(static_cast<TInt>(bmp1Width*scale), static_cast<TInt>(bmp1Height*scale)); TPoint pos(posX, height/4-size.iHeight/2); iGc->DrawBitmap(TRect(pos, size), *bitmap1); posX += size.iWidth+2; scale *= scaleFactor; } // large bitmap - extreme minification scale /= scaleFactor; posX = 1; for(TInt j=5; j>=0; j--) { TSize size(static_cast<TInt>(bmp1Width*scale), static_cast<TInt>(bmp1Height*scale)); TPoint pos(posX, 3*height/4-size.iHeight/2); iGc->DrawBitmap(TRect(pos, size), *bitmap2); posX += size.iWidth+2; scale /= scaleFactor; } TESTNOERRORL(iGc->GetError()); TBuf<30> testName; testName.Append(KTestName); WriteTargetOutput(testName); } /** @SYMTestCaseID GRAPHICS-DIRECTGDI-DRAWBITMAP-0005 @SYMPREQ PREQ39 @SYMREQ REQ9199 REQ9204 REQ9195 REQ9201 REQ9202 REQ9222 REQ9223 REQ9236 REQ9237 @SYMTestCaseDesc Tests that a bitmap is still drawn successfully if it is deleted right after the call to DrawBitmap() but before Finish() is called. @SYMTestPriority Critical @SYMTestStatus Implemented @SYMTestActions For each method: 1. Call method with valid parameters (see DrawBitmap-Basic). 2. Right after returning from method call, destroy the source bitmap. 3. Call the method again with the same bitmap parameter. Repeat p. 1-3 a few times. @SYMTestExpectedResults Source bitmap should be copied into target area. Memory leaks should not be created. Valid bitmap should be created. This bitmap should be the same as a reference bitmap. */ void CTDrawBitmap::TestSourceBitmapCloningL() { _LIT(KTestName, "DrawBitmap-SourceBitmapCloning"); if(!iRunningOomTests) { INFO_PRINTF1(KTestName); } iTestParams.iDoCompressed = ETrue; TestSourceBitmapCloningBaseL(KTestName(), EDrawBitmap); iTestParams.iDoCompressed = EFalse; TestSourceBitmapCloningBaseL(KTestName(), EDrawBitmap); } /** @SYMTestCaseID GRAPHICS-DIRECTGDI-DRAWBITMAP-0006 @SYMPREQ PREQ39 @SYMREQ REQ9199 REQ9204 REQ9195 REQ9201 REQ9202 REQ9222 REQ9223 REQ9236 REQ9237 @SYMTestCaseDesc Test correctness of drawing bitmaps in all possible draw modes. @SYMTestPriority Critical @SYMTestStatus Implemented @SYMTestActions Set valid parameters (see DrawBitmap-Basic). Use the semi-transparent source bitmap (aBitmap). Set drawmode to EDrawModeWriteAlpha and call the methods. Set drawmode to EDrawModePEN and call the methods. Set drawmode to EDrawModeWriteAlpha and call the methods. @SYMTestExpectedResults The image drawn in the center of the test should be drawn blended (EDrawModePEN) and the images drawn at the left and right sides should be drawn opaque (EDrawModeWriteAlpha). should be copied into rendering target. Valid bitmap should be created. This bitmap should be the same as a reference bitmap. */ void CTDrawBitmap::TestDrawModeL() { _LIT(KTestName, "DrawBitmap-DrawMode"); if(!iRunningOomTests) { INFO_PRINTF1(KTestName); } ResetGc(); TSize bmpSize(iCheckedBoardWithAlphaBitmap->SizeInPixels()); TInt halfHeight = (bmpSize.iHeight >> 1); TInt quaterWidth = (bmpSize.iWidth >> 2); TInt y1 = halfHeight - (bmpSize.iHeight >> 2); TSize vertRectSize (quaterWidth, bmpSize.iHeight); TSize horizRectSize (bmpSize.iWidth, halfHeight); // Render column to left iGc->SetDrawMode(DirectGdi::EDrawModeWriteAlpha); iGc->DrawBitmap( TRect (TPoint(0, 0), vertRectSize), *iCheckedBoardWithAlphaBitmap); // Render row in center iGc->SetDrawMode(DirectGdi::EDrawModePEN); iGc->DrawBitmap( TRect(TPoint(0, y1), horizRectSize), *iCheckedBoardWithAlphaBitmap); // Render column to right iGc->SetDrawMode(DirectGdi::EDrawModeWriteAlpha); iGc->DrawBitmap( TRect (TPoint(bmpSize.iWidth - quaterWidth, 0), vertRectSize), *iCheckedBoardWithAlphaBitmap); TESTNOERRORL(iGc->GetError()); WriteTargetOutput(KTestName()); } /** @SYMTestCaseID GRAPHICS-DIRECTGDI-DRAWBITMAP-0007 @SYMPREQ PREQ39 @SYMREQ REQ9199 REQ9204 REQ9195 REQ9201 REQ9202 REQ9222 REQ9223 REQ9236 REQ9237 @SYMTestCaseDesc Test that a bitmap is drawn at the correct position when SetOrigin() is called before the bitmap is drawn. @SYMTestPriority Critical @SYMTestStatus Implemented @SYMTestActions Call SetOrigin(). Call DrawBitmap(). @SYMTestExpectedResults Source bitmap should be drawn at the correct position (TPoint(20,20)). Valid bitmap should be created. This bitmap shall be compared to a reference bitmap. */ void CTDrawBitmap::TestSetOriginL() { _LIT(KTestName, "DrawBitmap-SetOrigin"); // Only do test for one pixel format to cut down on the number of images produced // as this is just a positional test and we don't need to test for all pixel formats. if (!((iTestParams.iTargetPixelFormat == EUidPixelFormatRGB_565) && (iTestParams.iSourcePixelFormat == EUidPixelFormatRGB_565))) { return; } if(!iRunningOomTests) { INFO_PRINTF1(KTestName); } ResetGc(); CFbsBitmap* bitmap = iCheckedBoardBitmap2; iGc->SetOrigin(TPoint(-35, 80)); iGc->DrawBitmap(TRect(TPoint(55, -60), bitmap->SizeInPixels()), *bitmap, TRect(10, 10, 130, 130)); TESTNOERRORL(iGc->GetError()); WriteTargetOutput(KTestName()); }