textrendering/textformatting/test/src/TLINEPAG.CPP
changeset 0 1fb32624e06b
child 51 a7c938434754
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/textrendering/textformatting/test/src/TLINEPAG.CPP	Tue Feb 02 02:02:46 2010 +0200
@@ -0,0 +1,308 @@
+/*
+* 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: 
+* Class to test the line paginator.
+*
+*/
+
+
+#include <basched.h>
+#include <frmpage.h>
+#include <frmconst.h>
+#include <bautils.h>
+#include <e32test.h>
+
+_LIT(KTLinePag, "TLinePag");
+RTest TheTest(KTLinePag);
+
+///////////////////////////////////////////////////////////////////////////////////////
+///////////////////////////////////////////////////////////////////////////////////////
+//Test macroses and functions
+
+LOCAL_C void CheckL(TInt aValue, TInt aLine)
+	{
+	if(!aValue)
+		{
+		TheTest(EFalse, aLine);
+		}
+	}
+LOCAL_C void CheckL(TInt aValue, TInt aExpected, TInt aLine)
+	{
+	if(aValue != aExpected)
+		{
+		RDebug::Print(_L("*** Expected error: %d, got: %d\r\n"), aExpected, aValue);
+		TheTest(EFalse, aLine);
+		}
+	}
+#define TEST(arg) ::CheckL((arg), __LINE__)
+#define TEST2(aValue, aExpected) ::CheckL(aValue, aExpected, __LINE__)
+
+class CLinePaginatorTest : public CBase
+	{
+public:
+	static CLinePaginatorTest* NewL();
+	~CLinePaginatorTest();
+	void OpenTestFileL();
+	void StartPaginateL();
+	TBool CompareArrays();
+private:
+	void ConstructL();
+	CLinePaginatorTest();
+	TBool PaginateSectionL();
+	TBool ReadTestFile(TPageLine& aline);
+	void WriteOutputFile(TPageLine aLine);
+	void StorePageBreakL(TInt aDocPos);
+private:
+	CArrayFixFlat<TInt>* iCharsPerPage;
+	TLinePaginator iPaginator;
+	CArrayFixFlat<TInt>* iTestChars;
+	TInt iNumPages;
+	RFile iTestFile;
+	RFs  ifsClient;
+	TInt iFilePos;
+	TBool iTestPageBreak;
+	};
+
+
+#define TEST_FILE _L("z:\\test\\app-framework\\form\\input\\page.txt")
+
+const TInt KGranularity = 10;
+
+CLinePaginatorTest* CLinePaginatorTest::NewL()
+	{
+	CLinePaginatorTest* self=new(ELeave) CLinePaginatorTest();
+	self->ConstructL();
+	return self;
+	}
+
+CLinePaginatorTest::CLinePaginatorTest()
+	{}
+
+CLinePaginatorTest::~CLinePaginatorTest()
+	{
+	iTestFile.Close();
+	ifsClient.Close();
+	delete iTestChars;
+	delete iCharsPerPage;
+	}
+
+void CLinePaginatorTest::ConstructL()
+	{
+	iCharsPerPage=new(ELeave) CArrayFixFlat<TInt>(KGranularity);
+	iTestChars=new(ELeave) CArrayFixFlat<TInt>(KGranularity);
+
+	iFilePos=0;
+	iNumPages=0;
+
+	iPaginator.SetArray(iCharsPerPage);
+	}
+
+
+void CLinePaginatorTest::StartPaginateL(/*parameters*/)
+	{
+	// do initialisation stuff
+	while(PaginateSectionL())
+		{
+		}
+	TBool success=CompareArrays();
+	TEST2(success, ETrue);
+	}
+
+
+TBool CLinePaginatorTest::PaginateSectionL()
+	{
+	TPageLine line;
+
+	while (ReadTestFile(line))
+		{
+		iPaginator.AppendLineL(line);
+		if (iTestPageBreak)
+			StorePageBreakL(line.iDocPos);
+		WriteOutputFile(line);
+		}
+
+	iPaginator.FlushL(line.iDocPos);
+	StorePageBreakL(line.iDocPos);
+
+	return(EFalse);
+	}
+
+void CLinePaginatorTest::OpenTestFileL()
+	{
+	TBuf8<128> text;
+	TInt err=ifsClient.Connect();
+	err=iTestFile.Open(ifsClient,TEST_FILE,EFileStream|EFileRead|EFileShareReadersOnly);
+
+
+	iTestFile.Read(0,text,128);
+	TInt startNum=text.Locate('<')+1;
+	text.Delete(0,startNum);
+	TLex8 lex=text;
+	TInt pageHeight;
+	lex.Val(pageHeight);
+	iPaginator.SetPageHeight(pageHeight);
+
+	TheTest.Printf(_L("DocPos\tHeight\tKeep\tStart\tHeight of Pages = <%d>\n"), pageHeight);
+	}
+
+TBool CLinePaginatorTest::ReadTestFile(TPageLine& aLine)
+	{
+	TLex8 lex;
+	TBuf8<128> textBuffer;
+	TBuf8<128> numBuffer;
+	TInt startNum;
+
+	iTestFile.Read(iFilePos,textBuffer,128);
+	if (textBuffer.Locate('X') != KErrNotFound && textBuffer.Locate('X') < textBuffer.Locate('\r'))
+		{
+		startNum=textBuffer.Locate('\n')+1;
+  		textBuffer.Delete(0,startNum);
+		iFilePos+=startNum;
+		lex=textBuffer;
+		lex.Val(aLine.iDocPos);
+		TheTest.Printf(_L("%d\tX\n"), aLine.iDocPos);
+		return EFalse;
+		}
+
+	startNum=textBuffer.Locate('\n')+1;
+	textBuffer.Delete(0,startNum);
+	iFilePos+=startNum;
+	lex=textBuffer;
+	lex.Val(aLine.iDocPos);
+
+	startNum=textBuffer.Locate('\t')+1;
+	textBuffer.Delete(0,startNum);
+	iFilePos+=startNum;
+	lex=textBuffer;
+	lex.Val(aLine.iLineHeight);
+
+	startNum=textBuffer.Locate('\t')+1;
+	textBuffer.Delete(0,startNum);
+	iFilePos+=startNum;
+	lex=textBuffer;
+	lex.Val(aLine.iKeepWithNext);
+
+	startNum=textBuffer.Locate('\t')+1;
+	textBuffer.Delete(0,startNum);
+	iFilePos+=startNum;
+	lex=textBuffer;
+	lex.Val(aLine.iStartNewPage);
+
+	if (textBuffer.Locate('\t')<textBuffer.Locate('\r')
+		&& textBuffer.Locate('B')!=KErrNotFound
+		&& textBuffer.Locate('B')<textBuffer.Locate('\r'))
+		iTestPageBreak=ETrue;
+	else
+		iTestPageBreak=EFalse;
+
+	iFilePos+=textBuffer.Locate('\r')+1;
+	return ETrue;
+	}
+
+void CLinePaginatorTest::WriteOutputFile(TPageLine aLine)
+	{
+	if (iTestPageBreak)
+		{
+		TheTest.Printf(_L("%d\t%d\t%d\t%d\tBREAK\n"), aLine.iDocPos, aLine.iLineHeight, aLine.iKeepWithNext, aLine.iStartNewPage);
+		}
+	else
+		{
+		TheTest.Printf(_L("%d\t%d\t%d\t%d\n"), aLine.iDocPos, aLine.iLineHeight, aLine.iKeepWithNext, aLine.iStartNewPage);
+		}
+
+	}
+
+void CLinePaginatorTest::StorePageBreakL(TInt aDocPos)
+	{
+	iNumPages++;
+	iTestChars->AppendL(aDocPos);
+	}
+
+//#pragma warning( disable : 4701 )	//local variable 'docPosError' may be used without having been initialized
+TBool CLinePaginatorTest::CompareArrays()
+	{
+	TInt numPages=iCharsPerPage->Count();
+	TInt numTestPages=iTestChars->Count();
+	TInt numChars;
+	TInt numTestChars;
+	TBool pagesSame=EFalse;
+	TBuf8<128> text;
+	TInt prevDocPos=0;
+	TInt docPosError=0;
+
+	if (numPages==numTestPages)
+		{
+ 		TheTest.Printf(_L("Correct Number of Pages = %d\n"), numPages);
+		pagesSame=ETrue;
+		for (TInt i=0; i<numPages; i++)
+			{
+			numChars=(*iCharsPerPage)[i];
+			numTestChars=(*iTestChars)[i]-prevDocPos;
+			if(numChars!=numTestChars)
+				{
+				if (pagesSame)
+					docPosError=(*iTestChars)[i];
+				pagesSame=EFalse;
+				}
+			prevDocPos=(*iTestChars)[i];
+			}
+		if (pagesSame)
+			{
+ 			TheTest.Printf(_L("Correct Number of Characters on Pages -- PASSED\n"));
+			}
+		else
+			{
+			TheTest.Printf(_L("Incorrect Number of Characters on Pages -- FAILED\n"));
+			TheTest.Printf(_L("First Error Occurs at Position = %d"), docPosError);
+			}
+		}
+	else
+		{
+ 		TheTest.Printf(_L("Incorrect Number of Pages  -- FAILED\n"));
+		TheTest.Printf(_L("Number Calculated	by LinePaginator = %d\n"), numPages);
+		TheTest.Printf(_L("Number Contained in File = %d\n"), numTestPages);
+		}
+
+	iTestFile.Close();
+	return pagesSame;
+	}
+
+
+void LinePaginateL()
+	{
+	CLinePaginatorTest* linePaginate=CLinePaginatorTest::NewL();
+	linePaginate->OpenTestFileL();
+	linePaginate->StartPaginateL();
+	delete linePaginate;
+	}
+
+TInt E32Main()
+	{
+	TheTest.Title();
+	static CTrapCleanup* TrapCleanup = CTrapCleanup::New();
+
+	TheTest.Start(_L(" @SYMTestCaseID:SYSLIB-FORM-LEGACY-LINEPAG-0001 CLinePaginatorTest tests "));
+	TRAPD(error, LinePaginateL());
+	TEST(error == KErrNone);
+	delete TrapCleanup;
+	TheTest.End();
+	TheTest.Close();
+	return error;
+	}
+
+void FormPanic(TFormPanic aPanic)
+	{
+	User::Panic(_L("Form"),aPanic);
+	}
+