--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/messagingapp/msgutils/unieditorutils/unieditorplugins/unieditorsmsplugin/tsrc/testunieditorsmsplugin/src/testunieditorsmsplugin.cpp Fri Sep 17 08:28:39 2010 +0300
@@ -0,0 +1,888 @@
+/*
+ * 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 UnieditorSMSPlugin
+ */
+
+#include <QtTest/QtTest>
+#include <QTimer>
+#include <QSignalSpy>
+#include "debugtraces.h"
+#include <etelmm.h>
+#include <xqconversions.h>
+#include <SenduiMtmUids.h>
+#include <e32base.h>
+#include <e32property.h>
+#include <etelmm.h>
+#include <es_ini.h>
+#include <SenduiMtmUids.h>
+#include <centralrepository.h>
+#include <MessagingInternalCRKeys.h>
+#include <startupdomainpskeys.h>
+#include "convergedmessage.h"
+#include "convergedmessageid.h"
+#include "unieditorsmsplugin.h"
+#include "testunieditorsmsplugin.h"
+#include "testunieditorsmsplugin.ini"
+
+//---------------------------------------------------------------
+// TestUnieditorSMSPlugin::HandleSessionEventL
+//---------------------------------------------------------------
+void TestUnieditorSMSPlugin::HandleSessionEventL(TMsvSessionEvent /*aEvent*/, TAny* /*aArg1*/, TAny* /*aArg2*/, TAny* /*aArg3*/)
+{
+
+}
+
+//---------------------------------------------------------------
+// TestUnieditorSMSPlugin::initTestCase
+//---------------------------------------------------------------
+void TestUnieditorSMSPlugin::initTestCase()
+{
+ //Initialise SMS MTM
+ initL();
+
+ //Initialise Service Center Settings
+ createSCSettingsL();
+
+ //Instantiate Unieditor SMS plugin
+ msgPlugin = new UniEditorSmsPlugin;
+ QVERIFY2(msgPlugin != NULL, "SMS Unieditor Plugin Not created");
+
+ //Validate SMS services
+ QVERIFY(msgPlugin->validateService() != 0);
+ QVERIFY(msgPlugin->isServiceValid() != 0);
+}
+
+//---------------------------------------------------------------
+// TestUnieditorSMSPlugin::init
+//---------------------------------------------------------------
+void TestUnieditorSMSPlugin::init()
+{
+}
+
+//---------------------------------------------------------------
+// TestUnieditorSMSPlugin::CreateSMS
+//---------------------------------------------------------------
+void TestUnieditorSMSPlugin::CreateSMS()
+{
+ //Setting Encoding settings for Unicode
+ msgPlugin->setEncodingSettings(EFalse, ESmsEncodingNone, -1);
+
+ //Constructing a new SMS
+ ConvergedMessage message;
+ message.setBodyText(QString(TEST_MSG_BODY));
+
+ ConvergedMessageAddress address1;
+ address1.setAddress(QString(TEST_MSG_TO1));
+ address1.setAlias(QString(TEST_MSG_ALIAS1));
+ message.addToRecipient(address1);
+
+ message.setPriority(ConvergedMessage::Normal);
+
+ //Sending SMS to drafts folder
+ smsId = msgPlugin->convertTo(&message);
+ QVERIFY(smsId != -1);
+}
+
+//---------------------------------------------------------------
+// TestUnieditorSMSPlugin::SendAndTestSMS
+//---------------------------------------------------------------
+void TestUnieditorSMSPlugin::SendAndTestSMS()
+{
+ QTest::qWait(1000);
+
+ //Checking SMS in drafts folder
+ CMsvEntry* rootentry = iSession->GetEntryL(KMsvDraftEntryId);
+ CMsvEntrySelection* messages = rootentry->ChildrenL();
+ TInt count = rootentry->Count();
+
+ QVERIFY(count > 0);
+
+ TMsvId draftMsgId = messages->At(count - 1);
+ QVERIFY2(draftMsgId == smsId, "SMS Not Sent to Drafts Folder");
+
+ ConvergedMessage* message = msgPlugin->convertFrom(draftMsgId);
+ QVERIFY(message != NULL);
+ QVERIFY(QString(TEST_MSG_TO1).contains(message->fromAddress()->address(), Qt::CaseInsensitive) == true);
+ QVERIFY(QString(TEST_MSG_ALIAS1).contains(message->fromAddress()->alias(), Qt::CaseInsensitive) == true);
+ QVERIFY(QString(TEST_MSG_BODY).compare(message->bodyText(), Qt::CaseInsensitive) == 0);
+
+ TInt numOfRemainingChars;
+ TInt numOfPDUs;
+ TBool unicodeMode;
+ TSmsEncoding alternativeEncodingType;
+
+ QString bodyMessage = message->bodyText();
+ QVERIFY(msgPlugin->getNumPDUs(bodyMessage, numOfRemainingChars, numOfPDUs, unicodeMode, alternativeEncodingType) == true);
+ QVERIFY(numOfPDUs == 1);
+ QVERIFY(unicodeMode == 0);
+ QVERIFY(alternativeEncodingType == ESmsEncodingNone);
+
+ delete message;
+
+ QVERIFY(msgPlugin->send(smsId) == true);
+
+ QTest::qWait(1000);
+
+ //Checking SMS in outbox folder
+ rootentry = iSession->GetEntryL(KMsvGlobalOutBoxIndexEntryId);
+ messages = rootentry->ChildrenL();
+ count = rootentry->Count();
+
+ QVERIFY(count > 0);
+ TMsvId outboxMsgId = messages->At(count - 1);
+
+ QVERIFY2(outboxMsgId == smsId, "SMS Not Sent to Outbox Folder");
+ message = msgPlugin->convertFrom(outboxMsgId);
+ QVERIFY(message != NULL);
+ qDebug("conversion OK");
+ QVERIFY(QString(TEST_MSG_TO1).contains(message->fromAddress()->address(), Qt::CaseInsensitive) == true);
+ QVERIFY(QString(TEST_MSG_ALIAS1).contains(message->fromAddress()->alias(), Qt::CaseInsensitive) == true);
+ delete message;
+}
+
+//---------------------------------------------------------------
+// TestUnieditorSMSPlugin::CreateSMSWithTextAttachment
+//---------------------------------------------------------------
+void TestUnieditorSMSPlugin::CreateSMSWithTextAttachment()
+{
+ msgPlugin->setEncodingSettings(ETrue, ESmsEncodingNone, -1);
+
+ //Constructing SMS with text attachment
+ ConvergedMessage message;
+
+ ConvergedMessageAddress address;
+ address.setAddress(QString(TEST_MSG_TO2));
+ message.addToRecipient(address);
+
+ message.setPriority(ConvergedMessage::Normal);
+
+ ConvergedMessageAttachmentList attachmentList;
+
+ //Add a text attachment to attachment list.
+ QString attachmentPath = TEST_TEXT_ATTACHMENT;
+ ConvergedMessageAttachment* attachment =
+ new ConvergedMessageAttachment(attachmentPath, ConvergedMessageAttachment::EAttachment);
+
+ attachmentList.append(attachment);
+ //Add attachments' list
+ message.addAttachments(attachmentList);
+
+ smsId = msgPlugin->convertTo(&message);
+ QVERIFY(smsId != -1);
+
+ QVERIFY(msgPlugin->send(smsId) == true);
+}
+
+//---------------------------------------------------------------
+// TestUnieditorSMSPlugin::TestSMSWithTextAttachment
+//---------------------------------------------------------------
+void TestUnieditorSMSPlugin::TestSMSWithTextAttachment()
+{
+ QTest::qWait(1000);
+
+ CMsvEntry* rootentry = iSession->GetEntryL(KMsvGlobalOutBoxIndexEntryId);
+ CMsvEntrySelection* messages = rootentry->ChildrenL();
+ TInt count = rootentry->Count();
+
+ QVERIFY(count > 0);
+ TMsvId outboxMsgId = messages->At(count - 1);
+
+ QVERIFY2(outboxMsgId == smsId, "SMS Not Sent to Outbox Folder");
+ ConvergedMessage* message = msgPlugin->convertFrom(outboxMsgId);
+ QVERIFY(message != NULL);
+ QVERIFY(QString(TEST_MSG_TO2).contains(message->fromAddress()->address(), Qt::CaseInsensitive) == true);
+ delete message;
+
+ qDebug("Text Attachment SMS Sending passed");
+}
+
+//---------------------------------------------------------------
+// TestUnieditorSMSPlugin::CreateSMSWithVCardAttachment
+//---------------------------------------------------------------
+void TestUnieditorSMSPlugin::CreateSMSWithVCardAttachment()
+{
+ msgPlugin->setEncodingSettings(ETrue, ESmsEncodingNone, -1);
+
+ //Constructing SMS with VCard attachment
+ ConvergedMessage message;
+
+ ConvergedMessageAddress address;
+ address.setAddress(QString(TEST_MSG_TO2));
+ message.addToRecipient(address);
+
+ message.setPriority(ConvergedMessage::Normal);
+
+ ConvergedMessageAttachmentList attachmentList;
+
+ //Add a vcard attachment to attachment list.
+ QString attachmentPath = TEST_VCARD_ATTACHMENT;
+ ConvergedMessageAttachment* attachment =
+ new ConvergedMessageAttachment(attachmentPath, ConvergedMessageAttachment::EAttachment);
+
+ attachmentList.append(attachment);
+ //Add attachments' list
+ message.addAttachments(attachmentList);
+
+ smsId = msgPlugin->convertTo(&message);
+ QVERIFY(smsId != -1);
+}
+
+//---------------------------------------------------------------
+// TestUnieditorSMSPlugin::TestSMSWithVCardAttachment
+//---------------------------------------------------------------
+void TestUnieditorSMSPlugin::TestSMSWithVCardAttachment()
+{
+ QTest::qWait(1000);
+
+ //Verifying a SMS with VCard attachment
+ CMsvEntry* rootentry = iSession->GetEntryL(KMsvDraftEntryId);
+ CMsvEntrySelection* messages = rootentry->ChildrenL();
+ TInt count = rootentry->Count();
+
+ QVERIFY(count > 0);
+
+ TMsvId draftMsgId = messages->At(count - 1);
+ QVERIFY2(draftMsgId == smsId, "SMS Not Sent to Drafts Folder");
+
+ ConvergedMessage* message = msgPlugin->convertFrom(draftMsgId);
+ QVERIFY(message != NULL);
+ QVERIFY(QString(TEST_MSG_TO2).contains(message->fromAddress()->address(), Qt::CaseInsensitive) == true);
+ QVERIFY(message->attachments().count() == 1);
+ QVERIFY(message->attachments()[0]->attachmentType() == ConvergedMessageAttachment::EAttachment);
+ QVERIFY(message->attachments()[0]->filePath().contains(QString(TEST_VCARD_ATTACHMENT).mid(QString(TEST_VCARD_ATTACHMENT).indexOf(QString("TestUnieditorSMSPluginSample.vcf"), 0, Qt::CaseInsensitive)), Qt::CaseInsensitive) == true);
+ delete message;
+ message = NULL;
+ qDebug("VCard Attachment SMS passed");
+
+ msgPlugin->deleteDraftsEntry(draftMsgId);
+
+ message = msgPlugin->convertFrom(draftMsgId);
+ QVERIFY(message == NULL);
+
+ qDebug("Draft SMS deleted Sucessfully");
+}
+
+//---------------------------------------------------------------
+// TestUnieditorSMSPlugin::CreateSMSWithVCalAttachment
+//---------------------------------------------------------------
+void TestUnieditorSMSPlugin::CreateSMSWithVCalAttachment()
+{
+ msgPlugin->setEncodingSettings(EFalse, ESmsEncodingNone, -1);
+
+ //Constructing SMS with VCal attachment
+ ConvergedMessage message;
+
+ ConvergedMessageAddress address;
+ address.setAddress(QString(TEST_MSG_TO1));
+ message.addToRecipient(address);
+
+ message.setPriority(ConvergedMessage::Normal);
+
+ ConvergedMessageAttachmentList attachmentList;
+
+ //Add a vcal attachment to attachment list.
+ QString attachmentPath = TEST_VCAL_ATTACHMENT;
+ ConvergedMessageAttachment* attachment =
+ new ConvergedMessageAttachment(attachmentPath, ConvergedMessageAttachment::EAttachment);
+
+ attachmentList.append(attachment);
+ //Add attachments' list
+ message.addAttachments(attachmentList);
+
+ smsId = msgPlugin->convertTo(&message);
+ QVERIFY(smsId != -1);
+}
+
+//---------------------------------------------------------------
+// TestUnieditorSMSPlugin::TestSMSWithVCalAttachment
+//---------------------------------------------------------------
+void TestUnieditorSMSPlugin::TestSMSWithVCalAttachment()
+{
+ QTest::qWait(1000);
+
+ //Verifying a SMS with VCal attachment
+ CMsvEntry* rootentry = iSession->GetEntryL(KMsvDraftEntryId);
+ CMsvEntrySelection* messages = rootentry->ChildrenL();
+ TInt count = rootentry->Count();
+
+ QVERIFY(count > 0);
+
+ TMsvId draftMsgId = messages->At(count - 1);
+ QVERIFY2(draftMsgId == smsId, "SMS Not Sent to Drafts Folder");
+
+ ConvergedMessage* message = msgPlugin->convertFrom(draftMsgId);
+ QVERIFY(message != NULL);
+ QVERIFY(QString(TEST_MSG_TO1).contains(message->fromAddress()->address(), Qt::CaseInsensitive) == true);
+ QVERIFY(message->attachments().count() == 1);
+ QVERIFY(message->attachments()[0]->attachmentType() == ConvergedMessageAttachment::EAttachment);
+ QVERIFY(message->attachments()[0]->filePath().contains(QString(TEST_VCAL_ATTACHMENT).mid(QString(TEST_VCAL_ATTACHMENT).indexOf(QString("TestUnieditorSMSPluginSample.vcs"), 0, Qt::CaseInsensitive)), Qt::CaseInsensitive) == true);
+ delete message;
+ message = NULL;
+
+ qDebug("VCal Attachment SMS passed");
+
+ msgPlugin->deleteDraftsEntry(draftMsgId);
+
+ message = msgPlugin->convertFrom(draftMsgId);
+ QVERIFY(message == NULL);
+
+ qDebug("Draft SMS deleted Sucessfully");
+}
+
+//---------------------------------------------------------------
+// TestUnieditorSMSPlugin::CreateEmailSMS
+//---------------------------------------------------------------
+void TestUnieditorSMSPlugin::CreateEmailSMS()
+{
+ //Constructing a SMS - Email
+ ConvergedMessage message;
+
+ ConvergedMessageAddress address1;
+ address1.setAddress(QString(TEST_MSG_TO3));
+ message.addToRecipient(address1);
+
+ ConvergedMessageAddress address2;
+ address2.setAddress(QString(TEST_MSG_TO2));
+ message.addToRecipient(address2);
+
+ message.setPriority(ConvergedMessage::Normal);
+
+ message.setSubject(QString(TEST_MSG_SUBJECT));
+
+ message.setBodyText(QString(TEST_MSG_BODY));
+
+ smsId = msgPlugin->convertTo(&message);
+ QVERIFY(smsId != -1);
+}
+
+//---------------------------------------------------------------
+// TestUnieditorSMSPlugin::TestEmailSMS
+//---------------------------------------------------------------
+void TestUnieditorSMSPlugin::TestEmailSMS()
+{
+ QTest::qWait(1000);
+
+ //Verifying Email SMS
+ CMsvEntry* rootentry = iSession->GetEntryL(KMsvDraftEntryId);
+ CMsvEntrySelection* messages = rootentry->ChildrenL();
+ TInt count = rootentry->Count();
+
+ QVERIFY(count > 0);
+
+ TMsvId draftMsgId = messages->At(count - 1);
+ QVERIFY2(draftMsgId == smsId, "SMS Not Sent to Drafts Folder");
+
+ ConvergedMessage* message = msgPlugin->convertFrom(draftMsgId);
+ QVERIFY(message != NULL);
+ QVERIFY(QString(TEST_MSG_TO1).contains(message->fromAddress()->address(), Qt::CaseInsensitive) == true);
+ QVERIFY(QString(TEST_MSG_BODY).compare(message->bodyText(), Qt::CaseInsensitive) == 0);
+ QVERIFY(QString(TEST_MSG_SUBJECT).compare(message->subject(), Qt::CaseInsensitive) == 0);
+ delete message;
+
+ qDebug("Creation EMail passed");
+
+ QVERIFY(msgPlugin->send(smsId) == true);
+
+ QTest::qWait(1000);
+}
+
+//---------------------------------------------------------------
+// TestUnieditorSMSPlugin::CreateSMSForExtraOptions
+//---------------------------------------------------------------
+void TestUnieditorSMSPlugin::CreateSMSForExtraOptions()
+{
+ ConvergedMessage message;
+ message.setBodyText(QString(TEST_MSG_BODY));
+
+ ConvergedMessageAddress address1;
+ address1.setAddress(QString(TEST_MSG_TO2));
+ message.addToRecipient(address1);
+
+ ConvergedMessageAddress address2;
+ address2.setAddress(QString(TEST_MSG_TO1));
+ message.addFromRecipient(address2);
+
+ message.setPriority(ConvergedMessage::Normal);
+
+ smsId = msgPlugin->convertTo(&message);
+ QVERIFY(smsId != -1);
+}
+
+//---------------------------------------------------------------
+// TestUnieditorSMSPlugin::TestSMSForExtraOptions
+//---------------------------------------------------------------
+void TestUnieditorSMSPlugin::TestSMSForExtraOptions()
+{
+ QTest::qWait(1000);
+
+ CMsvEntry* rootentry = iSession->GetEntryL(KMsvDraftEntryId);
+ CMsvEntrySelection* messages = rootentry->ChildrenL();
+ TInt count = rootentry->Count();
+
+ QVERIFY(count > 0);
+
+ TMsvId draftMsgId = messages->At(count - 1);
+ QVERIFY2(draftMsgId == smsId, "SMS Not Sent to Drafts Folder");
+
+ QVERIFY(msgPlugin->messageType() == ConvergedMessage::Sms);
+
+ //Verifying SMS for Forwarding
+ ConvergedMessage* message = msgPlugin->convertFrom(draftMsgId, UniEditorPluginInterface::Forward);
+ QVERIFY(message != NULL);
+ QVERIFY(QString(TEST_MSG_TO1).contains(message->fromAddress()->address(), Qt::CaseInsensitive) == true);
+ QVERIFY(message->toAddressList().count() == 1);
+ QVERIFY(message->toAddressList()[0]->address().contains(QString(TEST_MSG_TO2), Qt::CaseInsensitive) == true);
+ QVERIFY(QString(TEST_MSG_BODY).compare(message->bodyText(), Qt::CaseInsensitive) == 0);
+ delete message;
+
+ qDebug("SMS for Forward Passed");
+
+ //Verifying SMS for Reply from Drafts
+ message = msgPlugin->convertFrom(draftMsgId, UniEditorPluginInterface::Reply);
+ QVERIFY(message != NULL);
+ QVERIFY(QString(TEST_MSG_TO1).contains(message->fromAddress()->address(), Qt::CaseInsensitive) == true);
+ QVERIFY(message->toAddressList().count() == 1);
+ QVERIFY(message->toAddressList()[0]->address().contains(QString(TEST_MSG_TO2), Qt::CaseInsensitive) == true);
+ QVERIFY(message->bodyText().contains(QString(TEST_MSG_BODY), Qt::CaseInsensitive) == true);
+ delete message;
+
+ qDebug("SMS for Reply - ESmsSubmit Passed");
+
+ QVERIFY(msgPlugin->send(smsId) == true);
+
+ QTest::qWait(1000);
+
+ rootentry = iSession->GetEntryL(KMsvGlobalOutBoxIndexEntryId);
+ messages = rootentry->ChildrenL();
+ count = rootentry->Count();
+
+ QVERIFY(count > 0);
+ TMsvId outboxMsgId = messages->At(count - 1);
+
+ //Verifying SMS for Reply when SMS is sent
+ message = msgPlugin->convertFrom(outboxMsgId, UniEditorPluginInterface::Reply);
+ QVERIFY(message != NULL);
+ QVERIFY(QString(TEST_MSG_TO1).contains(message->fromAddress()->address(), Qt::CaseInsensitive) == true);
+ QVERIFY(message->toAddressList().count() == 1);
+ QVERIFY(message->toAddressList()[0]->address().contains(QString(TEST_MSG_TO2), Qt::CaseInsensitive) == true);
+ QVERIFY(message->bodyText().compare(QString(""), Qt::CaseInsensitive) == 0);
+ delete message;
+
+ qDebug("SMS for Reply - ESmsDeliver Passed");
+
+ iSmsClientMtm->Entry().DeleteL(smsId);
+ QTest::qWait(1000);
+}
+
+//---------------------------------------------------------------
+// TestUnieditorSMSPlugin::cleanup
+//---------------------------------------------------------------
+void TestUnieditorSMSPlugin::cleanup()
+{
+
+}
+
+//---------------------------------------------------------------
+// TestUnieditorSMSPlugin::cleanupTestCase
+//---------------------------------------------------------------
+void TestUnieditorSMSPlugin::cleanupTestCase()
+{
+ //Cleanup
+ delete msgPlugin;
+
+ if(iSmsClientMtm)
+ {
+ delete iSmsClientMtm;
+ iSmsClientMtm = NULL;
+ }
+
+ if (iMtmRegistry)
+ {
+ delete iMtmRegistry;
+ iMtmRegistry = NULL;
+ }
+
+ if (iSession)
+ {
+ delete iSession;
+ iSession = NULL;
+ }
+
+ if (iCenRepSession)
+ {
+ delete iCenRepSession;
+ iCenRepSession = NULL;
+ }
+}
+
+//---------------------------------------------------------------
+// TestUnieditorSMSPlugin::createSCSettingsL
+//---------------------------------------------------------------
+void TestUnieditorSMSPlugin::createSCSettingsL()
+{
+ qDebug("TestUnieditorSMSPlugin::createSCSettingsL enter");
+
+ TMsvSelectionOrdering ordering;
+
+ CMsvEntry* root = CMsvEntry::NewL(iSmsClientMtm->Session(),
+ KMsvRootIndexEntryId,
+ ordering);
+
+ CSmsAccount* smsAccount = CSmsAccount::NewLC();
+
+ CSmsSettings* settings = CSmsSettings::NewL();
+ CleanupStack::PushL(settings);
+ smsAccount->LoadSettingsL(*settings);
+
+ TMsvEntry entry;
+ entry.iMtm = KUidMsgTypeSMS;
+ entry.iType = KUidMsvServiceEntry;
+ entry.SetReadOnly(EFalse);
+ entry.SetVisible(EFalse);
+ entry.iDate.UniversalTime();
+ entry.iDetails.Set(_L("Nokiatest"));
+
+ root->SetEntryL(KMsvRootIndexEntryId);
+ root->CreateL(entry);
+
+ QString serviceCenter01(SERVICE_CENTER_01);
+ QString serviceCenter02(SERVICE_CENTER_02);
+ HBufC* sC01 = XQConversions::qStringToS60Desc(serviceCenter01);
+ HBufC* sC02 = XQConversions::qStringToS60Desc(serviceCenter02);
+ CleanupStack::PushL(sC01);
+ CleanupStack::PushL(sC02);
+ settings->AddServiceCenterL(_L("Nokia"), *sC01);
+ settings->AddServiceCenterL(_L("Nokia"), *sC02);
+ CleanupStack::PopAndDestroy(sC02);
+ CleanupStack::PopAndDestroy(sC01);
+ settings->SetDefaultServiceCenter(1);
+ settings->SetValidityPeriod(ESmsVPWeek);
+ settings->SetReplyQuoted(ETrue);
+ settings->SetRejectDuplicate(ETrue);
+ settings->SetDelivery(ESmsDeliveryImmediately);
+ settings->SetDeliveryReport(EFalse);
+ settings->SetReplyPath(EFalse);
+ settings->SetMessageConversion(ESmsConvPIDNone);
+ settings->SetCanConcatenate(ETrue);
+ settings->SetCharacterSet(TSmsDataCodingScheme::ESmsAlphabet7Bit);
+ settings->SetValidityPeriodFormat(TSmsFirstOctet::ESmsVPFInteger);
+ settings->SetStatusReportHandling(CSmsSettings::EMoveReportToInboxVisible);
+ settings->SetSpecialMessageHandling(CSmsSettings::EMoveReportToInboxVisible);
+ settings->SetSmsBearer(CSmsSettings::ESmsBearerCircuitPreferred);
+ settings->SetCommDbAction(CSmsSettings::ENone);
+ settings->SetSmsBearerAction(CSmsSettings::ENone);
+
+ // Save settings
+ CMsvStore* msvstore = root->EditStoreL();
+ CleanupStack::PushL(msvstore);
+
+ TInt maxTries(5);
+ TBool done(EFalse);
+ while (maxTries && !done)
+ {
+ qDebug("TestUnieditorSMSPlugin::CreateDefaultSettingsL b4");
+ TRAPD( err, smsAccount->SaveSettingsL( *settings ) );
+ qDebug("TestUnieditorSMSPlugin::CreateDefaultSettingsL after");
+ if (err == KErrNone)
+ {
+ qDebug("TestUnieditorSMSPlugin::CreateDefaultSettingsL settings saved");
+
+ done = ETrue;
+ }
+ else if (err == KErrLocked)
+ {
+ qDebug("TestUnieditorSMSPlugin::CreateDefaultSettingsL KErrLocked");
+
+ // Wait a while and retry.
+ User::After(100000); // 0.1 seconds
+ maxTries--;
+ }
+ else
+ {
+ qDebug("TestUnieditorSMSPlugin::CreateDefaultSettingsL leaving - ");
+ qDebug() << err;
+ User::Leave(err);
+ }
+ }
+
+ msvstore->CommitL();
+ CleanupStack::PopAndDestroy(msvstore);
+
+ CleanupStack::PopAndDestroy(settings);
+ CleanupStack::PopAndDestroy(smsAccount);
+
+ qDebug("TestUnieditorSMSPlugin::createSCSettingsL exit");
+}
+
+//---------------------------------------------------------------
+// TestUnieditorSMSPlugin::initL
+//---------------------------------------------------------------
+void TestUnieditorSMSPlugin::initL()
+{
+ iCenRepSession = CRepository::NewL(KCRUidSmum);
+
+ // initialise
+ iSession = CMsvSession::OpenSyncL(*this);
+
+ // Create the SMS Service
+ TMsvId serviceId = CreateSmsServiceL();
+
+ // Update the SMS cenrep with the default settings.
+ CreateDefaultSettingsL(serviceId);
+
+ iMtmRegistry = CClientMtmRegistry::NewL(*iSession);
+ iSmsClientMtm = STATIC_CAST( CSmsClientMtm*, iMtmRegistry->NewMtmL( KUidMsgTypeSMS ));
+}
+
+//---------------------------------------------------------------
+// TestUnieditorSMSPlugin::CreateSmsServiceL
+//---------------------------------------------------------------
+TMsvId TestUnieditorSMSPlugin::CreateSmsServiceL()
+ {
+ qDebug("TestUnieditorSMSPlugin::CreateSmsServiceL enter");
+
+ TMsvId serviceEntryId = KMsvNullIndexEntryId;
+ TInt err = KErrNone;
+ TRAP( err, serviceEntryId = ServiceIdL());
+
+ // If no service, create one
+ if (err == KErrNotFound)
+ {
+ TMsvEntry entry;
+ entry.iMtm = KUidMsgTypeSMS;
+ entry.iType = KUidMsvServiceEntry;
+ entry.SetReadOnly(EFalse);
+ entry.SetVisible(EFalse);
+ entry.iDate.HomeTime();
+ entry.iDetails.Set(KSmsService);
+ CMsvEntry* root = iSession->GetEntryL(KMsvRootIndexEntryId);
+ CleanupStack::PushL(root);
+
+ // In case no root store, create one...
+ if (!root->HasStoreL())
+ {
+ // --- The entry does not have a store. EditStoreL() will create one ---
+ CMsvStore* store = root->EditStoreL();
+ CleanupStack::PushL(store);
+ store->CommitL();
+ CleanupStack::PopAndDestroy(); // store
+ store = NULL; // destroyed
+ }
+ root->CreateL(entry);
+ CleanupStack::PopAndDestroy(); // root
+ serviceEntryId = entry.Id();
+
+ }
+
+ qDebug("TestUnieditorSMSPlugin::CreateSmsServiceL exit");
+ return serviceEntryId;
+ }
+
+//---------------------------------------------------------------
+// TestUnieditorSMSPlugin::ServiceIdL
+//---------------------------------------------------------------
+TMsvId TestUnieditorSMSPlugin::ServiceIdL()
+{
+ qDebug("TestUnieditorSMSPlugin::ServiceIdL enter");
+
+ TMsvId id = KMsvNullIndexEntryId;
+ CMsvEntry* root = iSession->GetEntryL(KMsvRootIndexEntryId);
+ CleanupStack::PushL(root);
+ TSmsUtilities::ServiceIdL(*root, id);
+ CleanupStack::PopAndDestroy(root);
+
+ qDebug("TestUnieditorSMSPlugin::ServiceIdL exit");
+ return id;
+}
+
+//---------------------------------------------------------------
+// TestUnieditorSMSPlugin::CreateDefaultSettingsL
+//---------------------------------------------------------------
+void TestUnieditorSMSPlugin::CreateDefaultSettingsL(TMsvId aServiceId)
+{
+ qDebug("TestUnieditorSMSPlugin::CreateDefaultSettingsL enter");
+
+ CSmsSettings* serviceSettings = CSmsSettings::NewL();
+ CleanupStack::PushL(serviceSettings);
+ CSmsAccount* smsAccount = CSmsAccount::NewLC();
+
+ // Read the RFS related settings from shared data.
+ TInt originalCount = 0;
+ smsAccount->LoadSettingsL(*serviceSettings);
+ originalCount = serviceSettings->ServiceCenterCount();
+
+ if (!originalCount)
+ {
+ qDebug("Original count = 0");
+
+ ReadDefaultSettingsFromSharedDataL(serviceSettings);
+
+ // Rest of the sms settings, which are fixed.
+ serviceSettings->SetValidityPeriodFormat(TSmsFirstOctet::ESmsVPFInteger); //relative
+ serviceSettings->SetDelivery(ESmsDeliveryImmediately);
+ serviceSettings->SetCanConcatenate(ETrue);
+ serviceSettings->SetStatusReportHandling(CSmsSettings::EMoveReportToInboxInvisible);
+ serviceSettings->SetSpecialMessageHandling(CSmsSettings::EMoveReportToInboxVisible);
+ serviceSettings->SetRejectDuplicate(ETrue);
+ TInt descriptionLength = KSmsDescriptionLength;
+
+ // Read the value for description length
+ CRepository* repository = CRepository::NewLC(KCRUidMuiuSettings);
+ if (KErrNone == repository->Get(KMuiuDescriptionLength,
+ descriptionLength))
+ {
+ //Make sure value is not zero
+ descriptionLength = Max(descriptionLength, KSmsDescriptionLength);
+ }
+ CleanupStack::PopAndDestroy(); // repository
+ serviceSettings->SetDescriptionLength(descriptionLength);
+
+ // Set saving to commsdb
+ serviceSettings->SetCommDbAction(CSmsSettings::EStoreToCommDb);
+ serviceSettings->SetSmsBearerAction(CSmsSettings::EStoreToCommDb);
+
+ }
+
+ // Save settings
+ CMsvEntry* service = iSession->GetEntryL(aServiceId);
+ CleanupStack::PushL(service);
+ CMsvStore* msvstore = service->EditStoreL();
+ CleanupStack::PushL(msvstore);
+
+ TInt maxTries(5);
+ TBool done(EFalse);
+ while (maxTries && !done)
+ {
+ TRAPD( err, smsAccount->SaveSettingsL( *serviceSettings ) );
+ if (err == KErrNone)
+ {
+ qDebug("TestUnieditorSMSPlugin::CreateDefaultSettingsL settings saved");
+
+ done = ETrue;
+ }
+ else if (err == KErrLocked)
+ {
+ qDebug("TestUnieditorSMSPlugin::CreateDefaultSettingsL KErrLocked");
+
+ // Wait a while and retry.
+ User::After(100000); // 0.1 seconds
+ maxTries--;
+ }
+ else
+ {
+ User::Leave(err);
+ }
+ }
+
+ msvstore->CommitL();
+ CleanupStack::PopAndDestroy(2); // msvstore, service
+ CleanupStack::PopAndDestroy(2); // serviceSettings, smsAccount
+
+ qDebug("TestUnieditorSMSPlugin::CreateDefaultSettingsL Exit");
+}
+
+//---------------------------------------------------------------
+// TestUnieditorSMSPlugin::ReadDefaultSettingsFromSharedDataL
+//---------------------------------------------------------------
+void TestUnieditorSMSPlugin::ReadDefaultSettingsFromSharedDataL(CSmsSettings* aServiceSettings)
+ {
+ qDebug("TestUnieditorSMSPlugin::ReadDefaultSettingsFromSharedDataL Enter");
+
+ if ( iCenRepSession )
+ {
+ TInt readedSetting;
+
+ // Delivery report
+ if (iCenRepSession->Get(KSmumDeliveryReport, readedSetting) != KErrNone)
+ {
+ readedSetting = KDefDeliveryReport;
+ }
+ aServiceSettings->SetDeliveryReport(readedSetting);
+
+ // Validity period
+ if (iCenRepSession->Get(KSmumValidityPeriod, readedSetting) != KErrNone)
+ {
+ readedSetting = KDefValidityPeriod;
+ }
+ aServiceSettings->SetValidityPeriod(readedSetting);
+
+ // Message conversion
+ if (iCenRepSession->Get(KSmumMessageConversion, readedSetting)
+ != KErrNone)
+ {
+ readedSetting = KDefMessageConversion;
+ }
+ aServiceSettings->SetMessageConversion((TSmsPIDConversion) readedSetting);
+
+ // Preferred connection
+ if (iCenRepSession->Get(KSmumPreferredConnection, readedSetting)
+ != KErrNone)
+ {
+ readedSetting = KDefPreferredConnection;
+ }
+ aServiceSettings->SetSmsBearer((CSmsSettings::TMobileSmsBearer) readedSetting);
+
+ // Reply via same centre
+ if (iCenRepSession->Get(KSmumRemoveReplyViaSameCentre, readedSetting)
+ != KErrNone)
+ {
+ if (iCenRepSession->Get(KSmumReplyViaSameCentre, readedSetting)
+ != KErrNone)
+ {
+ readedSetting = KDefReplyViaSameCentre;
+ }
+ }
+ else
+ {
+ if (!readedSetting)
+ {
+ if (iCenRepSession->Get(KSmumReplyViaSameCentre, readedSetting)
+ != KErrNone)
+ {
+ readedSetting = KDefReplyViaSameCentre;
+ }
+ }
+ }
+ aServiceSettings->SetReplyPath(readedSetting);
+ }
+
+ qDebug("TestUnieditorSMSPlugin::ReadDefaultSettingsFromSharedDataL Exit");
+ }
+
+//---------------------------------------------------------------
+// main
+// main entry point
+//---------------------------------------------------------------
+int main(int argc, char *argv[])
+ {
+ int ret = -1;
+ QCoreApplication app(argc, argv);
+ QObject* tc = new TestUnieditorSMSPlugin();
+
+#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;
+ }