--- a/messagingapp/msgutils/unidatautils/unidatamodelplugins/unibiomessagedataplugin/tsrc/testunidatamodelvcalplugin/testunidatamodelvcalplugin.cpp Tue Jul 06 14:12:40 2010 +0300
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,618 +0,0 @@
-/*
- * Copyright (c) 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:
- */
-#include <QtTest/QtTest>
-#include <QtDebug>
-#include <QTimer>
-#include <QSignalSpy>
-#include <xqconversions.h>
-#include <bsp.h>
-#include <biodb.h>
-#include <biouids.h>
-#include <biocmtm.h>
-
-#include "serviceinfo.h"
-#include "testunidatamodelvcalplugin.h"
-#include "unidatamodelloader.h"
-#include "testunidatamodelvcalplugin.ini"
-#include "unidatamodelplugininterface.h"
-#include "convergedmessage.h"
-
-const TInt KTelephoneNumberMaxLength = 32;
-_LIT(KBIOTxtFilePath, "C:\\test\\");
-_LIT(KBIOvCalenderPrefix, "vcal*");
-// vCalender
-_LIT(KUnixEpoch, "19700000:000000.000000");
-#define KBioUidValue 0x10001262
-
-const TUid KBioUidValueUid =
-{KBioUidValue};
-
-//---------------------------------------------------------------
-// TestUniDataModelVCalPlugin::init
-//---------------------------------------------------------------
-
-
-void TestUniDataModelVCalPlugin::initTestCase()
-{
-
-}
-void TestUniDataModelVCalPlugin::cleanupTestCase()
-{
-
-}
-
-void TestUniDataModelVCalPlugin::init()
-{
- iObserver = new (ELeave) MsgObserver();
-
- // Create a new messaging server session..
- iMSession = CMsvSession::OpenSyncL(*iObserver);
-
- iMsvEntry = iMSession->GetEntryL(KMsvRootIndexEntryId);
- newEntryId = 0;
- pluginLoader = new UniDataModelLoader();
-
- retTimeStamp = QDateTime::currentDateTime();
- int err = iFs.Connect();
- QVERIFY(err == 0);
- iBioDb = CBIODatabase::NewL(iFs);
- iFs.SetSessionPath(_L("c:\\"));
- inbox = EFalse;
- drafts = EFalse;
-}
-
-//---------------------------------------------------------------
-// TestUniDataModelVCalPlugin::cleanup
-//---------------------------------------------------------------
-void TestUniDataModelVCalPlugin::cleanup()
-{
- if (newEntryId > 0)
- iMsvEntry->DeleteL(newEntryId);
- delete iMsvEntry;
- iMsvEntry = NULL;
- delete iObserver;
- iObserver = NULL;
- delete iMSession;
- iMSession = NULL;
- delete pluginLoader;
-
-}
-
-void TestUniDataModelVCalPlugin::testInBoxVCalMessage()
-{
- inbox = ETrue;
- GenerateMessagesL();
-
- pluginInterface = pluginLoader->getDataModelPlugin("bio:vcal");
- pluginInterface->setMessageId(newEntryId);
-
- int count = pluginInterface->attachmentCount();
- QVERIFY(count == 1);
-
- UniMessageInfoList attachmentlist = pluginInterface->attachmentList();
- QVERIFY(!attachmentlist.isEmpty());
-
- UniMessageInfo* att = attachmentlist.at(0);
- QString path = att->path();
-
- QString recepient(TEST_MSG_FROM1);
- QString fromaddress;
- pluginInterface->fromAddress(fromaddress);
- QVERIFY(recepient == fromaddress);
-
- QString body;
- pluginInterface->body(body);
- QVERIFY(!body.isEmpty());
-
- // Compare input message , with the read message
- RFile origFile;
- int op = origFile.Open(iFs, currentFile, EFileRead);
- QVERIFY(op == 0);
-
- TBuf8<1000> readBuf;
- HBufC* readBuf16 = HBufC::NewL(2000);
-
- origFile.Read(readBuf);
- readBuf16->Des().Copy(readBuf);
-
- QString orig = XQConversions::s60DescToQString(*readBuf16);
- origFile.Close();
-
- HBufC* filepath = XQConversions::qStringToS60Desc(path);
-
- RFile file;
- op = file.Open(iFs, *filepath, EFileRead);
- QVERIFY(op == 0);
-
- file.Read(readBuf);
- readBuf16->Des().Copy(readBuf);
- QString bod = XQConversions::s60DescToQString(*readBuf16);
-
- delete readBuf16;
- file.Close();
- // compare Input body and output body
- QVERIFY(bod == orig );
-
- int size = pluginInterface->messageSize();
-
- MsgPriority priority = pluginInterface->messagePriority();
- // Normal priority
- qDebug() << "prority" << priority;
- QVERIFY(priority == 1);
-
- QVERIFY(pluginInterface->timeStamp() == retTimeStamp);
-
- ConvergedMessageAddressList recipientList;
- pluginInterface->toRecipientList(recipientList);
- QVERIFY(recipientList.count() == 0);
- iMsvEntry->SetEntryL(KMsvGlobalInBoxIndexEntryId);
-}
-
-void TestUniDataModelVCalPlugin::testDraftsVCalMessage()
-{
- drafts = ETrue;
- GenerateMessagesL();
-
- pluginInterface = pluginLoader->getDataModelPlugin("bio:vcal");
- pluginInterface->setMessageId(newEntryId);
-
- int count = pluginInterface->attachmentCount();
- QVERIFY(count == 1);
-
- UniMessageInfoList attachmentlist = pluginInterface->attachmentList();
- QVERIFY(!attachmentlist.isEmpty());
-
- UniMessageInfo* att = attachmentlist.at(0);
- QString path = att->path();
-
- QString fromaddress;
- pluginInterface->fromAddress(fromaddress);
- QVERIFY(fromaddress.isEmpty());
-
- QString body;
- pluginInterface->body(body);
- QVERIFY(!body.isEmpty());
-
- // Compare input message , with the read message
- RFile origFile;
- int op = origFile.Open(iFs, currentFile, EFileRead);
- QVERIFY(op == 0);
-
- TBuf8<1000> readBuf;
- HBufC* readBuf16 = HBufC::NewL(2000);
-
- origFile.Read(readBuf);
- readBuf16->Des().Copy(readBuf);
-
- QString orig = XQConversions::s60DescToQString(*readBuf16);
- origFile.Close();
-
- HBufC* filepath = XQConversions::qStringToS60Desc(path);
-
- RFile file;
- op = file.Open(iFs, *filepath, EFileRead);
- QVERIFY(op == 0);
-
- file.Read(readBuf);
-
- readBuf16->Des().Copy(readBuf);
-
- QString bod = XQConversions::s60DescToQString(*readBuf16);
-
- delete readBuf16;
- file.Close();
- // compare Input body and output body
- QVERIFY(bod == orig );
-
- int size = pluginInterface->messageSize();
-
- MsgPriority priority = pluginInterface->messagePriority();
- // Normal priority
- qDebug() << "prority" << priority;
- QVERIFY(priority == 1);
-
- QVERIFY(pluginInterface->timeStamp() == retTimeStamp);
-
- ConvergedMessageAddressList recipientList;
- pluginInterface->toRecipientList(recipientList);
- QString recepient(TEST_MSG_FROM1);
- QString recepient2(TEST_MSG_FROM2);
- QString origalias(TEST_MSG_ALIAS1);
-
- QVERIFY(recipientList.count() == 2);
-
- QVERIFY(recepient == recipientList[0]->address());
-
- QVERIFY( recipientList[0]->alias().isEmpty());
-
- const QString& as = recipientList[1]->address();
- const QString& as1 = recipientList[1]->alias();
- QVERIFY(recepient2 == as);
-
- QVERIFY(origalias == as1);
- iMsvEntry->SetEntryL(KMsvDraftEntryId);
-}
-
-
-
-void TestUniDataModelVCalPlugin::testUnusedAPIs()
-{
- pluginInterface = pluginLoader->getDataModelPlugin(ConvergedMessage::BioMsg);
-
- QVERIFY(pluginInterface->objectCount() == 0);
-
- UniMessageInfoList objectlist = pluginInterface->objectList();
- QVERIFY(objectlist.isEmpty());
-
- QVERIFY(pluginInterface->slideCount() == 0);
-
- UniMessageInfoList slidelist = pluginInterface->slideContent(0);
- QVERIFY(slidelist.isEmpty());
-
- QVERIFY(pluginInterface->hasAttachment() == true );
-
- ConvergedMessageAddressList recipientList;
-
- pluginInterface->ccRecipientList(recipientList);
- QVERIFY(recipientList.count() == 0);
-
- pluginInterface->bccRecipientList(recipientList);
- QVERIFY(recipientList.count() == 0);
-}
-
-CMsvEntrySelection* TestUniDataModelVCalPlugin::GenerateMessagesL()
-{
- HBufC* aFileDirectory = KBIOTxtFilePath().AllocL();
- TMsvId messageId;
- TBIOMessageType currentMsgType;
-
- CMsvEntrySelection* selection = new (ELeave) CMsvEntrySelection();
- CleanupStack::PushL(selection);
-
- TInt err = iFs.GetDir(aFileDirectory->Des(),
- KEntryAttMatchMask,
- ESortByName,
- iDir);
- if (err == KErrPathNotFound)
- {
- TInt makeDirErr = iFs.MkDirAll(aFileDirectory->Des());
- makeDirErr == KErrNone ? User::Leave(KErrNotFound)
- : User::Leave(makeDirErr);
- }
- else if (err != KErrNone)
- {
- User::Leave(err);
- }
-
- // Set the session path for the RFs
- SetSessionPath(aFileDirectory->Des());
- if (iDir)
- {
- delete iDir;
- iDir = NULL;
- }
-
- User::LeaveIfError(iFs.GetDir(_L("*.txt"), KEntryAttNormal, ESortByName, iDir));
- TInt count = iDir->Count();
- if (count == 0)
- {
- User::Leave(KErrNotFound); // No files to process
- }
-
- TBuf<60> outputBuf;
-
- for (TInt loop = 0; loop < count; loop++)
- {
- TEntry as = (*iDir)[0];
- currentFile = (as.iName);
- // Not processed all the messages - so keep the current state
- iFilesProcessed++; // Here because need to update the counter promptly
- currentMsgType = SetMessageType(currentFile);
- if (currentMsgType != ENoMessage) // skip any dodgy filenames
- {
- messageId = CreateBIOEntryFromFileL(currentFile, currentMsgType);
- selection->AppendL(messageId);
- TPtrC tempPtr = (currentFile.Des());
-
- }
- }
- CleanupStack::Pop(); // selection
- return selection;
-}
-
-TBIOMessageType TestUniDataModelVCalPlugin::SetMessageType(
- const TDesC& aFileName)
-{
-
- if (aFileName.MatchF(KBIOvCalenderPrefix) == 0)
- {
- return EBiovCalenderMessage;
- }
-
- return ENoMessage;
-}
-
-TMsvId TestUniDataModelVCalPlugin::CreateBIOEntryFromFileL(
- const TDesC& aFilename,
- TBIOMessageType aMessageType)
-{
- //First use the filename to get the message body,
- // then convert '\n' to the paragraph delimiters used in proper SMS
- HBufC* tempBuffer;
-
- tempBuffer = ReadFromFileL(aFilename);
- CleanupStack::PushL(tempBuffer);
-
- newEntryId = CreateBIOEntryL(*tempBuffer, aMessageType);
-
- // Finished with our local descriptors - free up some memory
- CleanupStack::PopAndDestroy();
- return newEntryId;
-}
-
-void TestUniDataModelVCalPlugin::SetSessionPath(const TDesC& aSessionPath)
-{
- iFs.SetSessionPath(aSessionPath);
-}
-
-HBufC* TestUniDataModelVCalPlugin::ReadFromFileL(const TDesC& aFile)
-{
- RFile file;
- TBuf8<1024> lineBuffer;
- TInt err = KErrNone;
-
- err = file.Open(iFs, aFile, EFileStreamText | EFileRead | EFileShareAny);
-
- if (err != KErrNone) // Didn't find the file, so leave - should only get valid filenames!
- {
- User::Leave(KErrNotFound);
- }
-
- HBufC* bioBuf = HBufC::NewLC(65535); // Create a new descriptor on the heap.
- HBufC* copyBuffer = HBufC::NewLC(1024);
-
- do // Read in the text from file, and also check if there is a name field:
- {
- err = file.Read(lineBuffer);// Read upto 256 chars, '\n' and all...
- //err = ReadLineL(file,lineBuffer);
- if (err == KErrNone) // Made a valid read,
- if (lineBuffer.Length() == 0) // but read 0 chars
- err = KErrEof; // so set err value to end processing
-
- if (err == KErrNone)
- {
- copyBuffer->Des().Copy(lineBuffer);// Copy, and overwrite existing text
- if ( (bioBuf->Length() + copyBuffer->Length())
- > bioBuf->Des().MaxLength())
- {
- bioBuf = bioBuf->ReAllocL(bioBuf->Length()
- + copyBuffer->Length());
- }
- bioBuf->Des().Append(*copyBuffer);
- //bioBuf->Des().Append(_L("\n"));
- }
- }while (err != KErrEof);
-
- CleanupStack::PopAndDestroy(); // Destroy the copyBuffer.
- CleanupStack::Pop();// Remove the bioBuf.
-
- file.Close();
- return bioBuf;
-}
-
-TMsvId TestUniDataModelVCalPlugin::CreateBIOEntryL(TDesC& aText,
- TBIOMessageType aMessageType)
-{
- // Ensure that we have a valid service ID to work with:
- TMsvId iBioServiceId;
-
- iBioServiceId = SetBIOServiceIdL();
-
- HBufC* localBuffer = aText.AllocL();
- CleanupStack::PushL(localBuffer);
-
- TPtr messDes = localBuffer->Des();
-
- if (aMessageType != EBiovCardMessage && aMessageType
- != EBiovCalenderMessage)
- {
- // convert \r\n to \n since this is what is expected from SMS when not vCard data
- for (TInt i = 0; i < messDes.Length(); i++)
- {
- if (messDes[i] == (TText) '\r' && i < messDes.Length() - 1
- && messDes[i + 1] == (TText) '\n')
- messDes.Delete(i, 1);
- }
- }
-
- // Create and fill a CRichText object for the jobbie:
- CParaFormatLayer* paraFormatLayer = CParaFormatLayer::NewL();
- CleanupStack::PushL(paraFormatLayer);
- CCharFormatLayer* charFormatLayer = CCharFormatLayer::NewL();
- CleanupStack::PushL(charFormatLayer);
- CRichText* richText = CRichText::NewL(paraFormatLayer, charFormatLayer);
- CleanupStack::PushL(richText);
-
- TInt pos = richText->DocumentLength();
- richText->InsertL(pos, messDes);
-
- TMsvEntry newBioEntry;
- newBioEntry.SetNew(ETrue);
- newBioEntry.SetComplete(EFalse);
- newBioEntry.SetUnread(ETrue);
- newBioEntry.SetVisible(ETrue);
- newBioEntry.SetReadOnly(EFalse);
- newBioEntry.SetFailed(EFalse);
- newBioEntry.SetOperation(EFalse);
- newBioEntry.SetMultipleRecipients(EFalse);
- newBioEntry.SetAttachment(EFalse);
- newBioEntry.iMtm = KUidBIOMessageTypeMtm;
- newBioEntry.iType = KUidMsvMessageEntry;
- newBioEntry.iServiceId = iBioServiceId;
- TTime now;
- now.UniversalTime();
- newBioEntry.iDate = now;
-
- TTime unixEpoch(KUnixEpoch);
- TTimeIntervalSeconds seconds;
- TTime timeStamp = newBioEntry.iDate;
- timeStamp.SecondsFrom(unixEpoch, seconds);
- retTimeStamp.setTime_t(seconds.Int());
-
- newBioEntry.iDescription.Set(richText->Read(0, richText->DocumentLength()));
- TBufC<KTelephoneNumberMaxLength> telNumber;
-
- QString recepient(TEST_MSG_FROM1);
- tempNumber = XQConversions::qStringToS60Desc(recepient);
-
- telNumber = tempNumber->Des();
- newBioEntry.iDetails.Set(telNumber);
-
- SetForMtmTypeL(newBioEntry, aMessageType);
-
- newBioEntry.iSize = richText->DocumentLength();// msgSize;
- CreateBioEntryClientSideL(newBioEntry, *richText);
-
- CleanupStack::PopAndDestroy(4); // richText, charFormatLayer, paraFormatLayer, localBuffer
- return newBioEntry.Id();
-}
-
-void TestUniDataModelVCalPlugin::CreateBioEntryClientSideL(TMsvEntry& aEntry,
- CRichText& aBody)
-{
- if (inbox)
- {
- iMsvEntry->SetEntryL(KMsvGlobalInBoxIndexEntryId);
- }
- else if (drafts)
- {
- iMsvEntry->SetEntryL(KMsvDraftEntryId);
- }
- // Get the global inbox.
-
- iMsvEntry->CreateL(aEntry);
- iMsvEntry->SetEntryL(aEntry.Id());
-
- // Save all the changes
- CMsvStore* store = iMsvEntry->EditStoreL();
- CleanupStack::PushL(store);
-
- if (store->HasBodyTextL())
- {
- store->DeleteBodyTextL();
- }
-
- CPlainText* pText = CPlainText::NewL();
- CleanupStack::PushL(pText);
-
- if (inbox)
- {
- CSmsHeader* smsHeader = CSmsHeader::NewL(CSmsPDU::ESmsDeliver, *pText);
- CleanupStack::PushL(smsHeader);
- smsHeader->SetFromAddressL(*tempNumber);
- smsHeader->StoreL(*store);
-
- }
- else if (drafts)
- {
-
- QString recepient(TEST_MSG_FROM1);
- QString recepient2(TEST_MSG_FROM2);
- QString alias(TEST_MSG_ALIAS1);
-
- HBufC* addr = XQConversions::qStringToS60Desc(recepient);
- HBufC* addr2 = XQConversions::qStringToS60Desc(recepient2);
- HBufC* alias1 = XQConversions::qStringToS60Desc(alias);
-
- CSmsHeader* smsHeader = CSmsHeader::NewL(CSmsPDU::ESmsSubmit, *pText);
- CleanupStack::PushL(smsHeader);
-
- CSmsNumber* number1 = CSmsNumber::NewL(); // create the instance
- CleanupStack::PushL(number1);
-
- number1->SetNameL(TPtrC());
- number1->SetAddressL(*addr);
- smsHeader->Recipients().AppendL(number1);
- CleanupStack::Pop(number1);
-
- CSmsNumber* number2 = CSmsNumber::NewL();
- CleanupStack::PushL(number2);
-
- number2->SetNameL(*alias1);
- number2->SetAddressL(*addr2);
-
- smsHeader->Recipients().AppendL(number2);
- CleanupStack::Pop(number2);
- smsHeader->StoreL(*store);
-
- }
-
- store->StoreBodyTextL(aBody);
- store->CommitL();
-
- CleanupStack::PopAndDestroy(3); //store - close the store
-
- aEntry.SetComplete(ETrue);
- // Update the entry
- iMsvEntry->ChangeL(aEntry);
- iMsvEntry->SetEntryL(KMsvRootIndexEntryId);
-}
-
-TMsvId TestUniDataModelVCalPlugin::SetBIOServiceIdL()
-{
- // Haven't found an entry so create a BIO Message service:
- TMsvEntry bioServiceEntry;
- bioServiceEntry.iMtm = KUidBIOMessageTypeMtm;
- bioServiceEntry.iType = KUidMsvServiceEntry;
- bioServiceEntry.SetVisible(EFalse);
- bioServiceEntry.iDate.UniversalTime();
- bioServiceEntry.iDescription.Set(_L("BIO Message Service ")); // Is there such a thing?
- bioServiceEntry.iDetails.Set(_L("BIO Message Service"));
-
- TMsvId newBIOServiceId;
-
- iMsvEntry->SetEntryL(KMsvRootIndexEntryId);
- iMsvEntry->CreateL(bioServiceEntry); // Needs to be a child of the root!
- newBIOServiceId = bioServiceEntry.Id();
-
- return newBIOServiceId;
-}
-
-void TestUniDataModelVCalPlugin::SetForMtmTypeL(TMsvEntry& aEntry,
- TBIOMessageType aType)
-{
- TInt index;
-
- aEntry.iBioType = KUidBIOVCalenderMsg;
-
- // Set other TMsvEntry fields if we have a BIO message type
- if (aType != ENoMessage)
- {
- aEntry.SetMtmData2(0);
- aEntry.SetMtmData3(0);
- }
-
- // set description from BIF file
- iBioDb->GetBioIndexWithMsgIDL(TUid::Uid(aEntry.iBioType), index);
- if (index == KErrNotFound)
- User::Leave(KErrNotFound);
- aEntry.iDescription.Set(iBioDb->BifReader(index).Description());
-}
-
-void MsgObserver::HandleSessionEventL(TMsvSessionEvent /*aEvent*/,
- TAny* /*aArg1*/, TAny* /*aArg2*/, TAny* /*aArg3*/)
-{
-}