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 "tclipping.h" CTClipping::CTClipping() { SetTestStepName(KTDirectGdiClippingStep); } CTClipping::~CTClipping() { } /** @SYMTestCaseID GRAPHICS-DIRECTGDI-CLIPPING-0001 @SYMPREQ PREQ39 @SYMREQ REQ9195 REQ9201 REQ9202 REQ9222 REQ9223 REQ9236 REQ9237 @SYMTestCaseDesc Tests setting clipping regions. @SYMTestPriority High @SYMTestStatus Implemented @SYMTestActions Set the clipping region consisting of a number of rectangles. Blit a bitmap. Reset the clipping region. @SYMTestExpectedResults Bitmap should be drawn only within the clipped regions successfully. */ void CTClipping::TestClippingBasicL() { _LIT(KTestName, "Clipping-Basic"); if(!iRunningOomTests) { INFO_PRINTF1(KTestName); } CFbsBitmap* bitmap = CreateCheckedBoardBitmapL(iTestParams.iTargetPixelFormat, TSize(150,150)); TESTL(bitmap != NULL); RRegion clippingRegion(8); clippingRegion.AddRect(TRect(10,10,40,40)); // normal square clipping rect clippingRegion.AddRect(TRect(60,70,67,132)); // normal rectangular clipping rect clippingRegion.AddRect(TRect(50,75,110,85)); // clipping rect crosses another clipping rect clippingRegion.AddRect(TRect(125,125,125,125)); // clipping rect with zero size clippingRegion.AddRect(TRect(50,30,45,25)); // clipping rect with negative size ResetGc(); iGc->SetClippingRegion(clippingRegion); TESTNOERROR(iGc->GetError()); iGc->BitBlt(TPoint(0, 0), *bitmap); TESTNOERROR(iGc->GetError()); iGc->ResetClippingRegion(); TESTNOERROR(iGc->GetError()); clippingRegion.Close(); delete bitmap; if (iUseDirectGdi && !iUseSwDirectGdi) { iVgImageCache->ResetCache(); } TESTNOERROR(WriteTargetOutput(iTestParams, TPtrC(KTestName))); } /** @SYMTestCaseID GRAPHICS-DIRECTGDI-CLIPPING-0002 @SYMPREQ PREQ39 @SYMREQ REQ9195 REQ9201 REQ9202 REQ9222 REQ9223 REQ9236 REQ9237 @SYMTestCaseDesc Tests the argument checking within SetClippingRegion(TRegion&). @SYMTestPriority High @SYMTestStatus Implemented @SYMTestActions 1. Test a region that is outside the bounds of the target. 2. Test a region which is partially outside the bounds of the target. 3. Test using a region which has its error flag set. @SYMTestExpectedResults Test should return KErrArgument. */ void CTClipping::TestClippingErrors() { _LIT(KTestName, "Clipping-Errors"); if(!iRunningOomTests) { INFO_PRINTF1(KTestName); } RRegion outOfBoundsRegion(TRect(200,200,220,220)); // clipping rect wholly outside target area RRegion partOutOfBoundsRegion(TRect(80,-10,100,25)); // clipping rect partially outside target area TRegionFix<1> regionWithError(TRect(50,75,110,85)); //add more rects than region can hold to set error flag regionWithError.AddRect(TRect(0,0,5,5)); ResetGc(); // Test whether setting clipping region returns error when passed invalid clipping regions // 1: Pass region wholly outside of target. iGc->SetClippingRegion(outOfBoundsRegion); TEST(KErrArgument == iGc->GetError()); iGc->ResetClippingRegion(); TESTNOERROR(iGc->GetError()); // 2: Pass region partially outside of target. iGc->SetClippingRegion(partOutOfBoundsRegion); TEST(KErrArgument == iGc->GetError()); iGc->ResetClippingRegion(); TESTNOERROR(iGc->GetError()); // 3: Pass region with error flag set. iGc->SetClippingRegion(regionWithError); TEST(KErrArgument == iGc->GetError()); iGc->ResetClippingRegion(); TESTNOERROR(iGc->GetError()); outOfBoundsRegion.Close(); partOutOfBoundsRegion.Close(); } /** @SYMTestCaseID GRAPHICS-DIRECTGDI-CLIPPING-0003 @SYMPREQ PREQ39 @SYMREQ REQ9195 REQ9201 REQ9202 REQ9222 REQ9223 REQ9236 REQ9237 @SYMTestCaseDesc Tests using clipping regions while using various APIs to draw images, using a non-zero origin. @SYMTestPriority High @SYMTestStatus Implemented @SYMTestActions Create a bitmap. Set a clipping region rectangle (50,50) from the top-left of the target. Set the origin to 50,50. Draw an image using BitBlt() at (0,0). Reset the clipping. Set a clipping region rectangle (150,50) from the top-left of the target. Set the origin to 150,50. Draw an image using DrawBitmap() at (0,0). Reset the clipping. Set a clipping region rectangle (50,150) from the top-left of the target. Set the origin to 50,150. Draw an image using BitBltMasked() at (0,0). Reset the clipping. Set a clipping region rectangle (150,150) from the top-left of the target. Set the origin to 150,150. Draw an image using DrawBitmapMasked() at (0,0). @SYMTestExpectedResults The first bitmap should be drawn, 50,50 from the top-left of the target. The second bitmap should be drawn, 100,50 from the top-left of the target. The third bitmap should be drawn, 50,100 from the top-left of the target. The fourth bitmap should be drawn, 100,100 from the top-left of the target. None of them should be clipped because although it is always being drawn at (0,0), the drawing and the clipping should take into account the Origin offset. */ void CTClipping::TestClippingWithOriginL() { _LIT(KTestName, "Clipping-WithOrigin"); if(!iRunningOomTests) { INFO_PRINTF1(KTestName); } ResetGc(); const TSize bitmapSrcSize = TSize(40,40); CFbsBitmap* bitmap = CreateCheckedBoardBitmapL(iTestParams.iTargetPixelFormat, bitmapSrcSize); CleanupStack::PushL(bitmap); CFbsBitmap* mask = CreateBlackWhiteBitmapL(iTestParams.iTargetPixelFormat, bitmapSrcSize, TSize(2,2)); CleanupStack::PushL(mask); // Test with BitBlt(). iGc->SetOrigin(TPoint(50,50)); RRegion clippingRegion(1); clippingRegion.AddRect(TRect(TPoint(50,50), TSize(50,50))); iGc->SetClippingRegion(clippingRegion); iGc->BitBlt(TPoint(0,0), *bitmap); iGc->ResetClippingRegion(); clippingRegion.Close(); TESTNOERROR(iGc->GetError()); // Test with DrawBitmap() with scaling. iGc->SetOrigin(TPoint(150, 50)); clippingRegion.AddRect(TRect(TPoint(150,50), TSize(50,50))); iGc->SetClippingRegion(clippingRegion); iGc->DrawBitmap(TRect(TPoint(0,0), TSize(50,50)), *bitmap, TRect(TPoint(0,0), bitmapSrcSize)); iGc->ResetClippingRegion(); clippingRegion.Close(); TESTNOERROR(iGc->GetError()); // Test with BitBltMasked(). iGc->SetOrigin(TPoint(50, 150)); clippingRegion.AddRect(TRect(TPoint(50,150), TSize(50,50))); iGc->SetClippingRegion(clippingRegion); iGc->BitBltMasked(TPoint(0,0), *bitmap, TRect(TPoint(0,0), bitmapSrcSize), *mask, EFalse); iGc->ResetClippingRegion(); clippingRegion.Close(); TESTNOERROR(iGc->GetError()); // Test with DrawBitmapMasked(). iGc->SetOrigin(TPoint(150, 150)); clippingRegion.AddRect(TRect(TPoint(150,150), TSize(50,50))); iGc->SetClippingRegion(clippingRegion); iGc->DrawBitmapMasked(TRect(TPoint(0,0), TSize(50,50)), *bitmap, TRect(TPoint(0,0), bitmapSrcSize), *mask, EFalse); iGc->ResetClippingRegion(); clippingRegion.Close(); TESTNOERROR(iGc->GetError()); CleanupStack::PopAndDestroy(2, bitmap); TESTNOERROR(WriteTargetOutput(iTestParams, TPtrC(KTestName))); } /** Override of base class virtual @leave Gets system wide error code @return - TVerdict code */ TVerdict CTClipping::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 CTClipping::doTestStepL() { // Test for each pixel format for(TInt targetPixelFormatIndex = iTargetPixelFormatArray.Count() - 1; targetPixelFormatIndex >= 0 ; targetPixelFormatIndex--) { iTestParams.iTargetPixelFormat = iTargetPixelFormatArray[targetPixelFormatIndex]; SetTargetL(iTestParams.iTargetPixelFormat); RunTestsL(); // only run OOM tests for one target pixel format to prevent duplication of tests if (targetPixelFormatIndex == 0) { RunOomTestsL(); //from base class } } CloseTMSGraphicsStep(); return TestStepResult(); } /** Override of base class pure virtual Lists the tests to be run */ void CTClipping::RunTestsL() { if(iUseDirectGdi && !iUseSwDirectGdi) { // At least one clipping test uses BitBlt() or DrawBitmap(). // 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)); } SetTestStepID(_L("GRAPHICS-DIRECTGDI-CLIPPING-0001")); TestClippingBasicL(); RecordTestResultL(); SetTestStepID(_L("GRAPHICS-DIRECTGDI-CLIPPING-0002")); TestClippingErrors(); RecordTestResultL(); SetTestStepID(_L("GRAPHICS-DIRECTGDI-CLIPPING-0003")); TestClippingWithOriginL(); RecordTestResultL(); if(iUseDirectGdi && !iUseSwDirectGdi) { CleanupStack::PopAndDestroy(iVgImageCache); } }