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 "tbitbltmasked.h" CTBitBltMasked::CTBitBltMasked() { SetTestStepName(KTDirectGdiBitBltMaskedStep); } CTBitBltMasked::~CTBitBltMasked() { } /** Override of base class pure virtual Lists the tests to be run */ void CTBitBltMasked::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)); } BeginMaskIteration(); // to minimize tests call number these tests are processed only for one mask if(!iLargeTarget) { SetTestStepID(_L("GRAPHICS-DIRECTGDI-BITBLTMASKED-0003")); TestInvalidParametersL(); RecordTestResultL(); SetTestStepID(_L("GRAPHICS-DIRECTGDI-BITBLTMASKED-0004")); TestSourceBitmapCloningL(); RecordTestResultL(); SetTestStepID(_L("GRAPHICS-DIRECTGDI-BITBLTMASKED-0005")); TestMaskCloningL(); RecordTestResultL(); } do { if(!iLargeTarget) { iTestParams.iDoCompressed = ETrue; SetTestStepID(_L("GRAPHICS-DIRECTGDI-BITBLTMASKED-0001")); TestBasicL(); RecordTestResultL(); iTestParams.iDoCompressed = EFalse; SetTestStepID(_L("GRAPHICS-DIRECTGDI-BITBLTMASKED-0006")); TestDrawModeL(); RecordTestResultL(); SetTestStepID(_L("GRAPHICS-DIRECTGDI-BITBLTMASKED-0007")); TestWithSameBitmapsL(); RecordTestResultL(); SetTestStepID(_L("GRAPHICS-DIRECTGDI-BITBLTMASKED-0008")); TestSetOriginL(); RecordTestResultL(); } else { SetTestStepID(_L("GRAPHICS-DIRECTGDI-BITBLTMASKED-0002")); TestPositioningL(); RecordTestResultL(); } } while(NextMaskIteration()); if(iUseDirectGdi && !iUseSwDirectGdi) { CleanupStack::PopAndDestroy(iVgImageCache); } } /** @SYMTestCaseID GRAPHICS-DIRECTGDI-BITBLTMASKED-0001 @SYMPREQ PREQ39 @SYMREQ REQ9198 REQ9204 REQ9195 REQ9201 REQ9202 REQ9222 REQ9223 REQ9236 REQ9237 @SYMTestCaseDesc Bit blitting with masking basic functionality. @SYMTestPriority Critical @SYMTestStatus Implemented @SYMTestActions Test bit blitting with masking for basic and valid parameters. @SYMTestExpectedResults Source bitmap should be copied into target area. Basic or inverted masking should be considered. Valid bitmap should be created. This bitmap should be the same as a reference bitmap. */ void CTBitBltMasked::TestBasicL() { _LIT(KTestName, "BitBltMasked-Basic"); _LIT(KTestNameNegative, "BitBltMasked-Basic-NegativeMaskPosition"); if(!iRunningOomTests) { INFO_PRINTF1(KTestName); } ResetGc(); CFbsBitmap* bitmap; CFbsBitmap* mask; if(iTestParams.iDoCompressed) { bitmap = iCompressedBitmap; mask = iCompressedMaskL8; } else { bitmap = iCheckedBoardBitmap2; mask = iCurrentMask1; } TRect bmpRect(TPoint(0, 0), bitmap->SizeInPixels()); if(iMaskPixelFormat == EUidPixelFormatL_1) { iGc->BitBltMasked(TPoint(20, 20), *bitmap, bmpRect, *mask, iInvertMask); iGc->BitBltMasked(TPoint(20, 20), *bitmap, bmpRect, *mask, ETrue); } else { iGc->BitBltMasked(TPoint(20, 20), *bitmap, bmpRect, *mask, TPoint(0, 0)); } TESTNOERROR(iGc->GetError()); if(!iTestParams.iDoCompressed) WriteTargetOutput(KTestName()); // negative mask position iGc->BitBltMasked(TPoint(-35, 180), *bitmap, bmpRect, *iMask1L8, TPoint(-1, -1)); TESTNOERROR(iGc->GetError()); // mask position greater than mask size iGc->BitBltMasked(TPoint(-35, 200), *bitmap, bmpRect, *iMask1L8, iMask1L8->SizeInPixels().AsPoint()); CheckErrorsL(KErrNone, KErrArgument, (TText8*)__FILE__, __LINE__); if(!iTestParams.iDoCompressed) TESTNOERRORL(WriteTargetOutput(KTestNameNegative())); } /** @SYMTestCaseID GRAPHICS-DIRECTGDI-BITBLTMASKED-0002 @SYMPREQ PREQ39 @SYMREQ REQ9197 REQ9198 REQ9204 REQ9195 REQ9201 REQ9202 REQ9222 REQ9223 REQ9236 REQ9237 @SYMTestCaseDesc Various combinations of destination positions, source position and size of a bitmap are tested. Test also covers mask alignment, tiling and boundary parameters. @SYMTestPriority Critical @SYMTestStatus Implemented @SYMTestActions Covers the whole target bitmap starting from TPoint(-30,-30) with staggered blits of a small 8x8 bitmap. Test positioning functionality of BitBltMasked() methods. Test boundary conditions, tiling and clipping to surface area. @SYMTestExpectedResults */ void CTBitBltMasked::TestPositioningL() { _LIT(KTestName, "BitBltMasked-Positioning"); if(!iRunningOomTests) { INFO_PRINTF1(KTestName); } iTestParams.iDoCompressed = ETrue; TestPositioningBaseL(KTestName(), EBitBltMasked); iTestParams.iDoCompressed = EFalse; TestPositioningBaseL(KTestName(), EBitBltMasked); } /** @SYMTestCaseID GRAPHICS-DIRECTGDI-BITBLTMASKED-0003 @SYMPREQ PREQ39 @SYMREQ REQ9197 REQ9198 REQ9204 REQ9195 REQ9222 REQ9223 REQ9236 REQ9237 @SYMTestCaseDesc Calling BitBltMasked() method with invalid parameters @SYMTestPriority Critical @SYMTestStatus Implemented @SYMTestActions Invalid source rect: - TRect(-30, -30, -10, -10); - TRect(bmpWidth+10, bmpHeight+10, bmpWidth+20, bmpHeight+20); - TRect(bmpWidth, bmpHeight, 0, 0); - TRect(-10, -10, -30, -30); - TRect(0, 0, 0, 0); Invalid mask (aMaskBitmap): - zero size mask - not initialized mask Mask position greater than mask size: aMaskPt = TPoint(mask_width, mask_height) Invalid source bitmap: - zero size bitmap - not initialised bitmap @SYMTestExpectedResults Function should detect invalid parameters and return. Nothing should be drawn in a target area. */ void CTBitBltMasked::TestInvalidParametersL() { _LIT(KTestName, "BitBltMasked-InvalidParameters"); if(!iRunningOomTests) { INFO_PRINTF1(KTestName); } TestInvalidParametersBaseL(KTestName(), EBitBltMasked); } /** @SYMTestCaseID GRAPHICS-DIRECTGDI-BITBLTMASKED-0004 @SYMPREQ PREQ39 @SYMREQ REQ9197 REQ9204 REQ9195 REQ9201 REQ9202 REQ9222 REQ9223 REQ9236 REQ9237 @SYMTestCaseDesc Tests that masked bitmaps are drawn correctly if they are deleted immediately after BitBltMasked() is called, but before Finish() is called. @SYMTestPriority Critical @SYMTestStatus Implemented @SYMTestActions Set valid mask parameters (see BitBltMasked-Basic). For test description see BitBlt-SourceBitmapCloning. @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 CTBitBltMasked::TestSourceBitmapCloningL() { _LIT(KTestName, "BitBltMasked-SourceBitmapCloning"); if(!iRunningOomTests) { INFO_PRINTF1(KTestName); } iTestParams.iDoCompressed = ETrue; TestSourceBitmapCloningBaseL(KTestName(), EBitBltMasked); iTestParams.iDoCompressed = EFalse; TestSourceBitmapCloningBaseL(KTestName(), EBitBltMasked); } /** @SYMTestCaseID GRAPHICS-DIRECTGDI-BITBLTMASKED-0005 @SYMPREQ PREQ39 @SYMREQ REQ9197 REQ9204 REQ9195 REQ9201 REQ9202 REQ9222 REQ9223 REQ9236 REQ9237 @SYMTestCaseDesc Tests that masked bitmaps are drawn correctly if the mask is deleted immediately after BitBltMasked() is called, but before Finish() is called. @SYMTestPriority Critical @SYMTestStatus Implemented @SYMTestActions 1. Invoke the BitBltMasked() method with valid parameters (see BitBltMasked-Basic). 2. Right after returning from BitBltMasked() call, destroy the source mask (aMaskBitmap). 3. Call the BitBltMasked() method again with the same mask parameter. Repeat p. 1-3 a few times. @SYMTestExpectedResults Source bitmap should be copied into target area and should be correctly masked. Memory leaks should not be created. Valid bitmap should be created. This bitmap should be the same as a reference bitmap. */ void CTBitBltMasked::TestMaskCloningL() { _LIT(KTestName, "BitBltMasked-MaskCloning"); if(!iRunningOomTests) { INFO_PRINTF1(KTestName); } iTestParams.iDoCompressed = ETrue; TestMaskCloningBaseL(KTestName(), EBitBltMasked); iTestParams.iDoCompressed = EFalse; TestMaskCloningBaseL(KTestName(), EBitBltMasked); } /** @SYMTestCaseID GRAPHICS-DIRECTGDI-BITBLTMASKED-0006 @SYMPREQ PREQ39 @SYMREQ REQ9198 REQ9204 REQ9195 REQ9201 REQ9202 REQ9222 REQ9223 REQ9236 REQ9237 @SYMTestCaseDesc Test correctness of bit blitting with mask in all possible draw modes. @SYMTestPriority Critical @SYMTestStatus Implemented @SYMTestActions Set valid parameters (see BitBltMasked-Basic). Use the semi-transparent source bitmap (iCheckedBoardWithAlphaBitmap). Set drawmode to EDrawModePEN and call the methods. Set drawmode to EDrawModeWriteAlpha and call the methods. @SYMTestExpectedResults Semi-transparent (for EDrawModePEN) and opaque (for EDrawModeWriteAlpha) should be copied into rendering target. Valid bitmap should be created. This bitmap should be the same as a reference bitmap. */ void CTBitBltMasked::TestDrawModeL() { _LIT(KTestName, "BitBltMasked-DrawMode"); if(!iRunningOomTests) { INFO_PRINTF1(KTestName); } ResetGc(); TSize bmpSize(iCheckedBoardWithAlphaBitmap->SizeInPixels()); TInt halfHeight = (bmpSize.iHeight >> 1); TInt quarterWidth = (bmpSize.iWidth >> 2); TInt y1 = halfHeight - (bmpSize.iHeight >> 2); TSize vertRectSize (quarterWidth, bmpSize.iHeight); TSize horizRectSize (bmpSize.iWidth, halfHeight); // EDrawModeWriteAlpha is not supported in the following modes // This is tested under invalid parameter tests. if (!((iMaskPixelFormat == EUidPixelFormatL_8) && ((iTestParams.iSourcePixelFormat == EUidPixelFormatARGB_8888) || (iTestParams.iSourcePixelFormat == EUidPixelFormatARGB_8888_PRE)))) { // Render column to left iGc->SetDrawMode(DirectGdi::EDrawModeWriteAlpha); iGc->BitBltMasked( TPoint(0, 0), *iCheckedBoardWithAlphaBitmap, TRect(TPoint(0, 0), vertRectSize), *iCurrentMask2, TPoint(0, 0)); } // Render row in center iGc->SetDrawMode(DirectGdi::EDrawModePEN); iGc->BitBltMasked( TPoint(0, y1), *iCheckedBoardWithAlphaBitmap, TRect(TPoint(0, 0), horizRectSize), *iCurrentMask2, TPoint(0, 0)); // EDrawModeWriteAlpha is not supported in the following modes // This is tested under invalid parameter tests. if (!((iMaskPixelFormat == EUidPixelFormatL_8) && ((iTestParams.iSourcePixelFormat == EUidPixelFormatARGB_8888) || (iTestParams.iSourcePixelFormat == EUidPixelFormatARGB_8888_PRE)))) { // Render column to right iGc->SetDrawMode(DirectGdi::EDrawModeWriteAlpha); iGc->BitBltMasked( TPoint(bmpSize.iWidth - quarterWidth, 0), *iCheckedBoardWithAlphaBitmap, TRect(TPoint(0, 0), vertRectSize), *iCurrentMask2, TPoint(0, 0)); } TESTNOERRORL(iGc->GetError()); TESTNOERRORL(WriteTargetOutput(KTestName())); } /** @SYMTestCaseID GRAPHICS-DIRECTGDI-BITBLTMASKED-0007 @SYMPREQ PREQ39 @SYMREQ REQ9198 REQ9204 REQ9195 REQ9201 REQ9202 REQ9222 REQ9223 REQ9236 REQ9237 @SYMTestCaseDesc Test the basic functionality of bit blitting with masking. @SYMTestPriority Critical @SYMTestStatus Implemented @SYMTestActions Test bit blitting with masking for same source and mask bitmaps. @SYMTestExpectedResults Source bitmap should be copied into target area. Basic or inverted masking should be considered. Valid bitmap should be created. This bitmap should be the same as a reference bitmap. */ void CTBitBltMasked::TestWithSameBitmapsL() { _LIT(KTestName, "BitBltMasked-SameBitmaps"); ResetGc(); TRect bmpRect1(TPoint(0, 0), iBlackWhiteBitmap->SizeInPixels()); iGc->SetOrigin(TPoint(30, 30)); iGc->BitBltMasked(TPoint(0, 0), *iBlackWhiteBitmap, bmpRect1, *iBlackWhiteBitmap, ETrue); iGc->BitBltMasked(TPoint(0, 0), *iBlackWhiteBitmap, bmpRect1, *iBlackWhiteBitmap, EFalse); TESTNOERRORL(iGc->GetError()); //Write target only if image is not empty. BitGDI is producing white images when Mask pixel format is EUidPixelFormatL_8 TBool pass = TestTargetL(KRgbWhite); if(!pass) { TESTNOERRORL(WriteTargetOutput(KTestName())); } } /** @SYMTestCaseID GRAPHICS-DIRECTGDI-BITBLTMASKED-0008 @SYMPREQ PREQ39 @SYMREQ REQ9198 REQ9204 REQ9195 REQ9201 REQ9202 REQ9222 REQ9223 REQ9236 REQ9237 @SYMTestCaseDesc Test that BitBltMasked() performs correctly when it is called after SetOrigin(). @SYMTestPriority Critical @SYMTestStatus Implemented @SYMTestActions Call SetOrigin(). Call BitBltMasked(). @SYMTestExpectedResults Source bitmap should be copied into target area. Basic or inverted masking should be considered. Valid bitmap should be created. This bitmap should be the same as a reference bitmap. */ void CTBitBltMasked::TestSetOriginL() { _LIT(KTestName, "BitBltMasked-SetOrigin"); _LIT(KTestNameNegative, "BitBltMasked-SetOrigin-NegativeMaskPosition"); // 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; CFbsBitmap* mask = iCurrentMask1; TRect bmpRect(TPoint(0, 0), bitmap->SizeInPixels()); iGc->SetOrigin(TPoint(-35, 80)); if(iMaskPixelFormat == EUidPixelFormatL_1) { iGc->BitBltMasked(TPoint(55, -60), *bitmap, bmpRect, *mask, iInvertMask); iGc->BitBltMasked(TPoint(55, -60), *bitmap, bmpRect, *mask, ETrue); } else { iGc->BitBltMasked(TPoint(55, -60), *bitmap, bmpRect, *mask, TPoint(0, 0)); } TESTNOERROR(iGc->GetError()); TESTNOERRORL(WriteTargetOutput(KTestName())); // negative mask position iGc->BitBltMasked(TPoint(0, 100), *bitmap, bmpRect, *iMask1L8, TPoint(-1, -1)); TESTNOERROR(iGc->GetError()); // mask position greater than mask size iGc->BitBltMasked(TPoint(0, 120), *bitmap, bmpRect, *iMask1L8, iMask1L8->SizeInPixels().AsPoint()); CheckErrorsL(KErrNone, KErrArgument, (TText8*)__FILE__, __LINE__); TESTNOERRORL(WriteTargetOutput(KTestNameNegative())); }