filehandling/fileconverterfw/Tef/TB64CnvStep.cpp
changeset 0 2e3d3ce01487
--- /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();
+	}
+
+
+
+