diff -r 000000000000 -r 5d03bc08d59c graphicsdeviceinterface/bitgdi/tbit/TFontSelect.CPP --- /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 +#include +#include +#include +#include +#include +#include +#include +#include + +#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(); + }