--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/filehandling/fileconverterfw/Tef/TB64CnvStep.cpp Tue Feb 02 10:12:00 2010 +0200
@@ -0,0 +1,355 @@
+// Copyright (c) 2005-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:
+//
+
+/**
+ @file
+ @internalComponent - Internal Symbian test code
+*/
+
+
+#include <s32file.h>
+#include <s32mem.h>
+
+#include <conarc.h>
+#include <concnf.h>
+#include <conlist.h>
+#include <bautils.h>
+#include "TB64CnvStep.h"
+#include <ecom/ecom.h>
+#include <u32hal.h>
+
+_LIT(KLitOriginalTxtFile, "z:\\resource\\test\\conarc\\release.txt");
+_LIT(KLitExpectedEtextFromTxtFile, "z:\\resource\\test\\Conarc\\release.txt.etext");
+_LIT(KLitOriginalDocFile, "z:\\resource\\test\\Conarc\\w7allchr.doc");
+_LIT(KLitExpectedBase64FromDocFile, "z:\\resource\\test\\Conarc\\w7allchr.doc.b64");
+_LIT(KLitExpectedQuotedPrintableFromDocFile, "z:\\resource\\test\\Conarc\\w7allchr.doc.qp");
+_LIT(KLitExpectedQuotedPrintableFromDocFileWithoutSplChar, "z:\\resource\\test\\Conarc\\w7allchrwosplchr.doc.qp");
+
+_LIT(KLitDirectoryForGeneratedFiles, "c:\\conarc\\");
+_LIT(KLitGeneratedEtextFromTxtFile, "c:\\conarc\\release.txt.etext");
+_LIT(KLitGeneratedTxtFileFromEtext, "c:\\conarc\\release.txt.etext.txt");
+_LIT(KLitGeneratedBase64FromDocFile, "c:\\conarc\\w7allchr.doc.b64");
+_LIT(KLitGeneratedDocFileFromBase64, "c:\\conarc\\w7allchr.doc.b64.doc");
+_LIT(KLitGeneratedQuotedPrintableFromDocFile, "c:\\conarc\\w7allchr.doc.qp");
+_LIT(KLitGeneratedDocFileFromQuotedPrintable, "c:\\conarc\\w7allchr.doc.qp.doc");
+
+TBool CTB64CnvStep::FilesAreIdenticalL(RFs& aFs, const TDesC& aFile1, const TDesC& aFile2)
+ { // static
+ RFile file1;
+ CleanupClosePushL(file1);
+ User::LeaveIfError(file1.Open(aFs, aFile1, EFileShareReadersOnly|EFileStream|EFileRead));
+ RFile file2;
+ CleanupClosePushL(file2);
+ User::LeaveIfError(file2.Open(aFs, aFile2, EFileShareReadersOnly|EFileStream|EFileRead));
+ TBuf8<200> buffer1;
+ TBuf8<200> buffer2;
+ TBool result=EFalse;
+ FOREVER
+ {
+ User::LeaveIfError(file1.Read(buffer1));
+ User::LeaveIfError(file2.Read(buffer2));
+ if (buffer1!=buffer2) // catches the case where the buffers' contents are different, and/or where they have different lengths, e.g. where one is empty
+ {
+ result=EFalse;
+ break;
+ }
+ if (buffer1.Length()==0)
+ {
+ __ASSERT_ALWAYS(buffer2.Length()==0, User::Invariant());
+ result=ETrue;
+ break;
+ }
+ }
+ CleanupStack::PopAndDestroy(2, &file1);
+ return result;
+ }
+
+void CTB64CnvStep::ConvertFileL(CCnaConverterList& aList, TUint aConverterUid, const TDesC& aInputFile, const TDesC& aOutputFile)
+ {
+ CConverterBase* const converter=aList.NewConverterL(TUid::Uid(aConverterUid));
+ TEST(converter!=NULL);
+ CleanupStack::PushL(converter);
+ TEST(converter->Uid().iUid==aConverterUid);
+ TEST(converter->Capabilities()&CConverterBase::EConvertsObjects);
+ RFileReadStream inputStream;
+ CleanupClosePushL(inputStream);
+ RFileWriteStream outputStream;
+ CleanupClosePushL(outputStream);
+ User::LeaveIfError(inputStream.Open(iFs, aInputFile, EFileShareReadersOnly|EFileStream|EFileRead));
+ User::LeaveIfError(outputStream.Replace(iFs, aOutputFile, EFileShareExclusive|EFileStream|EFileWrite));
+ converter->ConvertObjectL(inputStream, outputStream);
+ outputStream.CommitL();
+ CleanupStack::PopAndDestroy(3, converter);
+ }
+
+void CTB64CnvStep::DoTextEtextL(CCnaConverterList* aList)
+ {
+ INFO_PRINTF1(_L("Testing Etext\n"));
+
+ ConvertFileL(*aList, KUidPlainTextToETextConverter, KLitOriginalTxtFile, KLitGeneratedEtextFromTxtFile);
+ INFO_PRINTF1(_L("... testing conversion to Etext\n"));
+ TEST(FilesAreIdenticalL(iFs, KLitGeneratedEtextFromTxtFile, KLitExpectedEtextFromTxtFile));
+ ConvertFileL(*aList, KUidETextToPlainTextConverter, KLitGeneratedEtextFromTxtFile, KLitGeneratedTxtFileFromEtext);
+ INFO_PRINTF1(_L("... and testing conversion back from Etext (round trip)\n"));
+ TEST(FilesAreIdenticalL(iFs, KLitGeneratedTxtFileFromEtext, KLitOriginalTxtFile));
+
+ TEST(BaflUtils::DeleteFile(iFs, KLitGeneratedEtextFromTxtFile)==KErrNone);
+ TEST(BaflUtils::DeleteFile(iFs, KLitGeneratedTxtFileFromEtext)==KErrNone);
+ }
+
+void CTB64CnvStep::DoTextEtextWithControlCharsL(CCnaConverterList* aList)
+ {
+ TUid uid={KUidPlainTextToETextConverter};
+ INFO_PRINTF1(_L("Testing Etext with Control Characters\n"));
+ TBuf8<50> buf=_L8("Testing control characters ");
+ buf.Append('\x000');
+ TBufC8<20> buf2(_L8("\x006\x007 ah!!!"));
+ buf.Append(buf2);
+ TBuf8<50> out;
+ RDesReadStream read(buf);
+ RDesWriteStream write(out);
+ CConverterBase* conv=aList->NewConverterL(uid);
+ TEST(conv!=NULL);
+ CleanupStack::PushL(conv);
+ TEST(conv->Uid()==uid);
+ TEST(conv->Capabilities()&CConverterBase::EConvertsObjects);
+ conv->ConvertObjectL(read,write);
+ CleanupStack::PopAndDestroy(conv);
+ write.CommitL();
+ write.Close();
+ read.Close();
+ TBuf8<50> resultBuf;
+ read.Open(out);
+ write.Open(resultBuf);
+ uid.iUid=KUidETextToPlainTextConverter;
+ conv=aList->NewConverterL(uid);
+ TEST(conv!=NULL);
+ CleanupStack::PushL(conv);
+ TEST(conv->Uid()==uid);
+ TEST(conv->Capabilities()&CConverterBase::EConvertsObjects);
+ conv->ConvertObjectL(read,write);
+ CleanupStack::PopAndDestroy(conv);
+ write.CommitL();
+ write.Close();
+ read.Close();
+ TEST(buf==resultBuf);
+ }
+
+/**
+ @SYMTestCaseID TB64CNVStep-DoTestBase64L
+
+ @SYMPREQ REQxxx
+
+ @SYMTestCaseDesc Base 64 Test Converter
+
+ @SYMTestPriority High
+
+ @SYMTestStatus Implemented
+
+ @SYMTestActions Converts a .b64 file to a .doc file, Converts a .doc file to a .b64 file and compares them.
+ Test the following APIs
+ CConverterBase2::ConvertObjectL(RReadStream& aReadStream, RWriteStream& aWriteStream,
+ MConverterUiObserver* aObserver=NULL);
+ CConverterBase2::Capabilities();
+ CConverterBase2::Uid();
+ CCnaConverterList::NewConverterL(TUid aUid)
+
+ @SYMTestExpectedResults Compare is succesful
+*/
+
+void CTB64CnvStep::DoTestBase64L(CCnaConverterList* aList)
+ {
+ INFO_PRINTF1(_L("Testing Base64\n"));
+ ConvertFileL(*aList, KUidConverterToBase64, KLitOriginalDocFile, KLitGeneratedBase64FromDocFile);
+ INFO_PRINTF1(_L("... testing conversion to Base64\n"));
+ TEST(FilesAreIdenticalL(iFs, KLitGeneratedBase64FromDocFile, KLitExpectedBase64FromDocFile));
+
+ ConvertFileL(*aList, KUidConverterFromBase64, KLitGeneratedBase64FromDocFile, KLitGeneratedDocFileFromBase64);
+ INFO_PRINTF1(_L("... and testing conversion back from Base64 (round trip)\n"));
+ TEST(FilesAreIdenticalL(iFs, KLitGeneratedDocFileFromBase64, KLitOriginalDocFile));
+
+ TEST(BaflUtils::DeleteFile(iFs, KLitGeneratedBase64FromDocFile)==KErrNone);
+ TEST(BaflUtils::DeleteFile(iFs, KLitGeneratedDocFileFromBase64)==KErrNone);
+
+ }
+
+/**
+ @SYMTestCaseID TB64CNVStep-DoTestQPL
+
+ @SYMPREQ REQxxx
+
+ @SYMTestCaseDesc Quoted Printable Test Converter
+
+ @SYMTestPriority High
+
+ @SYMTestStatus Implemented
+
+ @SYMTestActions Converts a .qp file to a .doc file, Converts a .qp.doc file to a .qp file and compares them
+ Test the following APIs
+ CConverterBase2::ConvertObjectL(RReadStream& aReadStream, RWriteStream& aWriteStream,
+ MConverterUiObserver* aObserver=NULL);
+ CConverterBase2::Capabilities();
+ CConverterBase2::Uid();
+ CCnaConverterList::NewConverterL(TUid aUid)
+
+ @SYMTestExpectedResults Compare is succesful
+
+*/
+void CTB64CnvStep::DoTestQPL(CCnaConverterList* aList)
+ {
+ INFO_PRINTF1(_L("Testing Quoted-printable\n"));
+
+ // On ARMV5 platform, this test is automated only with the value 1 (the default value)
+ // of ROM patchable constant 'KEnableAllSplCharForQpCnv'. This does the convertion of all the special
+ // characters into Quoted Printable format. The special characters are not converted if the patch data
+ // value is set to 0 (zero) and it has been tested manually.
+ TInt enableAllSplCharForQpCnv = 1;
+
+#ifdef __WINS__
+ // KEnableAllSplCharForQpCnv is a Rom patchable constant, so patch for emulator builds can be done by
+ // adding "patchdata_conarc_dll_KEnableAllSplCharForQpCnv X" to epoc.ini file.
+ // When X is set to non zero, the conversion is performed for all the special characters.
+ // When X is set to zero, no conversion is performed in case of the special characters.
+ // If this patch data value is not given in epoc.ini file, then this test will be executed with
+ // the value 1 (the default value).
+
+ TInt valueOfKEnableAllSplCharForQpCnv = 0;
+ if (UserSvr::HalFunction(EHalGroupEmulator,EEmulatorHalIntProperty,(TAny*)"patchdata_conarc_dll_KEnableAllSplCharForQpCnv",&valueOfKEnableAllSplCharForQpCnv) == KErrNone)
+ {
+ enableAllSplCharForQpCnv = valueOfKEnableAllSplCharForQpCnv;
+ }
+#endif
+
+ ConvertFileL(*aList, KUidPlainTextToQuotedPrintableConverter, KLitOriginalDocFile, KLitGeneratedQuotedPrintableFromDocFile);
+ INFO_PRINTF1(_L("... testing conversion to Quoted-printable\n"));
+
+ if (enableAllSplCharForQpCnv)
+ {
+ TEST(FilesAreIdenticalL(iFs, KLitGeneratedQuotedPrintableFromDocFile, KLitExpectedQuotedPrintableFromDocFile));
+ }
+ else
+ {
+ TEST(FilesAreIdenticalL(iFs, KLitGeneratedQuotedPrintableFromDocFile, KLitExpectedQuotedPrintableFromDocFileWithoutSplChar));
+ }
+
+ ConvertFileL(*aList, KUidQuotedPrintableToPlainTextConverter, KLitGeneratedQuotedPrintableFromDocFile, KLitGeneratedDocFileFromQuotedPrintable);
+ INFO_PRINTF1(_L("... and testing back from Quoted-printable (round trip)\n"));
+ TEST(FilesAreIdenticalL(iFs, KLitGeneratedDocFileFromQuotedPrintable, KLitOriginalDocFile));
+
+ TEST(BaflUtils::DeleteFile(iFs, KLitGeneratedQuotedPrintableFromDocFile)==KErrNone);
+ TEST(BaflUtils::DeleteFile(iFs, KLitGeneratedDocFileFromQuotedPrintable)==KErrNone);
+ }
+
+void CTB64CnvStep::DoSpecificL(CCnaConverterList* aList)
+ {
+ INFO_PRINTF1(_L("Specific tests"));
+ INFO_PRINTF1(_L("QP conv 123 test"));
+ TBuf8<25> buf = _L8("123");
+ TBuf8<25> out;
+ RDesReadStream read(buf);
+ RDesWriteStream write(out);
+ TUid uid={KUidPlainTextToQuotedPrintableConverter};
+ CConverterBase* conv=aList->NewConverterL(uid);
+ TEST(conv!=NULL);
+ conv->ConvertObjectL(read,write);
+ read.Close();
+ write.CommitL();
+ write.Close();
+ TEST(buf==out);
+ delete conv;
+ INFO_PRINTF1(_L("String splitting"));
+ TBuf8<256> buf2 = _L8("00 Xxxxxx Xxxxx\x00d\x00aXxxxx\x00d\x00aXxxxxxxxxxxxxxxxxx XX00 0XX\x00d\x00aUnited Kingdom");
+ TBuf8<256> out2;
+ read.Open(buf2);
+ write.Open(out2);
+ CConverterBase* conv1=aList->NewConverterL(uid);
+ TEST(conv1!=NULL);
+ conv1->ConvertObjectL(read,write);
+ read.Close();
+ write.CommitL();
+ write.Close();
+ delete conv1;
+ TBuf8<256> return2;
+ read.Open(out2);
+ write.Open(return2);
+ TUid uid2={KUidQuotedPrintableToPlainTextConverter};
+ CConverterBase* conv2=aList->NewConverterL(uid2);
+ TEST(conv2!=NULL);
+ conv2->ConvertObjectL(read,write);
+ read.Close();
+ write.CommitL();
+ write.Close();
+ delete conv2;
+ TEST(return2.Compare(buf2)==0);
+ }
+
+void CTB64CnvStep::DoTestL()
+ {
+ BaflUtils::EnsurePathExistsL(iFs, KLitDirectoryForGeneratedFiles);
+
+ CCnaConverterList* const list=CCnaConverterList::NewLC();
+ list->UpdateL();
+ INFO_PRINTF2(_L("Created converter list (found %d converters)\n"), list->Count());
+
+ DoTestBase64L(list);
+ DoTestQPL(list);
+ DoTextEtextL(list);
+ // specific cases test code
+ DoSpecificL(list);
+ DoTextEtextWithControlCharsL(list);
+
+ CleanupStack::PopAndDestroy(list);
+ INFO_PRINTF1(_L("Destroyed converter list\n"));
+ }
+
+
+CTB64CnvStep::~CTB64CnvStep()
+/**
+ Destructor
+ */
+ {
+ }
+
+CTB64CnvStep::CTB64CnvStep()
+/**
+ Constructor
+ */
+ {
+ // Call base class method to set up the human readable name for logging
+ SetTestStepName(KTB64CnvStep);
+ }
+
+TVerdict CTB64CnvStep::doTestStepL()
+ {
+ INFO_PRINTF1(_L("Test Started"));
+ //
+ iFs.Connect();
+ //
+ __UHEAP_MARK;
+ INFO_PRINTF1(_L("Testing Base64"));
+ TRAPD(r,DoTestL());
+ TEST(r==KErrNone);
+
+ REComSession::FinalClose();
+
+ __UHEAP_MARKEND;
+ INFO_PRINTF1(_L("Test Finished"));
+
+ return TestStepResult();
+ }
+
+
+
+