diff -r 000000000000 -r 72b543305e3a email/pop3andsmtpmtm/clientmtms/test/src/T_CImPLAINTEXTSTORE.CPP --- /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(); + + TBufemailbodyfile(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 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 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 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; + } + + + +