messagingapp/msgutils/unidatautils/unidatamodelplugins/unimmsdataplugin/tsrc/testunidatamodelmmsplugin/src/testunidatamodelmmsplugin.cpp
changeset 56 f42d9a78f435
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/messagingapp/msgutils/unidatautils/unidatamodelplugins/unimmsdataplugin/tsrc/testunidatamodelmmsplugin/src/testunidatamodelmmsplugin.cpp	Tue Aug 31 18:53:38 2010 +0530
@@ -0,0 +1,372 @@
+/*
+ * 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: Main test class definition for MMS Data Plugin
+ */
+
+#include <QtTest/QtTest>
+#include <QtDebug>
+#include <QTimer>
+#include <QSignalSpy>
+#include <mmsclient.h>
+#include <mmssettings.h>
+#include <CMsvMimeHeaders.h>
+#include <f32file.h>
+#include "debugtraces.h"
+#include "convergedmessageaddress.h"
+#include "testunidatamodelmmsplugin.h"
+#include "testunidatamodelmmsplugin.ini"
+#include "xqconversions.h"
+#include "unidatamodelplugininterface.h"
+#include "unidatamodelloader.h"
+
+//---------------------------------------------------------------
+// TestUniDataModelPlugin::initTestCase
+//---------------------------------------------------------------
+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
+    CClientMtmRegistry* mtmReg = CClientMtmRegistry::NewL(*iMSession);
+
+    // Get the MMS clientmtm
+    iMmsClientMtm = static_cast<CMmsClientMtm*> (mtmReg->NewMtmL(KUidMsgTypeMultimedia));
+
+    //Connecting to File Server Session
+    User::LeaveIfError( iFs.Connect() );
+    iFs.SetSessionPath( KRootPath );
+    
+    //Getting Service ID for MMS
+    CMmsSettings* settings = CMmsSettings::NewL();
+    settings->LoadSettingsL();
+    iServiceId = settings->Service();
+    
+    iMessageId = 0;
+    
+    //Saving the Timestamp before Message is created
+    retTimeStamp = QDateTime::currentDateTime();
+    
+    // Get the MMS data modelplugin
+    pluginLoader = new UniDataModelLoader;
+    pluginInterface = pluginLoader->getDataModelPlugin(ConvergedMessage::Mms);
+    }
+
+//---------------------------------------------------------------
+// TestUniDataModelPlugin::init
+//---------------------------------------------------------------
+void TestUniDataModelMMSPlugin::init()
+{
+}
+
+//---------------------------------------------------------------
+// TestUniDataModelPlugin::testInboxMessage
+//---------------------------------------------------------------
+void TestUniDataModelMMSPlugin::testInboxMessage()
+    {
+	//Create the MMS First
+	createMMS(KMsvGlobalInBoxIndexEntryIdValue,ETrue);
+    
+	QTest::qWait(50000);  //to ensure path completion
+	
+	//MMS Message created, will now be validated
+	
+	//Checking if Another Instance of MMS Data Plugin can be created form an existing one
+	QObject* anotherInstance = pluginInterface->createInstance();
+    QVERIFY(anotherInstance != NULL);
+    delete anotherInstance;
+    
+    //Setting a Message ID, thereby populating the MMS message at the Plugin
+    QVERIFY(pluginInterface->setMessageId(iMessageId) == KErrNone);
+
+    //Verifying the MMS message size
+    QVERIFY(pluginInterface->messageSize() == msgSize);
+    
+    //Verifying the MMS timestamp
+    QVERIFY(pluginInterface->timeStamp() == retTimeStamp);
+    
+    //Verifying is the MMP Plugin works file afetr it has been Reset and Restored
+    pluginInterface->reset();
+	pluginInterface->restore(*iMmsClientMtm);
+	QVERIFY(pluginInterface->setMessageId(iMessageId) == KErrNone);
+	
+	//Subject Verification
+    QVERIFY(pluginInterface->subject().compare(QString(TEST_MSG_SUBJECT)) == 0);
+    
+    //MMS message have no Body String
+    QString body;
+    pluginInterface->body(body);
+    QVERIFY(body == QString(""));
+    
+    //Message type verification
+    QVERIFY(pluginInterface->messageType().compare(QString("mms")) == 0);
+    
+    //Fetch the To List
+    ConvergedMessageAddressList recipientList;
+    pluginInterface->toRecipientList(recipientList);
+    QVERIFY(recipientList.count() != 0);
+    QVERIFY(recipientList[0]->address().compare(QString(TEST_MSG_RECIEPIENT1)) == 0);
+    
+    //Fetch the CC List
+    ConvergedMessageAddressList recipientList2;
+    pluginInterface->ccRecipientList(recipientList2);
+    QVERIFY(recipientList2.count() != 0);
+    QVERIFY(recipientList2[0]->address().compare(QString(TEST_MSG_RECIEPIENT2)) == 0);
+    
+    //Fetch the BCC List
+    ConvergedMessageAddressList recipientList3;
+    pluginInterface->bccRecipientList(recipientList3);
+    QVERIFY(recipientList3.count() != 0);
+    QVERIFY(recipientList3[0]->address().compare(QString(TEST_MSG_RECIEPIENT3)) == 0);
+    
+    //Fetch the From Address
+    QString recepient(TEST_MSG_FROM1);
+    QString fromaddress;
+    pluginInterface->fromAddress(fromaddress);
+    QVERIFY(recepient == fromaddress);
+    
+    //Verifying Attachments
+    UniMessageInfoList attList = pluginInterface->attachmentList();
+    QVERIFY(attList.count() == 0);
+    
+    QVERIFY(pluginInterface->hasAttachment() == false);
+    
+    QVERIFY(pluginInterface->attachmentCount() == 0);
+    
+    QVERIFY(pluginInterface->messagePriority() == 1);
+
+    //Verifying various objects added to the MMS Message during creation
+    QVERIFY(pluginInterface->objectCount() == 2);
+    
+    UniMessageInfoList objectlist = pluginInterface->objectList();
+    QVERIFY(!objectlist.isEmpty());
+    
+    QVERIFY(objectlist[1]->path().contains(QString("TestUnidataModelMMSPluginPhoto.jpg"), Qt::CaseInsensitive) == true);
+	QVERIFY(objectlist[1]->mimetype().contains(QString("image/jpeg"), Qt::CaseInsensitive) == true);
+    
+    QVERIFY(pluginInterface->slideCount() == 1);
+    
+    QVERIFY(pluginInterface->slideContent(0)[0]->path().contains(QString("Story.txt"), Qt::CaseInsensitive) == true);
+    QVERIFY(pluginInterface->slideContent(0)[0]->mimetype().contains(QString("text/plain"), Qt::CaseInsensitive) == true);
+    
+    //Verifying if the plugin returns the correct session, thus will correctly delete the MMS we just created
+    CMsvSession* msvSession = pluginInterface->session();
+    QVERIFY(msvSession != NULL);
+    msvSession->RemoveEntry(iMessageId);
+    
+    qDebug() << "Verified Test MMS Successfully";    
+    }
+
+//---------------------------------------------------------------
+// TestUniDataModelPlugin::cleanup
+//---------------------------------------------------------------
+void TestUniDataModelMMSPlugin::cleanup()
+{
+}
+
+//---------------------------------------------------------------
+// TestUniDataModelPlugin::cleanupTestCase
+//---------------------------------------------------------------
+void TestUniDataModelMMSPlugin::cleanupTestCase()
+    {
+	//Cleanup
+	delete pluginInterface;
+	delete pluginLoader;
+    delete iMmsClientMtm;
+    delete iMSession;
+    delete iObserver;
+    }
+
+//---------------------------------------------------------------
+// TestUniDataModelPlugin::createMMS
+//---------------------------------------------------------------
+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());
+
+    CMsvStore* store = iMmsClientMtm->Entry().EditStoreL();
+    CleanupStack::PushL(store);
+      
+    //MMS Message ID Saved
+    iMessageId = indexEntry.Id();
+    
+    //Adding Subject
+    if(subjectField)
+        {
+        QString subject(TEST_MSG_SUBJECT);
+        HBufC* subj = XQConversions::qStringToS60Desc(subject);
+        iMmsClientMtm->SetSubjectL(*subj);
+        }
+
+    //Adding Sender
+    QString sender(TEST_MSG_FROM1);
+    HBufC* addr = XQConversions::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);
+        }
+    
+    //Adding Recipient
+    QString recipient(TEST_MSG_RECIEPIENT1);
+    HBufC* addr2 = XQConversions::qStringToS60Desc(recipient);
+    if (addr2)
+        {
+        CleanupStack::PushL(addr2);
+        iMmsClientMtm->AddAddresseeL(EMsvRecipientTo,*addr2);
+        CleanupStack::PopAndDestroy(addr2);
+        }
+    
+    //Adding cCRecipient
+    QString recipient2(TEST_MSG_RECIEPIENT2);
+    HBufC* addr3 = XQConversions::qStringToS60Desc(recipient2);
+    if (addr3)
+        {
+        CleanupStack::PushL(addr3);
+        iMmsClientMtm->AddAddresseeL(EMsvRecipientCc,*addr3);
+        CleanupStack::PopAndDestroy(addr3);
+        }
+      
+    //Adding bCCRecipient
+    QString recipient3(TEST_MSG_RECIEPIENT3);
+	HBufC* addr4 = XQConversions::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 );
+    qDebug() << "Text Attachment id" << attaId;
+    
+    //Image Attachment added to the message entry
+    RFile attaFile;
+	// Set filename of attachment
+	TFileName name( KPictureFileName );
+   
+	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);
+	qDebug() << "Image Attachment id" << attaId;
+	
+	// Now Attachment Manager owns the attaInfo
+	CleanupStack::Pop(); // attaFile.Close()
+	CleanupStack::PopAndDestroy(); // mimeHeaders
+        
+    store->CommitL();
+    
+    CleanupStack::PopAndDestroy(store); // store
+    
+    iMmsClientMtm->SaveMessageL();
+    
+    //Saving the message size for future checking
+    msgSize = iMmsClientMtm->MessageSize();
+    
+    CleanupStack::Pop(entry); // entry
+    }
+
+//---------------------------------------------------------------
+// TestObserverMMS::HandleSessionEventL
+//---------------------------------------------------------------
+void TestObserverMMS::HandleSessionEventL(TMsvSessionEvent /*aEvent*/,
+                                       TAny* /*aArg1*/, TAny* /*aArg2*/, TAny* /*aArg3*/)
+{
+}
+
+//---------------------------------------------------------------
+// main
+// main entry point
+//---------------------------------------------------------------
+int main(int argc, char *argv[])
+    { 
+	int ret = -1;
+	QCoreApplication app(argc, argv);
+	QObject* tc = new TestUniDataModelMMSPlugin();
+	
+#ifdef __WINSCW__
+	char *new_argv[3]; 
+	QString str = "C:\\data\\" + QFileInfo(QCoreApplication::applicationFilePath()).baseName() + ".log";	
+	QByteArray bytes = str.toAscii();	
+	char arg1[] = "-o";	
+	new_argv[0] = argv[0];	
+	new_argv[1] = arg1;	
+	new_argv[2] = bytes.data();	
+	ret = QTest::qExec(tc, 3, new_argv);
+#else
+	ret = QTest::qExec(tc, argc, argv); 
+#endif
+	
+	delete tc;
+	return ret;
+    }
+
+//End of File