--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/filehandling/richtexttohtmlconverter/TSrc/cnvhtmltest.cpp Tue Feb 02 10:12:00 2010 +0200
@@ -0,0 +1,641 @@
+// 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 <e32test.h>
+#include <conlist.h>
+#include <conarc.h>
+#include <txtrich.h>
+#include <s32file.h>
+#include <s32mem.h>
+#include <ecom/ecom.h>
+
+const TUid KCrt2HTMLConverterUid = {0x1000071c};
+
+static RTest TheTest(_L("Rich text to HTML converter "));
+
+_LIT(KCnvEPOCSmallDocumentDriveC, "C:\\ConvTest");
+_LIT(KTestFile, "Z:\\Test\\RT2HtmlConv.html");
+_LIT(KHtmlOutput, "C:\\HtmlOutput.html");
+_LIT(KHtmlOutputStream, "C:\\HtmlOutputStream.html");
+
+_LIT(KTextToConvert_ParagraphDelimiterTest, "*********Test Started:Converting rich text paragraphs to HTML *********");
+_LIT(KTextToConvert_Line01, "line1 followed by 1 rich text paragraph delimiter ");
+_LIT(KTextToConvert_Line02, "line2 followed by 2 rich text paragraphs delimiter");
+_LIT(KTextToConvert_Line04, "line3 followed by 3 rich text paragraphs delimiter");
+_LIT(KTextToConvert_Line06, "line4");
+_LIT(KEndTest, "*********Test completed*********");
+
+_LIT(KLeftAlignText, "LEFT");
+_LIT(KCenterAlignText, "CENTRE");
+_LIT(KRightAlignText, "RIGHT");
+_LIT(KFmtdRTCnvTestFile, "C:\\FmtRTConvTestFile");
+_LIT(KFmtdRT2HtmlConvOutputFile, "C:\\FmtdRT2HtmlConvOutputFile.html");
+_LIT(KFmtdRT2HtmlConvExpectedFile, "Z:\\Test\\FmtdRT2HtmlConvExpectedFile.html");
+
+_LIT(KItem1, "Item 1");
+_LIT(KItem2, "Item 2");
+_LIT(KItem3, "Item 3");
+_LIT(KBulletConvOutputFile1, "C:\\bulletconvexpectedfile1.html");
+_LIT(KBulletConvExpectedFile1, "Z:\\Test\\bulletconvexpectedfile1.html");
+
+_LIT(KTranslateConvOutputFile1, "C:\\translateconvoutputfile1.html");
+_LIT(KTranslateConvExpectedFile1, "Z:\\Test\\translateconvexpectedfile1.html");
+
+_LIT(KTextStyleConvOutputFile1, "C:\\textstyleconvoutputfile1.html");
+_LIT(KTextStyleConvExpectedFile1, "Z:\\Test\\textstyleconvexpectedfile1.html");
+
+/**
+
+
+Reads data in from a file and stores the information
+into an HBuf pointer. If there is an error the function will return an empty buffer
+
+@return HBufC8* - containing the data read from the file
+@internalComponent
+@param aFileName - the filename to read from e.g.C:\test.html'
+*/
+HBufC8* ReadFileLC(const TDesC& aFileName)
+{
+ RFs fs;
+ User::LeaveIfError(fs.Connect());
+ CleanupClosePushL(fs);
+
+ RFile myFile;
+ CleanupClosePushL(myFile);
+
+ TInt err = myFile.Open(fs, aFileName, EFileRead|EFileShareReadersOnly);
+ if (err != KErrNone)
+ {
+ User::Leave(err);
+ }
+ TEntry entry;
+ fs.Entry(aFileName, entry);
+ TInt streamSize = entry.iSize; // Find the size of the file
+ HBufC8* data = HBufC8::NewLC(streamSize);
+ TPtr8 ptrData(data->Des()); // Sets a pointer to the HBufC data
+ myFile.Read(0, ptrData);
+
+ CleanupStack::Pop(data);
+ CleanupStack::PopAndDestroy(&myFile);
+ CleanupStack::PopAndDestroy(&fs);
+ CleanupStack::PushL(data);
+ return data; // Return the buffer
+}
+
+
+static CRichText* CreateTestTextL()
+ {
+ // Variable definitions
+ CRichText* richText = NULL;
+ CParaFormatLayer* paragraphFormatLayer = NULL;
+ CCharFormatLayer* charFormatLayer = NULL;
+
+ // Create Paragraph and Char format layers
+ paragraphFormatLayer = CParaFormatLayer::NewL( );
+ CleanupStack::PushL( paragraphFormatLayer );
+ charFormatLayer = CCharFormatLayer::NewL();
+ CleanupStack::PushL(charFormatLayer);
+ // Create Rich Text object
+ richText = CRichText::NewL(paragraphFormatLayer, charFormatLayer, CEditableText::EFlatStorage);
+ CleanupStack::PushL( richText );
+
+ // start
+ richText->InsertL( richText->DocumentLength(), KTextToConvert_ParagraphDelimiterTest );
+ richText->InsertL( richText->DocumentLength(), CEditableText::EParagraphDelimiter );
+
+ richText->InsertL( richText->DocumentLength(), KTextToConvert_Line01 );
+ richText->InsertL( richText->DocumentLength(), CEditableText::EParagraphDelimiter );
+ richText->InsertL( richText->DocumentLength(), KTextToConvert_Line02 );
+ richText->InsertL( richText->DocumentLength(), CEditableText::EParagraphDelimiter );
+ richText->InsertL( richText->DocumentLength(), CEditableText::EParagraphDelimiter );
+ richText->InsertL( richText->DocumentLength(), KTextToConvert_Line04 );
+ richText->InsertL( richText->DocumentLength(), CEditableText::EParagraphDelimiter );
+ richText->InsertL( richText->DocumentLength(), CEditableText::EParagraphDelimiter );
+ richText->InsertL( richText->DocumentLength(), CEditableText::EParagraphDelimiter );
+ richText->InsertL( richText->DocumentLength(), KTextToConvert_Line06 );
+
+ richText->InsertL( richText->DocumentLength(), CEditableText::EParagraphDelimiter );
+ richText->InsertL( richText->DocumentLength(), KEndTest );
+
+ CleanupStack::Pop( richText );
+ CleanupStack::PopAndDestroy( charFormatLayer );
+ CleanupStack::PopAndDestroy( paragraphFormatLayer );
+
+ return richText;
+ }
+
+static void ConstructTestSourceL()
+ {
+ // Variable definitions
+ CDirectFileStore* fileStore = NULL;
+
+ TStreamId streamID;
+
+ CRichText* richText = CreateTestTextL();
+ CleanupStack::PushL(richText);
+
+ // write this out to a file
+ // Grab a file session
+ RFs fs;
+ User::LeaveIfError(fs.Connect());
+ CleanupClosePushL(fs);
+ // Create file store.
+ fileStore = CDirectFileStore::ReplaceL(fs, KCnvEPOCSmallDocumentDriveC(), EFileWrite|EFileShareAny);
+ CleanupStack::PushL( fileStore );
+ fileStore->SetTypeL( KDirectFileStoreLayoutUid );
+ streamID = richText->StoreL(*fileStore);
+ fileStore->SetRootL(streamID);
+ fileStore->CommitL();
+
+ // Start cleanup of stack
+ CleanupStack::PopAndDestroy( fileStore );
+ CleanupStack::PopAndDestroy(&fs );
+ CleanupStack::PopAndDestroy( richText );
+ }
+
+
+static CRichText* CreateBulletedAndFormattedTextL()
+ {
+ // Variable definitions
+ CRichText* richText = NULL;
+ CParaFormatLayer* paragraphFormatLayer = NULL;
+ CCharFormatLayer* charFormatLayer = NULL;
+
+ // Create Paragraph and Char format layers
+ CParaFormat paraFormat;
+ TParaFormatMask paraFormatMask;
+ paragraphFormatLayer = CParaFormatLayer::NewL(¶Format,paraFormatMask);
+ CleanupStack::PushL( paragraphFormatLayer );
+ charFormatLayer = CCharFormatLayer::NewL();
+ CleanupStack::PushL(charFormatLayer);
+ // Create Rich Text object
+ richText = CRichText::NewL(paragraphFormatLayer, charFormatLayer, CEditableText::EFlatStorage);
+ CleanupStack::PushL( richText );
+
+ // Left Align bulleted text
+ paraFormat.iHorizontalAlignment=CParaFormat::ELeftAlign;
+ paraFormatMask.SetAttrib(EAttAlignment);
+ richText->InsertL( richText->DocumentLength(), CEditableText::EBullet );
+ richText->InsertL( richText->DocumentLength(), KLeftAlignText);
+ richText->ApplyParaFormatL(¶Format, paraFormatMask,richText->DocumentLength(),0);
+ richText->InsertL( richText->DocumentLength(), CEditableText::EParagraphDelimiter );
+ // Center Align bulleted text
+ richText->InsertL( richText->DocumentLength(), CEditableText::EBullet );
+ richText->InsertL( richText->DocumentLength(), KCenterAlignText);
+ paraFormat.iHorizontalAlignment=CParaFormat::ECenterAlign;
+ paraFormatMask.SetAttrib(EAttAlignment);
+ richText->ApplyParaFormatL(¶Format, paraFormatMask,richText->DocumentLength(),0);
+ richText->InsertL( richText->DocumentLength(), CEditableText::EParagraphDelimiter );
+ // Right Align bulleted text
+ richText->InsertL( richText->DocumentLength(), CEditableText::EBullet );
+ richText->InsertL( richText->DocumentLength(), KRightAlignText);
+ paraFormat.iHorizontalAlignment=CParaFormat::ERightAlign;
+ paraFormatMask.SetAttrib(EAttAlignment);
+ richText->ApplyParaFormatL(¶Format, paraFormatMask,richText->DocumentLength(),0);
+
+ CleanupStack::Pop( richText );
+ CleanupStack::PopAndDestroy( charFormatLayer );
+ CleanupStack::PopAndDestroy( paragraphFormatLayer );
+
+ return richText;
+ }
+
+
+static void ConstructTestSourceForBulletedAndFormattedTextL()
+ {
+ // Variable definitions
+ CDirectFileStore* fileStore = NULL;
+
+ TStreamId streamID;
+
+ CRichText* richText = CreateBulletedAndFormattedTextL();
+ CleanupStack::PushL(richText);
+
+ // write this Bulleted and formatted richtext to a file c:\HtmlOutputFile.html
+ // Grab a file session
+ RFs fs;
+ User::LeaveIfError(fs.Connect());
+ CleanupClosePushL(fs);
+ // Create file store.
+ fileStore = CDirectFileStore::ReplaceL(fs, KFmtdRTCnvTestFile(), EFileWrite|EFileShareAny);
+ CleanupStack::PushL( fileStore );
+ fileStore->SetTypeL( KDirectFileStoreLayoutUid );
+ streamID = richText->StoreL(*fileStore);
+ fileStore->SetRootL(streamID);
+ fileStore->CommitL();
+
+ // Start cleanup of stack
+ CleanupStack::PopAndDestroy( fileStore );
+ CleanupStack::PopAndDestroy(&fs );
+ CleanupStack::PopAndDestroy( richText );
+ }
+
+typedef TPckgBuf<CRichText*> TRTPtrBuffer;
+
+static void DoUidAndCapabilitiesTest(CConverterBase& aConv)
+ {
+ TheTest(aConv.Capabilities() == CConverterBase::EConvertsFiles);
+ TheTest(aConv.Uid() == KCrt2HTMLConverterUid);
+ }
+
+static void DoStreamingTestL(CConverterBase& aConv)
+ {
+ CRichText* text = CreateTestTextL();
+ CleanupStack::PushL(text);
+ TRTPtrBuffer buffer(text);
+ RDesReadStream readStream(buffer);
+ CleanupClosePushL(readStream);
+
+ RFs fs;
+ User::LeaveIfError(fs.Connect());
+ CleanupClosePushL(fs);
+ RFileWriteStream writeStream;
+ User::LeaveIfError(writeStream.Replace(fs, KHtmlOutputStream(), EFileStream|EFileWrite|EFileShareExclusive));
+ CleanupClosePushL(writeStream);
+
+ TTime started; started.UniversalTime();
+ aConv.ConvertObjectL(readStream, writeStream,NULL);
+ HBufC8* htmlOutput = ReadFileLC(KHtmlOutputStream);
+ HBufC8* testFile = ReadFileLC(KTestFile);
+ TheTest(htmlOutput->Compare(*testFile)==KErrNone);
+ TTime finished; finished.UniversalTime();
+ TTimeIntervalMicroSeconds interval = finished.MicroSecondsFrom(started);
+ TheTest.Printf(_L("\tEPOC => HTML (Streaming) %4dms\n"), interval.Int64());
+
+ CleanupStack::PopAndDestroy(testFile);
+ CleanupStack::PopAndDestroy(htmlOutput);
+ CleanupStack::PopAndDestroy(&writeStream);
+ CleanupStack::PopAndDestroy(&fs);
+ CleanupStack::PopAndDestroy(&readStream);
+ CleanupStack::PopAndDestroy(text);
+ }
+
+static void DoFmtdStreamingTestL(CConverterBase& aConv)
+ {
+ CRichText* text = CreateBulletedAndFormattedTextL();
+ CleanupStack::PushL(text);
+ TRTPtrBuffer buffer(text);
+ RDesReadStream readStream(buffer);
+ CleanupClosePushL(readStream);
+
+ RFs fs;
+ User::LeaveIfError(fs.Connect());
+ CleanupClosePushL(fs);
+ RFileWriteStream writeStream;
+ User::LeaveIfError(writeStream.Replace(fs, KFmtdRT2HtmlConvOutputFile(), EFileStream|EFileWrite|EFileShareExclusive));
+ CleanupClosePushL(writeStream);
+
+ TTime started; started.UniversalTime();
+ aConv.ConvertObjectL(readStream, writeStream, NULL);
+ HBufC8* htmlOutputFile = ReadFileLC(KFmtdRT2HtmlConvOutputFile);
+ HBufC8* htmlExpectedFile = ReadFileLC(KFmtdRT2HtmlConvExpectedFile);
+ TheTest(htmlOutputFile->Compare(*htmlExpectedFile)==KErrNone);
+ TTime finished; finished.UniversalTime();
+ TTimeIntervalMicroSeconds interval = finished.MicroSecondsFrom(started);
+ TheTest.Printf(_L("\tEPOC Bulleted and Formatted richtext => HTML (Streaming) %4dms\n"), interval.Int64());
+
+ CleanupStack::PopAndDestroy(htmlExpectedFile);
+ CleanupStack::PopAndDestroy(htmlOutputFile);
+ CleanupStack::PopAndDestroy(&writeStream);
+ CleanupStack::PopAndDestroy(&fs);
+ CleanupStack::PopAndDestroy(&readStream);
+ CleanupStack::PopAndDestroy(text);
+ }
+
+static CRichText* CreateBulletedTextL()
+ {
+ // Variable definitions
+ CRichText* richText = NULL;
+ CParaFormatLayer* paragraphFormatLayer = NULL;
+ CCharFormatLayer* charFormatLayer = NULL;
+
+ // Create Paragraph and Char format layers
+ CParaFormat paraFormat;
+ TParaFormatMask paraFormatMask;
+ paragraphFormatLayer = CParaFormatLayer::NewL(¶Format,paraFormatMask);
+ CleanupStack::PushL( paragraphFormatLayer );
+ charFormatLayer = CCharFormatLayer::NewL();
+ CleanupStack::PushL(charFormatLayer);
+ // Create Rich Text object
+ richText = CRichText::NewL(paragraphFormatLayer, charFormatLayer, CEditableText::EFlatStorage);
+ CleanupStack::PushL( richText );
+
+ // Left Align bulleted text
+ TBullet* bullet = new(ELeave) TBullet();
+ bullet->iCharacterCode=0x2022;
+ bullet->iHeightInTwips=300;
+ paraFormat.iBullet=bullet;
+ paraFormatMask.SetAttrib(EAttBullet);
+
+ richText->InsertL( richText->DocumentLength(), KItem1);
+ richText->ApplyParaFormatL(¶Format, paraFormatMask, richText->DocumentLength(), 0);
+ richText->InsertL( richText->DocumentLength(), CEditableText::EParagraphDelimiter );
+
+ richText->InsertL( richText->DocumentLength(), KItem2);
+ richText->ApplyParaFormatL(¶Format, paraFormatMask,richText->DocumentLength(),0);
+ richText->InsertL( richText->DocumentLength(), CEditableText::EParagraphDelimiter );
+
+ richText->InsertL( richText->DocumentLength(), KItem3);
+ richText->ApplyParaFormatL(¶Format, paraFormatMask, richText->DocumentLength(),0);
+
+ CleanupStack::Pop( richText );
+ CleanupStack::PopAndDestroy( charFormatLayer );
+ CleanupStack::PopAndDestroy( paragraphFormatLayer );
+
+ return richText;
+ }
+
+static void DoBulletTestL(CConverterBase& aConv)
+ {
+ CRichText* text = CreateBulletedTextL();
+ CleanupStack::PushL(text);
+ TRTPtrBuffer buffer(text);
+ RDesReadStream readStream(buffer);
+ CleanupClosePushL(readStream);
+
+ RFs fs;
+ User::LeaveIfError(fs.Connect());
+ CleanupClosePushL(fs);
+ RFileWriteStream writeStream;
+ User::LeaveIfError(writeStream.Replace(fs, KBulletConvOutputFile1(), EFileStream|EFileWrite|EFileShareExclusive));
+ CleanupClosePushL(writeStream);
+
+ TTime started; started.UniversalTime();
+ aConv.ConvertObjectL(readStream, writeStream, NULL);
+ HBufC8* outputFile = ReadFileLC(KBulletConvOutputFile1);
+ HBufC8* expectedFile = ReadFileLC(KBulletConvExpectedFile1);
+ TheTest(outputFile->Compare(*expectedFile)==KErrNone);
+ TTime finished; finished.UniversalTime();
+ TTimeIntervalMicroSeconds interval = finished.MicroSecondsFrom(started);
+ TheTest.Printf(_L("\tEPOC Bulleted richtext => HTML (Streaming) %4dms\n"), interval.Int64());
+
+ CleanupStack::PopAndDestroy(expectedFile);
+ CleanupStack::PopAndDestroy(outputFile);
+ CleanupStack::PopAndDestroy(&writeStream);
+ CleanupStack::PopAndDestroy(&fs);
+ CleanupStack::PopAndDestroy(&readStream);
+ CleanupStack::PopAndDestroy(text);
+ }
+
+static CRichText* CreateTranslateTextL()
+ {
+ // Variable definitions
+ CRichText* richText = NULL;
+ CParaFormatLayer* paragraphFormatLayer = NULL;
+ CCharFormatLayer* charFormatLayer = NULL;
+
+ // Create Paragraph and Char format layers
+ CParaFormat paraFormat;
+ TParaFormatMask paraFormatMask;
+ paragraphFormatLayer = CParaFormatLayer::NewL(¶Format,paraFormatMask);
+ CleanupStack::PushL( paragraphFormatLayer );
+ charFormatLayer = CCharFormatLayer::NewL();
+ CleanupStack::PushL(charFormatLayer);
+ // Create Rich Text object
+ richText = CRichText::NewL(paragraphFormatLayer, charFormatLayer, CEditableText::EFlatStorage);
+ CleanupStack::PushL( richText );
+
+ // Left Align bulleted text
+ _LIT(KSpecialCharactersString, "<>&");
+ richText->InsertL( richText->DocumentLength(), KSpecialCharactersString);
+ richText->InsertL( richText->DocumentLength(), CEditableText::EPageBreak);
+ richText->InsertL( richText->DocumentLength(), CEditableText::EPotentialHyphen);
+ richText->InsertL( richText->DocumentLength(), CEditableText::ELineBreak);
+ richText->InsertL( richText->DocumentLength(), CEditableText::ENonBreakingSpace);
+ richText->InsertL( richText->DocumentLength(), CEditableText::ETabCharacter);
+ richText->InsertL( richText->DocumentLength(), CEditableText::EParagraphDelimiter );
+
+ CleanupStack::Pop( richText );
+ CleanupStack::PopAndDestroy( charFormatLayer );
+ CleanupStack::PopAndDestroy( paragraphFormatLayer );
+
+ return richText;
+ }
+
+static void DoTranslateTestL(CConverterBase& aConv)
+ {
+ CRichText* text = CreateTranslateTextL();
+ CleanupStack::PushL(text);
+ TRTPtrBuffer buffer(text);
+ RDesReadStream readStream(buffer);
+ CleanupClosePushL(readStream);
+
+ RFs fs;
+ User::LeaveIfError(fs.Connect());
+ CleanupClosePushL(fs);
+ RFileWriteStream writeStream;
+ User::LeaveIfError(writeStream.Replace(fs, KTranslateConvOutputFile1(), EFileStream|EFileWrite|EFileShareExclusive));
+ CleanupClosePushL(writeStream);
+
+ TTime started; started.UniversalTime();
+ aConv.ConvertObjectL(readStream, writeStream, NULL);
+ HBufC8* outputFile = ReadFileLC(KTranslateConvOutputFile1);
+ HBufC8* expectedFile = ReadFileLC(KTranslateConvExpectedFile1);
+ TheTest(outputFile->Compare(*expectedFile)==KErrNone);
+ TTime finished; finished.UniversalTime();
+ TTimeIntervalMicroSeconds interval = finished.MicroSecondsFrom(started);
+ TheTest.Printf(_L("\tEPOC Bulleted richtext => HTML (Streaming) %4dms\n"), interval.Int64());
+
+ CleanupStack::PopAndDestroy(expectedFile);
+ CleanupStack::PopAndDestroy(outputFile);
+ CleanupStack::PopAndDestroy(&writeStream);
+ CleanupStack::PopAndDestroy(&fs);
+ CleanupStack::PopAndDestroy(&readStream);
+ CleanupStack::PopAndDestroy(text);
+ }
+
+static CRichText* CreateTextStyleTextL()
+ {
+ // Variable definitions
+ CRichText* richText = NULL;
+ CParaFormatLayer* paragraphFormatLayer = NULL;
+ CCharFormatLayer* charFormatLayer = NULL;
+
+ // Create Paragraph and Char format layers
+ CParaFormat paraFormat;
+ TParaFormatMask paraFormatMask;
+ paragraphFormatLayer = CParaFormatLayer::NewL(¶Format,paraFormatMask);
+ CleanupStack::PushL( paragraphFormatLayer );
+ charFormatLayer = CCharFormatLayer::NewL();
+ CleanupStack::PushL(charFormatLayer);
+ // Create Rich Text object
+ richText = CRichText::NewL(paragraphFormatLayer, charFormatLayer, CEditableText::EFlatStorage);
+ CleanupStack::PushL( richText );
+
+ // Left Align bulleted text
+ richText->InsertL( richText->DocumentLength(), _L("This bit is italic, this one is bold, and this one is both."));
+ TCharFormat format;
+ format.iFontSpec.iFontStyle.SetPosture(EPostureItalic);
+ TCharFormatMask formatMask;
+ formatMask.SetAttrib(EAttFontPosture);
+ richText->ApplyCharFormatL(format,formatMask,12,6);
+ format.iFontSpec.iFontStyle.SetPosture(EPostureUpright);
+ format.iFontSpec.iFontStyle.SetStrokeWeight(EStrokeWeightBold);
+ formatMask.SetAttrib(EAttFontStrokeWeight);
+ formatMask.SetAttrib(EAttFontPosture);
+ richText->ApplyCharFormatL(format,formatMask,32,4);
+ format.iFontSpec.iFontStyle.SetPosture(EPostureItalic);
+ richText->ApplyCharFormatL(format,formatMask,54,4);
+
+ richText->InsertL( richText->DocumentLength(), CEditableText::ELineBreak);
+ richText->InsertL( richText->DocumentLength(), _L("This bit is underlined and this one strikethrough."));
+ format.iFontPresentation.iUnderline = EUnderlineOn;
+ formatMask.ClearAll();
+ formatMask.SetAttrib(EAttFontUnderline);
+ richText->ApplyCharFormatL(format,formatMask,72,10);
+ format.iFontPresentation.iStrikethrough = EStrikethroughOn;
+ formatMask.ClearAll();
+ formatMask.SetAttrib(EAttFontStrikethrough);
+ richText->ApplyCharFormatL(format,formatMask,96,13);
+
+ richText->InsertL( richText->DocumentLength(), CEditableText::EParagraphDelimiter );
+
+ CleanupStack::Pop( richText );
+ CleanupStack::PopAndDestroy( charFormatLayer );
+ CleanupStack::PopAndDestroy( paragraphFormatLayer );
+
+ return richText;
+ }
+
+static void DoTextStyleTestL(CConverterBase& aConv)
+ {
+ CRichText* text = CreateTextStyleTextL();
+ CleanupStack::PushL(text);
+ TRTPtrBuffer buffer(text);
+ RDesReadStream readStream(buffer);
+ CleanupClosePushL(readStream);
+
+ RFs fs;
+ User::LeaveIfError(fs.Connect());
+ CleanupClosePushL(fs);
+ RFileWriteStream writeStream;
+ User::LeaveIfError(writeStream.Replace(fs, KTextStyleConvOutputFile1(), EFileStream|EFileWrite|EFileShareExclusive));
+ CleanupClosePushL(writeStream);
+
+ TTime started; started.UniversalTime();
+ aConv.ConvertObjectL(readStream, writeStream, NULL);
+ HBufC8* outputFile = ReadFileLC(KTextStyleConvOutputFile1);
+ HBufC8* expectedFile = ReadFileLC(KTextStyleConvExpectedFile1);
+ TheTest(outputFile->Compare(*expectedFile)==KErrNone);
+ TTime finished; finished.UniversalTime();
+ TTimeIntervalMicroSeconds interval = finished.MicroSecondsFrom(started);
+ TheTest.Printf(_L("\tEPOC Bulleted richtext => HTML (Streaming) %4dms\n"), interval.Int64());
+
+ CleanupStack::PopAndDestroy(expectedFile);
+ CleanupStack::PopAndDestroy(outputFile);
+ CleanupStack::PopAndDestroy(&writeStream);
+ CleanupStack::PopAndDestroy(&fs);
+ CleanupStack::PopAndDestroy(&readStream);
+ CleanupStack::PopAndDestroy(text);
+ }
+
+static void DoTestsL(CCnaConverterList& aList)
+ {
+ CConverterBase* conv = NULL;
+ ConstructTestSourceL();
+ ConstructTestSourceForBulletedAndFormattedTextL();
+ //
+ // EPOC ==> HTML
+ //
+
+ TheTest.Next(_L("Converting EPOC rich text to HTML "));
+ conv = aList.NewConverterL(KCrt2HTMLConverterUid);
+ TheTest(conv!=NULL);
+ CleanupStack::PushL(conv);
+
+ TheTest.Next(_L("Testing Uid() and Capabilities() functions"));
+ DoUidAndCapabilitiesTest(*conv);
+
+
+ TheTest.Next(_L("Converting simple rich text to HTML using the streaming interface"));
+ DoStreamingTestL(*conv);
+
+ TheTest.Next(_L("Converting formatted rich text to HTML using the streaming interface"));
+ DoFmtdStreamingTestL(*conv);
+
+ TheTest.Next(_L("Converting simple rich text to HTML using the file-file interface"));
+ TTime started; started.UniversalTime();
+ conv->ConvertL(KCnvEPOCSmallDocumentDriveC(), KHtmlOutput(),NULL);
+ HBufC8* htmlOutput = ReadFileLC(KHtmlOutput);
+ HBufC8* testFile = ReadFileLC(KTestFile);
+ TheTest(htmlOutput->Compare(*testFile)==KErrNone);
+ TTime finished; finished.UniversalTime();
+ TTimeIntervalMicroSeconds interval = finished.MicroSecondsFrom(started);
+ TheTest.Printf(_L("\tEPOC => HTML (Writing) %4dms\n"), interval.Int64());
+ CleanupStack::PopAndDestroy(testFile);
+ CleanupStack::PopAndDestroy(htmlOutput);
+
+ //INC042516 - Email, S90_REL_1.1_HK_W02: Wrong format of receipting e-mail
+ // from proto when bullet marks with alignments
+ //
+ // EPOC Bulleted and Formatted richtext to HTML Conversion test
+ //
+
+
+ TheTest.Next(_L("Converting formatted rich text to HTML using the file-file interface"));
+ started.UniversalTime();
+ conv->ConvertL(KFmtdRTCnvTestFile(), KFmtdRT2HtmlConvOutputFile(),NULL);
+ HBufC8* htmlOutputFile = ReadFileLC(KFmtdRT2HtmlConvOutputFile);
+ HBufC8* htmlExpectedFile = ReadFileLC(KFmtdRT2HtmlConvExpectedFile);
+ TheTest(htmlOutputFile->Compare(*htmlExpectedFile)==KErrNone);
+ finished.UniversalTime();
+ interval = finished.MicroSecondsFrom(started);
+ TheTest.Printf(_L("\tEPOC Bulleted and Formatted richtext => HTML (Writing) %4dms\n"), interval.Int64());
+ CleanupStack::PopAndDestroy(htmlExpectedFile);
+ CleanupStack::PopAndDestroy(htmlOutputFile);
+
+
+ TheTest.Next(_L("Converting bulleted text"));
+ DoBulletTestL(*conv);
+
+ TheTest.Next(_L("Testing TranslateL function"));
+ DoTranslateTestL(*conv);
+
+ TheTest.Next(_L("Testing text styles conversion"));
+ DoTextStyleTestL(*conv);
+
+ CleanupStack::PopAndDestroy(conv);
+ }
+
+void doMainL()
+ {
+ /**
+ @SYMTestCaseID PIM-CNVHTMLTEST-0001
+ */
+ TheTest.Start(_L("@SYMTestCaseID PIM-CNVHTMLTEST-0001 Preparing to start..."));
+
+ TheTest.Next(_L("Create converter list"));
+ CCnaConverterList* convList = CCnaConverterList::NewLC();
+ DoTestsL(*convList);
+ CleanupStack::PopAndDestroy(); // convList
+ REComSession::FinalClose(); //needed, otherwise you will get a memory leak
+ TheTest.Printf(_L("\nTests complete\n"));
+ TheTest.End();
+ TheTest.Close();
+ }
+
+GLDEF_C TInt E32Main()
+ {
+ __UHEAP_MARK;
+
+ CTrapCleanup* theCleanup=CTrapCleanup::New();
+ TRAPD(ret,doMainL());
+ TheTest(ret==KErrNone);
+ delete theCleanup;
+
+ __UHEAP_MARKEND;
+ return(KErrNone);
+ }