messagingapp/msgutils/unidatautils/unidatamodelplugins/unimmsdataplugin/tsrc/testunidatamodelmmsplugin/testunidatamodelmmsplugin.cpp
changeset 25 84d9eb65b26f
child 37 518b245aa84c
--- /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*/)
+{
+}
+
+
+