graphicsresourceservices/graphicsresourceimplementation/test/src/tsgdriver.cpp
author Lars Kurth <larsk@symbian.org>
Tue, 15 Jun 2010 15:39:06 +0100
branchGCC_SURGE
changeset 99 ac1910f6e7cb
parent 36 01a6848ebfd7
permissions -rw-r--r--
Bug 2966 - Fixed GCC issues with redefinition of typedef's

// 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:
//

/**
 @file
 @test
 @internalComponent - Graphics Resource API Conformance Test Suite
*/

#include "tsgdriver.h"

CTSgDriver::CTSgDriver(TBool aConformanceTests) :
	CTSgTestStepBase(aConformanceTests)
	{
	INFO_PRINTF1(_L("Graphics resource component test - SgDriver Tests.\r\n"));
	}

CTSgDriver::~CTSgDriver()
	{
	}

/** 
Overrides 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 CTSgDriver::doTestStepL()
	{	
	SetTestStepID(_L("GRAPHICS-RESOURCE-0022"));
	INFO_PRINTF1(_L("Shutting down an uninitialised driver.\r\n"));
	TestShutdownUninitialized();
	RecordTestResultL();

	SetTestStepID(_L("GRAPHICS-RESOURCE-0096"));
	INFO_PRINTF1(_L("Checking the driver is the correct version.\r\n"));
	TestVersion();
	RecordTestResultL();
	
	SetTestStepID(_L("GRAPHICS-RESOURCE-0099"));
	INFO_PRINTF1(_L("Checking the driver returns the correct error on multiple opens.\r\n"));
	TestMultipleOpens();
	RecordTestResultL();
	
	SetTestStepID(_L("GRAPHICS-RESOURCE-0103"));
	INFO_PRINTF1(_L("Checking GetInterface() returns correct error codes.\r\n"));
	TestGetInterface();
	RecordTestResultL();
	
	return TestStepResult();
	}

/**
@SYMTestCaseID			GRAPHICS-RESOURCE-0022
@SYMTestCaseDesc		Shuts down an uninitialised driver.
@SYMPREQ				PREQ2637
@SYMFssID				RSgDriver::Close()
@SYMTestPriority		Low
@SYMTestType			UT
@SYMTestPurpose			To ensure invalid Close() calls on the driver will cause no errors.
@SYMTestActions			Call RSgDriver::Close() several times without calling RSgDriver::Open().
@SYMTestExpectedResults	No errors should be returned.
 */	
void CTSgDriver::TestShutdownUninitialized()
	{
	__UHEAP_MARK;	
	
	RSgDriver sgDriver;
	
	sgDriver.Close();
	sgDriver.Close();
	sgDriver.Close();
	
	__UHEAP_MARKEND;
	}

/**
@SYMTestCaseID			GRAPHICS-RESOURCE-0096
@SYMTestCaseDesc		Test the version number returned by RSgDriver is correct.
@SYMPREQ				PREQ2637
@SYMFssID				RSgDriver::Version()
@SYMTestPriority		Medium
@SYMTestType			UT
@SYMTestPurpose			To check the correct version of the driver is being used in the
						conformance tests.
@SYMTestActions			Call RSgDriver::Version().
@SYMTestExpectedResults	The correct version should be returned.
 */	
void CTSgDriver::TestVersion()
	{
	__UHEAP_MARK;	
	
	RSgDriver sgDriver;
	
	TVersion vers = sgDriver.Version();
	TEST(vers.iMajor == 1);
	TEST(vers.iMinor == 1);
	
	__UHEAP_MARKEND;
	}

/**
@SYMTestCaseID			GRAPHICS-RESOURCE-0099
@SYMTestCaseDesc		Test SgDriver Handles Multiple Calls to Open Correctly
@SYMPREQ				PREQ2637
@SYMFssID				RSgDriver::Open()
@SYMTestPriority		High
@SYMTestType			UT
@SYMTestPurpose			To ensure the correct error code is returned when an open
						driver is opened
@SYMTestActions			Call RSgDriver::Open().
@SYMTestExpectedResults	KErrInUse should be returned when the driver is opened for
						the second time and all subsequent times.
 */	
void CTSgDriver::TestMultipleOpens()
	{
	__UHEAP_MARK;	
	
	TInt err = KErrNone;
	RSgDriver sgDriver;
	
	err = sgDriver.Open();
	TESTE(KErrNone == err, err);
	err = sgDriver.Open();
	TESTE(KErrInUse == err, err);
	err = sgDriver.Open();
	TESTE(KErrInUse == err, err);
	err = sgDriver.Open();
	TESTE(KErrInUse == err, err);	
	sgDriver.Close();	
	
	__UHEAP_MARKEND;
	}

/**
@SYMTestCaseID			GRAPHICS-RESOURCE-0103
@SYMTestCaseDesc		Test that GetInterface() returns the correct error code	in 
						negative situations.
@SYMPREQ				PREQ2637
@SYMFssID				RSgDriver::GetInterface()
@SYMTestPriority		Low
@SYMTestType			UT
@SYMTestPurpose			To ensure the correct error code is returned when GetInterface() 
						is used, in a variety of sitations.
@SYMTestActions			Call RSgDriver::GetInterface() with an interface that is valid but
						not supported by the driver.			
						Call RSgDriver::GetInterface() with an interface with a Null ID.
						Call RSgDriver::GetInterface() with any interface, on a driver that
						is not yet open.
@SYMTestExpectedResults	When using an unsupported interface, KErrExtensionNotSupported should 
						be returned.
						When using an interface with the null UID, KErrArgument should be returned.
						When using any interface after the driver is closed, KErrBadHandle
						should be returned.
 */

/**
Test classes for testing with RSgImage::GetInterface()
 */
class MFakeInterface
    {
public:
    enum { EInterfaceUid = 0x88888888 };
    };
class MNullInterface
    {
public:
    enum { EInterfaceUid = KNullUidValue };
    };

void CTSgDriver::TestGetInterface()
	{
	__UHEAP_MARK;
	
	RSgDriver sgDriver;
	TInt err = sgDriver.Open();
	TESTE(err == KErrNone, err);
	
	MFakeInterface* fakeInterface = NULL;
	err = sgDriver.GetInterface(fakeInterface);
	TESTE(err == KErrExtensionNotSupported, err);	
	
	MNullInterface* nullInterface = NULL;
	err = sgDriver.GetInterface(nullInterface);
	TESTE(err == KErrArgument, err);
	
	sgDriver.Close();	
	err = sgDriver.GetInterface(fakeInterface);
	TESTE(err == KErrBadHandle, err);
	err = sgDriver.GetInterface(nullInterface);
	TESTE(err == KErrBadHandle, err);
	
	__UHEAP_MARKEND;
	}