messagingapp/msgutils/unidatautils/unidatamodelplugins/unimmsdataplugin/tsrc/testunidatamodelmmsplugin/testunidatamodelmmsplugin.cpp
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/messagingapp/msgutils/unidatautils/unidatamodelplugins/unimmsdataplugin/tsrc/testunidatamodelmmsplugin/testunidatamodelmmsplugin.cpp Mon May 03 12:29:07 2010 +0300
@@ -0,0 +1,496 @@
+/*
+ * 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 "serviceinfo.h"
+#include <QtDebug>
+#include <QTimer>
+#include <QSignalSpy>
+#include "convergedmessage.h"
+#include "s60qconversions.h"
+#include "unidatamodelplugininterface.h"
+#include "unidatamodelloader.h"
+#include <mmsclient.h>
+#include <mmsheaders.h>
+#include <mmssettings.h>
+#include <CMsvMimeHeaders.h>
+#include "convergedmessageaddress.h"
+#include "testunidatamodelmmsplugin.h"
+#include "testunidatamodelmmsplugin.ini"
+#include <f32file.h>
+
+_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; i<idArr.Count();i++)
+ {
+ iMmsClientMtm->Entry().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; i<idArr.Count();i++)
+ {
+ iMmsClientMtm->Entry().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);
+
+ // Get the MMS data modelplugin
+ pluginInterface = pluginLoader->getDataModelPlugin(ConvergedMessage::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);
+
+ // Get the MMS data modelplugin
+ pluginInterface = pluginLoader->getDataModelPlugin(ConvergedMessage::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();
+
+ // Get the MMS data modelplugin
+ pluginInterface = pluginLoader->getDataModelPlugin(ConvergedMessage::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::testGetPluginWithoutLoading()
+{
+ pluginInterface = pluginLoader->getDataModelPlugin(ConvergedMessage::Mms);
+ QVERIFY(pluginInterface == NULL);
+
+ // Try to geta plugin for a differnt message type
+ pluginInterface = pluginLoader->getDataModelPlugin(ConvergedMessage::BioMsg);
+ QVERIFY(pluginInterface == NULL);
+}
+
+
+void TestObserverMMS::HandleSessionEventL(TMsvSessionEvent /*aEvent*/,
+ TAny* /*aArg1*/, TAny* /*aArg2*/, TAny* /*aArg3*/)
+{
+}
+
+
+