--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/mmsengine/mmssettings/test/src/T_MmsSettings.cpp Thu Dec 17 08:44:11 2009 +0200
@@ -0,0 +1,575 @@
+// Copyright (c) 2005-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 "T_MmsSettings.h"
+#include <cmmssettings.h>
+#include <cmmsaccounts.h>
+#include <mmmssettingsobserver.h>
+#include <centralrepository.h>
+
+class CTestNotification : public CBase, public MMmsSettingsObserver
+ {
+public:
+ static CTestNotification* NewL( );
+ CTestNotification();
+ void ConstructL();
+ ~CTestNotification();
+ void HandleNotify(TMmsSettingsEvent aEvent);
+ void StartSetTestL();
+ void StartCreateTestL();
+ void StartDeleteTestL();
+ };
+
+
+
+
+RTest test(_L("MMS Settings"));
+CMmsAccounts* account;
+CMmsSettings* settings;
+CMmsSettings* settingsVerify;
+CTestNotification* notification;
+TMmsAccountId accountId;
+TBuf<KMmsAccountNameSize> buffer1;
+TBuf<KMmsAccountNameSize> buffer2;
+
+const TUid KProxy = {0x1001};
+const TUid KNapId = {0x1002};
+const TUid KMMSRepositoryUid = {0x10202D4C};
+
+_LIT(KAccountName, "MMS Account");
+_LIT(KAddress, "MMS Address");
+_LIT(KAccountNameBlank, "");
+
+_LIT(KAccount1, "AccountNo 1: %d");
+_LIT(KAccount2, "AccountNo 2: %d");
+_LIT(KAccount3, "AccountNo 3: %d");
+_LIT(KAccount4, "AccountNo 4: %d");
+
+
+CTestNotification* CTestNotification::NewL()
+ {
+ CTestNotification* self = new(ELeave) CTestNotification();
+ CleanupStack::PushL(self);
+ self->ConstructL();
+ CleanupStack::Pop();
+ return self;
+ }
+
+void CTestNotification::ConstructL()
+ {
+ account->AddObserverL(*this);
+ }
+
+CTestNotification::CTestNotification()
+ {
+ }
+
+CTestNotification::~CTestNotification()
+ {
+ }
+
+void CTestNotification::StartCreateTestL()
+ {
+ //create a new account
+ settings = CMmsSettings::NewL();
+ account->PopulateDefaultSettingsL(*settings);
+ accountId = account->CreateMMSAccountL(KAccountName, *settings);
+
+ // cleanup
+ delete settings;
+ }
+
+void CTestNotification::StartSetTestL()
+ {
+ // change a setting
+ settings = CMmsSettings::NewL();
+ account->LoadSettingsL(accountId, *settings);
+ settings->SetApplicationID(4);
+ account->SaveSettingsL(accountId, *settings);
+
+ // cleanup
+ delete settings;
+ }
+
+void CTestNotification::StartDeleteTestL()
+ {
+ // delete a account
+ account->DeleteMMSAccountL(accountId);
+ }
+
+
+void CTestNotification::HandleNotify(TMmsSettingsEvent /*aEvent*/)
+ {
+ _LIT(KComment, "\t\tNotification received");
+ theUtils->WriteComment(KComment);
+ CActiveScheduler::Stop();
+ }
+
+
+// Forward declarations and doTestL() are placed here to satisfy leavescan.
+// If leavescan is at the bottom of the file, a leavescan error is produces.
+void InitL();
+void TestCreateAccountL();
+void TestSaveSettingsL();
+void TestDefaultAccountL();
+void TestCopySettingsL();
+void TestDeleteAccountL();
+void TestDeletedDefaultAccountL();
+void TestMultipleAccountsWithBlankNameL();
+void TestMultipleAccountsL();
+void TestNotificationL();
+void CleanupL();
+
+void doTestsL()
+ {
+ InitL();
+
+ TestCreateAccountL();
+ TestSaveSettingsL();
+ TestDefaultAccountL();
+ TestCopySettingsL();
+ TestDeleteAccountL();
+ TestDeletedDefaultAccountL();
+ TestMultipleAccountsWithBlankNameL();
+ TestMultipleAccountsL();
+ TestNotificationL();
+
+ CleanupL();
+ }
+
+TBool CompareBooleans(TBool aBoolean1, TBool aBoolean2, const TDesC* aTestDescription)
+ {
+ _LIT(KErrorReason, "\t\tSettings not set correctly for %S");
+ TBuf<80> buf;
+ TBuf<80> temp;
+ temp.Copy(*aTestDescription);
+ TBool result = ((aBoolean1 && aBoolean2) || (!aBoolean1 && !aBoolean2));
+ if (!result)
+ {
+ buf.AppendFormat(KErrorReason, &temp);
+ theUtils->WriteComment(buf);
+ }
+
+ return result;
+ }
+
+TBool CompareDescriptors(TDesC& aDesC1, TDesC16& aDesC2, const TDesC* aTestDescription)
+ {
+ _LIT(KErrorReason, "\t\tSettings not set correctly for %S");
+ TBuf<80> buf;
+ TBuf<80> temp;
+ temp.Copy(*aTestDescription);
+ TBool result = (aDesC1 == aDesC2);
+ if (!result)
+ {
+ buf.AppendFormat(KErrorReason, &temp);
+ theUtils->WriteComment(buf);
+ }
+
+ return result;
+ }
+
+TBool CompareIntegers(TInt aInt1, TInt aInt2, const TDesC* aTestDescription)
+ {
+ _LIT(KErrorReason, "\t\tSettings not set correctly for %S");
+ TBuf<80> buf;
+ TBuf<80> temp;
+ temp.Copy(*aTestDescription);
+ TBool result = (aInt1 == aInt2);
+ if (!result)
+ {
+ buf.AppendFormat(KErrorReason, &temp);
+ theUtils->WriteComment(buf);
+ }
+
+ return result;
+ }
+
+LOCAL_C void ResetSettings()
+ {
+ // Reset the repository by clearing any existing settings and restoring the
+ // default settings
+ CRepository* repository = CRepository::NewL(KMMSRepositoryUid);
+ repository->Reset();
+ delete repository;
+ }
+
+void InitL()
+ {
+ ResetSettings();
+ account = CMmsAccounts::NewLC();
+ notification = CTestNotification::NewL();
+ CleanupStack::PushL(notification);
+ }
+
+void CleanupL()
+ {
+ CleanupStack::PopAndDestroy(2, account); // notification, account
+ }
+
+void FillSettings()
+ {
+ settings->SetApplicationID(6);
+ settings->SetAddressL(KAddress);
+ settings->SetCreationModeL(ECreationModeWarning);
+ settings->AddProxyL(KProxy);
+ settings->AddProxyL(KProxy);
+ settings->AddProxyL(KProxy);
+ settings->AddNapIdL(KNapId);
+ settings->AddNapIdL(KNapId);
+ settings->AddNapIdL(KNapId);
+ settings->SetDisplayNotification(ETrue);
+ settings->SetAutomaticDownload(EAutomaticDownloadOnlyWhenRoaming);
+ settings->SetCreationModeReadOnly(ETrue);
+ settings->SetValidityPeriod(16);
+ settings->SetMaxDownloadSize (20);
+ settings->SetPriority (ETrue);
+ settings->SetHideNumber(ETrue);
+ settings->SetReadReport(ETrue);
+ settings->SetDeliveryReport(ETrue);
+ settings->SetReplyWithHistory (EFalse);
+ settings->SetAllowDeliveryNotification(EFalse);
+ settings->SetFilterAdvertisements(EFalse);
+ settings->SetMaxDownloadRetries(ETrue);
+ settings->SetDownloadRetryInterval(7);
+ settings->SetMaxSendMsgSize (8);
+ settings->SetFullScreenPreview(EFalse);
+ settings->SetDeviceContentClass(4);
+ settings->SetMaxImageHeight(3);
+ settings->SetMaxImageWidth(6);
+
+ _LIT(KComment, "\t\tCreated Filled POP3 Settings");
+ theUtils->WriteComment(KComment);
+ }
+
+TBool CompareSettings()
+ {
+ _LIT(KComment, "\t\tComparing Filled POP3 Settings");
+ theUtils->WriteComment(KComment);
+ TBool result = ETrue;
+
+ result &= CompareIntegers((settings->ApplicationID()), (settingsVerify->ApplicationID()), &KNullDesC);
+
+ buffer1 = settings->Address();
+ buffer2 = settingsVerify->Address();
+ result &= CompareDescriptors(buffer1, buffer2, &KNullDesC);
+
+ TBool result1=((settings->CreationMode())==(settingsVerify->CreationMode()));
+ if (!result1)
+ {
+ _LIT(KComment, "\t\tCreationMode not Identical");
+ theUtils->WriteComment(KComment);
+ }
+ result &= result1;
+
+ result &= CompareIntegers((settings->ProxyCount()), (settingsVerify->ProxyCount()), &KNullDesC);
+
+ TBool result2 = EFalse;
+ for (TInt index = 0; index < settings->ProxyCount(); ++index)
+ {
+ result2=((settings->GetProxy(index))==(settingsVerify->GetProxy(index)));
+ if (!result2)
+ {
+ _LIT(KComment, "\t\tProxy not Identical");
+ theUtils->WriteComment(KComment);
+ }
+ result &= result2;
+ }
+
+ result &= CompareIntegers((settings->NapIdCount()), (settingsVerify->NapIdCount()), &KNullDesC);
+
+ TBool result3 = EFalse;
+ for (TInt index = 0; index < settings->NapIdCount(); ++index)
+ {
+ result3=((settings->GetNapId(index))==(settingsVerify->GetNapId(index)));
+ if (!result3)
+ {
+ _LIT(KComment, "\t\tNap Id not Identical");
+ theUtils->WriteComment(KComment);
+ }
+ result &= result3;
+ }
+
+ result &= CompareBooleans(settings->DisplayNotification(), settingsVerify->DisplayNotification(), &KNullDesC);
+
+ TBool result4=((settings->AutomaticDownload())==(settingsVerify->AutomaticDownload()));
+ if (!result4)
+ {
+ _LIT(KComment, "\t\tDisplayNotification not Identical");
+ theUtils->WriteComment(KComment);
+ }
+ result &= result4;
+
+ result &= CompareBooleans(settings->CreationModeReadOnly(), settingsVerify->CreationModeReadOnly(), &KNullDesC);
+ result &= CompareIntegers((settings->ValidityPeriod()), (settingsVerify->ValidityPeriod()), &KNullDesC);
+ result &= CompareIntegers((settings->MaxDownloadSize()), (settingsVerify->MaxDownloadSize()), &KNullDesC);
+ result &= CompareBooleans(settings->Priority(), settingsVerify->Priority(), &KNullDesC);
+ result &= CompareBooleans(settings->HideNumber(), settingsVerify->HideNumber(), &KNullDesC);
+ result &= CompareBooleans(settings->ReadReport(), settingsVerify->ReadReport(), &KNullDesC);
+ result &= CompareBooleans(settings->DeliveryReport(), settingsVerify->DeliveryReport(), &KNullDesC);
+ result &= CompareBooleans(settings->ReplyWithHistory(), settingsVerify->ReplyWithHistory(), &KNullDesC);
+ result &= CompareBooleans(settings->AllowDeliveryNotification(), settingsVerify->AllowDeliveryNotification(), &KNullDesC);
+ result &= CompareBooleans(settings->FilterAdvertisements(), settingsVerify->FilterAdvertisements(), &KNullDesC);
+ result &= CompareIntegers((settings->MaxDownloadRetries()), (settingsVerify->MaxDownloadRetries()), &KNullDesC);
+ result &= CompareIntegers((settings->DownloadRetryInterval()), (settingsVerify->DownloadRetryInterval()), &KNullDesC);
+ result &= CompareIntegers((settings->MaxSendMsgSize()), (settingsVerify->MaxSendMsgSize()), &KNullDesC);
+ result &= CompareBooleans(settings->FullScreenPreview(), settingsVerify->FullScreenPreview(), &KNullDesC);
+ result &= CompareIntegers((settings->DeviceContentClass()), (settingsVerify->DeviceContentClass()), &KNullDesC);
+ result &= CompareIntegers((settings->MaxImageHeight()), (settingsVerify->MaxImageHeight()), &KNullDesC);
+ result &= CompareIntegers((settings->MaxImageWidth()), (settingsVerify->MaxImageWidth()), &KNullDesC);
+
+ return result;
+ }
+
+void TestMultipleAccountsWithBlankNameL()
+ {
+ theUtils->Start(_L("Multiple Account With BlankName Test"));
+ // check there are no accounts
+ RArray<TMmsAccountId> mmsAccounts;
+ account->GetMMSAccountsL(mmsAccounts);
+ test(mmsAccounts.Count() == 0);
+ // create 4 accounts
+ settings = CMmsSettings::NewL();
+ account->PopulateDefaultSettingsL(*settings);
+
+ accountId = account->CreateMMSAccountL(KAccountNameBlank, *settings);
+ theUtils->Printf(KAccount1, accountId.iMmsAccountId);
+ test(accountId.iMmsAccountId == 1);
+
+ TMmsAccountId accountId1 = account->CreateMMSAccountL(KAccountNameBlank, *settings);
+ theUtils->Printf(KAccount2, accountId1.iMmsAccountId);
+ test(accountId1.iMmsAccountId == 2);
+
+ TMmsAccountId accountId2 = account->CreateMMSAccountL(KAccountNameBlank, *settings);
+ theUtils->Printf(KAccount3, accountId2.iMmsAccountId);
+ test(accountId2.iMmsAccountId == 3);
+
+ TMmsAccountId accountId3 = account->CreateMMSAccountL(KAccountNameBlank, *settings);
+ theUtils->Printf(KAccount4, accountId3.iMmsAccountId);
+ test(accountId3.iMmsAccountId == 4 );
+
+ // check accounts
+ mmsAccounts.Reset();
+ account->GetMMSAccountsL(mmsAccounts);
+ test(mmsAccounts.Count() == 4);
+ // delete the accounts
+ account->DeleteMMSAccountL(accountId3);
+ account->DeleteMMSAccountL(accountId1);
+ account->DeleteMMSAccountL(accountId2);
+ account->DeleteMMSAccountL(accountId);
+ mmsAccounts.Reset();
+ account->GetMMSAccountsL(mmsAccounts);
+ test(mmsAccounts.Count() == 0);
+ delete settings;
+ mmsAccounts.Close();
+ theUtils->Complete( );
+ }
+
+void TestMultipleAccountsL()
+ {
+ theUtils->Start(_L("Multiple Account Test"));
+
+ // check there are no accounts
+ RArray<TMmsAccountId> mmsAccounts;
+ account->GetMMSAccountsL(mmsAccounts);
+ test(mmsAccounts.Count() == 0);
+
+ // create 4 accounts
+ settings = CMmsSettings::NewL();
+ account->PopulateDefaultSettingsL(*settings);
+ accountId = account->CreateMMSAccountL(KAccountName, *settings);
+ TMmsAccountId accountId1 = account->CreateMMSAccountL(KAccountName, *settings);
+ TMmsAccountId accountId2 = account->CreateMMSAccountL(KAccountName, *settings);
+ TMmsAccountId accountId3 = account->CreateMMSAccountL(KAccountName, *settings);
+
+ // check accounts
+ mmsAccounts.Reset();
+ account->GetMMSAccountsL(mmsAccounts);
+ test(mmsAccounts.Count() == 4);
+
+ // delete 2 accounts
+ account->DeleteMMSAccountL(accountId3);
+ account->DeleteMMSAccountL(accountId1);
+
+ // check accounts
+ mmsAccounts.Reset();
+ account->GetMMSAccountsL(mmsAccounts);
+ test(mmsAccounts.Count() == 2);
+
+ // cleanup
+ account->DeleteMMSAccountL(accountId2);
+ account->DeleteMMSAccountL(accountId);
+ mmsAccounts.Reset();
+ account->GetMMSAccountsL(mmsAccounts);
+ test(mmsAccounts.Count() == 0);
+ delete settings;
+ mmsAccounts.Close();
+
+ theUtils->Complete( );
+ }
+
+void TestDeleteAccountL()
+ {
+ theUtils->Start(_L("Delete Account Test"));
+
+ // should be one account created previously
+ RArray<TMmsAccountId> mmsAccounts;
+ account->GetMMSAccountsL(mmsAccounts);
+ test(mmsAccounts.Count() == 1);
+
+ // delete account and check
+ account->DeleteMMSAccountL(accountId);
+ mmsAccounts.Reset();
+ account->GetMMSAccountsL(mmsAccounts);
+ test(mmsAccounts.Count() == 0);
+
+ // cleanup
+ mmsAccounts.Close();
+
+ theUtils->Complete();
+ }
+
+void TestDeletedDefaultAccountL()
+/**
+Checks if the default account has been deleted from the repository
+For Defect Number: ZEBRA00018625
+*/
+ {
+ theUtils->Start(_L("Delete Default Account Test"));
+
+ RArray<TMmsAccountId> mmsAccounts;
+ account->GetMMSAccountsL(mmsAccounts);
+ test(mmsAccounts.Count() == 0);
+
+ TMmsAccountId deletedDefaultaccountId;
+ // if the default account exists in the repository, along with valid settings
+ // then the account Id and name will be returned, else KErrNotFound will
+ // be returned.
+ TRAPD( leaveCode,deletedDefaultaccountId = account->DefaultMMSAccountL() );
+ test(leaveCode == KErrNotFound);
+
+ // cleanup
+ mmsAccounts.Reset();
+ mmsAccounts.Close();
+ theUtils->Complete();
+ }
+
+void TestCopySettingsL()
+ {
+ theUtils->Start(_L("Copy Settings Test"));
+ settings = CMmsSettings::NewL();
+ account->PopulateDefaultSettingsL(*settings);
+
+ // load settings to copy
+ settingsVerify = CMmsSettings::NewL();
+ account->LoadSettingsL(accountId, *settingsVerify);
+
+ // copy setting and check
+ settings->CopyL(*settingsVerify);
+ test(CompareSettings() == 1);
+
+ // cleanup
+ delete settingsVerify;
+ delete settings;
+
+ theUtils->Complete();
+ }
+
+void TestDefaultAccountL()
+ {
+ theUtils->Start(_L("Default Account Test"));
+
+ account->SetDefaultMMSAccountL(accountId);
+ TMmsAccountId accountId2 = account->DefaultMMSAccountL();
+
+ test(accountId.iMmsAccountId == accountId2.iMmsAccountId);
+ test(accountId.iMmsAccountName == accountId2.iMmsAccountName);
+
+ theUtils->Complete();
+ }
+
+void TestSaveSettingsL()
+ {
+ theUtils->Start(_L("Save Settings Test"));
+
+ // save settings
+ settings = CMmsSettings::NewL();
+ settingsVerify = CMmsSettings::NewL();
+ account->PopulateDefaultSettingsL(*settings);
+ FillSettings();
+ account->SaveSettingsL(accountId, *settings);
+
+ // check settings and accounts
+ account->LoadSettingsL(accountId, *settingsVerify);
+ test(CompareSettings() == 1);
+
+ // cleanup
+ delete settingsVerify;
+ delete settings;
+
+ theUtils->Complete();
+ }
+
+void TestCreateAccountL()
+ {
+ theUtils->Start(_L("Create Account Test"));
+
+ // check there are no accounts
+ RArray<TMmsAccountId> mmsAccounts;
+ account->GetMMSAccountsL(mmsAccounts);
+ test(mmsAccounts.Count() == 0);
+
+ // create accounts
+ settings = CMmsSettings::NewL();
+ settingsVerify = CMmsSettings::NewL();
+ account->PopulateDefaultSettingsL(*settings);
+ FillSettings();
+ accountId = account->CreateMMSAccountL(KAccountName, *settings);
+
+ // check settings and accounts
+ account->LoadSettingsL(accountId, *settingsVerify);
+ test(CompareSettings() == 1);
+ mmsAccounts.Reset();
+ account->GetMMSAccountsL(mmsAccounts);
+ test(mmsAccounts.Count() == 1);
+
+ // cleanup
+ delete settingsVerify;
+ delete settings;
+ mmsAccounts.Close();
+
+ theUtils->Complete();
+ }
+
+
+void TestNotificationL()
+ {
+ theUtils->Start(_L("Notification Test1: Create"));
+ notification->StartCreateTestL();
+ CActiveScheduler::Start();
+ theUtils->Complete();
+
+ theUtils->Start(_L("Notification Test2: Set"));
+ notification->StartSetTestL();
+ CActiveScheduler::Start();
+ theUtils->Complete();
+
+ theUtils->Start(_L("Notification Test3: Delete"));
+ notification->StartDeleteTestL();
+ CActiveScheduler::Start();
+ theUtils->Complete();
+ }
+