diff -r 000000000000 -r 2e3d3ce01487 filehandling/richtexttohtmlconverter/TSrc/cnvhtmltest.cpp --- /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 +#include +#include +#include +#include +#include +#include +#include + +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 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); + }