--- /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();
+ }