--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/commonappservices/alarmservertest/TestMultipleAlarmsSuite/src/TestAssociatedDataStep.cpp Tue Feb 02 10:12:00 2010 +0200
@@ -0,0 +1,362 @@
+// 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:
+// Contains implementation of CTestAssociatedDataStep class
+//
+//
+
+/**
+ @file
+ @internalTechnology
+*/
+
+// User Include
+#include "TestAssociatedDataStep.h"
+#include "DummyAlarmControl.h"
+
+// Syatem Includes
+#include <uikon/eikalsup.h>
+#include <calalarm.h>
+
+/**
+Constructor. Sets the test step name. Testserver reference passed to make use
+of TEF's method of sharing data between test steps
+@internalTechnology
+@test
+*/
+CTestAssociatedDataStep::CTestAssociatedDataStep(CTestMultipleAlarmsServer& aTestServer)
+: CTestBaseStep(aTestServer)
+ {
+ //Call base class method to set human readable name for test step
+ SetTestStepName(KTestAssociatedDataStep);
+ }
+
+/**
+Destructor
+@internalTechnology
+@test
+*/
+CTestAssociatedDataStep::~CTestAssociatedDataStep()
+ {
+ delete iActiveScheduler;
+ }
+
+/**
+Base class virtual. Installs the active scheduler
+@return EPass or EFail indicating the result of the test step.
+@internalTechnology
+@test
+*/
+TVerdict CTestAssociatedDataStep::doTestStepPreambleL()
+ {
+ iActiveScheduler = new (ELeave) CActiveScheduler;
+ CActiveScheduler::Install(iActiveScheduler);
+ return TestStepResult();
+ }
+
+/**
+Base class pure virtual.
+@return EPass or EFail indicating the result of the test step.
+@internalTechnology
+@test
+*/
+TVerdict CTestAssociatedDataStep::doTestStepL()
+ {
+ TPtrC alarmMessage;
+ if(!ReadStringsFromConfig(ConfigSection(), &KIniAlarmMessage(), &alarmMessage, NULL))
+ {
+ IniProblem();
+ }
+ else
+ {
+ TPtrC typeOfAD;
+ TRAPD(error, TestAlarmSoundNameL(alarmMessage));
+ PrintIfError(error);
+ if(!ReadStringsFromConfig(ConfigSection(), &KIniTypeOfAD(), &typeOfAD, NULL))
+ {
+ INFO_PRINTF2(_L("%S field not found in ini. Assuming there is no associated data for the entry"), &KIniTypeOfAD);
+ }
+ else
+ {
+ TRAP(error, TestAssociatedDataL(alarmMessage, typeOfAD));
+ PrintIfError(error);
+ }
+ }
+ return TestStepResult();
+ }
+
+/**
+Retreives the alarm control object and tests the associated data of the alarm
+whose message is the one that is passed as parameter
+@param aAlarmMessage Message to identify the alarm control object
+@param aTypeOfAD The type of Associated Data, i.e. url or mime
+@internalTechnology
+@test
+*/
+void CTestAssociatedDataStep::TestAssociatedDataL(const TPtrC& aAlarmMessage, const TPtrC& aTypeOfAD)
+ {
+ CCalEntryId* entryId = NULL;
+ if(!GetEntryIdL(aAlarmMessage, entryId))
+ {
+ ERR_PRINTF2(_L("No associated data attached with the alarm %S ... Failing the test"), &aAlarmMessage);
+ SetTestStepResult(EFail);
+ }
+ else
+ {
+ CCalEntry* calEntry = NULL;
+ CleanupStack::PushL(entryId);
+
+ TestStoreFileNameL(entryId);
+
+ CCalSession* calSession = CreateAndInitializeCalSessionL(EFalse);
+ CleanupStack::PushL(calSession);
+
+ if(!GetCalEntryL(entryId, calEntry, calSession))
+ {
+ ERR_PRINTF2(_L("The calendar entry was not found for %S. Failing the test..."), &aAlarmMessage);
+ SetTestStepResult(EFail);
+ }
+ else
+ {
+ CleanupStack::PushL(calEntry);
+ CCalAlarm* alarm = calEntry->AlarmL();
+ if(!alarm->AlarmAction())
+ {
+ ERR_PRINTF2(_L("Alarm content is NULL for %S. Failing the test..."), &aAlarmMessage);
+ SetTestStepResult(EFail);
+ }
+ else
+ {
+ CleanupStack::PushL(alarm);
+ DoTestAssociatedDataL(alarm->AlarmAction(), aTypeOfAD);
+ CleanupStack::PopAndDestroy(alarm);
+ }
+ CleanupStack::PopAndDestroy(calEntry);
+ }
+ CleanupStack::PopAndDestroy(2, entryId); // calSession and entryId
+ }
+ }
+
+/**
+Retreives the raw data from the alert server and constructs the CCalEntryId
+that contains the details about the entry, which owns the alarm corresponding
+to the message passed as parameter.
+@param aAlarmMessage The message associated with the alarm
+@param aEntryId Pointer to the object that will hold the data describing the
+entry
+@return The sucess or failure. EFalse if entry does not have associated data
+@internalTechnology
+@test
+*/
+TBool CTestAssociatedDataStep::GetEntryIdL(const TPtrC& aAlarmMessage, CCalEntryId*& aEntryId)
+ {
+ CDummyAlarmControl* alarmControl = dynamic_cast<CDummyAlarmControl*>(TestServer()->AlarmControlsManager()->GetAlarmControlObjectL(aAlarmMessage));
+ if(alarmControl->AlarmObject().HasAssociatedData())
+ {
+ // Get the data from the supervisor
+ HBufC8* data = HBufC8::NewL(alarmControl->Supervisor()->AlarmData().Length());
+ *data = alarmControl->Supervisor()->AlarmData();
+ CleanupStack::PushL(data);
+
+ aEntryId = CCalEntryId::NewL(data);
+
+ // CCalEntryId takes ownership
+ CleanupStack::Pop(data);
+ return ETrue;
+ }
+
+ return EFalse;
+ }
+
+/**
+Retreives the calendar entry corresponding to the data contained in the
+CCalEntryId passed as parameter
+@param aEntryId The pointer to the object that contains the id details
+of the entry
+@param aCalEntry The pointer to hold the cal-entry if found
+@return The sucess or failure of the find operation
+@internalTechnology
+@test
+*/
+TBool CTestAssociatedDataStep::GetCalEntryL(CCalEntryId* aEntryId, CCalEntry*& aCalEntry, CCalSession* aCalSession)
+ {
+ // Get the calendar entry.
+ RPointerArray<CCalEntry> entryList;
+
+ CCalEntryView* calEntryView = CreateEntryViewL(aCalSession);
+ CleanupStack::PushL(calEntryView);
+
+ calEntryView->FetchL(aEntryId->IdL(), entryList);
+
+ TBool found = FindCalEntryL(entryList, aEntryId->RecurrenceIdL(), aCalEntry);
+
+ CleanupStack::PopAndDestroy(calEntryView);
+ return found;
+ }
+
+/**
+Not used, to be removed
+Retreives the data associated with the entry passed as paraemeter
+@param aCalEntry The pointer to the cal-entry.
+@return A pointer to the CCalAlarmContent
+@internalTechnology
+@test
+*/
+CCalContent* CTestAssociatedDataStep::GetAlarmContentL(const CCalEntry* aCalEntry)
+ {
+ // Get the rich data
+ return aCalEntry->AlarmL()->AlarmAction();
+ }
+
+/**
+Retreives the data associated with the entry passed as paraemeter and checks it
+@param aAlarmContent The pointer to the rich data.
+@param aTypeOfAD The type of Associated Data, i.e. url or mime
+@internalTechnology
+@test
+*/
+void CTestAssociatedDataStep::DoTestAssociatedDataL(CCalContent* aAlarmContent , const TPtrC& aTypeOfAD)
+ {
+ TPtrC mimeType;
+ if(ReadStringsFromConfig(ConfigSection(), &KIniContentType(), &mimeType, NULL) == EFalse)
+ {
+ IniProblem();
+ return;
+ };
+
+ HBufC8* content8 = NULL;
+ CCalContent::TDisposition disposition = CCalContent::EDispositionUnknown;
+ if(aTypeOfAD.Compare(KIniUrl) == 0)
+ {
+ TPtrC url;
+ if(ReadStringsFromConfig(ConfigSection(), &KIniUrl(), &url, NULL) == EFalse)
+ {
+ IniProblem();
+ return;
+ };
+ // Convert read url from unicode to 8-bit data.
+ content8 = HBufC8::NewL(url.Length());
+ content8->Des().Copy(url);
+ disposition = CCalContent::EDispositionUrl;
+ }
+ else if(aTypeOfAD.Compare(KIniMime) == KErrNone)
+ {
+ TPtrC fileName;
+ if(ReadStringsFromConfig(ConfigSection(), &KIniFileName(), &fileName, NULL) == EFalse)
+ {
+ IniProblem();
+ return;
+ };
+ GetAlarmContentFromFileL(fileName, content8);
+ disposition = CCalContent::EDispositionInline;
+ }
+ CleanupStack::PushL(content8);
+
+ CheckAlarmContentValuesL(aAlarmContent, disposition, mimeType, *content8);
+ CleanupStack::PopAndDestroy(content8);
+ }
+
+/**
+Checks data associated with the entry passed as paraemeter against a set of
+expected values
+@param aAlarmContent The reference to a pointer to the rich data
+@param aExpectedValueType Expected content-value type
+@param aExpectedContentType Expected content type
+@param aExpectedDataContent8 Expected data content in an 8-bit descriptor
+@internalTechnology
+@test
+*/
+void CTestAssociatedDataStep::CheckAlarmContentValuesL(CCalContent*& aAlarmContent, CCalContent::TDisposition aExpectedDisposition, const TDesC& aExpectedMimeType, const TDesC8& aExpectedContent)
+ {
+ INFO_PRINTF3(_L("Testing content disposition. Expected = %D, Actual = %D."), aExpectedDisposition, aAlarmContent->Disposition());
+ TEST1(aAlarmContent->Disposition() == aExpectedDisposition, ETrue);
+
+ // Convert 8-bit MIME type to unicode for logging...
+ HBufC* mimeType = HBufC::NewLC(aAlarmContent->MimeType().Length());
+ mimeType->Des().Copy(aAlarmContent->MimeType());
+ INFO_PRINTF3(_L("Testing MIME type. Expected = %S, Actual = %S."), &aExpectedMimeType, mimeType);
+ TEST1(mimeType->Compare(aExpectedMimeType) == KErrNone, ETrue);
+ CleanupStack::PopAndDestroy(mimeType);
+
+ INFO_PRINTF1(_L("Testing data content"));
+ TEST1(aAlarmContent->Content().Compare(aExpectedContent) == KErrNone, ETrue);
+ }
+
+/**
+Finds the calendar entry checking for the sequence no. and recurrence ids
+@param aEntryList The list of entries to be checked
+@param aRecurrenceId The recurrence id of the entry
+@param aFoundEntry The reference to a pointer to the entry which will
+be set to point to the found entry
+@internalTechnology
+@return Success status
+@test
+*/
+TBool CTestAssociatedDataStep::FindCalEntryL(RPointerArray<CCalEntry> aEntryList, const TCalTime& aRecurrenceId, CCalEntry*& aFoundEntry)
+ {
+ TInt index = 0;
+ while(aEntryList.Count() > 0)
+ {
+ aFoundEntry = aEntryList[index];
+ aEntryList.Remove(index);
+ TCalTime calTime = aFoundEntry->RecurrenceIdL();
+ if (calTime.TimeUtcL() == aRecurrenceId.TimeUtcL())
+ {
+ ++index;
+ }
+ else
+ {
+ delete aFoundEntry;
+ aFoundEntry = NULL;
+ }
+ }
+ aEntryList.Reset();
+ return (aFoundEntry ? ETrue : EFalse);
+ }
+
+/**
+Tests whether the Store File Name of the calendar entry is as expected
+@param aEntryId Pointer to the object that has the entry details
+@internalTechnology
+@test
+*/
+void CTestAssociatedDataStep::TestStoreFileNameL(CCalEntryId* aEntryId)
+ {
+ TPtrC storeFileName(aEntryId->StoreFileNameL());
+ INFO_PRINTF3(_L("Testing store file name. Expected = %S, Actual = %S."), &KTestCalFile, &storeFileName);
+ TEST1(storeFileName.Compare(KTestCalFile) == KErrNone, ETrue);
+ }
+
+/**
+Tests whether the Alarm Sound Name of the alarm is as expected
+@param aAlarmMessage The message associated with the alarm
+@internalTechnology
+@test
+*/
+void CTestAssociatedDataStep::TestAlarmSoundNameL(const TPtrC& aAlarmMessage)
+ {
+ TPtrC alarmSoundName;
+ CDummyAlarmControl* alarmControl = dynamic_cast<CDummyAlarmControl*>(TestServer()->AlarmControlsManager()->GetAlarmControlObjectL(aAlarmMessage));
+
+ if(ReadStringsFromConfig(ConfigSection(), &KIniAlarmSoundName(), &alarmSoundName, NULL))
+ {
+ INFO_PRINTF3(_L("Testing alarm sound name. Expected = %S, Actual = %S."), &alarmSoundName, &(alarmControl->AlarmSoundName()));
+ TEST1(alarmSoundName.Compare(alarmControl->AlarmSoundName()) == KErrNone, ETrue);
+ }
+ else
+ {
+ INFO_PRINTF1(_L("Testing alarm sound name to be NULL descriptor"));
+ TEST1(KNullDesC().Compare(alarmControl->AlarmSoundName()) == KErrNone, ETrue);
+ }
+ }
+