textrendering/texthandling/ttext/T_INDTER.CPP
changeset 0 1fb32624e06b
child 51 a7c938434754
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/textrendering/texthandling/ttext/T_INDTER.CPP	Tue Feb 02 02:02:46 2010 +0200
@@ -0,0 +1,262 @@
+/*
+* 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 <e32std.h>
+#include <e32base.h>
+#include <e32test.h>
+
+#include <txtfrmat.h>
+#include <txtfmlyr.h>
+#include <txtrich.h>
+#include <gdi.h>
+
+#include "../incp/T_PMLPAR.H"
+
+#define UNUSED_VAR(a) a = a
+
+const TInt KTestCleanupStack=0x40;
+
+
+LOCAL_D RTest test(_L("Rich Text Format attribute Indeterminate State tests"));
+LOCAL_D CTrapCleanup* TheTrapCleanup=NULL;
+LOCAL_D CRichText* TheText=NULL;
+LOCAL_D CParaFormatLayer* TheGlobalParaLayer=NULL;
+LOCAL_D CCharFormatLayer* TheGlobalCharLayer=NULL;
+LOCAL_D CParser* TheParser;
+
+
+LOCAL_C void SetRichTextL(TFileName& aFileName)
+//
+	{
+	delete TheText;
+	delete TheGlobalParaLayer;
+	delete TheGlobalCharLayer;
+	TheParser=CParser::NewL();
+	CleanupStack::PushL(TheParser);
+	TheText=TheParser->ParseL(aFileName);
+	CleanupStack::PopAndDestroy();
+	TheGlobalParaLayer=(CParaFormatLayer*)TheText->GlobalParaFormatLayer();
+	TheGlobalCharLayer=(CCharFormatLayer*)TheText->GlobalCharFormatLayer();
+	}
+
+
+LOCAL_C void CreateRichTextL()
+//
+	{
+	TParaFormatMask paraMask;
+	TheGlobalParaLayer=CParaFormatLayer::NewL((CParaFormat*)NULL,paraMask);
+	CleanupStack::PushL(TheGlobalParaLayer);
+	TCharFormat charFormat;
+	TCharFormatMask charMask;
+	TheGlobalCharLayer=CCharFormatLayer::NewL(charFormat,charMask);
+	CleanupStack::PushL(TheGlobalCharLayer);
+	TheText=CRichText::NewL(TheGlobalParaLayer,TheGlobalCharLayer);
+	CleanupStack::Pop(2);
+	}
+
+
+LOCAL_C void DestroyRichText()
+//
+	{
+	delete TheText;
+	delete TheGlobalParaLayer;
+	delete TheGlobalCharLayer;
+	}
+
+
+LOCAL_C void ResetTextL()
+// Initialise the rich text.
+//
+	{
+	TheText->Reset();
+	TBuf<512> buf(_L("This is paragraph one"));
+	buf.Append(CEditableText::EParagraphDelimiter);
+	buf.Append(_L("This is paragraph two"));
+	buf.Append(CEditableText::EParagraphDelimiter);
+	buf.Append(_L("This is paragraph 333"));
+	// Editable text already has the terminating paragraph delimter.
+	TheText->InsertL(0,buf);
+	}
+
+
+LOCAL_C TParaBorder BorderValues(TParaBorder::TLineStyle aLineStyle,TInt aThickness)
+//
+	{
+	TParaBorder border;
+	border.iLineStyle=aLineStyle;
+	border.iThickness=aThickness;
+	return border;
+	}
+
+
+LOCAL_C void PerformTestParaBordersL(CParaFormat& aApplyFormat,TParaFormatMask& aApplyMask,
+									 TTextFormatAttribute anAttribute,CParaFormat::TParaBorderSide aSide,
+									 TParaBorder& aBorder,
+									 CParaFormat& aSensedFormat,TParaFormatMask& aSensedMask)
+//
+	{
+	aApplyMask.SetAttrib(anAttribute);
+	aApplyFormat.SetParaBorderL(aSide,aBorder);
+	TheText->ApplyParaFormatL(&aApplyFormat,aApplyMask,0,1);
+	TheText->GetParaFormatL(&aSensedFormat,aSensedMask,0,TheText->DocumentLength());
+	}
+
+
+LOCAL_C void TestParaBordersL()
+// Tests the indeterminate state of paragraph borders.
+//
+	{
+	ResetTextL();
+	CParaFormat* sensedFormat=CParaFormat::NewLC();
+	TParaFormatMask undeterminedMask;
+	TheText->GetParaFormatL(sensedFormat,undeterminedMask,0,TheText->DocumentLength());
+	test(undeterminedMask.IsNull());
+	//
+	CParaFormat* applyFormat=CParaFormat::NewLC();
+	TParaFormatMask applyMask;
+	//
+	TParaBorder border=BorderValues(TParaBorder::ESolid,1);
+	//
+	PerformTestParaBordersL(*applyFormat,applyMask,EAttTopBorder,CParaFormat::EParaBorderTop,border,*sensedFormat,undeterminedMask);
+	test(undeterminedMask.AttribIsSet(EAttTopBorder));
+	test(!(undeterminedMask.AttribIsSet(EAttBottomBorder)));
+	test(!(undeterminedMask.AttribIsSet(EAttLeftBorder)));
+	test(!(undeterminedMask.AttribIsSet(EAttRightBorder)));
+	//
+	PerformTestParaBordersL(*applyFormat,applyMask,EAttBottomBorder,CParaFormat::EParaBorderBottom,border,*sensedFormat,undeterminedMask);	
+	test(undeterminedMask.AttribIsSet(EAttTopBorder));
+	test(undeterminedMask.AttribIsSet(EAttBottomBorder));
+	test(!(undeterminedMask.AttribIsSet(EAttLeftBorder)));
+	test(!(undeterminedMask.AttribIsSet(EAttRightBorder)));
+	//
+	PerformTestParaBordersL(*applyFormat,applyMask,EAttLeftBorder,CParaFormat::EParaBorderLeft,border,*sensedFormat,undeterminedMask);
+	test(undeterminedMask.AttribIsSet(EAttTopBorder));
+	test(undeterminedMask.AttribIsSet(EAttBottomBorder));
+	test(undeterminedMask.AttribIsSet(EAttLeftBorder));
+	test(!(undeterminedMask.AttribIsSet(EAttRightBorder)));
+	//
+	PerformTestParaBordersL(*applyFormat,applyMask,EAttRightBorder,CParaFormat::EParaBorderRight,border,*sensedFormat,undeterminedMask);	
+	test(undeterminedMask.AttribIsSet(EAttTopBorder));
+	test(undeterminedMask.AttribIsSet(EAttBottomBorder));
+	test(undeterminedMask.AttribIsSet(EAttLeftBorder));
+	test(undeterminedMask.AttribIsSet(EAttRightBorder));
+	//
+	CleanupStack::PopAndDestroy(2);  // applyFormat & sensedFormat
+	}
+
+
+LOCAL_C void TestParaFormatL()
+// Test the indeterminate state of paragraph format attributes.
+//
+	{
+	test.Start(_L(" @SYMTestCaseID:SYSLIB-TTEXT-LEGACY-T_INDTER-0001 Paragraph format attributes "));
+	TestParaBordersL();
+	}
+
+
+LOCAL_C void TestCharFormatL()
+// Test the indeterminate state of character format attributes.
+//
+	{
+	test.Next(_L("Character format attributes"));
+	//
+	ResetTextL();
+	TCharFormat applyFormat;
+	TCharFormatMask applyMask;
+	//
+	TCharFormat sensedFormat;
+	TCharFormatMask sensedMask;
+	// Make para 2 bold
+	applyFormat.iFontSpec.iFontStyle.SetStrokeWeight(EStrokeWeightBold);
+	applyMask.SetAttrib(EAttFontStrokeWeight);
+	TheText->ApplyCharFormatL(applyFormat,applyMask,22,22);
+	// Make para 3 italic
+	applyFormat.iFontSpec.iFontStyle.SetPosture(EPostureItalic);
+	applyMask.ClearAll();  applyMask.SetAttrib(EAttFontPosture);
+	TheText->ApplyCharFormatL(applyFormat,applyMask,44,21);
+	//	
+	TheText->GetCharFormat(sensedFormat,sensedMask,0,TheText->DocumentLength());
+	test(sensedMask.AttribIsSet(EAttFontStrokeWeight));
+	test(sensedMask.AttribIsSet(EAttFontPosture));
+	//
+	TheText->GetCharFormat(sensedFormat,sensedMask,50,1);
+	test(sensedMask.IsNull());
+	//
+	TheText->GetCharFormat(sensedFormat,sensedMask,44,21);
+	test(sensedMask.IsNull());
+	//
+	TFileName file=_L("z:\\test\\app-framework\\etext\\t_indter.pml");
+	SetRichTextL(file);
+
+	TheText->GetCharFormat(sensedFormat,sensedMask,4,1);
+	//
+	TheText->GetCharFormat(sensedFormat,sensedMask,0,TheText->DocumentLength());
+	test(sensedMask.AttribIsSet(EAttFontStrokeWeight));
+	test(sensedMask.AttribIsSet(EAttFontPosture));
+	test(sensedMask.AttribIsSet(EAttFontUnderline));
+	test(sensedMask.AttribIsSet(EAttFontStrikethrough));
+	test(sensedMask.AttribIsSet(EAttFontPrintPos));
+	}
+
+
+LOCAL_C void DoTestL()
+// Main routine
+//
+    {
+	CreateRichTextL();
+	TestParaFormatL();
+	TestCharFormatL();
+	test.End();
+	DestroyRichText();
+    }
+
+
+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 streaming framework.
+//
+    {
+
+	test.Title();
+	__UHEAP_MARK;
+	setupCleanup();
+	TRAPD(r, DoTestL());
+    test(r == KErrNone);
+
+	delete TheTrapCleanup;
+	
+	__UHEAP_MARKEND;
+	test.Close();
+	return 0;
+    }