fontservices/fontstore/tfs/t_linkedfontscapability.cpp
changeset 0 1fb32624e06b
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/fontservices/fontstore/tfs/t_linkedfontscapability.cpp	Tue Feb 02 02:02:46 2010 +0200
@@ -0,0 +1,276 @@
+/*
+* 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 "FNTSTD.H"
+#include "t_linkedfontscapability.h"
+#include <hal.h>
+#include <linkedfonts.h>
+
+/**
+@file 
+
+@SYMPurpose This file is used for tests to check the security capabilities
+of the the calls to the font and bitmap server regarding linked fonts
+
+Registering a linked font requires write device data.  Fetching a linked
+font requires read device data.
+
+The function uses an ini file to indicate to this file what tests should be run.
+There are 3 tests, read and write, read, write.  It is important to register a
+the linked font test first so that it can be fetched.  The test script does this by 
+calling tests which do not panic, initially.
+
+*/
+_LIT(KLinkedFontsCapabilityFont,"CapabilityTestFnt");
+_LIT(KLinkedFontsCaseNumber,"CaseNumber");
+
+
+
+void CTLinkedFontsCapability::TestRegisterL()
+	{
+	CFbsTypefaceStore* store = CFbsTypefaceStore::NewL(iBitmapDevice);
+	CleanupStack::PushL(store);
+	
+	// Create typeface to be linked
+	CLinkedTypefaceSpecification *typefaceSpec;
+	typefaceSpec = CLinkedTypefaceSpecification::NewLC(KLinkedFontsCapabilityFont);
+	
+	CLinkedTypefaceGroup* group1 = CLinkedTypefaceGroup::NewLC(1);
+	typefaceSpec->AddLinkedTypefaceGroupL(*group1);
+	CleanupStack::Pop();
+	
+	// Add first typeface
+	CLinkedTypefaceElementSpec *elementSpec1;
+	_LIT(KLinkedTypefaceTT, "DejaVu Sans Condensed");
+	elementSpec1 = CLinkedTypefaceElementSpec::NewLC(KLinkedTypefaceTT, 1);
+	elementSpec1->SetCanonical(ETrue);
+		
+	typefaceSpec->AddTypefaceAtBackL(*elementSpec1);
+	CleanupStack::Pop(1, elementSpec1);
+	
+	// Now try regstering the linked typeface
+	TRAPD(ret, typefaceSpec->RegisterLinkedTypefaceL(*store));
+	CleanupStack::PopAndDestroy(2, store);
+	
+	if (ret!=KErrAlreadyExists)
+		{
+		User::LeaveIfError(ret);
+		}
+	}
+
+void CTLinkedFontsCapability::CheckLinkedFontsRasterizerInstalledL()
+	{
+	CFbsTypefaceStore* store = CFbsTypefaceStore::NewL(iBitmapDevice);
+	CleanupStack::PushL(store);
+	
+	// Create typeface to be linked
+	CLinkedTypefaceSpecification *typefaceSpec;
+	typefaceSpec = CLinkedTypefaceSpecification::NewLC(KLinkedFontsCapabilityFont);
+	
+	CLinkedTypefaceGroup* group1 = CLinkedTypefaceGroup::NewLC(1);
+	typefaceSpec->AddLinkedTypefaceGroupL(*group1);
+	CleanupStack::Pop();
+	
+	// Add first typeface
+	CLinkedTypefaceElementSpec *elementSpec1;
+	_LIT(KLinkedTypefaceTT, "DejaVu Sans Condensed");
+	elementSpec1 = CLinkedTypefaceElementSpec::NewLC(KLinkedTypefaceTT, 1);
+	elementSpec1->SetCanonical(ETrue);
+		
+	typefaceSpec->AddTypefaceAtBackL(*elementSpec1);
+	CleanupStack::Pop(1, elementSpec1);
+	
+	// Now try regstering the linked typeface
+	TRAPD(ret, typefaceSpec->RegisterLinkedTypefaceL(*store));
+	CleanupStack::PopAndDestroy(2, store);
+
+	switch (ret)
+		{
+		case KErrAlreadyExists:
+		case KErrNone:
+			iHaveRasterizer = ETrue;
+		default:
+			break;			
+		}
+	
+	if (!iHaveRasterizer)
+		{
+		INFO_PRINTF1(_L("Linked fonts capability: no linked fonts rasterizer found"));
+		}
+	}
+
+TBool CTLinkedFontsCapability::LinkedFontsRasterizerPresent()
+	{
+	return iHaveRasterizer;
+	}
+
+
+void CTLinkedFontsCapability::TestFetchL()
+	{
+	CFbsTypefaceStore* store = CFbsTypefaceStore::NewL(iBitmapDevice);
+	CleanupStack::PushL(store);
+	
+	CLinkedTypefaceSpecification *typefaceSpec;
+	typefaceSpec = CLinkedTypefaceSpecification::NewLC(KLinkedFontsCapabilityFont);
+	
+	typefaceSpec->FetchLinkedTypefaceSpecificationL(*store);
+	
+	CleanupStack::PopAndDestroy(2, store);
+	}
+
+CTLinkedFontsCapability::~CTLinkedFontsCapability()
+	{
+	delete iGc;
+	delete iBitmapDevice;
+	delete iBitmap;
+	}
+
+CTLinkedFontsCapability::CTLinkedFontsCapability(CTestStep *aStep):
+	CTGraphicsBase(aStep),
+	iHaveRasterizer(EFalse)
+	{	
+	}
+
+/** Create the screen device.
+@param aMode display mode for which device has to be created
+*/
+void CTLinkedFontsCapability::CreateBitmapDeviceL(TDisplayMode aMode)
+	{
+	iBitmap = new(ELeave) CFbsBitmap;
+	//Considering the intersection of the screen size for both hw and emulator so that same
+	//baselined hash can be used to test for both
+	iBitmap->Create(TSize(40, 40), aMode); //small, bitmap not used
+	iBitmapDevice = CFbsBitmapDevice::NewL(iBitmap);
+	User::LeaveIfError(iBitmapDevice->CreateContext((CGraphicsContext*&)iGc));
+	}
+
+/**
+@SYMTestCaseID GRAPHICS-FNTSTORE-LINKEDFONTS-0110
+
+@SYMTestPriority Critical
+
+@SYMPREQ				PREQ2146
+
+@SYMREQ					REQ10924, REQ10925, REQ10926
+
+@SYMTestCaseDesc 
+Checks security capabilities for linked fonts
+
+@SYMTestActions 
+1 - Run the test case with read device data and write device data
+2 - Run the test case with write device data
+3 - Run the test case with read device data
+4 - Run the test case with no capabilities
+
+@SYMTestExpectedResults 
+1- A linked font can be registered or returns KErrAlreadyExists and linked fonts can be fetched.
+2- Registering a linked font fails with panic E32USER-CBase panic 47, and linked fonts can be fetched.
+3- Registering a linked font succeeds or returns KErrAlreadyExists and fetching a linked font fail with panic E32USER-CBase panic 47.
+4- Registering a linked font fails with panic E32USER-CBase panic 47. Fetching a linked font fails with panic E32USER-CBase panic 47.
+
+*/
+void CTLinkedFontsCapability::RunTestCaseL(TInt /*aCurTestCase*/)
+	{
+	INFO_PRINTF1(_L("Linked fonts capability  tests" ));
+	TInt curTestCase;
+		//Read the case number from the ini file
+	TBool res = iStep->GetIntFromConfig(iStep->ConfigSection(), KLinkedFontsCaseNumber, curTestCase);		
+	if(!res)
+		{
+		TEST(EFalse);
+		return ;
+		}	
+	
+	CreateBitmapDeviceL(EColor16MU);
+	TInt err=KErrNone;
+	TInt err2=KErrNone;
+
+	((CTLinkedFontsCapabilityStep*)iStep)->SetTestStepID(KUnknownSYMTestCaseIDName);
+
+	switch (curTestCase)
+		{
+		case 1:
+			((CTLinkedFontsCapabilityStep*)iStep)->SetTestStepID(_L("GRAPHICS-FNTSTORE-LINKEDFONTS-0110"));
+			CheckLinkedFontsRasterizerInstalledL();
+			break;		
+		case 2:
+			((CTLinkedFontsCapabilityStep*)iStep)->SetTestStepID(_L("GRAPHICS-FNTSTORE-LINKEDFONTS-0110"));
+			if (LinkedFontsRasterizerPresent())
+				{
+				TestRegisterL();
+				TestFetchL();
+				}
+			break;
+		case 3:
+			((CTLinkedFontsCapabilityStep*)iStep)->SetTestStepID(_L("GRAPHICS-FNTSTORE-LINKEDFONTS-0110"));
+			if (LinkedFontsRasterizerPresent())
+				{
+				TestRegisterL();//write only
+				}
+			break;
+		case 4:
+			((CTLinkedFontsCapabilityStep*)iStep)->SetTestStepID(_L("GRAPHICS-FNTSTORE-LINKEDFONTS-0110"));
+			if (LinkedFontsRasterizerPresent())
+				{
+				TestFetchL();//read only
+				}
+			break;
+			
+		//following are similar to tests 2-4, but leaves if no permission to access the capabilities
+		case 5:
+			((CTLinkedFontsCapabilityStep*)iStep)->SetTestStepID(_L("GRAPHICS-FNTSTORE-LINKEDFONTS-0110"));
+			if(LinkedFontsRasterizerPresent())
+				{
+				TRAP(err,TestRegisterL());
+				TRAP(err2, TestFetchL());
+				TEST((err == KErrPermissionDenied)&&(err2 == KErrPermissionDenied));
+				}
+			break;
+		case 6:
+			((CTLinkedFontsCapabilityStep*)iStep)->SetTestStepID(_L("GRAPHICS-FNTSTORE-LINKEDFONTS-0110"));
+			if(LinkedFontsRasterizerPresent())
+				{
+				TRAP(err,TestRegisterL());//write only
+				TEST(err == KErrPermissionDenied);
+				}
+			break;
+		case 7:
+			((CTLinkedFontsCapabilityStep*)iStep)->SetTestStepID(_L("GRAPHICS-FNTSTORE-LINKEDFONTS-0110"));
+			if(LinkedFontsRasterizerPresent())
+				{
+				TRAP(err, TestFetchL());//read only
+				TEST(err == KErrPermissionDenied);
+				}
+			break;			
+		default:
+			{
+			((CTLinkedFontsCapabilityStep*)iStep)->SetTestStepID(KNotATestSYMTestCaseIDName);
+			((CTLinkedFontsCapabilityStep*)iStep)->CloseTMSGraphicsStep();
+			TEST(EFalse); //nothing should have the default value
+			break;
+			}
+		}
+	((CTLinkedFontsCapabilityStep*)iStep)->RecordTestResultL();
+	TEST(ETrue);
+	((CTLinkedFontsCapabilityStep*)iStep)->CloseTMSGraphicsStep();
+	TestComplete();
+	}
+
+__CONSTRUCT_STEP__(LinkedFontsCapability)
+