diff -r 000000000000 -r 2e3d3ce01487 commonappservices/alarmserver/Test/TAlarmNotifications.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/commonappservices/alarmserver/Test/TAlarmNotifications.cpp Tue Feb 02 10:12:00 2010 +0200 @@ -0,0 +1,689 @@ +// Copyright (c) 1997-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: +// Test session notification of alarms +// +// + +#include "ASTstAlarmTest.h" +#include "testserver.h" + +// Constants +const TUint KHeapMinSize=0x01000; +const TUint KHeapMaxSize=0x10000; + +// Globals +static TAlarmId TheAlarmId = KNullAlarmId; +static TBool TheNotifyFlag=EFalse; +static TBool TheNotifyThread=ETrue; +static TRequestStatus TheCurrentRequest=KErrNone; +static TRequestStatus TheSessionStatus; +// +static void testOtherNotify(TBool aExpected); +static void testThisNotify(TInt aExpected=KErrNone); + + +static TInt ntfThreadMain(TAny* /*aPtr*/) +// +// Main thread of notification thread +// + { + RASCliSession almSvr; + const TInt r=almSvr.Connect(); + TheAlarmTest(r==KErrNone, __LINE__); + // + TAlarmId alarmId; + TRequestStatus stat; + FOREVER + { + FOREVER + { + almSvr.NotifyChange(stat, alarmId); + User::After(KTimeToWait); + if (stat == KRequestPending) + break; + User::WaitForRequest(stat); + } + User::WaitForRequest(stat); + // + if (!TheNotifyThread) + break; + // + TheAlarmTest(stat >= EAlarmChangeEventState && stat <= EAlarmChangeEventLast, __LINE__); + TheNotifyFlag = ETrue; + } + // + TheNotifyFlag=ETrue; + return(KErrNone); + } + + +static void startNotifyThread() +// +// Start the thread that determines NotifyOnChange +// + { + TheAlarmTest.Test().Next(_L("Starting the notification test thread")); + RThread t; + TInt r=t.Create(_L("NtfThread"),ntfThreadMain,KDefaultStackSize,KHeapMinSize,KHeapMaxSize,NULL); + TheAlarmTest(r==KErrNone, __LINE__); + TRequestStatus tStat; + t.Logon(tStat); + t.SetPriority(EPriorityMore); + TheAlarmTest(tStat==KRequestPending, __LINE__); + t.Resume(); + TheAlarmTest(tStat==KRequestPending, __LINE__); + User::After(KTimeToWait); + } + + +static void testSetupNotify() +// +// Set up the notify requests +// + { + TheNotifyFlag=EFalse; + startNotifyThread(); + // + TheAlarmTest.Test().Next(_L("Set up notification requests")); + // + TheAlarmTest.WaitForNotificationBufferToBeEmptied(TheCurrentRequest, TheAlarmId); + TheAlarmTest.Session().NotifyChangeCancel(); + // + TheAlarmTest(TheCurrentRequest == KErrCancel, __LINE__); + TheAlarmTest(TheNotifyFlag == EFalse, __LINE__); + // +#if defined(_DEBUG) + TheAlarmTest.Session().__DbgPreventUserNotify(ETrue); +#endif + // + TheAlarmTest.WaitForNotificationBufferToBeEmptied(TheCurrentRequest, TheAlarmId); + } + +static void testOtherNotify(TBool aExpected) +// +// Check there was a notification to the notify thread +// + { + User::After(KTimeToWait); + TheAlarmTest(TheNotifyFlag==aExpected, __LINE__); + TheNotifyFlag=EFalse; + } + +static void testThisNotify(TInt aExpected) +// +// Check there the notification of this thread. Because notifications +// in the new Alarm Server are bufferred, then the first notification +// may not be the one we are looking for. Therefore we continue to +// request notifications until the buffer is exhausted, at which point, +// if we haven't yet seent the notification we were looking for, we +// panic. +// + { + if (TheCurrentRequest != aExpected) + { + // Need to exhaust the event buffer + + // If the buffer is empty (server side) then the current + // request will still be outstanding, therefore the test + // has failed. + User::After(KTimeToWait); + TheAlarmTest(TheCurrentRequest != KRequestPending, __LINE__); + + // Eat current request + User::WaitForRequest(TheCurrentRequest); + + // Now go through each item in the buffer, requesting them + // one by one + FOREVER + { + TheAlarmTest.Session().NotifyChange(TheCurrentRequest, TheAlarmId); + User::After(KTimeToWait); + TheAlarmTest(TheCurrentRequest != KRequestPending, __LINE__); + User::WaitForRequest(TheCurrentRequest); + if (TheCurrentRequest == aExpected) + break; + } + } + + // Request another notification + if (TheCurrentRequest != KRequestPending) + { + // Eat all the rest + TheAlarmTest.WaitForNotificationBufferToBeEmptied(TheCurrentRequest, TheAlarmId); + } + } + + +static void testTimeChangeL() +// +// Test that time notifications work +// + { + RPIMTestServer serv; + User::LeaveIfError(serv.Connect()); + + TheAlarmTest.Test().Next(_L("Time changes and alarms set with local wall-clock time.")); + // + testOtherNotify(EFalse); + testThisNotify(KRequestPending); + // + testThisNotify(KRequestPending); + testOtherNotify(EFalse); + // + TTime home; + home.HomeTime(); + home+=TTimeIntervalMinutes(2); + + serv.SetHomeTime(home); + + User::After(KTimeToWait); + // + testThisNotify(EAlarmChangeEventSystemDateTimeChanged); + testOtherNotify(ETrue); + testOtherNotify(EFalse); + testThisNotify(KRequestPending); + // + TASShdAlarm alarm; + alarm.Message() = _L("Time"); + alarm.NextDueTime().HomeTime(); + alarm.NextDueTime() += TTimeIntervalMinutes(30); + TheAlarmTest.Session().AlarmAddWithNotification(TheSessionStatus, alarm); + TheAlarmTest(TheSessionStatus == KRequestPending, __LINE__); + // + testOtherNotify(ETrue); + testThisNotify(EAlarmChangeEventAlarmAddition); + TheAlarmTest.WaitForNotificationBufferToBeEmptied(TheCurrentRequest, TheAlarmId); + // + TInt r; + TAlarmId nextDueAlarmId; + // + r = TheAlarmTest.Session().GetNextDueAlarmId(nextDueAlarmId); + TheAlarmTest(r == KErrNone, __LINE__); + TheAlarmTest(nextDueAlarmId = alarm.Id(), __LINE__); + // + TASShdAlarm retrievedAlarm; + r = TheAlarmTest.Session().GetAlarmDetails(nextDueAlarmId, retrievedAlarm); + TheAlarmTest(r == KErrNone, __LINE__); + TheAlarmTest(retrievedAlarm.Message() == _L("Time"), __LINE__); + // + serv.SetHomeTime(retrievedAlarm.NextDueTime()); + serv.Close(); + + User::After(KTimeToWait); + // + testOtherNotify(ETrue); + testThisNotify(EAlarmChangeEventSystemDateTimeChanged); + TheAlarmTest(TheSessionStatus != KRequestPending, __LINE__); + User::WaitForRequest(TheSessionStatus); + // + r = TheAlarmTest.Session().GetNextDueAlarmId(nextDueAlarmId); + TheAlarmTest(r == KErrNone, __LINE__); + TheAlarmTest(nextDueAlarmId == KNullAlarmId, __LINE__); + // + TheAlarmTest.Session().AlarmNotificationCancelAndDequeue(alarm.Id()); + testThisNotify(EAlarmChangeEventAlarmDeletion); + testOtherNotify(ETrue); + // + alarm.NextDueTime() += TTimeIntervalDays(1); + alarm.Message() = _L("DayTime"); + TheAlarmTest.Session().AlarmAddWithNotification(TheSessionStatus, alarm); + testThisNotify(EAlarmChangeEventAlarmAddition); + // + TheAlarmTest.Session().AlarmNotificationCancelAndDequeue(alarm.Id()); + testThisNotify(EAlarmChangeEventAlarmDeletion); + // + TheAlarmTest.Session().AlarmAddWithNotification(TheSessionStatus, alarm); + testThisNotify(EAlarmChangeEventAlarmAddition); + testOtherNotify(ETrue); + // + TheAlarmTest.Session().AlarmNotificationCancelAndDequeue(alarm.Id()); + testThisNotify(EAlarmChangeEventAlarmDeletion); + // + TheAlarmTest(TheSessionStatus==KErrCancel, __LINE__); + testOtherNotify(ETrue); + } + + +static void testSetAndCancelPast() +// +// Test that each type of alarm goes off if set in the past. +// Careful of DayAlarms - cant be sure if a time in today is past/before the current time. +// + { + TheAlarmTest.Test().Next(_L("Set alarms with local wall-clock time in past")); + testOtherNotify(EFalse); + // + TASShdAlarm alarm; + alarm.Message() = _L("Past"); + alarm.SoundName() = _L("none"); + alarm.NextDueTime().HomeTime(); + alarm.NextDueTime() += TTimeIntervalDays(-2); + // + testThisNotify(KRequestPending); + testOtherNotify(EFalse); + // + TInt r; + // + r = TheAlarmTest.Session().AlarmAdd(alarm); + TheAlarmTest(r == KErrNone, __LINE__); + TheAlarmTest(alarm.Id() != KNullAlarmId, __LINE__); + TAlarmId clockAlarmId = alarm.Id(); + // + testThisNotify(EAlarmChangeEventAlarmAddition); + testOtherNotify(ETrue); + TheAlarmTest.WaitForNotificationBufferToBeEmptied(TheCurrentRequest, TheAlarmId); + // + testThisNotify(KRequestPending); + testOtherNotify(EFalse); + testThisNotify(KRequestPending); + // + TheAlarmTest.Session().AlarmAddWithNotification(TheSessionStatus, alarm); + TheAlarmTest(alarm.Id() != KNullAlarmId, __LINE__); + testOtherNotify(ETrue); + testThisNotify(EAlarmChangeEventAlarmAddition); + TheAlarmTest(TheSessionStatus == KErrNone, __LINE__); + User::WaitForRequest(TheSessionStatus); + // + TheAlarmTest.Session().AlarmNotificationCancelAndDequeue(alarm.Id()); + testThisNotify(EAlarmChangeEventAlarmDeletion); + testOtherNotify(ETrue); + // + r = TheAlarmTest.Session().AlarmDelete(clockAlarmId); + TheAlarmTest(r == 0, __LINE__); + testThisNotify(EAlarmChangeEventAlarmDeletion); + testOtherNotify(ETrue); + } + + +static void testSetAndCancelFuture() +// +// Set alarms in future +// + { + TheAlarmTest.Test().Next(_L("Set alarms with local wall-clock time in future")); + TheAlarmTest(TheNotifyFlag==EFalse, __LINE__); + // + TASShdAlarm alarm; + alarm.Message() = _L("Future"); + alarm.NextDueTime().HomeTime(); + alarm.NextDueTime() += TTimeIntervalDays(1); + alarm.NextDueTime() += TTimeIntervalMinutes(30); + // + testOtherNotify(EFalse); + testThisNotify(KRequestPending); + // + TheAlarmTest.Session().AlarmAddWithNotification(TheSessionStatus, alarm); + TheAlarmTest(alarm.Id() != KNullAlarmId, __LINE__); + TheAlarmTest(TheSessionStatus == KRequestPending, __LINE__); + testOtherNotify(ETrue); + testThisNotify(EAlarmChangeEventAlarmAddition); + // + TAlarmId id; + TASShdAlarm retrievedAlarm; + TInt r; + // + r = TheAlarmTest.Session().GetNextDueAlarmId(id); + TheAlarmTest(r == KErrNone, __LINE__); + TheAlarmTest(id == alarm.Id(), __LINE__); + r = TheAlarmTest.Session().GetAlarmDetails(alarm.Id(), retrievedAlarm); + TheAlarmTest(r == KErrNone, __LINE__); + TheAlarmTest(retrievedAlarm.Id() == alarm.Id(), __LINE__); + // + TheAlarmTest.Session().AlarmNotificationCancelAndDequeue(alarm.Id()); + testOtherNotify(ETrue); + TheAlarmTest(TheSessionStatus==KErrCancel, __LINE__); + testThisNotify(EAlarmChangeEventAlarmDeletion); + // + r = TheAlarmTest.Session().GetNextDueAlarmId(id); + TheAlarmTest(r == KErrNone, __LINE__); + TheAlarmTest(r == KNullAlarmId, __LINE__); + // + alarm.Reset(); + alarm.Message() = _L("Clock"); + alarm.NextDueTime().HomeTime(); + alarm.NextDueTime() += TTimeIntervalDays(1); + alarm.NextDueTime() += TTimeIntervalMinutes(30); + r = TheAlarmTest.Session().AlarmAdd(alarm); + TheAlarmTest(r == KErrNone, __LINE__); + TheAlarmTest(alarm.Id() != KNullAlarmId, __LINE__); + testOtherNotify(ETrue); + testThisNotify(EAlarmChangeEventAlarmAddition); + // + r = TheAlarmTest.Session().GetNextDueAlarmId(id); + TheAlarmTest(r == KErrNone, __LINE__); + TheAlarmTest(id == alarm.Id(), __LINE__); + r = TheAlarmTest.Session().GetAlarmDetails(alarm.Id(), retrievedAlarm); + TheAlarmTest(r == KErrNone, __LINE__); + TheAlarmTest(retrievedAlarm.Id() = alarm.Id(), __LINE__); + // + r = TheAlarmTest.Session().SetAlarmStatus(alarm.Id(), EAlarmStatusDisabled); + TheAlarmTest(r == KErrNone, __LINE__); + testOtherNotify(ETrue); + testThisNotify(EAlarmChangeEventStatus); + // + r = TheAlarmTest.Session().AlarmDelete(alarm.Id()); + testOtherNotify(ETrue); + testThisNotify(EAlarmChangeEventAlarmDeletion); + } + + +static void testSoundChange() +// +// Test that sound notifications work +// + { + TheAlarmTest.Test().Next(_L("Sound changes")); + testOtherNotify(EFalse); + testThisNotify(KRequestPending); + TheAlarmTest.Session().CancelAlarmSilence(); + testThisNotify(KRequestPending); + testOtherNotify(EFalse); + TheAlarmTest.Session().SetAlarmSoundsSilentFor(60); + testThisNotify(EAlarmChangeEventSoundSilence); + testOtherNotify(ETrue); + TheAlarmTest.Session().CancelAlarmSilence(); + testThisNotify(EAlarmChangeEventSoundSilence); + testOtherNotify(ETrue); + TheAlarmTest.Session().SetAlarmSoundsSilentFor(60); + testThisNotify(EAlarmChangeEventSoundSilence); + testOtherNotify(ETrue); + TheAlarmTest.Session().SetAlarmSoundsSilentFor(0); + testThisNotify(EAlarmChangeEventSoundSilence); + testOtherNotify(ETrue); + TheAlarmTest.Session().SetAlarmSoundState(EAlarmGlobalSoundStateOn); + testThisNotify(KRequestPending); + testOtherNotify(EFalse); + TheAlarmTest.Session().SetAlarmSoundState(EAlarmGlobalSoundStateOff); + testThisNotify(EAlarmChangeEventGlobalSoundStateChanged); + testOtherNotify(ETrue); + TheAlarmTest.Session().SetAlarmSoundState(EAlarmGlobalSoundStateOn); + testThisNotify(EAlarmChangeEventGlobalSoundStateChanged); + testOtherNotify(ETrue); + } + + +static void testTimeChangeUtcL() + { + RPIMTestServer serv; + User::LeaveIfError(serv.Connect()); + + TheAlarmTest.Test().Next(_L("Time changes and alarms set with UTC time.")); + // + testOtherNotify(EFalse); + testThisNotify(KRequestPending); + // + testThisNotify(KRequestPending); + testOtherNotify(EFalse); + // + TTime home; + home.HomeTime(); + home+=TTimeIntervalMinutes(2); + + serv.SetHomeTime(home); + + User::After(KTimeToWait); + // + testThisNotify(EAlarmChangeEventSystemDateTimeChanged); + testOtherNotify(ETrue); + testOtherNotify(EFalse); + testThisNotify(KRequestPending); + // + TASShdAlarm alarm; + alarm.Message()=(_L("Time")); + TTime time; + time.UniversalTime(); + time += TTimeIntervalMinutes(30); + alarm.SetUtcNextDueTime(time); + TheAlarmTest.Session().AlarmAddWithNotification(TheSessionStatus, alarm); + TheAlarmTest(TheSessionStatus == KRequestPending, __LINE__); + // + testOtherNotify(ETrue); + testThisNotify(EAlarmChangeEventAlarmAddition); + TheAlarmTest.WaitForNotificationBufferToBeEmptied(TheCurrentRequest, TheAlarmId); + // + TInt r; + TAlarmId nextDueAlarmId; + // + r = TheAlarmTest.Session().GetNextDueAlarmId(nextDueAlarmId); + TheAlarmTest(r == KErrNone, __LINE__); + TheAlarmTest(nextDueAlarmId = alarm.Id(), __LINE__); + // + TASShdAlarm retrievedAlarm; + r = TheAlarmTest.Session().GetAlarmDetails(nextDueAlarmId, retrievedAlarm); + TheAlarmTest(r == KErrNone, __LINE__); + TheAlarmTest(retrievedAlarm.Message() == _L("Time"), __LINE__); + // + User::SetUTCTime(retrievedAlarm.NextDueTime()); + + serv.Close(); + + User::After(KTimeToWait); + // + testOtherNotify(ETrue); + testThisNotify(EAlarmChangeEventSystemDateTimeChanged); + TheAlarmTest(TheSessionStatus != KRequestPending, __LINE__); + User::WaitForRequest(TheSessionStatus); + // + r = TheAlarmTest.Session().GetNextDueAlarmId(nextDueAlarmId); + TheAlarmTest(r == KErrNone, __LINE__); + TheAlarmTest(nextDueAlarmId == KNullAlarmId, __LINE__); + // + TheAlarmTest.Session().AlarmNotificationCancelAndDequeue(alarm.Id()); + testThisNotify(EAlarmChangeEventAlarmDeletion); + testOtherNotify(ETrue); + // + time = alarm.NextDueTime(); + time += TTimeIntervalDays(1); + alarm.SetUtcNextDueTime(time); + alarm.Message()=(_L("DayTime")); + TheAlarmTest.Session().AlarmAddWithNotification(TheSessionStatus, alarm); + testThisNotify(EAlarmChangeEventAlarmAddition); + // + TheAlarmTest.Session().AlarmNotificationCancelAndDequeue(alarm.Id()); + testThisNotify(EAlarmChangeEventAlarmDeletion); + // + TheAlarmTest.Session().AlarmAddWithNotification(TheSessionStatus, alarm); + testThisNotify(EAlarmChangeEventAlarmAddition); + testOtherNotify(ETrue); + // + TheAlarmTest.Session().AlarmNotificationCancelAndDequeue(alarm.Id()); + testThisNotify(EAlarmChangeEventAlarmDeletion); + // + TheAlarmTest(TheSessionStatus==KErrCancel, __LINE__); + testOtherNotify(ETrue); + } + + +static void testSetAndCancelFutureUtc() + { + TheAlarmTest.Test().Next(_L("Set alarms with UTC time in future")); + TheAlarmTest(TheNotifyFlag==EFalse, __LINE__); + // + TASShdAlarm alarm; + alarm.Message()=(_L("Future")); + TTime time; + time.UniversalTime(); + time += TTimeIntervalDays(1); + time += TTimeIntervalMinutes(30); + alarm.SetUtcNextDueTime(time); + // + testOtherNotify(EFalse); + testThisNotify(KRequestPending); + // + TheAlarmTest.Session().AlarmAddWithNotification(TheSessionStatus, alarm); + TheAlarmTest(alarm.Id() != KNullAlarmId, __LINE__); + TheAlarmTest(TheSessionStatus == KRequestPending, __LINE__); + testOtherNotify(ETrue); + testThisNotify(EAlarmChangeEventAlarmAddition); + // + TAlarmId id; + TASShdAlarm retrievedAlarm; + TInt r; + // + r = TheAlarmTest.Session().GetNextDueAlarmId(id); + TheAlarmTest(r == KErrNone, __LINE__); + TheAlarmTest(id == alarm.Id(), __LINE__); + r = TheAlarmTest.Session().GetAlarmDetails(alarm.Id(), retrievedAlarm); + TheAlarmTest(r == KErrNone, __LINE__); + TheAlarmTest(retrievedAlarm.Id() == alarm.Id(), __LINE__); + // + TheAlarmTest.Session().AlarmNotificationCancelAndDequeue(alarm.Id()); + testOtherNotify(ETrue); + TheAlarmTest(TheSessionStatus==KErrCancel, __LINE__); + testThisNotify(EAlarmChangeEventAlarmDeletion); + // + r = TheAlarmTest.Session().GetNextDueAlarmId(id); + TheAlarmTest(r == KErrNone, __LINE__); + TheAlarmTest(r == KNullAlarmId, __LINE__); + // + alarm.Reset(); + alarm.Message()=(_L("Clock")); + time.UniversalTime(); + time += TTimeIntervalDays(1); + time += TTimeIntervalMinutes(30); + alarm.SetUtcNextDueTime(time); + r = TheAlarmTest.Session().AlarmAdd(alarm); + TheAlarmTest(r == KErrNone, __LINE__); + TheAlarmTest(alarm.Id() != KNullAlarmId, __LINE__); + testOtherNotify(ETrue); + testThisNotify(EAlarmChangeEventAlarmAddition); + // + r = TheAlarmTest.Session().GetNextDueAlarmId(id); + TheAlarmTest(r == KErrNone, __LINE__); + TheAlarmTest(id == alarm.Id(), __LINE__); + r = TheAlarmTest.Session().GetAlarmDetails(alarm.Id(), retrievedAlarm); + TheAlarmTest(r == KErrNone, __LINE__); + TheAlarmTest(retrievedAlarm.Id() == alarm.Id(), __LINE__); + // + r = TheAlarmTest.Session().SetAlarmStatus(alarm.Id(), EAlarmStatusDisabled); + TheAlarmTest(r == KErrNone, __LINE__); + testOtherNotify(ETrue); + testThisNotify(EAlarmChangeEventStatus); + // + r = TheAlarmTest.Session().AlarmDelete(alarm.Id()); + testOtherNotify(ETrue); + testThisNotify(EAlarmChangeEventAlarmDeletion); + } + +static void testSetAndCancelPastUtc() + { + TheAlarmTest.Test().Next(_L("Set alarms with UTC time in past")); + testOtherNotify(EFalse); + // + TASShdAlarm alarm; + alarm.Message()=(_L("Past")); + alarm.SoundName()=(_L("none")); + TTime time; + time.UniversalTime(); + time += TTimeIntervalDays(-2); + alarm.SetUtcNextDueTime(time); + // + testThisNotify(KRequestPending); + testOtherNotify(EFalse); + // + TInt r; + // + r = TheAlarmTest.Session().AlarmAdd(alarm); + TheAlarmTest(r == KErrNone, __LINE__); + TheAlarmTest(alarm.Id() != KNullAlarmId, __LINE__); + TAlarmId clockAlarmId = alarm.Id(); + // + testThisNotify(EAlarmChangeEventAlarmAddition); + testOtherNotify(ETrue); + TheAlarmTest.WaitForNotificationBufferToBeEmptied(TheCurrentRequest, TheAlarmId); + // + testThisNotify(KRequestPending); + testOtherNotify(EFalse); + testThisNotify(KRequestPending); + // + TheAlarmTest.Session().AlarmAddWithNotification(TheSessionStatus, alarm); + TheAlarmTest(alarm.Id() != KNullAlarmId, __LINE__); + testOtherNotify(ETrue); + testThisNotify(EAlarmChangeEventAlarmAddition); + TheAlarmTest(TheSessionStatus == KErrNone, __LINE__); + User::WaitForRequest(TheSessionStatus); + // + TheAlarmTest.Session().AlarmNotificationCancelAndDequeue(alarm.Id()); + testThisNotify(EAlarmChangeEventAlarmDeletion); + testOtherNotify(ETrue); + // + r = TheAlarmTest.Session().AlarmDelete(clockAlarmId); + TheAlarmTest(r == 0, __LINE__); + testThisNotify(EAlarmChangeEventAlarmDeletion); + testOtherNotify(ETrue); + } + + +static void doTestsL() + { + const TInt KGmtOffset = 3600; + _LIT(KTime, "20040730:050000.000000"); //Summertime + TInt err = User::SetUTCTimeAndOffset(TTime(KTime), KGmtOffset); + TheAlarmTest(err == KErrNone, __LINE__); + + TheAlarmTest.TestStartServers(); + __UHEAP_FAILNEXT(1); + TheAlarmTest(TheAlarmTest.Session().Connect() == KErrNone, __LINE__); + __UHEAP_RESET; + + CActiveScheduler* scheduler = new (ELeave) CActiveScheduler; + CleanupStack::PushL(scheduler); + CActiveScheduler::Install(scheduler); + + // + TheAlarmTest.TestClearStoreL(); + testSetupNotify(); + testSoundChange(); + + // Alarms set with local wall-clock times. + testTimeChangeL(); + testSetAndCancelFuture(); + testSetAndCancelPast(); + + // Alarms set with UTC times. + testTimeChangeUtcL(); + testSetAndCancelFutureUtc(); + testSetAndCancelPastUtc(); + + CleanupStack::PopAndDestroy(scheduler); + + TheAlarmTest.TestClearStoreL(); + } + +/** +@SYMTestCaseID PIM-TALARMNOTIFICATIONS-0001 +*/ +GLDEF_C TInt E32Main() +// +// Test the alarm server. +// + { + TInt ret = KErrNone; + TheAlarmTest.Title(); + TheAlarmTest.Start(_L("@SYMTestCaseID PIM-TALARMNOTIFICATIONS-0001 Session alarms")); + + __UHEAP_MARK; + CTrapCleanup* cleanup = CTrapCleanup::New(); + TRAPD(err, doTestsL()); + TheAlarmTest(err == KErrNone, __LINE__); + delete cleanup; + __UHEAP_MARKEND; + + TheAlarmTest.Session().Close(); + TRAP(ret,TheAlarmTest.EndL()); + TheAlarmTest.Test().Close(); + ASTstAlarmTest::Close(); + // + return ret; + }