graphicsdeviceinterface/bitgdi/tbit/TFontSelect.CPP
changeset 0 5d03bc08d59c
child 136 62bb7c97884c
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/graphicsdeviceinterface/bitgdi/tbit/TFontSelect.CPP	Tue Feb 02 01:47:50 2010 +0200
@@ -0,0 +1,238 @@
+// Copyright (c) 2006-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 - Internal Symbian test code 
+*/
+
+#include <e32hal.h>
+#include <e32std.h>
+#include <e32test.h>
+#include <bitstd.h>
+#include <bitdev.h>
+#include <fntstore.h>
+#include <fbs.h>
+#include <hal.h>
+#include <graphics/fbsdefs.h>
+
+#include "tfontselect.h"
+
+
+//If you want to do font tests with scaled device - change KScalingFactorX, KScalingFactorY, KScalingOriginPt.
+const TInt KScalingFactorX = 1;
+const TInt KScalingFactorY = 1;
+const TPoint KScalingOriginPt(0, 0);
+
+//Non valid font --> This font comes from System Test test data. Not a proper font, so it's best to skip it.
+_LIT(KWrongFontFileName, "fnt");
+
+
+CTFontSelect::CTFontSelect(CTestStep* aStep) :
+	CTGraphicsBase(aStep),
+	iFont1(NULL),
+	iFont2(NULL),
+	iFont3(NULL),
+	iGc(NULL),
+	iDevice(NULL)	
+	{
+	}
+
+CTFontSelect::~CTFontSelect()
+	{
+	delete iGc;
+	delete iDevice;
+	}
+
+void CTFontSelect::ConstructL()
+	{
+	TRAPD(err,iDevice = CFbsScreenDevice::NewL(KNullDesC,EColor256));
+	if (err == KErrNotSupported)
+		TRAP(err,iDevice = CFbsScreenDevice::NewL(KNullDesC,EColor16MU));
+	if (err == KErrNotSupported)
+		TRAP(err,iDevice = CFbsScreenDevice::NewL(KNullDesC,EColor4K));
+	if (err == KErrNotSupported)
+		TRAP(err,iDevice = CFbsScreenDevice::NewL(KNullDesC,EColor16M));
+	if (err == KErrNotSupported)
+		TRAP(err,iDevice = CFbsScreenDevice::NewL(KNullDesC,EColor64K));
+	if (err == KErrNotSupported)
+		TRAP(err,iDevice = CFbsScreenDevice::NewL(KNullDesC,EGray256));
+	if (err == KErrNotSupported)
+		TRAP(err,iDevice = CFbsScreenDevice::NewL(KNullDesC,EGray16));
+	if (err == KErrNotSupported)
+		TRAP(err,iDevice = CFbsScreenDevice::NewL(KNullDesC,EGray4));
+	if (err == KErrNotSupported)
+		TRAP(err,iDevice = CFbsScreenDevice::NewL(KNullDesC,EGray2));
+	if (err == KErrNotSupported)
+		TRAP(err,iDevice = CFbsScreenDevice::NewL(KNullDesC,EColor16));
+	if (err == KErrNotSupported)
+		TRAP(err,iDevice = CFbsScreenDevice::NewL(KNullDesC,EColor16MA));
+	if (err == KErrNotSupported)
+		TRAP(err,iDevice = CFbsScreenDevice::NewL(KNullDesC,EColor16MAP));
+	if (err!=KErrNone)
+		{
+		_LIT(KLog,"Failed to create screen device, last returned error %d");
+		INFO_PRINTF2(KLog,err);
+		}
+
+	User::LeaveIfError(err);
+	iDevice->ChangeScreenDevice(NULL);
+	iDevice->SetAutoUpdate(ETrue);
+	iDevice->CreateContext(iGc);
+	iDevice->SetScalingFactor(KScalingOriginPt, KScalingFactorX, KScalingFactorY, 1, 1);
+	iGc->Activate(iDevice);
+
+	}
+
+/**
+  @SYMTestCaseID GRAPHICS-BITGDI-0083
+ 
+  @SYMDEF             
+
+  @SYMTestCaseDesc Tests font selection
+   
+  @SYMTestPriority High
+
+  @SYMTestStatus Implemented
+
+  @SYMTestActions For different typeface and heights tests font selection to specific sizes
+ 
+  @SYMTestExpectedResults Test should perform graphics operations succesfully. 
+*/
+void CTFontSelect::DoFontSelectTestsL()
+	{
+	TFontSpec fs;
+	TInt typefaces = iDevice->NumTypefaces();
+	TTypefaceSupport info;
+	_LIT(KIgnoreFont1, "Test2");
+	_LIT(KIgnoreFont2, "LinkedFont3TT"); //LinkedFont3/4TT both cause test failure on Freetype
+	_LIT(KIgnoreFont3, "LinkedFont4TT"); //They are test files with incorrect metrics
+
+	for (TInt count = 0; count < typefaces; count++)
+		{
+		iDevice->TypefaceSupport( info, count );
+
+		for (TInt index = 0; index < info.iNumHeights; index++)
+			{
+			TInt height = iDevice->FontHeightInPixels( count, index );
+			fs.iTypeface = info.iTypeface;
+			fs.iHeight = height;
+
+			INFO_PRINTF1(_L("Test GetNearestFontInPixels"));
+			User::LeaveIfError( iDevice->GetNearestFontInPixels( (CFont*&)iFont1 ,fs ) );
+			TEST(iFont1->HeightInPixels() == height);
+
+			INFO_PRINTF1(_L("Test GetNearestFontToDesignHeightInPixels"));
+			User::LeaveIfError( iDevice->GetNearestFontToDesignHeightInPixels( (CFont*&)iFont2, fs ) );
+			TEST(iFont2->HeightInPixels() == height);
+			iDevice->ReleaseFont( iFont2 );
+			iDevice->ReleaseFont(iFont1);
+			}
+			
+		INFO_PRINTF1(_L("Test GetNearestFontToMaxHeightInPixels"));
+		for (TInt maxHeight = 20; maxHeight <= 50; maxHeight += 10)
+			{
+			fs.iTypeface = info.iTypeface;
+			fs.iHeight = maxHeight;
+			User::LeaveIfError( iDevice->GetNearestFontToMaxHeightInPixels( (CFont*&)iFont3, fs, maxHeight ) );
+
+			TBufC<64> fontName = ((CFont*&)iFont3)->FontSpecInTwips().iTypeface.iName;
+			INFO_PRINTF2(_L("Font name: '%S'."), &fontName);
+			if (fontName == KWrongFontFileName)
+				{
+				INFO_PRINTF2(_L(" ** '%S' is a wrong font file. Skip checks for this font **"), &fontName);
+				break;
+				}
+
+			if (!fontName.Compare(KIgnoreFont1))
+				{
+				INFO_PRINTF1(_L(" ** 'Test2' font ignored. This files metrics are incorrect."));
+				continue;
+				}
+			if (!fontName.Compare(KIgnoreFont2))
+				{
+				INFO_PRINTF1(_L(" ** 'LinkedFont3TT' font ignored. This files metrics are incorrect."));
+				continue;
+				}
+			if (!fontName.Compare(KIgnoreFont3))
+				{
+				INFO_PRINTF1(_L(" ** 'LinkedFont4TT' font ignored. This files metrics are incorrect."));
+				continue;
+				}
+			
+			if (info.iIsScalable)
+				{ // got a scalable (TrueType) font - can't guarantee will fit for bitmap font
+				// N.B. If this ever fails then try replacing maxHeight with maxHeight + 1 in the test
+				// as it could be down to the hinting rounding error that can very occasionally occur
+				// We can't make this test reliably with bitmap fonts
+				INFO_PRINTF1(_L("Font is scalable"));
+				TEST(iFont3->FontMaxHeight() <= maxHeight);
+				}
+
+			INFO_PRINTF1(_L("Test font level metrics"));
+			INFO_PRINTF3(_L("Requested max height %d, returned max height %d"), maxHeight, iFont3->FontMaxHeight());
+			INFO_PRINTF4(_L("MaxAscent %d, MaxDescent %d, HeightInPixels %d"), iFont3->FontMaxAscent(), iFont3->FontMaxDescent(), iFont3->HeightInPixels());
+			INFO_PRINTF3(_L("CapAscent %d, StdDescent %d"), iFont3->FontCapitalAscent(), iFont3->FontStandardDescent());
+			TEST(iFont3->FontMaxHeight() >= ( iFont3->FontMaxAscent() + iFont3->FontMaxDescent() ));
+			TEST(iFont3->FontMaxAscent() >= iFont3->FontCapitalAscent());
+			TInt expMaxDescent=iFont3->FontStandardDescent();
+			if (iDevice->SizeInPixels().iHeight>400)
+				--expMaxDescent;		//To get test to pass on X86 and NaviEngine
+			TEST(iFont3->FontMaxDescent() >= expMaxDescent);
+
+			iDevice->ReleaseFont(iFont3);
+			}
+		}
+	}
+
+void CTFontSelect::RunTestCaseL(TInt aCurTestCase)
+	{
+	((CTFontSelectStep*)iStep)->SetTestStepID(KUnknownSYMTestCaseIDName);
+	switch(aCurTestCase)
+		{
+		case 1:
+			{
+			((CTFontSelectStep*)iStep)->SetTestStepID(_L("GRAPHICS-BITGDI-0083"));
+			INFO_PRINTF1(_L("DoFontSelectTest"));
+			TRAPD(ret, DoFontSelectTestsL());
+			TEST(ret == KErrNone);
+			break;
+			}
+		case 2:
+			{
+			((CTFontSelectStep*)iStep)->SetTestStepID(KNotATestSYMTestCaseIDName);
+			((CTFontSelectStep*)iStep)->CloseTMSGraphicsStep();
+			TestComplete();		
+			break;
+			}
+		}
+	((CTFontSelectStep*)iStep)->RecordTestResultL();
+	}
+
+
+//--------------
+__CONSTRUCT_STEP__(FontSelect)
+
+void CTFontSelectStep::TestSetupL()
+	{
+	FbsStartup();
+	User::LeaveIfError(RFbsSession::Connect());
+	}
+	
+void CTFontSelectStep::TestClose()
+	{
+	RFbsSession::Disconnect();
+	}