--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/graphicsdeviceinterface/directgdi/test/textendedbitmap.cpp Tue Feb 02 01:47:50 2010 +0200
@@ -0,0 +1,195 @@
+// 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"
+#include <s32mem.h>
+
+const TUid KUidExampleExtendedBitmap = {0x10285A78};
+
+CTExtendedBitmap::CTExtendedBitmap()
+ {
+ SetTestStepName(KTDirectGdiExtendedBitmapStep);
+ }
+
+CTExtendedBitmap::~CTExtendedBitmap()
+ {
+ }
+
+/**
+@SYMTestCaseID
+ GRAPHICS-DIRECTGDI-EXTENDED-BITMAP-0001
+
+@SYMPREQ
+ PREQ2096
+
+@SYMREQ
+
+@SYMTestCaseDesc
+ Test all CDirectGdiContext APIs that take CFbsBitmap as a parameter correctly return or set
+ an error code when used with an extended bitmap.
+
+@SYMTestPriority
+ High
+
+@SYMTestStatus
+ Implemented
+
+@SYMTestActions
+ Create a CFbsBitmap using CFbsBitmap::CreateExtendedBitmap().
+ Call the following CDirectGdiContext APIs passing the extended bitmap as a parameter:
+ - SetBrushPattern()
+ - BitBlt()
+ - BitBltMasked() x 2
+ - DrawBitmap()
+ - DrawBitmapMasked()
+
+@SYMTestExpectedResults
+ Each API should return or set the error KErrNotSupported when called with an extended bitmap.
+*/
+void CTExtendedBitmap::TestErrorCodesL()
+ {
+ TBuf<KTestCaseLength> testCaseName;
+ _LIT(KTestName, "ExtendedBitmap-ErrorCodes: source format ");
+ if(!iRunningOomTests)
+ {
+ testCaseName.Append(KTestName);
+ testCaseName.Append(TDisplayModeMapping::ConvertPixelFormatToPixelFormatString(iTestParams.iSourcePixelFormat));
+ INFO_PRINTF1(testCaseName);
+ }
+
+ ResetGc();
+
+ const TSize sizeInPixels(32,32);
+ const TRect srcRect(TPoint(0,0),sizeInPixels);
+ const TRgb colors[] = {TRgb(0,255,255), TRgb(255,0,255), TRgb(255,255,0)};
+ TInt dataSize = sizeof(colors)+sizeof(TUint8); // estimate the size to be written
+ TUint8* data = new(ELeave) TUint8[dataSize];
+ CleanupStack::PushL(data);
+
+ RMemWriteStream ws;
+ ws.Open(data, dataSize);
+ CleanupClosePushL(ws);
+ ws << colors[0] << colors[1] << colors[2] << static_cast<TUint8>(1); // horizontal stripe
+ dataSize = ws.Sink()->TellL(MStreamBuf::EWrite).Offset(); // get the actual size written
+ CleanupStack::PopAndDestroy(1, &ws);
+
+ // Create an extended bitmap
+ CFbsBitmap* exBmp = new(ELeave) CFbsBitmap;
+ CleanupStack::PushL(exBmp);
+ TInt err = exBmp->CreateExtendedBitmap(sizeInPixels,
+ TDisplayModeMapping::MapPixelFormatToDisplayMode(iTestParams.iSourcePixelFormat),
+ KUidExampleExtendedBitmap,
+ data,
+ dataSize);
+ TESTNOERRORL(err);
+
+ // Create a normal bitmap to use when testing cases where the main bitmap being used is a normal
+ // bitmap and the mask is an extended bitmap
+ CFbsBitmap* nmlBmp = new(ELeave) CFbsBitmap;
+ CleanupStack::PushL(nmlBmp);
+ err = nmlBmp->Create(sizeInPixels, TDisplayModeMapping::MapPixelFormatToDisplayMode(iTestParams.iSourcePixelFormat));
+ TESTNOERRORL(err);
+
+ // Test that each of the CDirectGdiContext APIs that use CFbsBitmap return or set the
+ // error KErrNotSupported when used with the extended bitmap
+ // SetBrushPattern
+ iGc->SetBrushPattern(*exBmp);
+ TEST(iGc->GetError() == KErrNotSupported);
+
+ // BitBlt
+ iGc->BitBlt(TPoint(0,0), *exBmp);
+ TEST(iGc->GetError() == KErrNotSupported);
+ iGc->BitBlt(TPoint(0,0), *exBmp, srcRect);
+ TEST(iGc->GetError() == KErrNotSupported);
+
+ // BitBltMasked
+ iGc->BitBltMasked(TPoint(0,0), *exBmp, srcRect, *nmlBmp, EFalse);
+ TEST(iGc->GetError() == KErrNotSupported);
+ iGc->BitBltMasked(TPoint(0,0), *nmlBmp, srcRect, *exBmp, EFalse);
+ TEST(iGc->GetError() == KErrNotSupported);
+ iGc->BitBltMasked(TPoint(0,0), *exBmp, srcRect, *nmlBmp, TPoint(1,-1));
+ TEST(iGc->GetError() == KErrNotSupported);
+ iGc->BitBltMasked(TPoint(0,0), *nmlBmp, srcRect, *exBmp, TPoint(1,-1));
+ TEST(iGc->GetError() == KErrNotSupported);
+
+ // DrawBitmap
+ iGc->DrawBitmap(srcRect, *exBmp);
+ TEST(iGc->GetError() == KErrNotSupported);
+ iGc->DrawBitmap(srcRect, *exBmp, srcRect);
+ TEST(iGc->GetError() == KErrNotSupported);
+
+ // DrawBitmapMasked
+ iGc->DrawBitmapMasked(srcRect, *exBmp, srcRect, *nmlBmp, EFalse);
+ TEST(iGc->GetError() == KErrNotSupported);
+ iGc->DrawBitmapMasked(srcRect, *nmlBmp, srcRect, *exBmp, EFalse);
+ TEST(iGc->GetError() == KErrNotSupported);
+
+ CleanupStack::PopAndDestroy(3, data);
+ }
+
+/**
+Override of base class virtual
+@leave Gets system wide error code
+@return - TVerdict code
+*/
+TVerdict CTExtendedBitmap::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 CTExtendedBitmap::doTestStepL()
+ {
+ for(TInt targetPixelFormatIndex = iTargetPixelFormatArray.Count() - 1; targetPixelFormatIndex >= 0 ; targetPixelFormatIndex--)
+ {
+ iTestParams.iTargetPixelFormat = iTargetPixelFormatArray[targetPixelFormatIndex];
+ SetTargetL(iTestParams.iTargetPixelFormat);
+
+ // Test for each pixel format
+ for(TInt sourcePixelFormatIndex = iSourcePixelFormatArray.Count() - 1; sourcePixelFormatIndex >= 0 ; sourcePixelFormatIndex--)
+ {
+ iTestParams.iSourcePixelFormat = iSourcePixelFormatArray[sourcePixelFormatIndex];
+
+ RunTestsL();
+ RunOomTestsL();
+ }
+ }
+ CloseTMSGraphicsStep();
+ return TestStepResult();
+ }
+
+/**
+Override of base class pure virtual
+Lists the tests to be run
+*/
+void CTExtendedBitmap::RunTestsL()
+ {
+ // These tests should only be run when using DirectGdi as the error codes
+ // we are checking for are only returned by DirectGdi. Extended bitmaps are
+ // supported in BitGdi but not in DirectGdi.
+ if (iUseDirectGdi)
+ {
+ SetTestStepID(_L("GRAPHICS-DIRECTGDI-EXTENDED-BITMAP-0001"));
+ TestErrorCodesL();
+ RecordTestResultL();
+ }
+ }