--- /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;
+ }
+
+
+
+