diff -r 4697dfb2d7ad -r 238255e8b033 messagingapp/msgutils/unidatamodel/unimmsdataplugin/tsrc/testunidatamodelmmsplugin/testunidatamodelmmsplugin.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/messagingapp/msgutils/unidatamodel/unimmsdataplugin/tsrc/testunidatamodelmmsplugin/testunidatamodelmmsplugin.cpp Fri Apr 16 14:56:15 2010 +0300 @@ -0,0 +1,513 @@ +/* + * 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 +#include "serviceinfo.h" +#include +#include +#include +#include "convergedmessage.h" +#include "s60qconversions.h" +#include "unidatamodelplugininterface.h" +#include "unidatamodelloader.h" +#include +#include +#include +#include +#include "convergedmessageaddress.h" +#include "testunidatamodelmmsplugin.h" +#include "testunidatamodelmmsplugin.ini" +#include + +_LIT(KUnixEpoch, "19700000:000000.000000"); +_LIT( KRootPath, "c:\\" ); + + +void TestUniDataModelMMSPlugin::initTestCase() + { + iObserver = new (ELeave) TestObserverMMS(); + + // Create a new messaging server session.. + TRAPD(err,iMSession = CMsvSession::OpenSyncL(*iObserver)); + if(err) + { + TInt x=err; + } + // Create the client mtm registry + iMtmReg = CClientMtmRegistry::NewL(*iMSession); + + // Get the MMS clientmtm + iMmsClientMtm = (CMmsClientMtm *) iMtmReg->NewMtmL(KUidMsgTypeMultimedia); + + User::LeaveIfError( iFs.Connect() ); + iFs.SetSessionPath( KRootPath ); + iSettings = CMmsSettings::NewL(); + iMmsHeaders = CMmsHeaders::NewL(iSettings->MmsVersion()); + iSettings->LoadSettingsL(); + iServiceId = iSettings->Service(); + + iMessageId = 0; + pluginLoader = new UniDataModelLoader(); + retTimeStamp = QDateTime::currentDateTime(); + } + +void TestUniDataModelMMSPlugin::cleanupTestCase() + { + for(TInt i=0; iEntry().DeleteL(idArr[i]); + } + + delete iObserver; + delete iMmsClientMtm; + delete iMtmReg; + delete iMSession; + delete pluginLoader; + } + + +//--------------------------------------------------------------- +// TestUniDataModelPlugin::init +//--------------------------------------------------------------- + +void TestUniDataModelMMSPlugin::init() +{ +/* iObserver = new (ELeave) TestObserverMMS(); + + // Create a new messaging server session.. + TRAPD(err,iMSession = CMsvSession::OpenSyncL(*iObserver)); + if(err) + { + TInt x=err; + } + // Create the client mtm registry + iMtmReg = CClientMtmRegistry::NewL(*iMSession); + + // Get the MMS clientmtm + iMmsClientMtm = (CMmsClientMtm *) iMtmReg->NewMtmL(KUidMsgTypeMultimedia); + + User::LeaveIfError( iFs.Connect() ); + iFs.SetSessionPath( KRootPath ); + iSettings = CMmsSettings::NewL(); + iMmsHeaders = CMmsHeaders::NewL(iSettings->MmsVersion()); + iSettings->LoadSettingsL(); + iServiceId = iSettings->Service(); + + iMessageId = 0; + pluginLoader = new UniDataModelLoader(); + retTimeStamp = QDateTime::currentDateTime();*/ +} + +//--------------------------------------------------------------- +// TestUniDataModelPlugin::cleanup +//--------------------------------------------------------------- +void TestUniDataModelMMSPlugin::cleanup() +{ + + /* + for(TInt i=0; iEntry().DeleteL(idArr[i]); + } + + delete iObserver; + delete iMmsClientMtm; + delete iMtmReg; + delete iMSession; + delete pluginLoader;*/ +} + + +void TestUniDataModelMMSPlugin::createMMS(TMsvId pId, TBool subjectField) + { + TMsvEntry indexEntry; + indexEntry.iType = KUidMsvMessageEntry; + indexEntry.iMtm = KUidMsgTypeMultimedia; + indexEntry.iServiceId = iServiceId; + indexEntry.iDate.HomeTime(); + + // Convert TTime to QDateTime , this will be used for comparing the time of mesage + // when fetched from datamodel + TTime unixEpoch(KUnixEpoch); + TTimeIntervalSeconds seconds; + TTime timeStamp = indexEntry.iDate; + timeStamp.SecondsFrom(unixEpoch, seconds); + retTimeStamp.setTime_t(seconds.Int()); + + + TMsvId parentId = pId; + CMsvEntry* entry = CMsvEntry::NewL(*iMSession,parentId,TMsvSelectionOrdering()); + CleanupStack::PushL(entry); + + entry->SetEntryL(parentId); + entry->CreateL(indexEntry); + entry->SetEntryL(indexEntry.Id()); + iMmsClientMtm->SwitchCurrentEntryL(entry->EntryId()); + + //iMmsClientMtm->LoadMessageL(); + + CMsvStore* store = iMmsClientMtm->Entry().EditStoreL(); + CleanupStack::PushL(store); + + iMessageId = indexEntry.Id(); + idArr.Append(iMessageId); + + if(subjectField) + { + QString subject(TEST_MSG_SUBJECT); + HBufC* subj = S60QConversions::qStringToS60Desc(subject); + iMmsClientMtm->SetSubjectL(*subj); + } + + //Sender + QString sender(TEST_MSG_FROM1); + HBufC* addr = S60QConversions::qStringToS60Desc(sender); + + + if (addr) + { + CleanupStack::PushL(addr); + TBuf<32> name; + name.Copy(addr->Left(32)); + indexEntry.iDetails.Set(name); + + iMmsClientMtm->SetSenderL(*addr); + + CleanupStack::PopAndDestroy(addr); + } + + //Recipient + QString recipient(TEST_MSG_RECIEPIENT1); + HBufC* addr2 = S60QConversions::qStringToS60Desc(recipient); + if (addr2) + { + CleanupStack::PushL(addr2); + iMmsClientMtm->AddAddresseeL(EMsvRecipientTo,*addr2); + CleanupStack::PopAndDestroy(addr2); + } + + QString recipient2(TEST_MSG_RECIEPIENT2); + HBufC* addr3 = S60QConversions::qStringToS60Desc(recipient2); + if (addr3) + { + CleanupStack::PushL(addr3); + iMmsClientMtm->AddAddresseeL(EMsvRecipientCc,*addr3); + CleanupStack::PopAndDestroy(addr3); + } + + QString recipient3(TEST_MSG_RECIEPIENT3); + HBufC* addr4 = S60QConversions::qStringToS60Desc(recipient3); + if (addr4) + { + CleanupStack::PushL(addr4); + iMmsClientMtm->AddAddresseeL(EMsvRecipientBcc,*addr4); + CleanupStack::PopAndDestroy(addr4); + } + + //Create Text Attachment + TMsvAttachmentId attaId = 0; + TFileName attachmentFile( _L("story.txt") ); + TBufC<12> story = _L( "Hello world!" ); + + iMmsClientMtm->CreateTextAttachmentL(*store, attaId, story, attachmentFile, ETrue ); + msgSize = iMmsClientMtm->MessageSize(); + + store->CommitL(); + CleanupStack::PopAndDestroy(); // store + + iMmsClientMtm->SaveMessageL(); + } + +void TestUniDataModelMMSPlugin::testInboxMessage() + { + createMMS(KMsvGlobalInBoxIndexEntryIdValue,ETrue); + + pluginLoader->loadPlugins(); + // Get the MMS data modelplugin + pluginInterface = pluginLoader->getDataModelPlugin("mms"); + + pluginInterface->setMessageId(iMessageId); + + int size = pluginInterface->messageSize(); + QVERIFY(size == msgSize); + + QVERIFY(pluginInterface->timeStamp() == retTimeStamp); + + + //Fetch the To List + ConvergedMessageAddressList recipientList; + pluginInterface->toRecipientList(recipientList); + QVERIFY(recipientList.count() != 0); + + ConvergedMessageAddressList recipientList2; + pluginInterface->ccRecipientList(recipientList2); + QVERIFY(recipientList2.count() != 0); + + ConvergedMessageAddressList recipientList3; + pluginInterface->bccRecipientList(recipientList3); + QVERIFY(recipientList3.count() != 0); + + QString recepient(TEST_MSG_FROM1); + QString fromaddress; + pluginInterface->fromAddress(fromaddress); + QVERIFY(recepient == fromaddress); + + UniMessageInfoList attList = pluginInterface->attachmentList(); + QVERIFY(attList.count() != 0); + + TInt attCount =0; + attCount = pluginInterface->attachmentCount(); + QVERIFY(attCount != 0); + + MsgPriority priority = pluginInterface->messagePriority(); + // Normal priority + qDebug() << "prority" << priority; + QVERIFY(priority == 1); + + QVERIFY(pluginInterface->objectCount() == 1); + + UniMessageInfoList objectlist = pluginInterface->objectList(); + QVERIFY(!objectlist.isEmpty()); + + QVERIFY(pluginInterface->slideCount() == 0); + + TRAPD(err, iMmsClientMtm->SwitchCurrentEntryL(KMsvGlobalInBoxIndexEntryId)); + } + +void TestUniDataModelMMSPlugin::testOutboxMessage() + { + createMMS(KMsvGlobalOutBoxIndexEntryIdValue,EFalse); + + pluginLoader->loadPlugins(); + // Get the MMS data modelplugin + pluginInterface = pluginLoader->getDataModelPlugin("mms"); + QVERIFY(pluginInterface->messageType()=="mms"); + + pluginInterface->setMessageId(iMessageId); + + int size = pluginInterface->messageSize(); + QVERIFY(size == msgSize); + + QVERIFY(pluginInterface->timeStamp() == retTimeStamp); + + + //Fetch the To List + ConvergedMessageAddressList recipientList; + pluginInterface->toRecipientList(recipientList); + QVERIFY(recipientList.count() != 0); + + ConvergedMessageAddressList recipientList2; + pluginInterface->ccRecipientList(recipientList2); + QVERIFY(recipientList2.count() != 0); + + ConvergedMessageAddressList recipientList3; + pluginInterface->bccRecipientList(recipientList3); + QVERIFY(recipientList3.count() != 0); + + QString recepient(TEST_MSG_FROM1); + QString fromaddress; + pluginInterface->fromAddress(fromaddress); + QVERIFY(recepient == fromaddress); + + UniMessageInfoList attList = pluginInterface->attachmentList(); + QVERIFY(attList.count() != 0); + + TInt attCount =0; + attCount = pluginInterface->attachmentCount(); + QVERIFY(attCount != 0); + + MsgPriority priority = pluginInterface->messagePriority(); + // Normal priority + qDebug() << "prority" << priority; + QVERIFY(priority == 1); + + QVERIFY(pluginInterface->objectCount() == 1); + + UniMessageInfoList objectlist = pluginInterface->objectList(); + QVERIFY(!objectlist.isEmpty()); + + TRAPD(err, iMmsClientMtm->SwitchCurrentEntryL(KMsvGlobalInBoxIndexEntryId)); + } + + +void TestUniDataModelMMSPlugin::createInboxImageMMS() + { + TMsvEntry indexEntry; + indexEntry.iType = KUidMsvMessageEntry; + indexEntry.iMtm = KUidMsgTypeMultimedia; + indexEntry.iServiceId = iServiceId; + indexEntry.iDate.HomeTime(); + + // Convert TTime to QDateTime , this will be used for comparing the time of mesage + // when fetched from datamodel + TTime unixEpoch(KUnixEpoch); + TTimeIntervalSeconds seconds; + TTime timeStamp = indexEntry.iDate; + timeStamp.SecondsFrom(unixEpoch, seconds); + retTimeStamp.setTime_t(seconds.Int()); + + + TMsvId parentId = KMsvGlobalInBoxIndexEntryIdValue; + CMsvEntry* entry = CMsvEntry::NewL(*iMSession,parentId,TMsvSelectionOrdering()); + CleanupStack::PushL(entry); + + entry->SetEntryL(parentId); + entry->CreateL(indexEntry); + entry->SetEntryL(indexEntry.Id()); + iMmsClientMtm->SwitchCurrentEntryL(entry->EntryId()); + + //iMmsClientMtm->LoadMessageL(); + + CMsvStore* store = iMmsClientMtm->Entry().EditStoreL(); + CleanupStack::PushL(store); + + iMessageId = indexEntry.Id(); + idArr.Append(iMessageId); + + //Sender + QString sender(TEST_MSG_FROM1); + HBufC* addr = S60QConversions::qStringToS60Desc(sender); + + if (addr) + { + CleanupStack::PushL(addr); + TBuf<32> name; + name.Copy(addr->Left(32)); + indexEntry.iDetails.Set(name); + + iMmsClientMtm->SetSenderL(*addr); + + CleanupStack::PopAndDestroy(addr); + } + + //Recipient + QString recipient(TEST_MSG_RECIEPIENT1); + HBufC* addr2 = S60QConversions::qStringToS60Desc(recipient); + if (addr2) + { + CleanupStack::PushL(addr2); + iMmsClientMtm->AddAddresseeL(EMsvRecipientTo,*addr2); + CleanupStack::PopAndDestroy(addr2); + } + + + // Attachments are added to the message entry one by one + + TMsvAttachmentId attaId = 0; + + RFile attaFile; + // Set filename of attachment + TFileName name( _L("C:\\pictures\\photo.jpg") ); + + CMsvMimeHeaders* mimeHeaders = CMsvMimeHeaders::NewL(); + CleanupStack::PushL( mimeHeaders ); + + // Set values to mime headers + mimeHeaders->SetContentTypeL( _L8( "image") ); + mimeHeaders->SetContentSubTypeL( _L8( "jpeg" ) ); + + _LIT8(KMimeType, "image/jpeg"); + TBufC8<10> mimeType(KMimeType); + // CreateAttachment2L will set the content type to attachment Info + + // Open the attachment file for reading + attaFile.Open( iFs, name, EFileShareReadersOnly | EFileRead ); + CleanupClosePushL(attaFile); + + CMsvAttachment* attaInfo = CMsvAttachment::NewL(CMsvAttachment::EMsvFile); + // attaInfo ownerhip will be transferred to Attachment Manager. + // It must not be pushed onto the cleanupStack before calling + // CreateAttachment2L. + + + iMmsClientMtm->CreateAttachment2L(*store, attaFile,mimeType,*mimeHeaders,attaInfo,attaId); + // Now Attachment Manager owns the attaInfo + attaInfo = NULL; + + CleanupStack::PopAndDestroy(); // attaFile.Close() + CleanupStack::PopAndDestroy(); // mimeHeaders + + // Several attachments can be added before committing the store + + // Store must be committed before it is destroyed + store->CommitL(); + CleanupStack::PopAndDestroy(); // store + + iMmsClientMtm->SaveMessageL(); + } + +void TestUniDataModelMMSPlugin::testInboxImageMMSMessage() + { + createInboxImageMMS(); + + pluginLoader->loadPlugins(); + // Get the MMS data modelplugin + pluginInterface = pluginLoader->getDataModelPlugin("mms"); + + pluginInterface->setMessageId(iMessageId); + + int size = pluginInterface->messageSize(); + + QVERIFY(pluginInterface->timeStamp() == retTimeStamp); + + + //Fetch the To List + ConvergedMessageAddressList recipientList; + pluginInterface->toRecipientList(recipientList); + QVERIFY(recipientList.count() != 0); + + QString recepient(TEST_MSG_FROM1); + QString fromaddress; + pluginInterface->fromAddress(fromaddress); + QVERIFY(recepient == fromaddress); + + TRAPD(err, iMmsClientMtm->SwitchCurrentEntryL(KMsvGlobalInBoxIndexEntryId)); + } + + +void TestUniDataModelMMSPlugin::testPluginLoading() +{ + pluginLoader->loadPlugins(); + +} + + +void TestUniDataModelMMSPlugin::testGetPluginWithoutLoading() +{ + pluginInterface = pluginLoader->getDataModelPlugin("mms"); + QVERIFY(pluginInterface == NULL); + + // Try to geta plugin for a differnt message type + pluginInterface = pluginLoader->getDataModelPlugin("vcal"); + QVERIFY(pluginInterface == NULL); +} + +void TestUniDataModelMMSPlugin::testPluginLoadingMultipleTimes() +{ + pluginLoader->loadPlugins(); + pluginLoader->loadPlugins(); + pluginLoader->loadPlugins(); + pluginLoader->loadPlugins(); +} + + +void TestObserverMMS::HandleSessionEventL(TMsvSessionEvent /*aEvent*/, + TAny* /*aArg1*/, TAny* /*aArg2*/, TAny* /*aArg3*/) +{ +} + + +