email/pop3andsmtpmtm/clientmtms/test/src/T_CImPLAINTEXTSTORE.CPP
changeset 0 72b543305e3a
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/email/pop3andsmtpmtm/clientmtms/test/src/T_CImPLAINTEXTSTORE.CPP	Thu Dec 17 08:44:11 2009 +0200
@@ -0,0 +1,347 @@
+// Copyright (c) 2007-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:
+// T_PLAINTEXTSTORE.CPP
+// 
+//
+
+#include "t_CImplaintextstore.h"
+#include "cactivewaiter.h"
+
+LOCAL_D TMsvId pop3Service;
+LOCAL_D TMsvId smtpService;
+LOCAL_D TMsvId newMessageId;
+LOCAL_D CTrapCleanup* theCleanup;
+
+
+#define KTestMessageDir			_L("")
+
+RTest test(KCImPlainBodyTest);
+
+class CImPlainBodyText;
+	
+CTestCImPlainTextStore::CTestCImPlainTextStore()
+	{
+		iCImPlainBodyTextStore= NULL;
+		iRequestCount = 0;
+		iActiveWaiter = NULL;
+	}
+	
+
+/**
+Initialises the tests.
+*/	
+void CTestCImPlainTextStore::SetupL()
+	{
+	
+
+	iActiveWaiter = new (ELeave) CActiveWaiter();
+	
+	testUtils = CEmailTestUtils::NewL(test);
+	testUtils->CreateAllTestDirectories();
+	testUtils->FileSession().SetSessionPath(_L("C:\\"));
+	testUtils->ClearEmailAccountsL();
+	testUtils->CleanMessageFolderL();
+	testUtils->GoServerSideL();
+
+	TBuf<KMaxFilePathLength>emailbodyfile(KEmail40kBodyFile);
+	RFs fsSession;
+	RFile infile; 
+	
+	
+	
+	User::LeaveIfError(fsSession.Connect()); 
+ 	User::LeaveIfError(infile.Open(fsSession, emailbodyfile, EFileRead));
+	
+	TInt size = 0;
+	infile.Size(size);
+ 
+ 	//read the 8 bit data from the file
+	TInt chunkLength = size / 3; 
+	
+ 	HBufC8* tempBuf1 = HBufC8::NewL(chunkLength);	
+ 	TPtr8 tempBufPtr1(tempBuf1->Des());
+ 	infile.Read(tempBufPtr1,chunkLength);
+	iFilebuf1 = HBufC16::NewL(chunkLength);  
+	TPtr16 ptr1=iFilebuf1->Des();	  
+	ptr1.Copy(tempBufPtr1);
+	
+	HBufC8* tempBuf2 = HBufC8::NewL(chunkLength);	
+ 	TPtr8 tempBufPtr2(tempBuf2->Des());
+ 	infile.Read(tempBufPtr2,chunkLength);
+	iFilebuf2 = HBufC16::NewL(chunkLength);  
+	TPtr16 ptr2=iFilebuf2->Des();	  
+	ptr2.Copy(tempBufPtr2);
+	
+	HBufC8* tempBuf3 = HBufC8::NewL(chunkLength);	
+ 	TPtr8 tempBufPtr3(tempBuf3->Des());
+	infile.Read(tempBufPtr3,chunkLength);
+	iFilebuf3 = HBufC16::NewL(chunkLength);  
+	TPtr16 ptr3=iFilebuf3->Des();	  
+	ptr3.Copy(tempBufPtr3);
+	
+	infile.Close();
+	
+	
+	testUtils->GoClientSideL();
+	testUtils->ClearEmailAccountsL();
+	smtpService = testUtils->CreateSmtpServiceL();
+	pop3Service = testUtils->CreatePopServiceL();
+	testUtils->GoServerSideL();
+
+	testUtils->FileSession().SetSessionPath(_L("c:\\"));
+
+	test.Printf(_L("\nPerforming Tests\n"));
+	
+	testUtils->GoClientSideL();
+
+	CEmailAccounts* accounts = CEmailAccounts::NewLC();
+	TSmtpAccount smtpAccount;
+	accounts->GetSmtpAccountL(smtpService, smtpAccount);
+	accounts->SetDefaultSmtpAccountL(smtpAccount);
+	CleanupStack::PopAndDestroy(accounts);
+
+	TParse parsedFileName;
+	TFileName name(KTestMessageDir);
+	testUtils->ResolveLogFile(name, parsedFileName);
+
+	
+	// Get the default charset
+	CCnvCharacterSetConverter* characterConverter = CCnvCharacterSetConverter::NewL();
+	CleanupStack::PushL(characterConverter);
+	CImConvertCharconv* charConv = CImConvertCharconv::NewL(*characterConverter,fsSession );
+	CleanupStack::PushL(charConv);
+
+	iDefaultCharset =	charConv->SystemDefaultCharset();
+	CleanupStack::PopAndDestroy(2);
+	fsSession.Close();
+	
+	}
+
+
+void CTestCImPlainTextStore::TearDownL()
+//virtual 
+	{
+	delete iCImPlainBodyTextStore;
+	delete iFilebuf1;
+	delete iFilebuf2;
+	delete iFilebuf3;
+	delete testUtils;
+	delete iActiveWaiter;
+	test.Close();
+	
+	}
+
+
+
+/**
+Create new Plaintext message
+*/
+
+void CTestCImPlainTextStore::CreateNewPlaintextMessageL()
+	{
+	TMsvEmailTypeList msvEmailTypeList = 0;
+	TMsvPartList partList = (KMsvMessagePartBody | KMsvMessagePartAttachments);
+	CImEmailOperation* emailOperation = CImEmailOperation::CreateNewL(iActiveWaiter->iStatus, *(testUtils->iMsvSession), KMsvGlobalOutBoxIndexEntryId,KMsvNullIndexEntryId, partList, msvEmailTypeList, KUidMsgTypeSMTP, CActive::EPriorityStandard, ETrue);
+	CleanupStack::PushL(emailOperation);
+	iActiveWaiter->WaitActive();
+	
+	//check progres
+	TMsvId temp;	
+	TPckgC<TMsvId> paramPack(temp);
+	const TDesC8& progBuf = emailOperation->ProgressL();	
+	paramPack.Set(progBuf);
+	newMessageId=paramPack();
+	CleanupStack::PopAndDestroy(emailOperation); 
+	}
+		
+void CTestCImPlainTextStore::TestStoreRestore16BitChunkSynchL()
+	{
+	CreateNewPlaintextMessageL();
+	CMsvEntry* entry = testUtils->iMsvSession->GetEntryL(newMessageId);
+	CImEmailMessage* imEmailMessage = CImEmailMessage::NewLC(*entry);
+	iCImPlainBodyTextStore = imEmailMessage->OpenPlainBodyTextForWriteL();
+	iCImPlainBodyTextStore->StoreChunkL(iFilebuf1->Des());
+
+	TInt bodyTextSize = iFilebuf1->Length();
+		
+	iCImPlainBodyTextStore->StoreChunkL(iFilebuf2->Des());
+	bodyTextSize += iFilebuf2->Length();
+	
+	iCImPlainBodyTextStore->StoreChunkL(iFilebuf3->Des());
+	bodyTextSize += iFilebuf3->Length();
+	
+	iCImPlainBodyTextStore->CommitL(iActiveWaiter->iStatus);
+	iActiveWaiter->WaitActive();
+	
+	delete iCImPlainBodyTextStore;
+	iCImPlainBodyTextStore = NULL;
+	
+	//Restore the data in chunks.	
+	HBufC16* filebuf11 = HBufC16::NewL(100+KTestStringLength );
+
+	
+	TInt origSize = bodyTextSize;
+	TInt sizeOfRestoredText = 0;
+
+	TPtr bufPtr = filebuf11->Des();
+	TInt pos = 0;
+	
+	iCImPlainBodyTextStore = imEmailMessage->OpenPlainBodyTextForReadL(CImEmailMessage::EThisMessageOnly,100);
+	iCImPlainBodyTextStore->NextChunkL(bufPtr);
+	
+	RArray<TPtr> chunkArray;
+	chunkArray.Append(bufPtr);
+	
+	sizeOfRestoredText += bufPtr.Length();
+	
+	while(bufPtr.Length() > 0 && bufPtr.Length() == 100)
+		{
+		iCImPlainBodyTextStore->NextChunkL(bufPtr);
+		// put retrived buffer in a array.
+		chunkArray.Append(bufPtr);
+		sizeOfRestoredText += bufPtr.Length();
+		}
+
+	ASSERT_EQUALS(bodyTextSize, sizeOfRestoredText);
+
+	for(TInt j=chunkArray.Count() - 1;j >0; --j )
+		{
+		bufPtr.SetLength(0);
+		iCImPlainBodyTextStore->PreviousChunkL(bufPtr);
+		// Compare chunk retrieved with chunk retrieved by NextChunkL
+		TInt comp = bufPtr.Compare(chunkArray[j-1]);
+		ASSERT_EQUALS(comp, 0);
+		}
+
+	CleanupStack::PopAndDestroy(imEmailMessage); 
+	}
+			
+void CTestCImPlainTextStore::TestStoreRestore16BitChunkAsyncL()
+	{
+	CreateNewPlaintextMessageL();
+	
+	CMsvEntry* entry = testUtils->iMsvSession->GetEntryL(newMessageId);
+	CImEmailMessage* imEmailMessage = CImEmailMessage::NewLC(*entry);
+	
+	iCImPlainBodyTextStore = imEmailMessage->OpenPlainBodyTextForWriteL();
+
+	iCImPlainBodyTextStore->StoreChunkL(iFilebuf1->Des(),iActiveWaiter->iStatus);
+	iActiveWaiter->WaitActive();
+	TInt bodyTextSize = iFilebuf1->Length();
+		
+	iCImPlainBodyTextStore->StoreChunkL(iFilebuf2->Des(),iActiveWaiter->iStatus);
+	iActiveWaiter->WaitActive();
+	bodyTextSize += iFilebuf2->Length();
+	
+	iCImPlainBodyTextStore->StoreChunkL(iFilebuf3->Des(),iActiveWaiter->iStatus);
+	iActiveWaiter->WaitActive();
+	bodyTextSize += iFilebuf3->Length();
+	
+	iCImPlainBodyTextStore->CommitL(iActiveWaiter->iStatus);
+	iActiveWaiter->WaitActive();
+	
+	delete iCImPlainBodyTextStore;
+	iCImPlainBodyTextStore = NULL;
+	
+	//Restore the data in chunks.	
+	HBufC16* filebuf11 = HBufC16::NewL(100+KTestStringLength);
+
+	
+	TInt origSize = bodyTextSize;
+	TInt sizeOfRestoredText = 0;
+
+	TPtr bufPtr = filebuf11->Des();
+	TInt pos = 0;
+	
+	iCImPlainBodyTextStore = imEmailMessage->OpenPlainBodyTextForReadL(CImEmailMessage::EThisMessageOnly,100);
+	iCImPlainBodyTextStore->NextChunkL(bufPtr,iActiveWaiter->iStatus);
+	iActiveWaiter->WaitActive();
+	
+	RArray<TPtr> chunkArray;
+	chunkArray.Append(bufPtr);
+	
+	sizeOfRestoredText += bufPtr.Length();
+	
+	while(bufPtr.Length() > 0 && bufPtr.Length() == 100)
+		{
+		iCImPlainBodyTextStore->NextChunkL(bufPtr,iActiveWaiter->iStatus);
+		iActiveWaiter->WaitActive();
+		// put retrived buffer in a array.
+		chunkArray.Append(bufPtr);
+		sizeOfRestoredText += bufPtr.Length();
+		}
+
+	ASSERT_EQUALS(bodyTextSize, sizeOfRestoredText);
+
+	for(TInt j=chunkArray.Count() - 1;j >0; --j )
+		{
+		bufPtr.SetLength(0);
+		iCImPlainBodyTextStore->PreviousChunkL(bufPtr,iActiveWaiter->iStatus);
+		iActiveWaiter->WaitActive();
+		// Compare chunk retrieved with chunk retrieved by NextChunkL
+		TInt comp = bufPtr.Compare(chunkArray[j-1]);
+		ASSERT_EQUALS(comp, 0);
+		}
+	CleanupStack::PopAndDestroy(imEmailMessage); 
+	}
+
+void CTestCImPlainTextStore::TestStoreRichTextAsPlainTextL()
+	{	
+	CreateNewPlaintextMessageL();
+	
+	CMsvEntry* entry = testUtils->iMsvSession->GetEntryL(newMessageId);
+	CImEmailMessage* imEmailMessage = CImEmailMessage::NewLC(*entry);
+	
+	iCImPlainBodyTextStore = imEmailMessage->OpenPlainBodyTextForWriteL();
+
+	CParaFormatLayer* paraLayer = CParaFormatLayer::NewL();
+	
+	CCharFormatLayer* charLayer = CCharFormatLayer::NewL();
+		
+	CRichText* richText=CRichText::NewL(paraLayer, charLayer, CEditableText::EFlatStorage, KBufferGranularity);
+
+
+	TBuf<50> theMessageContents = _L("Test message contents");
+	richText->InsertL(0, theMessageContents);
+	TInt textLength = richText->DocumentLength();
+	
+	iCImPlainBodyTextStore->StoreRichTextAsPlainTextL(*richText);
+	iCImPlainBodyTextStore->CommitL(iActiveWaiter->iStatus);
+	iActiveWaiter->WaitActive();
+	
+	delete richText;
+
+	richText=CRichText::NewL(paraLayer, charLayer, CEditableText::EFlatStorage, KBufferGranularity);
+	imEmailMessage->GetBodyTextL(newMessageId, CImEmailMessage::EThisMessageOnly, *richText, *paraLayer, *charLayer);	
+	richText->DocumentLength();
+	ASSERT_EQUALS(richText->DocumentLength(), textLength);
+
+	delete richText;
+	delete charLayer;
+	delete paraLayer;
+	CleanupStack::PopAndDestroy(imEmailMessage); 
+	}	
+
+CTestSuite* CTestCImPlainTextStore::CreateSuiteL(const TDesC& aName)
+	{
+	SUB_SUITE;
+	ADD_ASYNC_TEST_STEP(TestStoreRestore16BitChunkSynchL);
+	ADD_ASYNC_TEST_STEP(TestStoreRestore16BitChunkAsyncL);
+	ADD_ASYNC_TEST_STEP(TestStoreRichTextAsPlainTextL);
+	END_SUITE;
+	}
+	
+
+	
+