diff -r 4697dfb2d7ad -r 238255e8b033 messagingapp/msgutils/unidatamodel/unismsdataplugin/tsrc/testunidatamodelsmsplugin/testunidatamodelsmsplugin.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/messagingapp/msgutils/unidatamodel/unismsdataplugin/tsrc/testunidatamodelsmsplugin/testunidatamodelsmsplugin.cpp Fri Apr 16 14:56:15 2010 +0300 @@ -0,0 +1,665 @@ +/* + * 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 +#include +#include +#include "s60qconversions.h" +#include + +#include "convergedmessage.h" +#include "unidatamodelplugininterface.h" +#include "unidatamodelloader.h" +#include "serviceinfo.h" +#include "testunidatamodelsmsplugin.h" +#include "testunidatamodelsmsplugin.ini" +_LIT(KUnixEpoch, "19700000:000000.000000"); + +//--------------------------------------------------------------- +// TestUniDataModelSMSPlugin::init +//--------------------------------------------------------------- + +void TestUniDataModelSMSPlugin::init() +{ + iObserver = new (ELeave) TestObserver(); + + // Create a new messaging server session.. + iMSession = CMsvSession::OpenSyncL(*iObserver); + // Create the client mtm registry + iMtmReg = CClientMtmRegistry::NewL(*iMSession); + + // Get the SMS clientmtm + iSmsClientMtm + = static_cast (iMtmReg->NewMtmL(KUidMsgTypeSMS)); + + TRAPD(err, iSmsClientMtm->DefaultServiceL()) ; + + if( err == KErrNotFound) + { + CSmsAccount* account = CSmsAccount::NewL(); + CleanupStack::PushL(account); + CSmsSettings* settings = CSmsSettings::NewL(); + CleanupStack::PushL(settings); + account->InitialiseDefaultSettingsL(*settings); + CleanupStack::PopAndDestroy(2); + + } + messageId = 0; + pluginLoader = new UniDataModelLoader(); + retTimeStamp = QDateTime::currentDateTime(); +} + +//--------------------------------------------------------------- +// TestUniDataModelSMSPlugin::cleanup +//--------------------------------------------------------------- +void TestUniDataModelSMSPlugin::cleanup() +{ + + if (messageId > 0) + iSmsClientMtm->Entry().DeleteL(messageId); + + delete iObserver; + iObserver = NULL; + delete iSmsClientMtm; + iSmsClientMtm = NULL; + delete iMtmReg; + iMtmReg = NULL; + delete iMSession; + iMSession = NULL; + + delete pluginLoader; +} + +//--------------------------------------------------------------- +// TestUniDataModelSMSPlugin::validateMsg +//--------------------------------------------------------------- +void TestUniDataModelSMSPlugin::createInboxSMS() +{ + TRAPD(err, iSmsClientMtm->SwitchCurrentEntryL(KMsvGlobalInBoxIndexEntryId)); + + // Create a SMS message + iSmsClientMtm->CreateMessageL(iSmsClientMtm->DefaultServiceL()); + TMsvEntry indexEntry = iSmsClientMtm->Entry().Entry(); + + indexEntry.SetInPreparation(ETrue); + indexEntry.iMtm = KUidMsgTypeSMS; + indexEntry.iType = KUidMsvMessageEntry; + indexEntry.iServiceId = iSmsClientMtm->ServiceId(); + indexEntry.iDate.HomeTime(); + + // Convert TTime to QDateTime , this will be used for comparing the time of message + // when fetched from datamodel + TTime unixEpoch(KUnixEpoch); + TTimeIntervalSeconds seconds; + TTime timeStamp = indexEntry.iDate; + timeStamp.SecondsFrom(unixEpoch, seconds); + retTimeStamp.setTime_t(seconds.Int()); + + //AddBody + QString body(TEST_MSG_BODY); + + HBufC* bodyText = S60QConversions::qStringToS60Desc(body); + if (bodyText) + { + CleanupStack::PushL(bodyText); + // Set the Body of the message + CRichText & body = iSmsClientMtm->Body(); + body.Reset(); + body.InsertL(0, *bodyText); + + TBuf<32> buf; + buf.Copy(bodyText->Left(32)); + indexEntry.iDescription.Set(buf); + + CleanupStack::PopAndDestroy(bodyText); + } + + QString recepient(TEST_MSG_FROM1); + QString recepient2(TEST_MSG_FROM2); + QString alias(TEST_MSG_ALIAS1); + + HBufC* addr = S60QConversions::qStringToS60Desc(recepient); + HBufC* addr2 = S60QConversions::qStringToS60Desc(recepient2); + HBufC* alias1 = S60QConversions::qStringToS60Desc(alias); + + if (addr) + { + CleanupStack::PushL(addr); + TBuf<32> name; + name.Copy(addr->Left(32)); + indexEntry.iDetails.Set(name); + CSmsHeader& smsHeader = iSmsClientMtm->SmsHeader(); + smsHeader.SetFromAddressL(*addr); + messageId = indexEntry.Id(); + + CleanupStack::PopAndDestroy(addr); + } + + indexEntry.SetAttachment(EFalse); + indexEntry.SetVisible(ETrue); + indexEntry.SetInPreparation(EFalse); + + indexEntry.SetComplete(ETrue); + iSmsClientMtm->Entry().ChangeL(indexEntry); + iSmsClientMtm->SaveMessageL(); + +} + +void TestUniDataModelSMSPlugin::createOutboxSMS() +{ + TRAPD(err, iSmsClientMtm->SwitchCurrentEntryL(KMsvGlobalOutBoxIndexEntryId)); + + // Create a SMS message + iSmsClientMtm->CreateMessageL(iSmsClientMtm->DefaultServiceL()); + TMsvEntry indexEntry = iSmsClientMtm->Entry().Entry(); + + indexEntry.SetInPreparation(ETrue); + indexEntry.iMtm = KUidMsgTypeSMS; + indexEntry.iType = KUidMsvMessageEntry; + indexEntry.iServiceId = iSmsClientMtm->ServiceId(); + indexEntry.iDate.HomeTime(); + + // Convert TTime to QDateTime , this will be used for comparing the time of message + // when fetched from datamodel + TTime unixEpoch(KUnixEpoch); + TTimeIntervalSeconds seconds; + TTime timeStamp = indexEntry.iDate; + timeStamp.SecondsFrom(unixEpoch, seconds); + retTimeStamp.setTime_t(seconds.Int()); + + //AddBody + QString body(TEST_MSG_BODY); + + HBufC* bodyText = S60QConversions::qStringToS60Desc(body); + if (bodyText) + { + CleanupStack::PushL(bodyText); + // Set the Body of the message + CRichText & body = iSmsClientMtm->Body(); + body.Reset(); + body.InsertL(0, *bodyText); + + TBuf<32> buf; + buf.Copy(bodyText->Left(32)); + indexEntry.iDescription.Set(buf); + + CleanupStack::PopAndDestroy(bodyText); + } + + QString recepient(TEST_MSG_FROM1); + QString recepient2(TEST_MSG_FROM2); + QString alias(TEST_MSG_ALIAS1); + + HBufC* addr = S60QConversions::qStringToS60Desc(recepient); + HBufC* addr2 = S60QConversions::qStringToS60Desc(recepient2); + HBufC* alias1 = S60QConversions::qStringToS60Desc(alias); + + if (addr) + { + CleanupStack::PushL(addr); + TBuf<32> name; + name.Copy(addr->Left(32)); + indexEntry.iDetails.Set(name); + + // If drafts/ outbox message , set the recipients + iSmsClientMtm->AddAddresseeL(*addr, TPtrC()); + iSmsClientMtm->AddAddresseeL(*addr2, *alias1); + indexEntry.SetSendingState(KMsvSendStateWaiting); + messageId = indexEntry.Id(); + CleanupStack::PopAndDestroy(addr); + } + + indexEntry.SetAttachment(EFalse); + indexEntry.SetVisible(ETrue); + indexEntry.SetInPreparation(EFalse); + + indexEntry.SetComplete(ETrue); + iSmsClientMtm->Entry().ChangeL(indexEntry); + iSmsClientMtm->SaveMessageL(); + +} + +void TestUniDataModelSMSPlugin::createSentSMS() +{ + TRAPD(err, iSmsClientMtm->SwitchCurrentEntryL(KMsvSentEntryId)); + + // Create a SMS message + iSmsClientMtm->CreateMessageL(iSmsClientMtm->DefaultServiceL()); + TMsvEntry indexEntry = iSmsClientMtm->Entry().Entry(); + + indexEntry.SetInPreparation(ETrue); + indexEntry.iMtm = KUidMsgTypeSMS; + indexEntry.iType = KUidMsvMessageEntry; + indexEntry.iServiceId = iSmsClientMtm->ServiceId(); + indexEntry.iDate.HomeTime(); + + // Convert TTime to QDateTime , this will be used for comparing the time of message + // when fetched from datamodel + + TTime unixEpoch(KUnixEpoch); + TTimeIntervalSeconds seconds; + TTime timeStamp = indexEntry.iDate; + timeStamp.SecondsFrom(unixEpoch, seconds); + retTimeStamp.setTime_t(seconds.Int()); + + //AddBody + QString body(TEST_MSG_BODY); + + HBufC* bodyText = S60QConversions::qStringToS60Desc(body); + if (bodyText) + { + CleanupStack::PushL(bodyText); + // Set the Body of the message + CRichText & body = iSmsClientMtm->Body(); + body.Reset(); + body.InsertL(0, *bodyText); + + TBuf<32> buf; + buf.Copy(bodyText->Left(32)); + indexEntry.iDescription.Set(buf); + + CleanupStack::PopAndDestroy(bodyText); + } + + QString recepient(TEST_MSG_FROM1); + QString recepient2(TEST_MSG_FROM2); + QString alias(TEST_MSG_ALIAS1); + + HBufC* addr = S60QConversions::qStringToS60Desc(recepient); + HBufC* addr2 = S60QConversions::qStringToS60Desc(recepient2); + HBufC* alias1 = S60QConversions::qStringToS60Desc(alias); + + if (addr) + { + CleanupStack::PushL(addr); + TBuf<32> name; + name.Copy(addr->Left(32)); + indexEntry.iDetails.Set(name); + + // If inbox/ sent folder message , set the from address + CSmsHeader& smsHeader = iSmsClientMtm->SmsHeader(); + smsHeader.SetFromAddressL(*addr); + messageId = indexEntry.Id(); + + CleanupStack::PopAndDestroy(addr); + } + + indexEntry.SetAttachment(EFalse); + indexEntry.SetVisible(ETrue); + indexEntry.SetInPreparation(EFalse); + + indexEntry.SetComplete(ETrue); + iSmsClientMtm->Entry().ChangeL(indexEntry); + iSmsClientMtm->SaveMessageL(); + +} + +void TestUniDataModelSMSPlugin::createDraftsSMS() +{ + TRAPD(err, iSmsClientMtm->SwitchCurrentEntryL(KMsvDraftEntryId)); + // Create a SMS message + iSmsClientMtm->CreateMessageL(iSmsClientMtm->DefaultServiceL()); + TMsvEntry indexEntry = iSmsClientMtm->Entry().Entry(); + + indexEntry.SetInPreparation(ETrue); + indexEntry.iMtm = KUidMsgTypeSMS; + indexEntry.iType = KUidMsvMessageEntry; + indexEntry.iServiceId = iSmsClientMtm->ServiceId(); + indexEntry.iDate.HomeTime(); + + // Convert TTime to QDateTime , this will be used for comparing the time of message + // when fetched from datamodel + TTime unixEpoch(KUnixEpoch); + TTimeIntervalSeconds seconds; + TTime timeStamp = indexEntry.iDate; + timeStamp.SecondsFrom(unixEpoch, seconds); + retTimeStamp.setTime_t(seconds.Int()); + + //AddBody + QString body(TEST_MSG_BODY); + + HBufC* bodyText = S60QConversions::qStringToS60Desc(body); + if (bodyText) + { + CleanupStack::PushL(bodyText); + // Set the Body of the message + CRichText & body = iSmsClientMtm->Body(); + body.Reset(); + body.InsertL(0, *bodyText); + + TBuf<32> buf; + buf.Copy(bodyText->Left(32)); + indexEntry.iDescription.Set(buf); + + CleanupStack::PopAndDestroy(bodyText); + } + + QString recipient(TEST_MSG_FROM1); + QString recipient2(TEST_MSG_FROM2); + QString alias(TEST_MSG_ALIAS1); + + HBufC* addr = S60QConversions::qStringToS60Desc(recipient); + HBufC* addr2 = S60QConversions::qStringToS60Desc(recipient2); + HBufC* alias1 = S60QConversions::qStringToS60Desc(alias); + + if (addr) + { + CleanupStack::PushL(addr); + TBuf<32> name; + name.Copy(addr->Left(32)); + indexEntry.iDetails.Set(name); + + // If drafts/ outbox message , set the recipients + iSmsClientMtm->AddAddresseeL(*addr, TPtrC()); + indexEntry.SetSendingState(KMsvSendStateWaiting); + messageId = indexEntry.Id(); + + CleanupStack::PopAndDestroy(addr); + } + + indexEntry.SetAttachment(EFalse); + indexEntry.SetVisible(ETrue); + indexEntry.SetInPreparation(EFalse); + + indexEntry.SetComplete(ETrue); + iSmsClientMtm->Entry().ChangeL(indexEntry); + iSmsClientMtm->SaveMessageL(); + +} + +void TestUniDataModelSMSPlugin::createDraftsSMSNoRecipient() +{ + TRAPD(err, iSmsClientMtm->SwitchCurrentEntryL(KMsvDraftEntryId)); + // Create a SMS message + iSmsClientMtm->CreateMessageL(iSmsClientMtm->DefaultServiceL()); + TMsvEntry indexEntry = iSmsClientMtm->Entry().Entry(); + + indexEntry.SetInPreparation(ETrue); + indexEntry.iMtm = KUidMsgTypeSMS; + indexEntry.iType = KUidMsvMessageEntry; + indexEntry.iServiceId = iSmsClientMtm->ServiceId(); + indexEntry.iDate.HomeTime(); + + //AddBody + QString body(TEST_MSG_BODY); + + HBufC* bodyText = S60QConversions::qStringToS60Desc(body); + if (bodyText) + { + CleanupStack::PushL(bodyText); + // Set the Body of the message + CRichText & body = iSmsClientMtm->Body(); + body.Reset(); + body.InsertL(0, *bodyText); + + TBuf<32> buf; + buf.Copy(bodyText->Left(32)); + indexEntry.iDescription.Set(buf); + + CleanupStack::PopAndDestroy(bodyText); + } + + indexEntry.SetSendingState(KMsvSendStateWaiting); + messageId = indexEntry.Id(); + + indexEntry.SetAttachment(EFalse); + indexEntry.SetVisible(ETrue); + indexEntry.SetInPreparation(EFalse); + + indexEntry.SetComplete(ETrue); + iSmsClientMtm->Entry().ChangeL(indexEntry); + iSmsClientMtm->SaveMessageL(); + +} + +void TestUniDataModelSMSPlugin::testPluginLoading() +{ + pluginLoader->loadPlugins(); + +} +void TestUniDataModelSMSPlugin::testPluginLoadingMultipleTimes() +{ + pluginLoader->loadPlugins(); + pluginLoader->loadPlugins(); + pluginLoader->loadPlugins(); + pluginLoader->loadPlugins(); +} + +void TestUniDataModelSMSPlugin::testInboxMessage() +{ + createInboxSMS(); + pluginLoader->loadPlugins(); + // Get the SMS data modelplugin + pluginInterface = pluginLoader->getDataModelPlugin("sms"); + + pluginInterface->setMessageId(messageId); + + int size = pluginInterface->messageSize(); + + QVERIFY(pluginInterface->timeStamp() == retTimeStamp); + + QString body; + pluginInterface->body(body); + QString origBody(TEST_MSG_BODY); + QVERIFY(origBody == body); + + ConvergedMessageAddressList recipientList; + pluginInterface->toRecipientList(recipientList); + + QString recipient(TEST_MSG_FROM1); + QString recipient2(TEST_MSG_FROM2); + QString origalias(TEST_MSG_ALIAS1); + + QVERIFY(recipientList.count() == 0); + + int size1 = pluginInterface->messageSize(); + + QString fromaddress; + pluginInterface->fromAddress(fromaddress); + QVERIFY(recipient == fromaddress); + TRAPD(err, iSmsClientMtm->SwitchCurrentEntryL(KMsvGlobalInBoxIndexEntryId)); +} + +void TestUniDataModelSMSPlugin::testOutboxMessage() +{ + createOutboxSMS(); + pluginLoader->loadPlugins(); + // Get the SMS data modelplugin + pluginInterface = pluginLoader->getDataModelPlugin("sms"); + + // Get the data for the first message in DRAFTS + pluginInterface->setMessageId(messageId); + int size = pluginInterface->messageSize(); + + QVERIFY(pluginInterface->timeStamp() == retTimeStamp); + + QString body; + pluginInterface->body(body); + QString origBody(TEST_MSG_BODY); + QVERIFY(origBody == body); + + ConvergedMessageAddressList recipientList; + pluginInterface->toRecipientList(recipientList); + + QString recipient(TEST_MSG_FROM1); + QString recipient2(TEST_MSG_FROM2); + QString origalias(TEST_MSG_ALIAS1); + + QVERIFY(recipientList.count() == 2); + QVERIFY(recipient == recipientList[0]->address() + && recipientList[0]->alias().isEmpty()); + + const QString& as = recipientList[1]->address(); + const QString& as1 = recipientList[1]->alias(); + QVERIFY(recipient2 == as); + + // ConvergedMessageAddress::alias return a QSting with a space + origalias.append(' '); + QVERIFY(origalias == as1); + + int size1 = pluginInterface->messageSize(); + + QString fromaddress; + pluginInterface->fromAddress(fromaddress); + QVERIFY(fromaddress.isEmpty()); + TRAPD(err, iSmsClientMtm->SwitchCurrentEntryL(KMsvGlobalOutBoxIndexEntryId)); +} + +void TestUniDataModelSMSPlugin::testSentMessage() +{ + createSentSMS(); + pluginLoader->loadPlugins(); + // Get the SMS data modelplugin + pluginInterface = pluginLoader->getDataModelPlugin("sms"); + + pluginInterface->setMessageId(messageId); + + int size = pluginInterface->messageSize(); + + QVERIFY(pluginInterface->timeStamp() == retTimeStamp); + + QString body; + pluginInterface->body(body); + QString origBody(TEST_MSG_BODY); + QVERIFY(origBody == body); + + ConvergedMessageAddressList recipientList; + pluginInterface->toRecipientList(recipientList); + + QString recipient(TEST_MSG_FROM1); + QString recipient2(TEST_MSG_FROM2); + QString origalias(TEST_MSG_ALIAS1); + + QVERIFY(recipientList.count() == 0); + + QString fromaddress; + pluginInterface->fromAddress(fromaddress); + QVERIFY(recipient == fromaddress); + TRAPD(err, iSmsClientMtm->SwitchCurrentEntryL(KMsvSentEntryId)); +} + +void TestUniDataModelSMSPlugin::testDraftsMessage() +{ + createDraftsSMS(); + pluginLoader->loadPlugins(); + // Get the SMS data modelplugin + pluginInterface = pluginLoader->getDataModelPlugin("sms"); + + // Get the data for the first message in DRAFTS + pluginInterface->setMessageId(messageId); + int size = pluginInterface->messageSize(); + + QVERIFY(pluginInterface->timeStamp() == retTimeStamp); + + QString body; + pluginInterface->body(body); + QString origBody(TEST_MSG_BODY); + QVERIFY(origBody == body); + + ConvergedMessageAddressList recipientList; + pluginInterface->toRecipientList(recipientList); + + QString recipient(TEST_MSG_FROM1); + + QVERIFY(recipientList.count() == 1); + QVERIFY(recipient == recipientList[0]->address() + && recipientList[0]->alias().isEmpty()); + + QString fromaddress; + pluginInterface->fromAddress(fromaddress); + QVERIFY(fromaddress.isEmpty()); + TRAPD(err, iSmsClientMtm->SwitchCurrentEntryL(KMsvDraftEntryId)); +} + +void TestUniDataModelSMSPlugin::testDraftsMessageNoRecipient() +{ + createDraftsSMSNoRecipient(); + pluginLoader->loadPlugins(); + // Get the SMS data modelplugin + pluginInterface = pluginLoader->getDataModelPlugin("sms"); + + // Get the data for the first message in DRAFTS + pluginInterface->setMessageId(messageId); + int size = pluginInterface->messageSize(); + + QString body; + pluginInterface->body(body); + QString origBody(TEST_MSG_BODY); + QVERIFY(origBody == body); + + ConvergedMessageAddressList recipientList; + pluginInterface->toRecipientList(recipientList); + + QVERIFY(recipientList.count() == 0); + + QString fromaddress; + pluginInterface->fromAddress(fromaddress); + QVERIFY(fromaddress.isEmpty()); + TRAPD(err, iSmsClientMtm->SwitchCurrentEntryL(KMsvDraftEntryId)); +} + +void TestUniDataModelSMSPlugin::testGetPluginWithoutLoading() +{ + pluginInterface = pluginLoader->getDataModelPlugin("sms"); + QVERIFY(pluginInterface == NULL); + + // Try to geta plugin for a differnt message type + pluginInterface = pluginLoader->getDataModelPlugin("mms"); + QVERIFY(pluginInterface == NULL); +} + +void TestUniDataModelSMSPlugin::testUnusedAPIs() +{ + pluginLoader->loadPlugins(); + + pluginInterface = pluginLoader->getDataModelPlugin("sms"); + + QVERIFY(pluginInterface->hasAttachment() == false); + + UniMessageInfoList attachmentlist = pluginInterface->attachmentList(); + QVERIFY(attachmentlist.isEmpty()); + + QVERIFY(pluginInterface->objectCount() == 0); + + UniMessageInfoList objectlist = pluginInterface->objectList(); + QVERIFY(objectlist.isEmpty()); + + QVERIFY(pluginInterface->slideCount() == 0); + + UniMessageInfoList slidelist = pluginInterface->slideContent(0); + QVERIFY(slidelist.isEmpty()); + + ConvergedMessageAddressList recipientList; + + pluginInterface->ccRecipientList(recipientList); + QVERIFY(recipientList.count() == 0); + + pluginInterface->bccRecipientList(recipientList); + QVERIFY(recipientList.count() == 0); + + MsgPriority priority = pluginInterface->messagePriority(); + // Normal priority + qDebug() << "prority" << priority; + QVERIFY(priority == 1); + int count = pluginInterface->attachmentCount(); + QVERIFY(count == 0); + +} + +void TestObserver::HandleSessionEventL(TMsvSessionEvent /*aEvent*/, + TAny* /*aArg1*/, TAny* /*aArg2*/, TAny* /*aArg3*/) +{ +}