diff -r 000000000000 -r 1fb32624e06b textrendering/texthandling/ttext/T_TIMES.CPP --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/textrendering/texthandling/ttext/T_TIMES.CPP Tue Feb 02 02:02:46 2010 +0200 @@ -0,0 +1,328 @@ +/* +* Copyright (c) 1997-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 +#include + +#include +#include + +/* this fixes a MSVC link warning */ +#ifdef __VC32__ +#pragma comment (linker, "/opt:noref") +#endif + +#define UNUSED_VAR(a) a = a + +#ifdef NDEBUG +const TInt KGlobalTextATest1=100000; +const TInt KGlobalTextATest2=100000; +const TInt KGlobalTextATest3=1000; +const TInt KRichTextTest1=10000; +const TInt KRichTextTest2=10000; +const TInt KRichTextTest3=1000; +const TInt KGlobalTextBTest1=10000; +const TInt KGlobalTextBTest2=10000; +const TInt KGlobalTextBTest3=1000; +const TInt KCharFormatLayerTest=100000; +#else +const TInt KGlobalTextATest1=100000; +const TInt KGlobalTextATest2=100000; +const TInt KGlobalTextATest3=1000; +const TInt KRichTextTest1=5000; +const TInt KRichTextTest2=5000; +const TInt KRichTextTest3=100; +const TInt KGlobalTextBTest1=5000; +const TInt KGlobalTextBTest2=5000; +const TInt KGlobalTextBTest3=100; +const TInt KCharFormatLayerTest=100000; +#endif + + +LOCAL_D CTrapCleanup* TheTrapCleanup; +LOCAL_D RTest test(_L("CRichText Document")); +LOCAL_D CGlobalText* TheText; +LOCAL_D CParaFormatLayer* TheParaFormatLayer; +LOCAL_D CCharFormatLayer* TheCharFormatLayer; +LOCAL_D const TInt KTestCleanupStack=0x200; + +LOCAL_C void GenerateGlobalLayersL() +// Provides the base layers for globl text and below +// + { + TParaFormatMask paraMask; + TheParaFormatLayer=CParaFormatLayer::NewL((CParaFormat*)NULL,paraMask); + TCharFormat charFormat; + TCharFormatMask charMask; + TheCharFormatLayer=CCharFormatLayer::NewL(charFormat,charMask); + } + +LOCAL_C void GenerateGlobalTextL() +// Provide an instantiated global text object +// + { + GenerateGlobalLayersL(); + TheText=CGlobalText::NewL(TheParaFormatLayer,TheCharFormatLayer); + } + +LOCAL_C void GenerateBasicRichTextL() +// Provide a default instantiated rich text object +// + {TheText=CRichText::NewL(TheParaFormatLayer,TheCharFormatLayer);} + +LOCAL_C void KillGlobalLayers() +// Destroy the base layers for global text and below +// + { + delete TheParaFormatLayer; + delete TheCharFormatLayer; + TheParaFormatLayer=NULL; + TheCharFormatLayer=NULL; + } + +LOCAL_C void KillText() + { + delete TheText; + TheText=NULL; + } + + +LOCAL_C void LoadLongDocument() +// + { + TFileName file; + + file=(_L("z:\\test\\app-framework\\etext\\climb.txt")); + TheText->Reset(); + TInt count=0; + TRAPD(ret, + count=TheText->ImportTextFileL(0,file,CPlainText::EOrganiseByParagraph)); + test(ret==KErrNone); + test(count>0); // check for equality later + } + + +LOCAL_C void CallGetChars(TInt aStartPos,TInt aCharacterCount,TInt aLineLength) +// + { + TPtrC view; + TCharFormat charFormat; + TInt consumed=aStartPos; + while (consumed<=aStartPos+aCharacterCount) + { + TheText->GetChars(view,charFormat,consumed); + consumed+=Min(view.Length(),aLineLength); + } + } + +LOCAL_C void GetTimesForGetChars(TInt aLoopCount,TInt aStartPos,TInt aCharacterCount,TInt aLineLength) +// +// + { + // + for (TInt loop=0;loopApplyCharFormatL(charFormat,mask,100,2); + TInt documentLength=TheText->DocumentLength(); + TInt paraCount=TheText->ParagraphCount(); + TInt wordCount=TheText->WordCount(); + TBuf<80> stats; + stats.Format(_L("Document Stats:\nChars: %d\nWords: %d\nParas: %d\n"),documentLength,wordCount,paraCount); + test.Printf(stats); + RDebug::Print(_L("%S"),&stats); + TBuf<80> testTitle; + // + testTitle.Format(_L("Pos: 0-100 %d times"),aTest1Count); + test.Start(testTitle); + GetTimesForGetChars(aTest1Count,0,100,50); + // + testTitle.Format(_L("Pos: 18200-18300 %d times"),aTest2Count); + test.Next(testTitle); + GetTimesForGetChars(aTest2Count,18200,100,50); + // + testTitle.Format(_L("Pos: all %d times"),aTest3Count); + test.Next(testTitle); + GetTimesForGetChars(aTest3Count,0,documentLength,50); + // + test.End(); + } + + +LOCAL_C void DoGetCharFormatLayerReadTimesL(TInt aLoopCount) +// + { + // + // Now take some times. + TCharFormat charFormat; + TCharFormatMask charMask; + for (TInt loop=0;loopSense(charFormat,charMask); + + } + // Display the metric + TBuf<60> context; + context.Format(_L("10 att X %d loops=%d atts\n"),aLoopCount,10*aLoopCount); + test.Printf(context); + RDebug::Print(_L("%S"),&context); + } + + +LOCAL_C void DoEmptyCharFormatLayerReadL(TInt aLoopCount) +// + {DoGetCharFormatLayerReadTimesL(aLoopCount);} + + +LOCAL_C void DoCharFormatLayerReadL(TInt aLoopCount) +// tests times of reading attributes from a CCharFormatLayer +// + { + // Fill the character format layer + TCharFormat charFormat(_L("Times New Roman"),180); + TCharFormatMask charMask; + charMask.SetAll(); + TheCharFormatLayer->SetL(charFormat,charMask); + // + // Take times + DoGetCharFormatLayerReadTimesL(aLoopCount); + } + + +LOCAL_C void FormatLayerTestL() +// Time tests on format layer access. +// + { + test.Start(_L("CCharFormatLayer - Attribute reads")); + GenerateGlobalLayersL(); + // + TBuf<80> testTitle; + testTitle.Format(_L("Reading empty char format layer %d times"),KCharFormatLayerTest); + test.Next(testTitle); + DoEmptyCharFormatLayerReadL(KCharFormatLayerTest); + // + testTitle.Format(_L("Read 10 attributes from layer %d times"),KCharFormatLayerTest); + test.Next(testTitle); + TRAPD(ret, DoCharFormatLayerReadL(KCharFormatLayerTest)); + test(ret==KErrNone); + // + KillGlobalLayers(); + test.End(); + } + + +LOCAL_C void LongDocumentTestL() +// + { + // + test.Start(_L("Global text - Empty layers")); + GenerateGlobalTextL(); + DoLongDocumentTestL(KGlobalTextATest1,KGlobalTextATest2,KGlobalTextATest3); + KillText(); + // + test.Next(_L("Rich text - Empty layers")); + GenerateBasicRichTextL(); + DoLongDocumentTestL(KRichTextTest1,KRichTextTest2,KRichTextTest3); + KillText(); + KillGlobalLayers(); + // + test.Next(_L("Global text - 2 character attributes stored")); + GenerateGlobalTextL(); + TBuf<5> name=_L("SWiss"); + TCharFormat charFormat(name,178); + TCharFormatMask charMask; + charMask.SetAttrib(EAttFontTypeface); + charMask.SetAttrib(EAttFontHeight); + TRAPD(ret, + TheCharFormatLayer->SetL(charFormat,charMask)); + test(ret==KErrNone); + DoLongDocumentTestL(KGlobalTextBTest1,KGlobalTextBTest2,KGlobalTextBTest3); + KillText(); + // + test.Next(_L("Rich text - 2 charcter attributes stored")); + GenerateBasicRichTextL(); + DoLongDocumentTestL(KRichTextTest1,KRichTextTest2,KRichTextTest3); + KillText(); + // + KillGlobalLayers(); + test.End(); + } + + +LOCAL_C void DoTestsL() +// + { + test.Start(_L(" @SYMTestCaseID:SYSLIB-TTEXT-LEGACY-T_TIMES-0001 Long document tests ")); + LongDocumentTestL(); + // + test.Next(_L("Format layer tests")); + FormatLayerTestL(); + // + } + + +LOCAL_C void setupCleanup() +// +// Initialise the cleanup stack. +// + { + + TheTrapCleanup=CTrapCleanup::New(); + TRAPD(r,\ + {\ + for (TInt i=KTestCleanupStack;i>0;i--)\ + CleanupStack::PushL((TAny*)1);\ + test(r==KErrNone);\ + CleanupStack::Pop(KTestCleanupStack);\ + }); + } + + + +GLDEF_C TInt E32Main() +// +// Test the Document Model Services. +// + { + setupCleanup(); + test.Title(); + __UHEAP_MARK; + + TRAPD(ret,DoTestsL()); + test(ret == KErrNone); + + test.End(); + test.Close(); + __UHEAP_MARKEND; + delete TheTrapCleanup; + return(0); + }