graphicsdeviceinterface/directgdi/test/tpanictests.cpp
changeset 0 5d03bc08d59c
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/graphicsdeviceinterface/directgdi/test/tpanictests.cpp	Tue Feb 02 01:47:50 2010 +0200
@@ -0,0 +1,649 @@
+// 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 "tpanictests.h"
+#include <graphics/directgdicontext.h>
+#include <graphics/directgdiimagetarget.h>
+
+_LIT(KPanicCategory, "DGDI");
+
+CTPanicTests::CTPanicTests()
+	{
+	SetTestStepName(KTDirectGdiPanicTestsStep);
+	}
+
+CTPanicTests::~CTPanicTests()
+	{
+	}
+
+/**
+@SYMTestCaseID		
+	GRAPHICS-DIRECTGDI-PANIC-0001
+
+@SYMTestPriority
+	Medium
+
+@SYMPREQ
+	PREQ39
+
+@SYMREQ
+	REQ9195
+	REQ9201 
+	REQ9202 
+	REQ9222 
+	REQ9223 
+	REQ9236 
+	REQ9237
+
+@SYMTestCaseDesc
+	Tests if DirectGDI methods panic when called on a inactivated context.
+
+@SYMTestActions		
+	Construct CDirectGdiDriver.
+	Construct CDirectGdiContext.
+	Construct RSgImage.
+	Construct MDirectGdiImageTarget. 
+	Create MDirectGdiImageTarget, using RSgImage.
+
+	Do not Activate CDirectGdiContext.
+	Call any API on the context.
+
+	Destroy RSgImage.
+	Destroy MDirectGdiImageTarget.
+	Destroy CDirectGdiContext.
+	Close CDirectGdiDriver.
+
+@SYMTestExpectedResults
+	It should panic with panic code DGDI 7, EDirectGdiPanicContextNotActivated
+	
+@SYMTestStatus
+	Implemented
+*/
+void CTPanicTests::TestContextNotActivatedL()
+	{
+	if (iUseDirectGdi)
+		{
+		TInt result = CDirectGdiDriver::Open();
+		TESTNOERRORL(result);
+		
+		CDirectGdiDriver* dgdiDriver = CDirectGdiDriver::Static();		
+		TEST(dgdiDriver != NULL);
+		CleanupClosePushL(*dgdiDriver);
+		
+		CDirectGdiContext* gc = CDirectGdiContext::NewL(*dgdiDriver);		
+	
+		RSgImage* rsgImage1 = new RSgImage();
+		TESTL(rsgImage1 != NULL);
+		
+		// Set the bitmap up...
+		TSgImageInfo imageInfo;
+		imageInfo.iSizeInPixels = TSize (320, 240);
+		imageInfo.iPixelFormat = iTestParams.iTargetPixelFormat;
+
+		imageInfo.iUsage = ESgUsageDirectGdiTarget;
+		result = rsgImage1->Create(imageInfo, NULL,0);
+		TESTNOERRORL(result);
+		
+		RDirectGdiImageTarget* dgdiImageTarget1 = new RDirectGdiImageTarget(*dgdiDriver);
+		TESTL(dgdiImageTarget1 != NULL);
+		result = dgdiImageTarget1->Create(*rsgImage1);
+		TESTNOERRORL(result);
+		
+		TRect rect(10, 15, 100, 100);
+		gc->DrawEllipse(rect);
+		
+		dgdiImageTarget1->Close();	
+		delete(dgdiImageTarget1);
+		rsgImage1->Close();
+		delete(rsgImage1);
+		delete(gc);
+		CleanupStack::PopAndDestroy(1);
+		}
+	else //BitGDI
+		User::Panic(KPanicCategory, 7);
+	}
+
+/**
+@SYMTestCaseID	
+	GRAPHICS-DIRECTGDI-PANIC-0002
+
+@SYMTestPriority
+	Medium
+
+@SYMPREQ
+	PREQ39
+
+@SYMREQ
+	REQ9195
+	REQ9201 
+	REQ9202 
+	REQ9222 
+	REQ9223 
+	REQ9236 
+	REQ9237
+
+@SYMTestCaseDesc
+	Testing if a panic is raised during text drawing functions usage without valid font set.
+
+@SYMTestActions
+	Context is created and activated.
+
+	Set font in context.
+	Call any DrawText() API on the context.
+
+	Reset font in context.
+	Call any DrawText() API on the context.
+
+@SYMTestExpectedResults
+	It should panic with panic code DGDI 11, EDirectGdiPanicNoFontSelected.
+
+@SYMTestStatus
+	Implemented
+*/
+
+void CTPanicTests::TestFontNotSetL()
+	{
+	if(iUseDirectGdi)
+		{
+		_LIT(KText, "test");
+
+		ResetGc();
+
+		CFont* font = GetFont();
+		TESTL(font != NULL);
+
+		iGc->SetPenColor(TRgb(0, 0, 0));
+
+		iGc->SetFont(font);
+		iGc->DrawText(KText, NULL, TPoint(10, 30));
+	
+		iGc->ResetFont();
+		iGc->DrawText(KText, NULL, TPoint(10, 50));
+	
+		ReleaseFont(font);
+		}
+	else //BitGDI
+		User::Panic( KPanicCategory, 11);
+	}
+
+/**
+@SYMTestCaseID		
+	GRAPHICS-DIRECTGDI-PANIC-0003
+
+@SYMTestPriority
+	Medium
+
+@SYMPREQ
+	PREQ39
+
+@SYMREQ
+	REQ9195
+	REQ9201 
+	REQ9202 
+	REQ9222 
+	REQ9223 
+	REQ9236 
+	REQ9237
+
+@SYMTestCaseDesc
+	Tests the negative conditions that can only be reached by creating RSgImage with an invalid pixel type, to
+	improve the code coverage.
+	
+@SYMTestActions		
+	Construct CDirectGdiDriver.
+	Construct CDirectGdiContext.
+
+	Construct RSgImage with unsupported pixel type and do not check for the return error code.
+	Construct MDirectGdiImageTarget.
+	Create MDirectGdiImageTarget, using RSgImage, ignoring the return error code.
+
+	Activate CDirectGdiContext using MDirectGdiImageTarget.
+   
+	Destroy RSgImage.
+	Destroy MDirectGdiImageTarget.
+
+	Destroy CDirectGdiContext.
+	Close CDirectGdiDriver.
+
+@SYMTestExpectedResults
+	It should panic with panic code DGDI 21, EDirectGdiImageTargetInfoError
+	
+@SYMTestStatus
+	Implemented
+*/
+void CTPanicTests::TestInvalidTargetL()
+	{	
+	if(iUseDirectGdi)
+		{
+		TInt err = CDirectGdiDriver::Open();
+		TESTNOERROR(err);
+		
+		CDirectGdiDriver* dgdiDriver = CDirectGdiDriver::Static();	
+		TESTL(dgdiDriver != NULL);
+		CleanupClosePushL(*dgdiDriver);
+		
+		CDirectGdiContext* gc = CDirectGdiContext::NewL(*dgdiDriver);
+		RSgImage rsgImage;
+			
+		// Set the bitmap up...
+		TSgImageInfo imageInfo;
+		imageInfo.iSizeInPixels = TSize (320, 240);
+		imageInfo.iPixelFormat = EUidPixelFormatA_8;
+		imageInfo.iUsage = ESgUsageDirectGdiTarget;
+		rsgImage.Create(imageInfo, NULL,0);
+		
+		RDirectGdiImageTarget dgdiImageTarget(*dgdiDriver);
+		dgdiImageTarget.Create(rsgImage);	
+		gc->Activate (dgdiImageTarget);
+			
+		rsgImage.Close();
+		dgdiImageTarget.Close();	
+		delete gc;
+		CleanupStack::PopAndDestroy(1);
+		}
+	else //BitGDI
+		User::Panic( KPanicCategory, 21);
+	}
+
+/**
+@SYMTestCaseID		
+	GRAPHICS-DIRECTGDI-PANIC-0004
+
+@SYMTestPriority
+	Medium
+
+@SYMPREQ
+	PREQ39
+
+@SYMREQ
+	REQ9195
+	REQ9201 
+	REQ9202 
+	REQ9222 
+	REQ9223 
+	REQ9236 
+	REQ9237
+
+@SYMTestCaseDesc
+	Test that the adapter panics when an attempt is made to activate a target with an invalid handle.
+
+@SYMTestActions		
+	Create an RSgImage.
+	Make it a target for the driver.
+	Change the target's handle so it has an erroneous handle.
+	Attempt to activate the target.
+	(This test only works in _DEBUG mode as the handle check only happens in _DEBUG mode)
+
+@SYMTestExpectedResults
+	The test should panic when the target is activated DGDIAdapter 32, EDirectGdiPanicResourceHandleNotFound.
+  
+@SYMTestStatus
+	Implemented
+*/
+void CTPanicTests::TestImageInvalidTargetHandleL()
+	{
+#ifdef _DEBUG
+	TInt err = CDirectGdiDriver::Open();
+	TESTNOERROR(err);
+	
+	CDirectGdiDriver* dgdiDriver = CDirectGdiDriver::Static();	
+	TESTL(dgdiDriver != NULL);
+	CleanupClosePushL(*dgdiDriver);
+	
+	CDirectGdiContext* gc = CDirectGdiContext::NewL(*dgdiDriver);
+	RSgImage rsgImage;
+		
+	// Set the bitmap up...
+	TSgImageInfo imageInfo;
+	imageInfo.iSizeInPixels = TSize (320, 240);
+	imageInfo.iPixelFormat = iTestParams.iTargetPixelFormat;
+	imageInfo.iUsage = ESgUsageDirectGdiTarget;
+	rsgImage.Create(imageInfo, NULL,0);
+	
+	RDirectGdiImageTarget dgdiImageTarget(*dgdiDriver);
+	dgdiImageTarget.Create(rsgImage);	
+	
+	// Set the target's handle to a non-null invalid handle.
+	dgdiImageTarget.iHandle = 0x12345678;
+	
+	// Activate should panic (DGDIAdapter EDirectGdiTargetHandleNotFound 32)
+	gc->Activate (dgdiImageTarget);
+		
+	rsgImage.Close();
+	dgdiImageTarget.Close();	
+	delete gc;
+	CleanupStack::PopAndDestroy(1);
+#else
+	User::Panic(KPanicCategory, 32);
+#endif
+	}
+
+/**
+@SYMTestCaseID		
+	GRAPHICS-DIRECTGDI-PANIC-0005
+
+@SYMTestPriority
+	Medium
+
+@SYMPREQ
+	PREQ39
+
+@SYMTestCaseDesc
+	Tests the negative conditions that the same RDirectGdiImageTarget object
+	is created twice.
+	
+@SYMTestActions		
+	Construct CDirectGdiDriver.
+	Construct RDirectGdiImageTarget twice.
+  
+@SYMTestExpectedResults
+	It should panic with panic code DGDIAdapter 17, EDirectGdiImageTargetAlreadyExists
+	
+@SYMTestStatus
+	Implemented
+*/
+void CTPanicTests::TestImageTargetActivatedTwiceL()
+	{
+	if(iUseDirectGdi)
+		{
+		TInt err = CDirectGdiDriver::Open();
+		TESTNOERRORL(err);			
+		CDirectGdiDriver* dgdiDriver = CDirectGdiDriver::Static();
+		TESTL(dgdiDriver != NULL);	
+		CleanupClosePushL(*dgdiDriver);	
+		
+		TSgImageInfo info2;
+		info2.iSizeInPixels = TSize(8, 8);
+		info2.iUsage = ESgUsageDirectGdiTarget;
+		info2.iPixelFormat = EUidPixelFormatRGB_565;
+		info2.iCpuAccess = ESgCpuAccessNone;
+		info2.iShareable = ETrue;
+		RSgImage image2;
+		User::LeaveIfError(image2.Create(info2, NULL, 0));
+		CleanupClosePushL(image2);
+		
+		RDirectGdiImageTarget dgdiImageTarget(*dgdiDriver);
+		TESTNOERRORL(dgdiImageTarget.Create(image2));
+		CleanupClosePushL(dgdiImageTarget);
+		dgdiImageTarget.Create(image2); //should panic here
+		CleanupClosePushL(dgdiImageTarget);
+		
+		CleanupStack::PopAndDestroy(4, dgdiDriver);	
+		}
+	else //BitGDI
+		{
+		User::Panic( KPanicCategory, 17);
+		}
+	}
+
+/**
+@SYMTestCaseID		
+	GRAPHICS-DIRECTGDI-PANIC-0006
+
+@SYMTestPriority
+	Medium
+
+@SYMPREQ
+	PREQ39
+
+@SYMTestCaseDesc
+	Tests the negative conditions that the same RDirectGdiDrawableSource object
+	is created twice.
+	
+@SYMTestActions		
+	Construct CDirectGdiDriver.
+	Construct RDirectGdiDrawableSource twice.
+  
+@SYMTestExpectedResults
+	It should panic with panic code DGDI 18, EDirectGdiImageSourceAlreadyExists
+	
+@SYMTestStatus
+	Implemented
+*/
+void CTPanicTests::TestImageSourceActivatedTwiceL()
+	{
+	if(iUseDirectGdi)
+		{
+		TInt err = CDirectGdiDriver::Open();
+		TESTNOERRORL(err);			
+		CDirectGdiDriver* dgdiDriver = CDirectGdiDriver::Static();
+		TESTL(dgdiDriver != NULL);	
+		CleanupClosePushL(*dgdiDriver);	
+		
+		TSgImageInfo info1;
+		info1.iSizeInPixels = TSize(8, 8);
+		info1.iUsage = ESgUsageDirectGdiSource;
+		info1.iPixelFormat = EUidPixelFormatRGB_565;
+		info1.iCpuAccess = ESgCpuAccessReadWrite;
+		info1.iShareable = ETrue;	
+		RSgImage image1;
+		User::LeaveIfError(image1.Create(info1, NULL, 0));
+		CleanupClosePushL(image1);
+		
+		RDirectGdiDrawableSource dgdiImageSource(*dgdiDriver);
+		TESTNOERRORL(dgdiImageSource.Create(image1));
+		CleanupClosePushL(dgdiImageSource);
+		dgdiImageSource.Create(image1); //should panic here
+		CleanupClosePushL(dgdiImageSource);
+		
+		CleanupStack::PopAndDestroy(4, dgdiDriver);
+		}
+	else //BitGDI
+		{
+		User::Panic( KPanicCategory, 18);
+		}
+	}
+
+/**
+@SYMTestCaseID		
+	GRAPHICS-DIRECTGDI-PANIC-0007
+
+@SYMTestPriority
+	Medium
+
+@SYMPREQ
+	PREQ39
+
+@SYMREQ
+	REQ9195
+	REQ9201 
+	REQ9202 
+	REQ9222 
+	REQ9223 
+	REQ9236 
+	REQ9237
+
+@SYMTestCaseDesc
+	Tests the negative conditions that the same RDirectGdiDrawableSource object
+	is created twice.
+	
+@SYMTestActions		
+	Construct CDirectGdiDriver.
+	Construct RDirectGdiDrawableSource twice.
+  
+@SYMTestExpectedResults
+	It should panic with panic code DGDIAdapter 19, EDirectGdiDrawableSourceAlreadyExists
+	
+@SYMTestStatus
+	Implemented
+*/
+void CTPanicTests::TestDrawableSourceActivatedTwiceL()
+	{
+	if(iUseDirectGdi)
+		{
+		TInt err = CDirectGdiDriver::Open();
+		TESTNOERRORL(err);			
+		CDirectGdiDriver* dgdiDriver = CDirectGdiDriver::Static();
+		TESTL(dgdiDriver != NULL);	
+		CleanupClosePushL(*dgdiDriver);	
+		
+		TSgImageInfo info1;
+		info1.iSizeInPixels = TSize(8, 8);
+		info1.iUsage = ESgUsageDirectGdiSource;
+		info1.iPixelFormat = EUidPixelFormatARGB_8888_PRE;
+		info1.iCpuAccess = ESgCpuAccessReadWrite;
+		info1.iShareable = ETrue;	
+		RSgImage image1;
+		TESTNOERRORL(image1.Create(info1, NULL, 0));
+		CleanupClosePushL(image1);
+		
+		RDirectGdiDrawableSource dgdiDrawableSource(*dgdiDriver);
+		TESTNOERRORL(dgdiDrawableSource.Create(image1));
+		CleanupClosePushL(dgdiDrawableSource);
+		dgdiDrawableSource.Create(image1); //should panic here
+		CleanupClosePushL(dgdiDrawableSource);
+		
+		CleanupStack::PopAndDestroy(4, dgdiDriver);
+		}
+	else //BitGDI
+		{
+		User::Panic( KPanicCategory, 19);
+		}
+	}
+
+/**
+@SYMTestCaseID		
+	GRAPHICS-DIRECTGDI-PANIC-0008
+	
+@SYMTestPriority
+	Medium
+
+@SYMPREQ
+	PREQ39
+
+@SYMREQ
+	REQ9195
+	REQ9201 
+	REQ9202 
+	REQ9222 
+	REQ9223 
+	REQ9236 
+	REQ9237
+
+@SYMTestCaseDesc
+	Make sure a panic occurs when calling SetBrushStyle() with EPatternedBrush when no brush pattern has been set.
+	
+@SYMTestActions		
+ 	Set brush style to EPatternedBrush.
+  
+@SYMTestExpectedResults
+	It should panic with panic code DGDI 9, EDirectGdiBrushPatternNotSet.
+	
+@SYMTestStatus
+	Implemented
+*/
+void CTPanicTests::TestBrushPatternNotSetL()
+	{
+	if(iUseDirectGdi)
+		{
+		ResetGc();
+		iGc->SetBrushStyle(DirectGdi::EPatternedBrush);		
+		}
+	else //BitGDI
+		User::Panic( KPanicCategory, 9);
+	}
+
+/**
+Override of base class virtual
+@leave Gets system wide error code
+@return - TVerdict code
+*/
+TVerdict CTPanicTests::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 CTPanicTests::doTestStepL()
+	{	
+	// Test for each pixel format
+	for(TInt targetPixelFormatIndex = iTargetPixelFormatArray.Count() - 1; targetPixelFormatIndex >= 0 ; targetPixelFormatIndex--)
+		{
+		iTestParams.iTargetPixelFormat = iTargetPixelFormatArray[targetPixelFormatIndex];
+		SetTargetL(iTestParams.iTargetPixelFormat);
+		RunTestsL();
+		RunOomTestsL();
+		}
+
+	return TestStepResult();
+	}
+
+/**
+Override of base class pure virtual
+Lists the tests to be run
+*/
+void CTPanicTests::RunTestsL()
+	{
+	INFO_PRINTF1(_L("DirectGdi Panic Tests" ));
+	TInt aCurTestCase;
+	//Read the case number from the ini file
+	TBool res = GetIntFromConfig(ConfigSection(), KCaseNumber, aCurTestCase);		
+	if(!res)
+		{
+		return ;
+		}			
+	SetTestStepID(KUnknownSYMTestCaseIDName);
+	switch(aCurTestCase)
+		{			
+		case 1:
+			INFO_PRINTF1(_L("TestContextNotActivatedL\n"));
+			SetTestStepID(_L("GRAPHICS-DIRECTGDI-PANIC-0001"));
+			TestContextNotActivatedL();
+			break;
+		case 2:
+			INFO_PRINTF1(_L("TestFontNotSetL\r\n"));
+			SetTestStepID(_L("GRAPHICS-DIRECTGDI-PANIC-0002"));
+			TestFontNotSetL();
+			break;
+		case 3:
+			INFO_PRINTF1(_L("TestInvalidTargetL\r\n"));
+			SetTestStepID(_L("GRAPHICS-DIRECTGDI-PANIC-0003"));
+			TestInvalidTargetL();
+			break;
+		case 4:
+			INFO_PRINTF1(_L("TestImageInvalidTargetHandleL\r\n"));
+			SetTestStepID(_L("GRAPHICS-DIRECTGDI-PANIC-0004"));
+			TestImageInvalidTargetHandleL();
+			break;
+		case 5:
+			INFO_PRINTF1(_L("TestImageTargetActivatedTwiceL\r\n"));
+			SetTestStepID(_L("GRAPHICS-DIRECTGDI-PANIC-0005"));
+			TestImageTargetActivatedTwiceL();
+			break;	
+		case 6:
+			INFO_PRINTF1(_L("TestImageSourceActivatedTwiceL\r\n"));
+			SetTestStepID(_L("GRAPHICS-DIRECTGDI-PANIC-0006"));
+			TestImageSourceActivatedTwiceL();
+			break;
+		case 7:
+			INFO_PRINTF1(_L("TestDrawableSourceActivatedTwiceL\r\n"));
+			SetTestStepID(_L("GRAPHICS-DIRECTGDI-PANIC-0007"));
+			TestDrawableSourceActivatedTwiceL();
+			break;
+		case 8:
+			INFO_PRINTF1(_L("TestBrushPatternNotSetL\r\n"));
+			SetTestStepID(_L("GRAPHICS-DIRECTGDI-PANIC-0008"));
+			TestBrushPatternNotSetL();
+			break;
+		}
+	RecordTestResultL();
+	}