textrendering/texthandling/ttext/T_TIMES.CPP
changeset 0 1fb32624e06b
child 16 748ec5531811
--- /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 <e32test.h>
+#include <e32svr.h>
+
+#include <txtrich.h>
+#include <txtglobl.h>
+
+/* 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;loop<aLoopCount;loop++)
+		{
+		CallGetChars(aStartPos,aCharacterCount,aLineLength);
+		}
+	}
+
+
+LOCAL_C void DoLongDocumentTestL(TInt aTest1Count,TInt aTest2Count,TInt aTest3Count)
+//
+//
+	{
+	LoadLongDocument();
+	TCharFormat charFormat;
+	TCharFormatMask mask;
+	mask.SetAttrib(EAttFontStrokeWeight);
+	TheText->ApplyCharFormatL(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;loop<aLoopCount;loop++)
+		{
+		charMask.ClearAll();  // this is used for readings.
+
+		TheCharFormatLayer->Sense(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);
+    }