textrendering/textformatting/test/src/TTextView.cpp
changeset 0 1fb32624e06b
child 16 748ec5531811
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/textrendering/textformatting/test/src/TTextView.cpp	Tue Feb 02 02:02:46 2010 +0200
@@ -0,0 +1,2284 @@
+/*
+* Copyright (c) 2000-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: 
+* TTextView.cpp test file for UndoSystem classes
+*
+*/
+
+
+#include <e32test.h>
+
+#include <coemain.h>
+#include <frmtview.h>
+#include <txtrich.h>
+#include <conpics.h>
+#include <e32math.h>
+
+#include "form_and_etext_editor.h"
+#include "UndoSystem.h"
+#include "EditorUndo.h"
+#include "FRMPAGE.H"
+
+_LIT(KHello, "hello world");
+const TInt KPaginatePriority = -100;
+const TInt KGranularity = 10;
+
+using namespace UndoSystem;
+
+LOCAL_C TInt GetNumber(TInt aMin, TInt aMax)
+	{
+	__ASSERT_ALWAYS(aMin <= aMax, User::Invariant());
+
+	TInt64 seed = Math::Random();
+	TReal randomReal = Math::FRand(seed);
+
+	TReal maxReal = randomReal * ((aMax-aMin)+1);
+	TReal rounded = 0;
+	User::LeaveIfError(Math::Round(rounded, maxReal, 0));
+
+	TInt result = rounded + aMin;
+	
+	if(result> aMax)
+		{
+		return aMax;
+		}
+	return result;
+	}
+
+void ManipulateText(CTextView* aView, CRichText* aText)
+	{
+	_LIT(KStartText, "The quick brown fox jumped over the lazy dog.");
+	aText->InsertL(0, KStartText);
+	aView->HandleInsertDeleteL(TCursorSelection(0, KStartText().Length()), 0);
+	aText->InsertL(19, TChar(CEditableText::EParagraphDelimiter));
+	aView->HandleCharEditL();
+	TCharFormat format;
+	TCharFormatMask mask;
+	format.iFontSpec.iFontStyle.SetStrokeWeight(EStrokeWeightBold);
+	mask.ClearAll();
+	mask.SetAttrib(EAttFontStrokeWeight);
+	aText->ApplyCharFormatL(format, mask, 41, 3);
+	aView->HandleRangeFormatChangeL(TCursorSelection(41, 44));
+	aView->SetDocPosL(42);
+	TInt length = aText->DocumentLength();
+	aText->DeleteL(0, length);
+	aView->HandleInsertDeleteL(TCursorSelection(0, 0), length);
+	}
+
+void ManipulateText1(CTextView* aView, CRichText* aText)
+	{
+	TInt testaYPos = 0;
+	_LIT(KText, "The weather is quite good today, but it's a bit too cold");
+	aText->InsertL(0, KText);
+	aView->HandleInsertDeleteL(TCursorSelection(0, KText().Length()), 0);
+	aView->SetDocPosL(10); //56 is the position of the last character d
+	aView->SetViewLineAtTopL(1);
+	aView->SetViewL(50, testaYPos);
+	aView->HandleAdditionalCharactersAtEndL();
+	}
+
+inline TBool IsSurrogate(TText16 aInt16)
+/**
+@return True, if aText16 is high surrogate or low surrogate; false, otherwise.
+*/
+	{
+	return (aInt16 & 0xF800) == 0xD800;
+	}
+
+class CMyTestPicture : public CPicture
+	{
+public:
+	static CMyTestPicture* NewL(TSize aSize);
+	void Draw(CGraphicsContext&,const TPoint&,const TRect&,MGraphicsDeviceMap*) const {}
+	void ExternalizeL(RWriteStream& /*aStream*/) const {}
+	void GetOriginalSizeInTwips(TSize& aSize) const {aSize=iSizeOfPicture;}
+private:
+	CMyTestPicture(TSize aSize);
+private:
+	TSize iSizeOfPicture;
+	};
+
+CMyTestPicture* CMyTestPicture::NewL(TSize aSize)
+	{
+	return new(ELeave) CMyTestPicture(aSize);
+	}
+
+
+CMyTestPicture::CMyTestPicture(TSize aSize):iSizeOfPicture(aSize)
+	{}
+
+
+class CTextViewTest : public CBase
+	{
+public:
+	CTextViewTest(CCoeEnv& aEnv)
+		: iEnv(aEnv), 	iWindowRect(10, 10, 110, 110), iWindow(aEnv.WsSession()),
+		test(_L("TTextView - Some tests for CTextView")) {}
+	void ConstructL();
+	void InitializeL();
+	void AddTextL(const TDesC&);
+	void Destroy();
+	~CTextViewTest();
+	void TestL();
+	void Test1L();
+	void TestCancelSelectionL();
+	void TestHandleAdditionalCharactersAtEndL();
+	void TestFinishBackgroundFormattingL();
+	void TestSetCursorVisibilityL();
+	void TestSetSelectionVisibilityL();
+	void TestEnablePictureFrameL();
+	void TestSetCursorWidthTypeL();
+	void TestParagraphRectL();
+	void TestSetDocPosL();
+	void TestSetViewLineAtTopL();
+	void TestDrawL();
+	void TestFormatTextL();
+	void TestHandleCharEditL();
+	void TestHandleRangeFormatChangeL();
+	void TestHandleInsertDeleteL();
+	void TestHandleGlobalChangeL();
+	void TestHandleGlobalChangeNoRedrawL();
+	void TestScrollDisplayL();
+    void TestScrollDisplayPixelsL();
+    void TestScrollDisplayPixelsNoLimitBordersL(TInt aOffset);
+    void TestForDEF142286BounceScrollingL();
+	void TestScrollDisplayLinesL();
+	void TestScrollDisplayParagraphsL();
+	void TestSetViewL();
+	void TestMoveCursorL();
+	void TestSetSelectionL();
+	void TestMatchCursorHeightL();
+	void TestCalculateHorizontalExtremesL();
+	void TestXyPosToDocPosL();
+//	void TestDrawL1();
+	void TestGetPictureRectangleL();
+	void TestGetPictureRectangle1L();
+	void TestSetDisplayContextL();
+	void TestGetPictureRectangleDefectL();
+	void TestGetLineRectL(); // Test for defect WEP-567K9C Form panics when picture
+							 // inserted in CRichText and alignmnent is set to bottom
+	void TestForDEF003426L();
+	void TestForDEF038488L();
+	void InitializeDiffCharFormatL();
+	void TestGetParaFormatL();
+	// Function to test the Class TFormAndEtextEditor
+	void FormAndEtextTestL();
+	void TestForINC092725L();
+	void TestForPDEF108443L();
+	void TestForPDEF113755L();
+	void TestForPDEF115165L();
+	void TestForPDEF118443L();
+	void TestForPDEF121798L();
+	void TestForPDEF120239L();
+	void TestForDEF124989L();
+	void TestForDEF124975L();
+	
+	struct STestDataTInt4
+		{
+		TInt iDoc1;
+		TInt iDoc2; 
+		TInt iPos1;
+		TInt iPos2;		
+		};
+	
+private:
+	CCoeEnv& iEnv;
+	TRect iWindowRect;
+	CParaFormatLayer* iParaLayer;
+	CCharFormatLayer* iCharLayer;
+	CRichText* iEtext;
+	CTextLayout* iLayout;
+	RWindow iWindow;
+	CTextView* iView;
+	RTest test;
+	TCursorSelection select;
+	TInt testDeltaY;
+	TInt testDeltaLines;
+	TInt testDeltaParas;
+	TInt testaYPos;
+	TCursorPosition::TMovementType testaMovement;
+	TFontSpec testaFontSpec;
+	TInt testaLeft;
+	TInt testaRight;
+	TPoint testaPoint;
+	TBool testaCanScaleOrCrop;
+	CBitmapContext* testaGc;
+	TPoint testaXyPos;
+	CBitmapDevice* testaGd;
+	RWindowGroup testaGroupWin;
+	RWsSession testaSession;
+	};
+
+void CTextViewTest::ConstructL()
+	{
+	iWindow.Construct(iEnv.RootWin(), 12345);
+	iParaLayer = CParaFormatLayer::NewL();
+	iCharLayer = CCharFormatLayer::NewL();
+	test.Title();
+	test.Start(_L("CTextView Tests:"));
+	}
+
+void CTextViewTest::InitializeL()
+	{
+	Destroy();
+	iEtext = CRichText::NewL(iParaLayer, iCharLayer);
+	iLayout = CTextLayout::NewL(iEtext, iWindowRect.Width());
+	iView = CTextView::NewL(iLayout, iWindowRect, iEnv.ScreenDevice(),
+		iEnv.SystemGc().Device(), &iWindow, &iEnv.RootWin(), &iEnv.WsSession());
+	testaGd=(CBitmapDevice*) iEnv.SystemGc().Device();
+	}
+
+void CTextViewTest::AddTextL(const TDesC& aText)
+	{
+	iEtext->InsertL(0, aText);
+	TCursorSelection s(0, aText.Length());
+	iView->HandleInsertDeleteL(s, 0);
+	}
+
+void CTextViewTest::InitializeDiffCharFormatL()
+	{
+	Destroy();
+	delete iCharLayer;
+	iCharLayer=0;
+	TCharFormat charFormat;
+	TCharFormatMask charFormatMask;
+	charFormat.iFontPresentation.iPictureAlignment=TFontPresentation::EAlignBottom;
+	charFormatMask.SetAttrib(EAttFontPictureAlignment);
+	iCharLayer = CCharFormatLayer::NewL(charFormat,charFormatMask);
+	iEtext = CRichText::NewL(iParaLayer, iCharLayer);
+	iLayout = CTextLayout::NewL(iEtext, iWindowRect.Width());
+	iView = CTextView::NewL(iLayout, iWindowRect, iEnv.ScreenDevice(),
+		iEnv.SystemGc().Device(), &iWindow, &iEnv.RootWin(), &iEnv.WsSession());
+	testaGd=(CBitmapDevice*) iEnv.SystemGc().Device();
+	}
+
+void CTextViewTest::Destroy()
+	{
+	delete iView;
+	iView = 0;
+	delete iLayout;
+	iLayout = 0;
+	delete iEtext;
+	iEtext = 0;
+	}
+
+
+void CTextViewTest::TestL()
+	{
+	// Test for fix to ASR-4UYHZX: ETEXT panic 12 (ECharPosBeyondDocument) when
+	// out of memory
+	InitializeL();
+	ManipulateText(iView, iEtext);
+	Destroy();
+	TInt consecutiveSuccesses = 0;
+	for (TInt i = 1; consecutiveSuccesses != 100; ++i)
+		{
+		__UHEAP_MARK;
+		InitializeL();
+		__UHEAP_SETFAIL(RHeap::EDeterministic, i);
+		TRAPD(err, ManipulateText(iView, iEtext));
+		Destroy();
+		__UHEAP_SETFAIL(RHeap::ENone, 0);
+		__UHEAP_MARKENDC(0);
+		if (err == KErrNone)
+			++consecutiveSuccesses;
+		else
+			consecutiveSuccesses = 0;
+		}
+	}
+
+
+void CTextViewTest::Test1L()
+	{
+	// testing functions SetViewL, SetViewLineAtTopL,
+	// SetDocPosL & HandleAdditionalCharactersAtEndL
+	// - should work but need some kind
+	// of pre-settings and initialization before they can all be proved
+	// that there is no memory leak
+	InitializeL();
+	ManipulateText1(iView, iEtext); //where all pre-settings have been done
+	Destroy();
+	TInt consecutiveSuccesses = 0;
+	for (TInt i = 1; consecutiveSuccesses != 100; ++i)
+		{
+		__UHEAP_MARK;
+		InitializeL();
+		__UHEAP_SETFAIL(RHeap::EDeterministic, i);
+		TRAPD(err, ManipulateText1(iView, iEtext));
+		Destroy();
+		__UHEAP_SETFAIL(RHeap::ENone, 0);
+		__UHEAP_MARKENDC(0);
+		if (err == KErrNone)
+			++consecutiveSuccesses;
+		else
+			consecutiveSuccesses = 0;
+		}
+	}
+
+
+void CTextViewTest::TestCancelSelectionL()
+	{
+	InitializeL();
+	iView->CancelSelectionL();
+	Destroy();
+	TInt consecutiveSuccesses = 0;
+	for (TInt i = 1; consecutiveSuccesses != 100; ++i)
+		{
+		__UHEAP_MARK;
+		InitializeL();
+		__UHEAP_SETFAIL(RHeap::EDeterministic, i);
+		TRAPD(err, iView->CancelSelectionL());
+		Destroy();
+		__UHEAP_SETFAIL(RHeap::ENone, 0);
+		__UHEAP_MARKENDC(0);
+		if (err == KErrNone)
+			++consecutiveSuccesses;
+		else
+			consecutiveSuccesses = 0;
+		}
+	}
+
+
+void CTextViewTest::TestFinishBackgroundFormattingL()
+	{
+	InitializeL();
+	iView->FinishBackgroundFormattingL();
+	Destroy();
+	TInt consecutiveSuccesses = 0;
+	for (TInt i = 1; consecutiveSuccesses != 100; ++i)
+		{
+		__UHEAP_MARK;
+		InitializeL();
+		__UHEAP_SETFAIL(RHeap::EDeterministic, i);
+		TRAPD(err, iView->FinishBackgroundFormattingL());
+		Destroy();
+		__UHEAP_SETFAIL(RHeap::ENone, 0);
+		__UHEAP_MARKENDC(0);
+		if (err == KErrNone)
+			++consecutiveSuccesses;
+		else
+			consecutiveSuccesses = 0;
+		}
+	}
+
+
+void CTextViewTest::TestFormatTextL()
+	{
+	InitializeL();
+	iView->FormatTextL();
+	Destroy();
+	TInt consecutiveSuccesses = 0;
+	for (TInt i = 1; consecutiveSuccesses != 100; ++i)
+		{
+		__UHEAP_MARK;
+		InitializeL();
+		__UHEAP_SETFAIL(RHeap::EDeterministic, i);
+		TRAPD(err, iView->FormatTextL());
+		Destroy();
+		__UHEAP_SETFAIL(RHeap::ENone, 0);
+		__UHEAP_MARKENDC(0);
+		if (err == KErrNone)
+			++consecutiveSuccesses;
+		else
+			consecutiveSuccesses = 0;
+		}
+	}
+
+
+void CTextViewTest::TestSetCursorVisibilityL()
+	{
+	InitializeL();
+	iView->SetCursorVisibilityL(1,1);
+	Destroy();
+	TInt consecutiveSuccesses = 0;
+	for (TInt i = 1; consecutiveSuccesses != 100; ++i)
+		{
+		__UHEAP_MARK;
+		InitializeL();
+		__UHEAP_SETFAIL(RHeap::EDeterministic, i);
+		TRAPD(err, iView->SetCursorVisibilityL(1,1)); //TInt aLineCursor, TInt aTextCursor
+		Destroy();
+		__UHEAP_SETFAIL(RHeap::ENone, 0);
+		__UHEAP_MARKENDC(0);
+		if (err == KErrNone)
+			++consecutiveSuccesses;
+		else
+			consecutiveSuccesses = 0;
+		}
+	}
+
+
+void CTextViewTest::TestSetSelectionVisibilityL()
+	{
+	InitializeL();
+	iView->SetSelectionVisibilityL(1);
+	Destroy();
+	TInt consecutiveSuccesses = 0;
+	for (TInt i = 1; consecutiveSuccesses != 100; ++i)
+		{
+		__UHEAP_MARK;
+		InitializeL();
+		__UHEAP_SETFAIL(RHeap::EDeterministic, i);
+		TRAPD(err, iView->SetSelectionVisibilityL(1)); //TBool aSelectionVisible
+		Destroy();
+		__UHEAP_SETFAIL(RHeap::ENone, 0);
+		__UHEAP_MARKENDC(0);
+		if (err == KErrNone)
+			++consecutiveSuccesses;
+		else
+			consecutiveSuccesses = 0;
+		}
+	}
+
+
+void CTextViewTest::TestEnablePictureFrameL()
+	{
+	InitializeL();
+	iView->EnablePictureFrameL(1);
+	Destroy();
+	TInt consecutiveSuccesses = 0;
+	for (TInt i = 1; consecutiveSuccesses != 100; ++i)
+		{
+		__UHEAP_MARK;
+		InitializeL();
+		__UHEAP_SETFAIL(RHeap::EDeterministic, i);
+		TRAPD(err, iView->EnablePictureFrameL(1)); //TBool aEnabled
+		Destroy();
+		__UHEAP_SETFAIL(RHeap::ENone, 0);
+		__UHEAP_MARKENDC(0);
+		if (err == KErrNone)
+			++consecutiveSuccesses;
+		else
+			consecutiveSuccesses = 0;
+		}
+	}
+
+
+void CTextViewTest::TestSetCursorWidthTypeL()
+	{
+	InitializeL();
+	iView->SetCursorWidthTypeL(TTextCursor::ETypeRectangle,0);
+	Destroy();
+	TInt consecutiveSuccesses = 0;
+	for (TInt i = 1; consecutiveSuccesses != 100; ++i)
+		{
+		__UHEAP_MARK;
+		InitializeL();
+		__UHEAP_SETFAIL(RHeap::EDeterministic, i);
+		TRAPD(err, iView->SetCursorWidthTypeL(TTextCursor::ETypeRectangle,0)); //TTextCursor::EType aType, TInt aWidth=0
+		Destroy();
+		__UHEAP_SETFAIL(RHeap::ENone, 0);
+		__UHEAP_MARKENDC(0);
+		if (err == KErrNone)
+			++consecutiveSuccesses;
+		else
+			consecutiveSuccesses = 0;
+		}
+	}
+
+
+void CTextViewTest::TestParagraphRectL()
+	{
+	InitializeL();
+	iView->ParagraphRectL(1);
+	Destroy();
+	TInt consecutiveSuccesses = 0;
+	for (TInt i = 1; consecutiveSuccesses != 100; ++i)
+		{
+		__UHEAP_MARK;
+		InitializeL();
+		__UHEAP_SETFAIL(RHeap::EDeterministic, i);
+		TRAPD(err, iView->ParagraphRectL(1)); //TInt aDocPos
+		Destroy();
+		__UHEAP_SETFAIL(RHeap::ENone, 0);
+		__UHEAP_MARKENDC(0);
+		if (err == KErrNone)
+			++consecutiveSuccesses;
+		else
+			consecutiveSuccesses = 0;
+		}
+	}
+
+
+void CTextViewTest::TestDrawL()
+	{
+	InitializeL();
+	iView->DrawL(iWindowRect);
+	Destroy();
+	TInt consecutiveSuccesses = 0;
+	for (TInt i = 1; consecutiveSuccesses != 100; ++i)
+		{
+		__UHEAP_MARK;
+		InitializeL();
+		__UHEAP_SETFAIL(RHeap::EDeterministic, i);
+		TRAPD(err, iView->DrawL(iWindowRect)); //TRect aRect
+		Destroy();
+		__UHEAP_SETFAIL(RHeap::ENone, 0);
+		__UHEAP_MARKENDC(0);
+		if (err == KErrNone)
+			++consecutiveSuccesses;
+		else
+			consecutiveSuccesses = 0;
+		}
+	}
+
+
+void CTextViewTest::TestHandleRangeFormatChangeL()
+	{
+	InitializeL();
+	iView->HandleRangeFormatChangeL(select, EFalse);
+	Destroy();
+	TInt consecutiveSuccesses = 0;
+	for (TInt i = 1; consecutiveSuccesses != 100; ++i)
+		{
+		__UHEAP_MARK;
+		InitializeL();
+		__UHEAP_SETFAIL(RHeap::EDeterministic, i);
+		TRAPD(err, iView->HandleRangeFormatChangeL(select, EFalse));
+		Destroy();
+		__UHEAP_SETFAIL(RHeap::ENone, 0);
+		__UHEAP_MARKENDC(0);
+		if (err == KErrNone)
+			++consecutiveSuccesses;
+		else
+			consecutiveSuccesses = 0;
+		}
+	}
+
+
+void CTextViewTest::TestHandleInsertDeleteL()
+	{
+	InitializeL();
+	iView->HandleInsertDeleteL(select, 1, EFalse);
+	Destroy();
+	TInt consecutiveSuccesses = 0;
+	for (TInt i = 1; consecutiveSuccesses != 100; ++i)
+		{
+		__UHEAP_MARK;
+		InitializeL();
+		__UHEAP_SETFAIL(RHeap::EDeterministic, i);
+		TRAPD(err, iView->HandleInsertDeleteL(select, 1, EFalse));
+		Destroy();
+		__UHEAP_SETFAIL(RHeap::ENone, 0);
+		__UHEAP_MARKENDC(0);
+		if (err == KErrNone)
+			++consecutiveSuccesses;
+		else
+			consecutiveSuccesses = 0;
+		}
+	}
+
+
+void CTextViewTest::TestHandleGlobalChangeL()
+	{
+	InitializeL();
+	iView->HandleGlobalChangeL(TViewYPosQualifier());
+	Destroy();
+	TInt consecutiveSuccesses = 0;
+	for (TInt i = 1; consecutiveSuccesses != 100; ++i)
+		{
+		__UHEAP_MARK;
+		InitializeL();
+		__UHEAP_SETFAIL(RHeap::EDeterministic, i);
+		TRAPD(err, iView->HandleGlobalChangeL(TViewYPosQualifier()));
+		Destroy();
+		__UHEAP_SETFAIL(RHeap::ENone, 0);
+		__UHEAP_MARKENDC(0);
+		if (err == KErrNone)
+			++consecutiveSuccesses;
+		else
+			consecutiveSuccesses = 0;
+		}
+	}
+
+
+void CTextViewTest::TestHandleGlobalChangeNoRedrawL()
+	{
+	InitializeL();
+	iView->HandleGlobalChangeNoRedrawL(TViewYPosQualifier());
+	Destroy();
+	TInt consecutiveSuccesses = 0;
+	for (TInt i = 1; consecutiveSuccesses != 100; ++i)
+		{
+		__UHEAP_MARK;
+		InitializeL();
+		__UHEAP_SETFAIL(RHeap::EDeterministic, i);
+		TRAPD(err, iView->HandleGlobalChangeNoRedrawL(TViewYPosQualifier()));
+		Destroy();
+		__UHEAP_SETFAIL(RHeap::ENone, 0);
+		__UHEAP_MARKENDC(0);
+		if (err == KErrNone)
+			++consecutiveSuccesses;
+		else
+			consecutiveSuccesses = 0;
+		}
+	}
+
+
+void CTextViewTest::TestScrollDisplayL()
+	{
+	InitializeL();
+	iView->ScrollDisplayL(TCursorPosition::EFLeft);
+	Destroy();
+	TInt consecutiveSuccesses = 0;
+	for (TInt i = 1; consecutiveSuccesses != 100; ++i)
+		{
+		__UHEAP_MARK;
+		InitializeL();
+		__UHEAP_SETFAIL(RHeap::EDeterministic, i);
+		TRAPD(err, iView->ScrollDisplayL(TCursorPosition::EFLeft));
+		Destroy();
+		__UHEAP_SETFAIL(RHeap::ENone, 0);
+		__UHEAP_MARKENDC(0);
+		if (err == KErrNone)
+			++consecutiveSuccesses;
+		else
+			consecutiveSuccesses = 0;
+		}
+	}
+
+
+void CTextViewTest::TestScrollDisplayPixelsL()
+	{
+	InitializeL();
+	iView->ScrollDisplayPixelsL(testDeltaY);
+	Destroy();
+	TInt consecutiveSuccesses = 0;
+	for (TInt i = 1; consecutiveSuccesses != 100; ++i)
+		{
+		__UHEAP_MARK;
+		InitializeL();
+		__UHEAP_SETFAIL(RHeap::EDeterministic, i);
+		TRAPD(err, iView->ScrollDisplayPixelsL(testDeltaY));
+		Destroy();
+		__UHEAP_SETFAIL(RHeap::ENone, 0);
+		__UHEAP_MARKENDC(0);
+		if (err == KErrNone)
+			++consecutiveSuccesses;
+		else
+			consecutiveSuccesses = 0;
+		}
+	}
+
+
+void CTextViewTest::TestScrollDisplayPixelsNoLimitBordersL(TInt aOffset)
+    { 
+    /*
+     * This test case is for new added function ScrollDisplayPixelsNoLimitBorderL() which support
+     * no limit scrolling, using this function text view can be scrolled beyond the top and bottom 
+     * border.
+     * Text view will be firstly scrolled to border using ScrollDisplayPixelsL() which can't scroll
+     * text view beyond the top or bottom border.
+     * Then text view will be scrolled using ScrollDisplayPixelsNoLimitBorderL() to same direction.
+     * Code will test this step that if text view is really scrolled beyond the border by checking 
+     * the iBandTop position before and after the scrolling operation.*/
+    
+    InitializeL();
+    _LIT(KTestParagraph, "This is a piece of text which is used to test the bounce scrolling feature made by s60.");
+    for (TInt i=0;i<=20;i++)
+        AddTextL(KTestParagraph);
+    
+    TInt firstBandTop, secondBandTop;
+    TInt offset = aOffset;
+    while( offset!=0 )
+        {
+        iView->ScrollDisplayPixelsL(offset);
+        }
+    offset = aOffset;
+    firstBandTop = iLayout->PixelsAboveBand();
+    iView->ScrollDisplayPixelsNoLimitBorderL(offset);
+    secondBandTop = iLayout->PixelsAboveBand();
+    test(firstBandTop - secondBandTop == offset);
+
+    offset = 0 - aOffset;
+    while( offset!=0 )
+        {
+        iView->ScrollDisplayPixelsL(offset);
+        }
+    offset = 0 - aOffset;
+    firstBandTop = iLayout->PixelsAboveBand();
+    iView->ScrollDisplayPixelsNoLimitBorderL(offset);
+    secondBandTop = iLayout->PixelsAboveBand();
+    test(firstBandTop - secondBandTop == offset);
+    
+    Destroy();
+    }
+
+
+void CTextViewTest::TestScrollDisplayLinesL()
+	{
+	InitializeL();
+	iView->ScrollDisplayLinesL(testDeltaLines);
+	Destroy();
+	TInt consecutiveSuccesses = 0;
+	for (TInt i = 1; consecutiveSuccesses != 100; ++i)
+		{
+		__UHEAP_MARK;
+		InitializeL();
+		__UHEAP_SETFAIL(RHeap::EDeterministic, i);
+		TRAPD(err, iView->ScrollDisplayLinesL(testDeltaLines));
+		Destroy();
+		__UHEAP_SETFAIL(RHeap::ENone, 0);
+		__UHEAP_MARKENDC(0);
+		if (err == KErrNone)
+			++consecutiveSuccesses;
+		else
+			consecutiveSuccesses = 0;
+		}
+	}
+
+
+void CTextViewTest::TestScrollDisplayParagraphsL()
+	{
+	InitializeL();
+	AddTextL(KHello);
+	iView->ScrollDisplayParagraphsL(testDeltaParas);
+	Destroy();
+	TInt consecutiveSuccesses = 0;
+	for (TInt i = 1; consecutiveSuccesses != 100; ++i)
+		{
+		__UHEAP_MARK;
+		InitializeL();
+		AddTextL(KHello);
+		__UHEAP_SETFAIL(RHeap::EDeterministic, i);
+		TRAPD(err, iView->ScrollDisplayParagraphsL(testDeltaParas));
+		Destroy();
+		__UHEAP_SETFAIL(RHeap::ENone, 0);
+		__UHEAP_MARKENDC(0);
+		if (err == KErrNone)
+			++consecutiveSuccesses;
+		else
+			consecutiveSuccesses = 0;
+		}
+	}
+
+
+void CTextViewTest::TestSetViewL()
+	{
+	InitializeL();
+	iView->SetViewL(1, testaYPos);
+	Destroy();
+	TInt consecutiveSuccesses = 0;
+	for (TInt i = 1; consecutiveSuccesses != 100; ++i)
+		{
+		__UHEAP_MARK;
+		InitializeL();
+		__UHEAP_SETFAIL(RHeap::EDeterministic, i);
+		TRAPD(err, iView->SetViewL(1, testaYPos));
+		Destroy();
+		__UHEAP_SETFAIL(RHeap::ENone, 0);
+		__UHEAP_MARKENDC(0);
+		if (err == KErrNone)
+			++consecutiveSuccesses;
+		else
+			consecutiveSuccesses = 0;
+		}
+	}
+
+
+void CTextViewTest::TestMoveCursorL()
+	{
+	InitializeL();
+	AddTextL(KHello);
+	iView->MoveCursorL(testaMovement, EFalse);
+	Destroy();
+	TInt consecutiveSuccesses = 0;
+	for (TInt i = 1; consecutiveSuccesses != 100; ++i)
+		{
+		__UHEAP_MARK;
+		InitializeL();
+		AddTextL(KHello);
+		__UHEAP_SETFAIL(RHeap::EDeterministic, i);
+		TRAPD(err, iView->MoveCursorL(testaMovement, EFalse));
+		Destroy();
+		__UHEAP_SETFAIL(RHeap::ENone, 0);
+		__UHEAP_MARKENDC(0);
+		if (err == KErrNone)
+			++consecutiveSuccesses;
+		else
+			consecutiveSuccesses = 0;
+		}
+	}
+
+
+void CTextViewTest::TestSetSelectionL()
+	{
+	InitializeL();
+	iView->SetSelectionL(select);
+	Destroy();
+	TInt consecutiveSuccesses = 0;
+	for (TInt i = 1; consecutiveSuccesses != 100; ++i)
+		{
+		__UHEAP_MARK;
+		InitializeL();
+		__UHEAP_SETFAIL(RHeap::EDeterministic, i);
+		TRAPD(err, iView->SetSelectionL(select));
+		Destroy();
+		__UHEAP_SETFAIL(RHeap::ENone, 0);
+		__UHEAP_MARKENDC(0);
+		if (err == KErrNone)
+			++consecutiveSuccesses;
+		else
+			consecutiveSuccesses = 0;
+		}
+	}
+
+
+void CTextViewTest::TestMatchCursorHeightL()
+	{
+	InitializeL();
+	iView->MatchCursorHeightL(testaFontSpec);
+	Destroy();
+	TInt consecutiveSuccesses = 0;
+	for (TInt i = 1; consecutiveSuccesses != 100; ++i)
+		{
+		__UHEAP_MARK;
+		InitializeL();
+		__UHEAP_SETFAIL(RHeap::EDeterministic, i);
+		TRAPD(err, iView->MatchCursorHeightL(testaFontSpec));
+		Destroy();
+		__UHEAP_SETFAIL(RHeap::ENone, 0);
+		__UHEAP_MARKENDC(0);
+		if (err == KErrNone)
+			++consecutiveSuccesses;
+		else
+			consecutiveSuccesses = 0;
+		}
+	}
+
+
+void CTextViewTest::TestCalculateHorizontalExtremesL()
+	{
+	InitializeL();
+	iView->CalculateHorizontalExtremesL(testaLeft, testaRight, EFalse);
+	Destroy();
+	TInt consecutiveSuccesses = 0;
+	for (TInt i = 1; consecutiveSuccesses != 100; ++i)
+		{
+		__UHEAP_MARK;
+		InitializeL();
+		__UHEAP_SETFAIL(RHeap::EDeterministic, i);
+		TRAPD(err, iView->CalculateHorizontalExtremesL(testaLeft, testaRight, EFalse));
+		Destroy();
+		__UHEAP_SETFAIL(RHeap::ENone, 0);
+		__UHEAP_MARKENDC(0);
+		if (err == KErrNone)
+			++consecutiveSuccesses;
+		else
+			consecutiveSuccesses = 0;
+		}
+	}
+
+
+void CTextViewTest::TestXyPosToDocPosL()
+	{
+	InitializeL();
+	iView->XyPosToDocPosL(testaPoint);
+	Destroy();
+	TInt consecutiveSuccesses = 0;
+	for (TInt i = 1; consecutiveSuccesses != 100; ++i)
+		{
+		__UHEAP_MARK;
+		InitializeL();
+		__UHEAP_SETFAIL(RHeap::EDeterministic, i);
+		TRAPD(err, iView->XyPosToDocPosL(testaPoint));
+		Destroy();
+		__UHEAP_SETFAIL(RHeap::ENone, 0);
+		__UHEAP_MARKENDC(0);
+		if (err == KErrNone)
+			++consecutiveSuccesses;
+		else
+			consecutiveSuccesses = 0;
+		}
+	}
+
+/*
+void CTextViewTest::TestDrawL1()
+	{
+	InitializeL();
+	iView->DrawL(iWindowRect, testaGc);
+	Destroy();
+	TInt consecutiveSuccesses = 0;
+	for (TInt i = 1; consecutiveSuccesses != 100; ++i)
+		{
+		__UHEAP_MARK;
+		InitializeL();
+		__UHEAP_SETFAIL(RHeap::EDeterministic, i);
+		TRAPD(err, iView->DrawL(iWindowRect, testaGc));
+		Destroy();
+		__UHEAP_SETFAIL(RHeap::ENone, 0);
+		__UHEAP_MARKENDC(0);
+		if (err == KErrNone)
+			++consecutiveSuccesses;
+		else
+			consecutiveSuccesses = 0;
+		}
+	}
+*/
+
+
+void CTextViewTest::TestGetPictureRectangleL()
+	{
+	InitializeL();
+	iView->GetPictureRectangleL(1, iWindowRect, &testaCanScaleOrCrop);
+	Destroy();
+	TInt consecutiveSuccesses = 0;
+	for (TInt i = 1; consecutiveSuccesses != 100; ++i)
+		{
+		__UHEAP_MARK;
+		InitializeL();
+		__UHEAP_SETFAIL(RHeap::EDeterministic, i);
+		TRAPD(err, iView->GetPictureRectangleL(1, iWindowRect, &testaCanScaleOrCrop));
+		Destroy();
+		__UHEAP_SETFAIL(RHeap::ENone, 0);
+		__UHEAP_MARKENDC(0);
+		if (err == KErrNone)
+			++consecutiveSuccesses;
+		else
+			consecutiveSuccesses = 0;
+		}
+	}
+
+
+void CTextViewTest::TestGetPictureRectangle1L()
+	{
+	InitializeL();
+	iView->GetPictureRectangleL(testaXyPos, iWindowRect, &testaCanScaleOrCrop);
+	Destroy();
+	TInt consecutiveSuccesses = 0;
+	for (TInt i = 1; consecutiveSuccesses != 100; ++i)
+		{
+		__UHEAP_MARK;
+		InitializeL();
+		__UHEAP_SETFAIL(RHeap::EDeterministic, i);
+		TRAPD(err, iView->GetPictureRectangleL(testaXyPos, iWindowRect, &testaCanScaleOrCrop));
+		Destroy();
+		__UHEAP_SETFAIL(RHeap::ENone, 0);
+		__UHEAP_MARKENDC(0);
+		if (err == KErrNone)
+			++consecutiveSuccesses;
+		else
+			consecutiveSuccesses = 0;
+		}
+	}
+
+
+void CTextViewTest::TestSetDisplayContextL()
+	{
+	CBitmapContext* atestGc;
+	CBitmapContext* anotherGc;
+	InitializeL();
+	iView->SetDisplayContextL(testaGd, &iWindow, &testaGroupWin, &testaSession);
+	Destroy();
+	TInt consecutiveSuccesses = 0;
+	for (TInt i = 1; consecutiveSuccesses != 1; ++i)
+		{
+		__UHEAP_MARK;
+		InitializeL();
+		__UHEAP_SETFAIL(RHeap::EDeterministic, i);
+		atestGc=iView->BitmapContext();
+		TRAPD(err, iView->SetDisplayContextL(testaGd, &iWindow, &testaGroupWin, &testaSession));
+		anotherGc=iView->BitmapContext();
+		if (err)
+			{
+			test(atestGc==anotherGc);
+			}
+		else
+			{
+			test(atestGc!=anotherGc);
+			}
+		Destroy();
+		__UHEAP_SETFAIL(RHeap::ENone, 0);
+		__UHEAP_MARKENDC(0);
+		if (err == KErrNone)
+			++consecutiveSuccesses;
+		else
+			consecutiveSuccesses = 0;
+		}
+	}
+
+
+void CTextViewTest::TestGetPictureRectangleDefectL()
+	{
+	/*
+	_LIT(KParagraphAverage,"Some text to test that the Picture returned is in the correct position. The size of this paragraph should be reasonable, not too long not too short.");
+	_LIT(KParagraphBigger,"Moulin Rouge: a film review. I don't know what I was expecting from Oulin Rouge, but what I got came as an even more of a surprise. The movie is a visual feast, a sing along extravaganza. The choices of songs is refreshing, with mix of Nirvan-Smells like teen spirit- to Madonna-Like a virgin-. Who knew that Ewan and Nicole could sing so well together.");
+	_LIT(KParagraphSmall,"CBusBase is an abstract base class for dynamic memory buffers. You can read or write bytes.");
+	InitializeL();
+	TInt length;
+	iEtext->InsertL(0,KParagraphAverage);
+	iView->HandleInsertDeleteL(TCursorSelection(0, KParagraphAverage().Length()), 0);
+	iEtext->InsertL(KParagraphAverage().Length(),TChar(CEditableText::EParagraphDelimiter));
+	iView->HandleCharEditL();
+
+	length=iEtext->LdDocumentLength();
+	iEtext->InsertL(iEtext->LdDocumentLength(),KParagraphBigger);
+	iView->HandleInsertDeleteL(TCursorSelection(length,KParagraphBigger().Length()), 0);
+
+	length=iEtext->LdDocumentLength();
+	iEtext->InsertL(iEtext->LdDocumentLength(),KParagraphSmall);
+	iView->HandleInsertDeleteL(TCursorSelection(length,KParagraphSmall().Length()), 0);
+
+	TSize size(100,100);
+	TPoint xypos;
+	CMyTestPicture* testpicture1 = CMyTestPicture::NewL(size);
+	CMyTestPicture* testpicture2 = CMyTestPicture::NewL(size);
+	CMyTestPicture* testpicture3 = CMyTestPicture::NewL(size);
+	size.SetSize(200,200);
+	CMyTestPicture* testpicture4 = CMyTestPicture::NewL(size);
+	CMyTestPicture* testpicture5 = CMyTestPicture::NewL(size);
+	CMyTestPicture* testpicture6 = CMyTestPicture::NewL(size);
+	TPictureHeader mypic;
+	TPictureHeader mypic2;
+	//mypic.iPictureType = KUidXzePictureType;
+	mypic.iPicture=testpicture1;
+	mypic2.iPicture=testpicture2;
+	// Testing the picture
+
+	iEtext->InsertL(10,mypic2);
+	mypic2.iPicture=testpicture1;
+	iEtext->InsertL(40,mypic2);
+	iView->DocPosToXyPosL(200,xypos);
+	test.Printf(_L("The xy coords are %d & %d\n"),xypos.iX,xypos.iY);
+	xypos.SetXY(78,55);
+	TInt docpos;
+	docpos=iView->XyPosToDocPosL(xypos);
+	test.Printf(_L("The new docpos is %d\n"),docpos);
+	TRect rect;
+	TBool boo;
+	boo=iView->GetPictureRectangleL(40,rect);
+	test.Printf(_L("%d & %d \n"),rect.Size().iHeight,rect.Size().iWidth);
+	if (boo)
+		test.Printf(_L("Yes!"));
+	else
+		test.Printf(_L("Noo!"));
+	*/
+	}
+
+void CTextViewTest::TestGetLineRectL()
+	{
+
+	_LIT(KSomeText,"Empty. Well this text has to now be something else. Maybe this will increase the height of the CTextLayout and if it does then");
+	// calls the initializeDiffCharFormatL to set the new CharFormatLayer
+	// which sets the picture alignment to be Bottom.
+	InitializeDiffCharFormatL();
+	// create test pictures to be inserted into the richtext object
+	TSize size(100,100);
+	CMyTestPicture* testpicture1 = CMyTestPicture::NewL(size);
+	TPictureHeader tPicHeader;
+	tPicHeader.iPictureType = KUidXzePictureType;
+	tPicHeader.iPicture = testpicture1;
+	test.Printf(_L("Created a picture\n"));
+
+	// inserting some text & picture into the richtext object
+	iEtext->InsertL(0,KSomeText);
+	TInt startOfPicture;
+	startOfPicture=iEtext->DocumentLength();
+	iEtext->InsertL(startOfPicture,tPicHeader);
+	test.Printf(_L("Inserted the picture in CRichText object \n"));
+
+	//Call the guilty function
+	TRect resultingRect;
+	TInt endOfDocument = iEtext->DocumentLength();
+	iView->FormatTextL();
+	resultingRect=iLayout->GetLineRectL(startOfPicture,endOfDocument);
+	}
+
+void CTextViewTest::TestGetParaFormatL()
+	{
+	test.Next(_L("Starting GetParaFormatL test"));
+	_LIT(KSomeText,"Empty. Well this text has to now be something else. Maybe this will increase the height of the CTextLayout and if it does then");
+	InitializeL();
+	// create the CParaFormat & TparaFormatMask
+	// and set that in the iParaFormatLayer
+	CParaFormat* paraFormat = CParaFormat::NewL();
+	TParaFormatMask paraFormatMask;
+	iParaLayer->SetL(paraFormat,paraFormatMask);
+	iEtext->SetGlobalParaFormat(iParaLayer);
+	iEtext->InsertL(0,KSomeText);
+	iView->FormatTextL();
+	// Create another CParaFormat & TParaFormatMask and set
+	// some attributes to be different from the default.
+	CParaFormat* anotherParaFormat = CParaFormat::NewL();
+	TParaFormatMask anotherParaFormatMask;
+	anotherParaFormat->iRightMarginInTwips=200;
+	anotherParaFormatMask.SetAttrib(EAttRightMargin);
+	anotherParaFormat->iLeftMarginInTwips=400;
+	anotherParaFormatMask.SetAttrib(EAttLeftMargin);
+	anotherParaFormat->iLineSpacingInTwips=300;
+	anotherParaFormatMask.SetAttrib(EAttLineSpacing);
+	anotherParaFormat->iHorizontalAlignment=CParaFormat::ERightAlign;
+	anotherParaFormatMask.SetAttrib(EAttAlignment);
+
+	//Now call CRichText::GetParaFormat using anotherParaFormat * Mask
+	// and test that it is the same as paraFormat.
+ 	iEtext->GetParaFormatL(anotherParaFormat,anotherParaFormatMask,0,10);
+
+	TInt result = anotherParaFormat->iRightMarginInTwips;
+	test (result==0);
+
+	result = anotherParaFormat->iLeftMarginInTwips;
+	test (result==0);
+	result = anotherParaFormat->iLineSpacingInTwips;
+	test (result==200); // default value for iLineSpacingInTwips set in paraFormat is 200
+	test (anotherParaFormat->iHorizontalAlignment == CParaFormat::ELeftAlign);
+
+	TBool testresult;
+	testresult=anotherParaFormat->IsEqual(*paraFormat);
+	test(testresult);
+
+	}
+
+
+void CTextViewTest::TestForDEF003426L()
+	{
+	// Initialise CTextViewTest object for next test.
+	InitializeL();
+	test.Next(_L("Verifying CTextView::XyPosToDosPosL() WRT DEF003426"));
+
+	// Insert a one line paragraph into EText object and reformat view.
+	_LIT(KTestParagraph, "This is a piece of text to test the character positioning API based in X,Y cocordinates.");
+	iEtext->InsertL(0, KTestParagraph);
+	TCursorSelection sel(0, KTestParagraph().Length());
+	(void) iView->HandleInsertDeleteL(sel, 0, EFalse);
+
+	// Test XyPosToDocPosL() with coordinates beyond top left corner
+	TInt docPos = -1;
+	docPos = iView->XyPosToDocPosL(testaPoint);
+	test(docPos == 0); // Should give char position of 0
+
+	// Test XyPosToDocPosL() with coordinates beyond bottom right corner
+	TRect viewRect = iView->ViewRect();
+	viewRect.iBr.iX += 300;
+	viewRect.iBr.iY += 111;
+    docPos = iView->XyPosToDocPosL(viewRect.iBr);
+	test(docPos != 0); // Should give char position of 88
+
+	// Clean up test object
+	Destroy();
+	}
+
+/*** Test code for DEF038858
+	 " It isn't poss. to set via CTextView a TTmDocPos of iPos = 0; iLeadingEdge=false"
+ */
+void CTextViewTest::TestForDEF038488L()
+	{
+	// Initialise CTextViewTest object for next test.
+	InitializeL();
+	test.Next(_L("Verifying CTextView::SetDocPosL() DEF038858"));
+
+	_LIT(KText, "This is the test for DEF038488");
+	iEtext->InsertL(0, KText);
+	iView->HandleInsertDeleteL(TCursorSelection(0, KText().Length()), 0);
+
+	// Test SetDocPosL() with coordinates -1
+	iView->SetDocPosL(-1);
+
+	// check the value of iLeadingEdge
+	TTmDocPos RawDocPos;
+	iView->GetCursorPos(RawDocPos);
+	test(RawDocPos.iLeadingEdge == EFalse);
+
+	}
+
+CTextViewTest::~CTextViewTest()
+	{
+	test.End();
+	test.Close();
+	delete iView;
+	iWindow.Close();
+	delete iLayout;
+	delete iEtext;
+	delete iCharLayer;
+	delete iParaLayer;
+	}
+
+/**
+@SYMTestCaseID          SYSLIB-FORM-UT-1888
+@SYMTestCaseDesc        Testing the Class TFormAndEtextEditor
+@SYMTestPriority        Low
+@SYMTestActions         Tests the API's of TFormAndEtextEditor by inserting the text, applying specific format and style to the text, getting the text,format and style and also deleting the same(text,format and style)
+@SYMTestExpectedResults Tests must not fail
+@SYMREQ                 REQ0000
+*/
+void CTextViewTest::FormAndEtextTestL()
+	{
+	InitializeL();
+	test.Next(_L(" @SYMTestCaseID:SYSLIB-FORM-UT-1888 Testing TFormAndEtextEditor "));
+	TCharFormatMask charMask;
+    TCharFormat charFormat;
+	charFormat.iFontSpec.iTypeface.iName = _S("Arial");
+    charFormat.iFontSpec.iHeight = 240;
+    charMask.SetAttrib(EAttFontTypeface);
+    charMask.SetAttrib(EAttFontHeight);
+    CCharFormatLayer* charFormatLayer = CCharFormatLayer::NewL();
+    charFormatLayer->SetL(charFormat,charMask);
+	TParaFormatMask paraFormatMask;
+    CParaFormatLayer* paraFormatLayer=CParaFormatLayer::NewL((CParaFormat*)NULL,paraFormatMask);
+    CParagraphStyle* paraStyle = CParagraphStyle::NewL(*paraFormatLayer,*charFormatLayer);
+    CStyleList* styleList = CStyleList::NewL();
+    RParagraphStyleInfo paraStyleInfo(paraStyle,paraStyle);
+    paraStyleInfo.iStyle->iName=_L("Arial");
+    paraStyleInfo.iStyleForNextPara->iName=_L("Arial");
+    // Appending the new style to stylelist
+    styleList->AppendL(&paraStyleInfo);
+
+	iEtext->SetStyleListExternallyOwned(*styleList);
+	iEtext->Reset();
+	TFormAndEtextEditor newEditor(*iView,*iEtext);
+
+	TTmCharFormatLayer charLayer;
+	TTmCharFormatLayer charLayer1;
+	TTmCharFormatMask charIMask;
+	TTmCharFormat charI;
+	RTmParFormatLayer parLayer;
+	RTmParFormatLayer parLayer1;
+	TTmParFormatMask parNMask;
+	charIMask.iFlags = TTmCharFormatMask::EItalic;
+	TOpenFontFaceAttribBase attrib;
+	attrib.SetBold(EFalse);
+	charI.iFontSpec.SetAttrib(attrib);
+	parNMask.iFlags = TTmParFormatMask::EKeepWithNext;
+	RTmParFormat parN;
+	parN.iFlags = RTmParFormat::EKeepWithNext;
+	charLayer.iMask = charIMask;
+	charLayer.iFormat = charI;
+	charLayer1=charLayer;
+	parLayer.iMask = parNMask;
+
+	parLayer.iFormat.CopyL(parN);
+	TPtrC ptr1(_L("Arial"));
+	// Inserting the text and applying the style specified(Arial)
+	newEditor.InsertTextL(0, _L("Hello World"),&ptr1);
+
+	// Setting the paragraph and character format explicitly
+	newEditor.SetParFormatL(0,11,parLayer);
+	newEditor.SetCharFormatL(0,11,charLayer);
+
+	MUnifiedEditor::TFormatLevel level = MUnifiedEditor::EEffective;
+	TInt runLen=11;
+	// Getting the paragraph and character format
+	newEditor.GetParFormatL(0,level,parLayer1,runLen);
+	newEditor.GetCharFormat(0,level,charLayer1,runLen);
+
+	// Deleting first 6 characters
+	newEditor.DeleteTextL(0,6);
+	// Deleting the paragraph and character format for the remaining text
+	newEditor.DeleteParFormatL(0,5);
+	newEditor.DeleteCharFormatL(0,5);
+
+	TPtrC ptr;
+	// Get the text into ptr. A paragraph seperator(\x2029) gets appended at the end of text.
+	newEditor.GetText(0,ptr);
+	test(ptr==_L("World\x2029"));
+
+	RTmStyle style1;
+	RParagraphStyleInfo paraStyleInfo1(paraStyle,paraStyle);
+	paraStyleInfo1.iStyle->iName=_L("NewStyle");
+	paraStyleInfo1.iStyleForNextPara->iName=_L("NewStyle");
+	style1.CopyL(paraStyleInfo1);
+	// Creating a new style and changing the current style to the new one.
+	newEditor.StyleSupport()->CreateStyleL(style1);
+	newEditor.StyleSupport()->ChangeStyleL(style1);
+
+	RTmStyle style2;
+	// Get the style by Name
+	TInt retVal = newEditor.StyleSupport()->GetStyleByNameL(_L("Arial"),style2);
+	retVal = newEditor.StyleSupport()->GetStyleByNameL(_L("NewStyle"),style2);
+	// Get the style for a particular length of text
+	newEditor.StyleSupport()->GetStyle(0,ptr,runLen);
+	// Get the style by index
+	retVal = newEditor.StyleSupport()->GetStyleByIndexL(1,style1);
+	// Deleting the style
+	newEditor.StyleSupport()->DeleteStyleL(_L("NewStyle"));
+	retVal = newEditor.StyleCount();
+	test(retVal==1);
+	style1.Close();
+	style2.Close();
+	delete charFormatLayer;
+    delete paraFormatLayer;
+    delete styleList;
+	}
+
+/**
+@SYMTestCaseID          SYSLIB-FORM-UT-3347
+@SYMTestCaseDesc        Testing the fix for INC092725: RF S60 3.2 Help: Touch and
+						scrolling a topic down closing the program
+@SYMTestPriority        High
+@SYMTestActions         Run affected APIs passing scroll values that would put the display
+						outside the formatted range.
+@SYMTestExpectedResults First of all, the calls should not panic the process.
+						Secondly, that the calls leave with the correct error code.
+@SYMDEF                 INC092725
+*/
+void CTextViewTest::TestForINC092725L()
+	{
+	test.Next(_L(" @SYMTestCaseID:SYSLIB-FORM-UT-3347 Testing fix for INC092725 "));
+	TInt err = KErrNone;
+	InitializeL();
+	AddTextL(KHello);
+
+	//Scroll up
+	iLayout->AdjustVerticalAlignment(CParaFormat::EAbsoluteRightAlign);
+	TRAP(err, iView->ScrollDisplayL(TCursorPosition::EFLineUp, CTextLayout::EFAllowScrollingBlankSpace));
+	test(err==CTextLayout::EPosNotFormatted);
+	err=KErrNone;
+
+	//Scroll down
+	iLayout->AdjustVerticalAlignment(CParaFormat::EAbsoluteLeftAlign);
+	TRAP(err, iView->ScrollDisplayL(TCursorPosition::EFLineDown, CTextLayout::EFAllowScrollingBlankSpace));
+	test(err==CTextLayout::EPosNotFormatted);
+	err=KErrNone;
+
+	//Line scroll up
+	TInt i = 105;
+	iLayout->AdjustVerticalAlignment(CParaFormat::EAbsoluteRightAlign);
+	TRAP(err, iView->ScrollDisplayLinesL(i, CTextLayout::EFAllowScrollingBlankSpace));
+	test(err==CTextLayout::EPosNotFormatted);
+	err=KErrNone;
+
+	//Line scroll down
+	i = -105;
+	iLayout->AdjustVerticalAlignment(CParaFormat::EAbsoluteLeftAlign);
+	TRAP(err, iView->ScrollDisplayLinesL(i, CTextLayout::EFAllowScrollingBlankSpace));
+	test(err==CTextLayout::EPosNotFormatted);
+	err=KErrNone;
+
+	//Paragraph scroll up
+	i = 105;
+	iLayout->AdjustVerticalAlignment(CParaFormat::EAbsoluteRightAlign);
+	TRAP(err, iView->ScrollDisplayParagraphsL(i, CTextLayout::EFAllowScrollingBlankSpace));
+	test(err==CTextLayout::EPosNotFormatted);
+	err=KErrNone;
+
+	//Paragraph scroll down
+	i = -105;
+	iLayout->AdjustVerticalAlignment(CParaFormat::EAbsoluteLeftAlign);
+	TRAP(err, iView->ScrollDisplayParagraphsL(i, CTextLayout::EFAllowScrollingBlankSpace));
+	test(err==CTextLayout::EPosNotFormatted);
+	Destroy();
+	}
+
+
+class CTestScreenDevice : public CPrinterDevice
+	{
+public:
+    CTestScreenDevice(CWsScreenDevice* aDevice,RDrawableWindow& aWin);
+	TDisplayMode DisplayMode() const {return iDevice->DisplayMode();}
+	TSize SizeInPixels() const {return iDevice->SizeInPixels();}
+	TSize SizeInTwips() const {return iDevice->SizeInTwips();}
+    TInt NumTypefaces() const {return iDevice->NumTypefaces();}
+    void TypefaceSupport(TTypefaceSupport& aTypefaceSupport,TInt aTypefaceIndex) const
+										{iDevice->TypefaceSupport(aTypefaceSupport,aTypefaceIndex);}
+	TInt FontHeightInTwips(TInt aTypefaceIndex,TInt aHeightIndex) const
+									{return iDevice->FontHeightInTwips(aTypefaceIndex,aHeightIndex);}
+	void PaletteAttributes(TBool& aModifiable,TInt& aNumEntries) const
+												{iDevice->PaletteAttributes(aModifiable,aNumEntries);}
+	void SetPalette(CPalette* aPalette) {iDevice->SetPalette(aPalette);}
+	TInt GetPalette(CPalette*& aPalette) const {return iDevice->GetPalette(aPalette);}
+ 	TInt CreateContext(CGraphicsContext *&aGc);
+	TInt HorizontalTwipsToPixels(TInt aTwips) const {return iDevice->HorizontalTwipsToPixels(aTwips);};
+	TInt VerticalTwipsToPixels(TInt aTwips) const {return iDevice->VerticalTwipsToPixels(aTwips);};
+	TInt HorizontalPixelsToTwips(TInt aPixels) const {return iDevice->HorizontalPixelsToTwips(aPixels);};
+	TInt VerticalPixelsToTwips(TInt aPixels) const {return iDevice->VerticalPixelsToTwips(aPixels);};
+	TInt GetNearestFontInTwips(CFont*& aFont,const TFontSpec& aFontSpec) {return iDevice->GetNearestFontInTwips(aFont,aFontSpec);};
+	void ReleaseFont(CFont* aFont) {iDevice->ReleaseFont(aFont);};
+	TPrinterModelName ModelName() const {return _L("");}
+	TUid ModelUid() const {TUid dummy; return dummy;}
+	void CreateControlL(CPrinterPort* /*aPrinterPort*/) {}
+	TPrinterModelEntry Model() const {return iModel;}
+	TInt SetModel(const TPrinterModelHeader& /*aModel*/,CStreamStore& /*aStore*/) {return KErrNone;}
+	TBool RequiresPrinterPort() {return EFalse;}
+private:
+	RDrawableWindow& iWin;
+	CWsScreenDevice* iDevice;
+	TPrinterModelEntry iModel;
+	};
+
+CTestScreenDevice::CTestScreenDevice(CWsScreenDevice* aDevice,RDrawableWindow& aWin):
+	iWin(aWin)
+	{
+	iDevice=aDevice;
+	iModel.iUid=TUid::Null();
+	}
+
+TInt CTestScreenDevice::CreateContext(CGraphicsContext*& aGc)
+	{
+
+	TInt ret=iDevice->CreateContext(aGc);
+	((CWindowGc *) aGc)->Activate(iWin);
+	return ret;
+	}
+
+/**
+@SYMTestCaseID          SYSLIB-FORM-UT-3496
+@SYMTestCaseDesc        Testing the fix for PDEF108443: Two same content pages are printed when contact fields are exactly one page long
+@SYMTestPriority        Medium
+@SYMTestActions         Creates text paginators and tests resulting number of pages when there is text to 'full page - 1 line', full page and full page + 1 line of text.
+@SYMTestExpectedResults Results should be 1 page, 1 page and 2 pages respectively.
+@SYMDEF                 PDEF108443
+*/
+void CTextViewTest::TestForPDEF108443L()
+	{
+	test.Next(_L(" @SYMTestCaseID:SYSLIB-FORM-UT-3496 Testing fix for PDEF108443 "));
+	CTestScreenDevice* screenDevice = new(ELeave) CTestScreenDevice(iEnv.ScreenDevice(),iWindow);
+
+	TMargins margins;
+	margins.iTop = 1440;
+	margins.iBottom = 1440;
+	margins.iLeft = 1440;
+	margins.iRight = 1440;
+	TSize s(11906,16838);
+	TPageSpec p(TPageSpec::EPortrait, s);
+
+	CArrayFixFlat<TInt>* charsPerPage1 = new(ELeave) CArrayFixFlat<TInt>(KGranularity);
+	CTextPaginator* paginator1 = CTextPaginator::NewL(screenDevice, charsPerPage1, KPaginatePriority);
+	paginator1->SetPageMarginsInTwips(margins);
+	paginator1->SetPageSpecInTwips(p);
+
+	CArrayFixFlat<TInt>* charsPerPage2 = new(ELeave) CArrayFixFlat<TInt>(KGranularity);
+	CTextPaginator* paginator2 = CTextPaginator::NewL(screenDevice, charsPerPage2, KPaginatePriority);
+	paginator2->SetPageMarginsInTwips(margins);
+	paginator2->SetPageSpecInTwips(p);
+
+	CArrayFixFlat<TInt>* charsPerPage3 = new(ELeave) CArrayFixFlat<TInt>(KGranularity);
+	CTextPaginator* paginator3 = CTextPaginator::NewL(screenDevice, charsPerPage3, KPaginatePriority);
+	paginator3->SetPageMarginsInTwips(margins);
+	paginator3->SetPageSpecInTwips(p);
+
+
+	// We need to find out the height of lines and print area of the page.
+	// From this we determine how many lines *should* appear on the page.
+	// This differs between devices(ie. hw and winscw).
+	TRect textRect;
+	textRect.iTl.iX=margins.iLeft;
+	textRect.iTl.iY=margins.iTop;
+	textRect.iBr.iX=s.iWidth-margins.iRight;
+	textRect.iBr.iY=s.iHeight-margins.iBottom;
+	
+	textRect = screenDevice->TwipsToPixels(textRect);  //defect 131765, call the same func as paginator
+	TInt pageHeight =  textRect.Height();
+	_LIT(KDummyString,"AAAAAA");
+	InitializeL();
+	AddTextL(KDummyString);
+	TInt lineHeight = 0;
+	CParaFormat* paraFormat = CParaFormat::NewL();
+	iEtext->GetParagraphFormatL(paraFormat,0);
+	TBool pageBreakChar = EFalse;
+	TInt docPos = 0;
+	iLayout->FormatLineL(paraFormat,docPos,lineHeight,pageBreakChar);
+
+
+	TInt numLines = pageHeight/lineHeight; // Number of lines expected on a page with paginator settings defined above and line height = 21
+	TChar simpleChar('A');
+	TBuf<200> string1;
+	for (TInt i = 0; i < numLines-2; i++) // ...numlines - 1
+		{
+		string1.Append(simpleChar);
+		string1.Append(CEditableText::EParagraphDelimiter);
+		}
+		string1.Append(simpleChar); // final line
+	TBuf<200> string2;
+	for (TInt i = 0; i < numLines-1; i++) // ...numlines
+		{
+		string2.Append(simpleChar);
+		string2.Append(CEditableText::EParagraphDelimiter);
+		}
+		string2.Append(simpleChar); // final line
+	TBuf<200> string3;
+	for (TInt i = 0; i < numLines; i++) // ...numlines + 1
+		{
+		string3.Append(simpleChar);
+		string3.Append(CEditableText::EParagraphDelimiter);
+		}
+		string3.Append(simpleChar); // final line
+
+	InitializeL();
+	AddTextL(string1);
+	paginator1->SetDocumentL(iEtext);
+	docPos=0;
+	paginator1->AppendTextL(docPos);
+	TInt numPages=paginator1->PaginationCompletedL();
+	test(numPages==1);
+	InitializeL();
+	AddTextL(string2);
+	paginator2->SetDocumentL(iEtext);
+	docPos=0;
+	paginator2->AppendTextL(docPos);
+	numPages=paginator2->PaginationCompletedL();
+	test(numPages==1);
+	InitializeL();
+	AddTextL(string3);
+	paginator3->SetDocumentL(iEtext);
+	docPos=0;
+	paginator3->AppendTextL(docPos);
+	numPages=paginator3->PaginationCompletedL();
+	test(numPages==2);
+
+	delete charsPerPage1;
+	delete charsPerPage2;
+	delete charsPerPage3;
+	delete screenDevice;
+	delete paraFormat;
+	Destroy();
+	}
+
+/**
+@SYMTestCaseID          SYSLIB-FORM-UT-4002
+@SYMTestCaseDesc	    Test to ensure the CTextView::SetSelectionVisibilityL will not panic when EFTextVisible
+						is set off.
+@SYMTestPriority 	    Normal
+@SYMTestActions  	    Create a CTextView instance with EFTextVisible set off. Call SetSelectionVisibilityL(ETrue)
+						and SetSelectionVisibilityL(EFalse).
+@SYMTestExpectedResults	Given conditions in test actions, calling SetSelectionVisibilityL should not panic.
+@SYMDEF                 PDEF113755
+*/
+void CTextViewTest::TestForPDEF113755L()
+	{
+	test.Next(_L(" @SYMTestCaseID:SYSLIB-FORM-UT-4002 Testing fix for PDEF113755 "));
+	InitializeL();
+
+	TCursorSelection selection(0,8); // length of selection must be >0
+	iView->SetSelectionL(selection);
+
+	iView->MakeVisible(ETrue);	//Test if the EFSelectionVisible flag is set correctly
+	iView->SetSelectionVisibilityL(ETrue);
+	test(iView->SelectionVisible());
+	iView->SetSelectionVisibilityL(EFalse);
+	test(!iView->SelectionVisible());
+
+	iView->MakeVisible(EFalse);
+	iView->SetSelectionVisibilityL(ETrue); //Should never panic form::1200 here
+	iView->SetSelectionVisibilityL(EFalse);
+
+	Destroy();
+	}
+
+/**
+@SYMTestCaseID          SYSLIB-FORM-UT-4004
+@SYMTestCaseDesc	    Test for INC113143, to ensure CTextLayout::GetLineRectL returns the correct rectangle
+						regarding the writting direction of text. Depend on Platform: WINSCW/H4/H6(DEF131765).
+@SYMTestPriority 	    Normal
+@SYMTestActions  	    Tested 16 scenarios that the CTextLayout::GetLineRectL could be call, also tested for
+						edge cases such as 1 char, whole line, DocPos2 < DocPos1, etc..
+@SYMTestExpectedResults CTextLayout::GetLineRectL should return expected rectangles.
+@SYMDEF                 PDEF115165
+*/
+void CTextViewTest::TestForPDEF115165L()
+	{
+	test.Next(_L(" @SYMTestCaseID:SYSLIB-FORM-UT-4004 Testing fix for PDEF115165 "));
+	InitializeL();
+
+	TCharFormat charFormat = TCharFormat(_L("Arial"),100);
+	TCharFormatMask charFormatMask;
+	charFormatMask.SetAll();
+	iCharLayer->SetL(charFormat, charFormatMask);
+	iEtext->SetGlobalCharFormat(iCharLayer);
+
+	_LIT(KLtoRText,"aaa");
+	_LIT(KRtoLText,"\x6B2\x6B2\x6B2");
+	_LIT(KLtoRTextLong,"aaaaaaaaaaaa");
+	_LIT(KLtoRTextLong2,"aaaaaaaaaaaaaaa");
+	_LIT(KRtoLTextLong,"\x6B2\x6B2\x6B2\x6B2\x6B2\x6B2\x6B2\x6B2\x6B2\x6B2\x6B2\x6B2"); //12 char
+	_LIT(KRtoLTextLong2,"\x6B2\x6B2\x6B2\x6B2\x6B2\x6B2\x6B2\x6B2\x6B2\x6B2\x6B2\x6B2\x6B2\x6B2\x6B2"); //15 char
+	_LIT(KLtoRTextVeryLong,"aaaaaaaaaaaaaaaaaaaa"); // 20 characters
+	_LIT(KLtoRTextVeryLong2,"aaaaaaaaaaaaaaaaaaaaaaaaa"); // 25 characters
+	_LIT(KRtoLTextVeryLong,"\x6B2\x6B2\x6B2\x6B2\x6B2\x6B2\x6B2\x6B2\x6B2\x6B2\x6B2\x6B2\x6B2\x6B2\x6B2\x6B2\x6B2\x6B2\x6B2\x6B2"); //20 char
+	_LIT(KRtoLTextVeryLong2,"\x6B2\x6B2\x6B2\x6B2\x6B2\x6B2\x6B2\x6B2\x6B2\x6B2\x6B2\x6B2\x6B2\x6B2\x6B2\x6B2\x6B2\x6B2\x6B2\x6B2\x6B2\x6B2\x6B2\x6B2\x6B2"); //25 char
+	_LIT(KParaSep, "\x2029");
+
+	TRect rect;
+
+//  Test for 16 scenarios of Bidi texts..
+//	Sample text for test
+//	Doc_Pos:    | 0| 1| 2| 5| 4| 3| 6| 7| 8|11|10| 9|
+//	X-Coords:  |0| 5|10|15|20|25|30|35|40|45|50|55|60|  in case w=5
+
+	iEtext->Reset();
+	iEtext->InsertL(0,KLtoRText);
+	iEtext->InsertL(iEtext->DocumentLength(),KRtoLText);
+	iEtext->InsertL(iEtext->DocumentLength(),KLtoRText);
+	iEtext->InsertL(iEtext->DocumentLength(),KRtoLText);
+	iEtext->InsertL(iEtext->DocumentLength(),KParaSep);
+	iView->FormatTextL();
+
+	TPoint point1,point2;
+	iLayout->DocPosToXyPosL(0,point1);
+	iLayout->DocPosToXyPosL(1,point2);
+	
+	TInt w = point2.iX - point1.iX;		//It depends on platform. WINSCW/H4 w=5; H6 w=4
+	
+//	DocPos1 is LTR, DocPos1+1 is LTR, DocPos2 is LTR, DocPos2+1 is LTR
+	rect = iLayout->GetLineRectL(0,7);
+	test(rect.iTl.iX == 0 && rect.iBr.iX == 8*w);
+
+//	DocPos1 is LTR, DocPos1+1 is LTR, DocPos2 is LTR, DocPos2+1 is RTL
+	rect = iLayout->GetLineRectL(0,2);
+	test(rect.iTl.iX == 0 && rect.iBr.iX == 3*w);
+
+//	DocPos1 is LTR, DocPos1+1 is LTR, DocPos2 is RTL, DocPos2+1 is LTR
+	rect = iLayout->GetLineRectL(0,5);
+	test(rect.iTl.iX == 0 && rect.iBr.iX == 4*w);
+
+//	DocPos1 is LTR, DocPos1+1 is LTR, DocPos2 is RTL, DocPos2+1 is RTL
+	rect = iLayout->GetLineRectL(0,4);
+	test(rect.iTl.iX == 0 && rect.iBr.iX == 5*w);
+
+//	DocPos1 is LTR, DocPos1+1 is RTL, DocPos2 is LTR, DocPos2+1 is LTR
+	rect = iLayout->GetLineRectL(2,7);
+	test(rect.iTl.iX == 2*w && rect.iBr.iX == 8*w);
+
+//	DocPos1 is LTR, DocPos1+1 is RTL, DocPos2 is LTR, DocPos2+1 is RTL
+	rect = iLayout->GetLineRectL(2,8);
+	test(rect.iTl.iX == 2*w && rect.iBr.iX == 9*w);
+
+//	DocPos1 is LTR, DocPos1+1 is RTL, DocPos2 is RTL, DocPos2+1 is LTR
+	rect = iLayout->GetLineRectL(2,5);
+	test(rect.iTl.iX == 2*w && rect.iBr.iX == 4*w);
+
+//	DocPos1 is LTR, DocPos1+1 is RTL, DocPos2 is RTL, DocPos2+1 is RTL
+	rect = iLayout->GetLineRectL(2,4);
+	test(rect.iTl.iX == 2*w && rect.iBr.iX == 5*w);
+
+//	Sample text for test
+//	Doc_Pos:     | 9|10|11| 8| 7| 6| 3| 4| 5| 2| 1| 0|
+//	X-Coords:  |40|45|50|55|60|65|70|75|80|85|90|95|100|     in case w=5
+
+	iEtext->Reset();
+	iEtext->InsertL(0,KRtoLText);
+	iEtext->InsertL(iEtext->DocumentLength(),KLtoRText);
+	iEtext->InsertL(iEtext->DocumentLength(),KRtoLText);
+	iEtext->InsertL(iEtext->DocumentLength(),KLtoRText);
+	iEtext->InsertL(iEtext->DocumentLength(),KParaSep);
+	iView->FormatTextL();
+	
+//	DocPos1 is RTL, DocPos1+1 is LTR, DocPos2 is LTR, DocPos2+1 is LTR
+	rect = iLayout->GetLineRectL(2,4);
+	test(rect.iTl.iX == (75/5-20)*w+100 && rect.iBr.iX == (90/5-20)*w+100);
+			
+//	DocPos1 is RTL, DocPos1+1 is LTR, DocPos2 is LTR, DocPos2+1 is RTL
+	rect = iLayout->GetLineRectL(2,5);
+	test(rect.iTl.iX == (80/5-20)*w+100 && rect.iBr.iX == (90/5-20)*w+100);
+
+//	DocPos1 is RTL, DocPos1+1 is LTR, DocPos2 is RTL, DocPos2+1 is LTR
+	rect = iLayout->GetLineRectL(2,8);
+	test(rect.iTl.iX == (55/5-20)*w+100 && rect.iBr.iX == (90/5-20)*w+100);
+
+//	DocPos1 is RTL, DocPos1+1 is LTR, DocPos2 is RTL, DocPos2+1 is RTL
+	rect = iLayout->GetLineRectL(2,7);
+	test(rect.iTl.iX == (60/5-20)*w+100 && rect.iBr.iX == (90/5-20)*w+100);
+
+//	DocPos1 is RTL, DocPos1+1 is RTL, DocPos2 is LTR, DocPos2+1 is LTR
+	rect = iLayout->GetLineRectL(0,4);
+	test(rect.iTl.iX == (75/5-20)*w+100 && rect.iBr.iX == 100);
+
+//	DocPos1 is RTL, DocPos1+1 is RTL, DocPos2 is LTR, DocPos2+1 is RTL
+	rect = iLayout->GetLineRectL(0,5);
+	test(rect.iTl.iX == (80/5-20)*w+100 && rect.iBr.iX == 100);
+
+//	DocPos1 is RTL, DocPos1+1 is RTL, DocPos2 is RTL, DocPos2+1 is LTR
+	rect = iLayout->GetLineRectL(0,8);
+	test(rect.iTl.iX == (55/5-20)*w+100 && rect.iBr.iX == 100);
+
+//	DocPos1 is RTL, DocPos1+1 is RTL, DocPos2 is RTL, DocPos2+1 is RTL
+	rect = iLayout->GetLineRectL(0,7);
+	test(rect.iTl.iX == (60/5-20)*w+100 && rect.iBr.iX == 100);
+	
+	STestDataTInt4 DataEmH4[] = {
+			{0,12,0,100 },{20,24,0,20},{0,0,0,5},{12,12,95,100},{7,7,35,40},
+			{7,12,35,100},{13,20,95,100},{10,9,50,100},
+			{3,19,15,100},{20,38,5,100},{19,19,95,100},{20,20,95,100},{19,20,95,100},
+	};
+	STestDataTInt4 DataH6[] = {
+			{0,15,0,100}, {25,30,0,20},{0,0,0,4},{15,15,96,100},{7,7,28,32},
+			{7,15,28,100},{16,25,96,100},{10,9,40,100},
+			{3,24,12,100},{25,48,4,100}, {24,24,96,100},{25,25,96,100},{24,25,96,100},
+	};
+	
+	test(sizeof(DataEmH4)/sizeof(STestDataTInt4) == sizeof(DataH6)/sizeof(STestDataTInt4));
+	
+	STestDataTInt4 *testdata;
+	TPtrC pLtoRTextLong;
+	TPtrC pRtoLTextLong;
+	TPtrC pLtoRTextVeryLong;
+	TPtrC pRtoLTextVeryLong;
+	
+	if(w == 5)// for WINSCW(Em) and H4
+		{
+		testdata = DataEmH4;
+		pLtoRTextLong.Set(KLtoRTextLong);
+		pRtoLTextLong.Set(KRtoLTextLong);
+		pLtoRTextVeryLong.Set(KLtoRTextVeryLong);
+		pRtoLTextVeryLong.Set(KRtoLTextVeryLong);
+		}
+	else if (w == 4)  // for H6
+		{
+		testdata = DataH6;
+		pLtoRTextLong.Set(KLtoRTextLong2);
+		pRtoLTextLong.Set(KRtoLTextLong2);
+		pLtoRTextVeryLong.Set(KLtoRTextVeryLong2);
+		pRtoLTextVeryLong.Set(KRtoLTextVeryLong2);
+		}
+	else
+		{
+		test(0);
+		Destroy();
+		return;
+		}
+	
+//	Edge case tests
+//	Sample text
+//	1st Line:    | 0| 1| 2| 3| 4| 5| 6| 7| 8| 9|10|11|19|18|17|16|15|14|13|12|
+//	X-Coords:  | 0| 5|10|15|20|25|30|35|40|45|50|55|60|65|70|75|80|85|90|95|100|   in case w=5
+//	2nd Line:    |23|22|21|20|
+	
+//	Edge case tests
+//	Sample text
+//	1st Line:    | 0| 1| 2| 3| 4| 5| 6| 7| 8| 9|10|11|12|13|14|24|23|22|21|20|19|18|17|16|15|
+//	X-Coords:  | 0| 4| 8|12|16|20|24|28|32|36|40|44|48|52|56|60|64|68|72|76|80|84|88|92|96|100|  w=4
+//	2nd Line:    |29|28|27|26|25|24|23|22|21|20|
+	
+	iEtext->Reset();
+	iEtext->InsertL(0,pLtoRTextLong);
+	iEtext->InsertL(iEtext->DocumentLength(),pRtoLTextLong);	
+	iEtext->InsertL(iEtext->DocumentLength(),KParaSep);
+	iView->FormatTextL();
+
+	for (TInt i = 0; i < 8;i++)
+		{
+		//	Test for whole line i=0 to 1
+		//	Test for one char   i=2 to 4
+		//	Test for DocPos2 at the end of line  i=5
+		//	Test for DocPos2 at a different line i=6
+		//	Test for DocPos2 < DocPos1			 i=7
+		rect = iLayout->GetLineRectL(testdata[i].iDoc1,testdata[i].iDoc2);
+		test.Printf(_L("GetLineRect edge test i=%d \n"),i);
+		test(rect.iTl.iX == testdata[i].iPos1 && rect.iBr.iX == testdata[i].iPos2); //Line 1
+		}
+			
+//	Test for edge cases while two lines are in different direction
+//	Sample text
+//	1st Line:    | 0| 1| 2| 3| 4| 5| 6| 7| 8| 9|10|11|12|13|14|15|16|17|18|19|
+//	X-Coords:  | 0| 5|10|15|20|25|30|35|40|45|50|55|60|65|70|75|80|85|90|95|100|  in case w=5
+//	2nd Line:    |39|38|37|36|35|34|33|32|31|30|29|28|27|26|25|24|23|22|21|20|
+		
+//	Test for edge cases while two lines are in different direction
+//  Sample text
+//	1st Line:    | 0| 1| 2| 3| 4| 5| 6| 7| 8| 9|10|11|12|13|14|15|16|17|18|19|20|21|22|23|24|
+//	X-Coords:  | 0| 4| 8| 12|16|20|24|28|32|36|40|44|48|52|56|60|64|68|72|76|80|84|88|92|96|100|  w=4
+//	2nd Line:    |49|48|47|46|45|44|43|42|41|40|39|38|37|36|35|34|33|32|31|30|29|28|27|26|25|
+	iEtext->Reset();
+	iEtext->InsertL(0,pLtoRTextVeryLong);
+	iEtext->InsertL(iEtext->DocumentLength(),pRtoLTextVeryLong);
+	iEtext->InsertL(iEtext->DocumentLength(),KParaSep);
+	iView->FormatTextL();
+
+	for (TInt i = 8; i < 13; i++)
+		{
+		rect = iLayout->GetLineRectL(testdata[i].iDoc1,testdata[i].iDoc2);
+		test.Printf(_L("GetLineRect edge test i=%d \n"),i);
+		test(rect.iTl.iX == testdata[i].iPos1 && rect.iBr.iX == testdata[i].iPos2); //Line 1
+		}	
+	Destroy();
+	}
+
+/**
+@SYMTestCaseID          SYSLIB-FORM-UT-4007
+@SYMTestCaseDesc	    Test for PDEF118443
+@SYMTestPriority 	    Normal
+@SYMTestActions			Use test cases in form of "text + ZWJ + non-text characters", format the line,
+ 						then use CTmTextLayout::FindAdjacentChunks() to find text Chunks surrounding
+ 						the ZWJ. then verify if the text is broken at the correct place.
+@SYMTestExpectedResults CTmTextLayout::FindAdjacentChunks() should return:
+						- Left chunk = "text + ZWJ",
+						- Right chunk = "non-text characters".
+@SYMDEF                 PDEF118443
+*/
+void CTextViewTest::TestForPDEF118443L()
+	{
+	test.Next(_L(" @SYMTestCaseID:SYSLIB-FORM-UT-4007 Testing fix for PDEF118443 "));
+	InitializeL();
+
+	TCharFormat charFormat = TCharFormat(_L("ClearlyU"),10);
+	TCharFormatMask charFormatMask;
+	charFormatMask.SetAll();
+	iCharLayer->SetL(charFormat, charFormatMask);
+	iEtext->SetGlobalCharFormat(iCharLayer);
+
+	// Note: a 'W' is added at the front to make the text chunk have side-bearings, so that it won't be amalgamated
+	// with the following chunk. This is to make the test case be as same as the original use case that caused the defect.
+	_LIT(KScriptEndWithZWJ,"W\x0931\x094d\x200d");	// Scripte end with ZWJ (a 'W' in the front)
+	_LIT(KTextTestCase0,"\x2029");	// Paragraph seperator (Bidi Category: B)
+	_LIT(KTextTestCase1,"0");		// Digit 0 (Bidi Category: EN)
+	_LIT(KTextTestCase2,"+");		// Plus sign (Bidi Category: ES)
+	_LIT(KTextTestCase3,"\u00A3");		// Pound symbol (Bidi Category: ET)
+	_LIT(KTextTestCase4,".");		// Period (Bidi Category: CS)
+	_LIT(KTextTestCase5,"\x0009");	// Tab (Bidi Category: S)
+	_LIT(KTextTestCase6,"\x0020");	// Space (Bidi Category: WS)
+	_LIT(KTextTestCase7,"\x000C");	// Form feed (Bidi Category: WS)
+	_LIT(KTextTestCase8,"\x2028");	// Line breaker (Bidi Category: WS)
+
+	TTmDocPosSpec pos(4, TTmDocPosSpec::ETrailing);
+	CTmTextLayout::TTmChunkDescription left;
+	CTmTextLayout::TTmChunkDescription right;
+
+	// Test case 0: ZWJ + Paragraph seperater
+	iEtext->Reset();
+	iEtext->InsertL(0,KScriptEndWithZWJ);
+	iEtext->InsertL(iEtext->DocumentLength(),KTextTestCase0);
+	iView->FormatTextL();
+	iLayout->TagmaTextLayout().FindAdjacentChunks(pos, left, right);
+	test(left.iStart == 0);
+	test(left.iEnd == 4);
+	test(left.iRightToLeft == EFalse);
+	test(right.iStart == 4);
+	test(right.iRightToLeft == EFalse);
+
+	// Test case 1: ZWJ + Digit '0'
+	iEtext->Reset();
+	iEtext->InsertL(0,KScriptEndWithZWJ);
+	iEtext->InsertL(iEtext->DocumentLength(),KTextTestCase1);
+	iView->FormatTextL();
+	iLayout->TagmaTextLayout().FindAdjacentChunks(pos, left, right);
+	test(left.iStart == 0);
+	test(left.iEnd == 4);
+	test(left.iRightToLeft == EFalse);
+	test(right.iStart == 4);
+	test(right.iRightToLeft == EFalse);
+
+	// Test case 2: ZWJ + Plus sign '+'
+	iEtext->Reset();
+	iEtext->InsertL(0,KScriptEndWithZWJ);
+	iEtext->InsertL(iEtext->DocumentLength(),KTextTestCase2);
+	iView->FormatTextL();
+	iLayout->TagmaTextLayout().FindAdjacentChunks(pos, left, right);
+	test(left.iStart == 0);
+	test(left.iEnd == 4);
+	test(left.iRightToLeft == EFalse);
+	test(right.iStart == 4);
+	test(right.iRightToLeft == EFalse);
+
+	// Test case 3: ZWJ + Pound symbol '??'
+	iEtext->Reset();
+	iEtext->InsertL(0,KScriptEndWithZWJ);
+	iEtext->InsertL(iEtext->DocumentLength(),KTextTestCase3);
+	iView->FormatTextL();
+	iLayout->TagmaTextLayout().FindAdjacentChunks(pos, left, right);
+	test(left.iStart == 0);
+	test(left.iEnd == 4);
+	test(left.iRightToLeft == EFalse);
+	test(right.iStart == 4);
+	test(right.iRightToLeft == EFalse);
+
+	// Test case 0: ZWJ + Period '.'
+	iEtext->Reset();
+	iEtext->InsertL(0,KScriptEndWithZWJ);
+	iEtext->InsertL(iEtext->DocumentLength(),KTextTestCase4);
+	iView->FormatTextL();
+	iLayout->TagmaTextLayout().FindAdjacentChunks(pos, left, right);
+	test(left.iStart == 0);
+	test(left.iEnd == 4);
+	test(left.iRightToLeft == EFalse);
+	test(right.iStart == 4);
+	test(right.iRightToLeft == EFalse);
+
+	// Test case 0: ZWJ + Tab Character
+	iEtext->Reset();
+	iEtext->InsertL(0,KScriptEndWithZWJ);
+	iEtext->InsertL(iEtext->DocumentLength(),KTextTestCase5);
+	iView->FormatTextL();
+	iLayout->TagmaTextLayout().FindAdjacentChunks(pos, left, right);
+	test(left.iStart == 0);
+	test(left.iEnd == 4);
+	test(left.iRightToLeft == EFalse);
+	test(right.iStart == 4);
+	test(right.iRightToLeft == EFalse);
+
+	// Test case 0: ZWJ + Space
+	iEtext->Reset();
+	iEtext->InsertL(0,KScriptEndWithZWJ);
+	iEtext->InsertL(iEtext->DocumentLength(),KTextTestCase6);
+	iView->FormatTextL();
+	iLayout->TagmaTextLayout().FindAdjacentChunks(pos, left, right);
+	test(left.iStart == 0);
+	test(left.iEnd == 4);
+	test(left.iRightToLeft == EFalse);
+	test(right.iStart == 4);
+	test(right.iRightToLeft == EFalse);
+
+	// Test case 0: ZWJ + Form feed
+	iEtext->Reset();
+	iEtext->InsertL(0,KScriptEndWithZWJ);
+	iEtext->InsertL(iEtext->DocumentLength(),KTextTestCase7);
+	iView->FormatTextL();
+	iLayout->TagmaTextLayout().FindAdjacentChunks(pos, left, right);
+	test(left.iStart == 0);
+	test(left.iEnd == 4);
+	test(left.iRightToLeft == EFalse);
+	test(right.iStart == 4);
+	test(right.iRightToLeft == EFalse);
+
+	// Test case 0: ZWJ + Line breaker
+	iEtext->Reset();
+	iEtext->InsertL(0,KScriptEndWithZWJ);
+	iEtext->InsertL(iEtext->DocumentLength(),KTextTestCase8);
+	iView->FormatTextL();
+	iLayout->TagmaTextLayout().FindAdjacentChunks(pos, left, right);
+	test(left.iStart == 0);
+	test(left.iEnd == 4);
+	test(left.iRightToLeft == EFalse);
+	test(right.iStart == 4);
+	test(right.iRightToLeft == EFalse);
+
+	Destroy();
+	}
+
+/**
+@SYMTestCaseID          SYSLIB-FORM-UT-4016
+@SYMTestCaseDesc        Testing the fix for PDEF121798 Printing: Email is printed only two pages 
+@SYMTestPriority        Medium
+@SYMTestActions         Paginates random amounts of text and checks whether the correct number of pages are returned from pagination.
+@SYMTestExpectedResults The amount of pages produced by the paginator should match the expected number of pages based on lines of text, page size, etc.
+@SYMDEF                 PDEF121798
+*/
+void CTextViewTest::TestForPDEF121798L()
+	{
+	test.Next(_L("Testing fix for PDEF121798"));
+	CTestScreenDevice* screenDevice = new(ELeave) CTestScreenDevice(iEnv.ScreenDevice(),iWindow);
+		
+	TMargins margins;
+	margins.iTop = 1440;
+	margins.iBottom = 1440;
+	margins.iLeft = 1440;
+	margins.iRight = 1440;
+	TSize s(11906,16838);
+	TPageSpec p(TPageSpec::EPortrait, s);
+		
+	// We need to find out the height of lines and print area of the page.
+	// From this we determine how many lines *should* appear on the page.
+	// This differs between devices(ie. hw and winscw).
+	TInt pageHeight = screenDevice->VerticalTwipsToPixels(s.iHeight - margins.iTop - margins.iBottom);
+	_LIT(KDummyString,"this is used by dummy paginator to find out line height and page size");
+	InitializeL();
+	AddTextL(KDummyString);
+	TInt lineHeight = 0;	
+	CParaFormat* paraFormat = CParaFormat::NewL();
+	iEtext->GetParagraphFormatL(paraFormat,0);
+	TBool pageBreakChar = EFalse;
+	TInt docPos = 0;
+	iLayout->FormatLineL(paraFormat,docPos,lineHeight,pageBreakChar);
+	
+	CArrayFixFlat<TInt>* charsPerPage = new(ELeave) CArrayFixFlat<TInt>(KGranularity);
+	TInt numLines = pageHeight/lineHeight; // Number of lines expected on a page with paginator settings defined above and line height.
+	
+	
+	
+	// Perform 50 random pagination tests.
+	for(TInt numTests = 0; numTests < 50; numTests++)
+		{
+		// Generate the number of lines in this document.
+		TBuf<512> testString;
+		TInt randomNum = (Math::Random() % 512);
+		// Calculate the expected number of pages based on page size and line height
+		TInt expectedPages = randomNum/numLines;
+		// If it's not an exact fit there will be another page lost in the integer division.
+		if ((numLines * expectedPages != randomNum) || randomNum == 0)
+			{
+			++expectedPages;
+			}
+		// Append the random number of lines to the test string
+		for (TInt i = 0; i < randomNum-1; i++) // randomNum -1 because we add a character after the loop.
+			{
+			// Empty lines will do.
+			testString.Append(CEditableText::EParagraphDelimiter);
+			}
+		// End the text with a character rather than a paragraph delim.
+		testString.Append(_L("A"));
+		
+		
+		InitializeL();
+		AddTextL(testString);
+		// Set up the paginator.
+		CTextPaginator* paginator = CTextPaginator::NewL(screenDevice, charsPerPage, KPaginatePriority);
+		paginator->SetPageMarginsInTwips(margins);
+		paginator->SetPageSpecInTwips(p);
+		paginator->SetDocumentL(iEtext);
+		docPos=0;
+		paginator->AppendTextL(docPos);
+		TInt numPages=paginator->PaginationCompletedL();
+		RDebug::Printf("%d lines: Expected %d pages, got %d pages", randomNum, expectedPages, numPages);
+		test(expectedPages == numPages);
+		delete paginator;
+		}
+	delete charsPerPage;
+	delete screenDevice;
+	delete paraFormat;
+	Destroy();
+	}
+
+/**
+@SYMTestCaseID          SYSLIB-FORM-UT-4015
+@SYMTestCaseDesc	    Test for PDEF120239
+@SYMTestPriority 	    Normal
+@SYMTestActions			Use text consist of "LTR text + ZWJ + RTL Text", format the line, then:
+						1) use CTmTextLayout::FindAdjacentChunks() to find chunks around overlapped doc pos.
+						2) use CTextView::MoveCursorL to move cursor through out the line.
+@SYMTestExpectedResults 1) FindAdjacentChunks() returns correct chunks
+						2) Cursor should moves Left to Right and Right to Left correctly
+@SYMDEF                 PDEF120239
+*/
+void CTextViewTest::TestForPDEF120239L()
+	{
+	test.Next(_L("Testing fix for PDEF120239L"));
+	InitializeL();
+	
+	TCharFormat charFormat = TCharFormat(_L("NewTimes"),10);
+	TCharFormatMask charFormatMask;
+	charFormatMask.SetAll();
+	iCharLayer->SetL(charFormat, charFormatMask);
+	iEtext->SetGlobalCharFormat(iCharLayer);
+ 	
+	_LIT(KTestScript,"\x0931\x094d\x200d\x684");	// Test script (LTR text + ZWJ + RTL Text)
+	
+	iEtext->Reset();
+	iEtext->InsertL(0,KTestScript);
+	iView->FormatTextL();
+	
+	// 1) use CTmTextLayout::FindAdjacentChunks()
+	CTmTextLayout::TTmChunkDescription left;
+	CTmTextLayout::TTmChunkDescription right;
+	
+	TTmDocPosSpec pos(3, TTmDocPosSpec::ETrailing);
+
+	iLayout->TagmaTextLayout().FindAdjacentChunks(pos, left, right);
+	test(left.iStart == 0);
+	test(left.iEnd == 3);
+	test(!left.iRightToLeft);
+	test(right.iStart == 2);
+	test(right.iEnd == 4);
+	test(right.iRightToLeft);
+	
+	pos.iPos = 2;
+	pos.iType = TTmDocPosSpec::ELeading;
+	
+	iLayout->TagmaTextLayout().FindAdjacentChunks(pos, left, right);
+	test(left.iStart == 2);
+	test(left.iEnd == 4);
+	test(left.iRightToLeft);
+	test(right.iStart == 4);
+	test(right.iEnd == 5);
+	test(!right.iRightToLeft);
+	
+	// 2) use CTextView::MoveCursorL to move cursor
+	TTmDocPos cursorPos;
+	TTmDocPos targetPos1 (0, ETrue);
+	TTmDocPos targetPos2 (0, EFalse);
+	TCursorPosition::TMovementType move = TCursorPosition::EFRight;
+	
+	TCursorSelection selection(0,0);
+	iView->SetSelectionL(selection);
+	iView->GetCursorPos(cursorPos);
+	test(cursorPos == targetPos1 || cursorPos == targetPos2);
+	
+	targetPos1.iPos = 3;
+	targetPos1.iLeadingEdge = EFalse;
+	targetPos2.iPos = 4;
+	targetPos2.iLeadingEdge = EFalse;
+	iView->MoveCursorL(move, EFalse);
+	iView->GetCursorPos(cursorPos);
+	test(cursorPos == targetPos1 || cursorPos == targetPos2);
+	
+	targetPos1.iPos = 2;
+	targetPos1.iLeadingEdge = ETrue;
+	targetPos2.iPos = 4;
+	targetPos2.iLeadingEdge = ETrue;
+	iView->MoveCursorL(move, EFalse);
+	iView->GetCursorPos(cursorPos);
+	test(cursorPos == targetPos1 || cursorPos == targetPos2);
+	
+	move = TCursorPosition::EFLeft;
+	
+	targetPos1.iPos = 3;
+	targetPos1.iLeadingEdge = EFalse;
+	targetPos2.iPos = 4;
+	targetPos2.iLeadingEdge = EFalse;
+	iView->MoveCursorL(move, EFalse);
+	iView->GetCursorPos(cursorPos);
+	test(cursorPos == targetPos1 || cursorPos == targetPos2);
+	
+	targetPos1.iPos = 0;
+	targetPos1.iLeadingEdge = EFalse;
+	targetPos2.iPos = 0;
+	targetPos2.iLeadingEdge = ETrue;
+	iView->MoveCursorL(move, EFalse);
+	iView->GetCursorPos(cursorPos);
+	test(cursorPos == targetPos1 || cursorPos == targetPos2);
+
+	Destroy();
+	}
+
+/**
+@SYMTestCaseID          SYSLIB-FORM-UT-4021
+@SYMTestCaseDesc	    Test for DEF124989, to ensure TFormAndEtextEditor::SetStyleHelperL has no 
+                        NULL-dereference issue.
+@SYMTestPriority 	    Normal
+@SYMTestActions  	    Call TFormAndEtextEditor::InsertTextL and pass in a style name which could 
+						not be found in styleList.Then a NULL is generated.
+@SYMTestExpectedResults No panic(KERN-EXEC 3) raised from this case.
+@SYMDEF                 DEF124989
+*/
+void CTextViewTest::TestForDEF124989L()
+	{
+	// Initialise CTextViewTest object for next test.
+	InitializeL();
+	test.Next(_L(" @SYMTestCaseID:SYSLIB-FORM-UT-4021 Testing fix for DEF124989 "));
+
+	// Insert a one line paragraph into EText object and reformat view.
+	_LIT(KTestParagraph, "This is a piece of text to test the character positioning API based in X,Y cocordinates.");
+	iEtext->InsertL(0, KTestParagraph);
+	
+	TFormAndEtextEditor newEditor(*iView,*iEtext);
+	
+	CStyleList* styleList = CStyleList::NewL();
+	CleanupStack::PushL(styleList);
+	RParagraphStyleInfo paraStyleInfo(NULL,NULL);
+
+	// Appending the new style to stylelist
+	styleList->AppendL(&paraStyleInfo);
+	iEtext->SetStyleListExternallyOwned(*styleList);
+	
+	TPtrC ptr1(_L("Arial3"));
+	// Inserting the text and applying the style specified(Arial3) 
+	// which is not in syleList.  
+	newEditor.InsertTextL(0, _L("Hello World"),&ptr1);
+	
+	// Clean up test object
+	CleanupStack::PopAndDestroy();
+	Destroy();
+	}
+
+/**
+@SYMTestCaseID                      SYSLIB-FORM-UT-4022
+@SYMTestCaseDesc	    Test for DEF124975
+@SYMTestPriority                       Normal
+@SYMTestActions                      1) Call CTextLayout::AdjustVerticalAlignment() when there is no content
+                                                   2) Add Some random text and then call CTextLayout::AdjustVerticalAlignment()@SYMTestExpectedResults       There should be no panic during the process
+@SYMDEF                                 DEF124975
+*/
+void CTextViewTest::TestForDEF124975L()
+	{
+	test.Next(_L(" @SYMTestCaseID: Testing fix for coverity DEF124975 "));
+	InitializeL();
+	
+	const TInt MaxTestCount = 50;
+	const TInt MaxStringCount = 100;
+	TInt TestCount = GetNumber(1, MaxTestCount);
+	TInt StringCount = GetNumber(1, MaxStringCount);
+	
+	for(TInt i=0; i<TestCount; i++)
+		{
+		iLayout->AdjustVerticalAlignment(CParaFormat::ECustomAlign);
+		}
+	
+	for(TInt i=0; i<TestCount; i++)
+		{
+		RBuf testString;
+		testString.Create(StringCount);
+		for(int i=0; i<testString.MaxLength(); i++)
+			{
+			TInt c = GetNumber(0, 0xffff);
+			while ( IsSurrogate(c) )
+			    c = GetNumber(0, 0xffff);
+			testString.Append( c );
+			}
+		AddTextL(testString);
+		iLayout->AdjustVerticalAlignment(CParaFormat::ECustomAlign);
+		testString.Close();
+		}
+	
+	Destroy();
+	}
+
+void CTextViewTest::TestForDEF142286BounceScrollingL()
+    {
+    test.Next(_L(" Testing fix for DEF142286 which supports bounce scrolling feature "));
+    TestScrollDisplayPixelsNoLimitBordersL(10);
+    TestScrollDisplayPixelsNoLimitBordersL(50);
+    TestScrollDisplayPixelsNoLimitBordersL(100);
+    }
+
+void RunTestsL(CCoeEnv& aEnv)
+	{
+	CTextViewTest* t = new(ELeave) CTextViewTest(aEnv);
+	CleanupStack::PushL(t);
+	t->ConstructL();
+	t->TestL();
+	t->Test1L();
+	t->TestCancelSelectionL();
+	t->TestFinishBackgroundFormattingL();
+	t->TestSetCursorVisibilityL();
+	t->TestSetSelectionVisibilityL();
+	t->TestEnablePictureFrameL();
+	t->TestSetCursorWidthTypeL();
+	t->TestParagraphRectL();
+	t->TestDrawL();
+	t->TestFormatTextL();
+	t->TestHandleRangeFormatChangeL();
+	t->TestHandleInsertDeleteL();
+	t->TestHandleGlobalChangeL();
+	t->TestHandleGlobalChangeNoRedrawL();
+	t->TestScrollDisplayL();
+	t->TestScrollDisplayPixelsL();
+	t->TestScrollDisplayLinesL();
+	t->TestScrollDisplayParagraphsL();
+	t->TestMoveCursorL();
+	t->TestSetSelectionL();
+	t->TestMatchCursorHeightL();
+	t->TestCalculateHorizontalExtremesL();
+	t->TestXyPosToDocPosL();
+	t->TestGetPictureRectangleL();
+	t->TestGetPictureRectangle1L();
+	//t->TestGetPictureRectangleDefectL();
+	t->TestSetDisplayContextL();
+	t->TestGetParaFormatL();
+	t->TestGetLineRectL();
+	t->TestForDEF003426L();
+	t->TestForDEF038488L();
+	t->FormAndEtextTestL();
+	t->TestForINC092725L();
+	t->TestForPDEF108443L();
+	t->TestForPDEF113755L();
+	t->TestForPDEF115165L();
+	t->TestForPDEF118443L();
+	t->TestForPDEF121798L();
+	t->TestForDEF124989L();
+	t->TestForPDEF120239L();
+	t->TestForDEF124975L();
+    t->TestForDEF142286BounceScrollingL();
+	CleanupStack::PopAndDestroy(t);
+}
+
+TInt E32Main()
+	{
+	CCoeEnv* env=new CCoeEnv;
+	TRAPD(err,
+		env->ConstructL();
+		RunTestsL(*env);
+		);
+	return err;
+	}
+
+#if defined(__WINS__)
+EXPORT_C TInt EntryPoint(TAny*) {return E32Main();}
+#endif