--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/commonappservices/alarmserver/Test/TStartupExpire.cpp Tue Feb 02 10:12:00 2010 +0200
@@ -0,0 +1,662 @@
+// 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:
+//
+
+#include "ASTstAlarmTest.h"
+#include "testserver.h"
+
+#if defined(__WINS__)
+#include "consoleantestclient.h" //for RASAltClientSession
+// Globals
+static RANTestClient TheAlertSrv;
+#endif
+TLocale locale;
+//
+// Test setting an alarm, closing down the alarm server,
+// re-starting the server and seeing the alarm expire if the
+// re-start is within 59 seconds of the intended expiry
+//
+
+// Literal constants
+_LIT(KFormatTime,"%H:%T:%S. ");
+_LIT(KSeparator,": ");
+_LIT(KCarriageReturn,"\n\r");
+
+#if defined(_DEBUG) && defined(__WINS__)
+static TBool IsNotifying()
+ {
+ User::After(1000000);
+ return TheAlertSrv.IsNotifying();
+ }
+#endif
+
+static void closeServers()
+ {
+ const TInt r = TheAlarmTest.Session().Connect();
+ TheAlarmTest(r==KErrNone, __LINE__);
+ TheAlarmTest.Test().Printf(_L("Server shut down\r\n"));
+#if !defined(_DEBUG)
+ TheAlarmTest.Test().Printf(_L("THIS TEST IS A DEBUG TEST ONLY\r\n"));
+#else
+#ifdef __WINS__
+ TheAlarmTest.Test().Printf(_L("now closing server...\r\n"));
+ TheAlarmTest.Session().__DbgShutDownServer();
+ TheAlarmTest.Session().Close();
+#endif
+#endif
+ }
+
+static void logTimeL(const TDesC& aText,const TTime& aTime)
+ {
+ TBuf<128> timeTxt;
+ aTime.FormatL(timeTxt,KFormatTime);
+ TheAlarmTest.Test().Printf(aText);
+ TheAlarmTest.Test().Printf(KSeparator);
+ TheAlarmTest.Test().Printf(timeTxt);
+ TheAlarmTest.Test().Printf(KCarriageReturn);
+ }
+
+static void logTimeSameLineL(const TDesC& aText,const TTime& aTime)
+ {
+ TPoint cursor=TheAlarmTest.Test().Console()->CursorPos();
+ cursor.iX=0;
+ TheAlarmTest.Test().Console()->SetCursorPosAbs(cursor);
+ TheAlarmTest.Test().Console()->ClearToEndOfLine();
+ TBuf<128> timeTxt;
+ aTime.FormatL(timeTxt,KFormatTime);
+ TheAlarmTest.Test().Printf(aText);
+ TheAlarmTest.Test().Printf(KSeparator);
+ TheAlarmTest.Test().Printf(timeTxt);
+ }
+
+void JumpJustBeforeL(const TTime& aDueTime)
+ {
+ TTime jumpTo = aDueTime - TTimeIntervalSeconds(5);
+
+ RPIMTestServer serv;
+ User::LeaveIfError(serv.Connect());
+ serv.SetHomeTime(jumpTo);
+ // wait for time change notifications to occur.
+ User::After(10000);
+ // set again to ensure time value is correct when update occurs.
+ serv.SetHomeTime(jumpTo);
+ serv.Close();
+
+ logTimeSameLineL(_L("System time is set to: "), jumpTo);
+ TheAlarmTest.Test().Printf(KCarriageReturn);
+
+ jumpTo.HomeTime();
+ }
+
+static void tickUntilTimeL(const TTime& aStopTime)
+ {
+ TheAlarmTest.Test().Printf(_L("Entering tickUntilTime\n"));
+ RTimer tickTimer;
+ tickTimer.CreateLocal();
+ TTime now;
+ now.HomeTime();
+ TInt loop=0;
+ TheAlarmTest.Test().Printf(_L("Begin Loop\n"));
+ while (now<aStopTime)
+ {
+ TTime nowx(now.Int64());
+ TTime stopx(aStopTime.Int64());
+ TheAlarmTest.Test().Printf(_L("\nStart of Loop %d\n"),++loop);
+ TheAlarmTest.Test().Printf(_L("now<aStopTime %d\n"),now<aStopTime);
+ TheAlarmTest.Test().Printf(_L("now>aStopTime %d\n"),now>aStopTime);
+ TheAlarmTest.Test().Printf(_L("now<=aStopTime %d\n"),now<=aStopTime);
+ TheAlarmTest.Test().Printf(_L("now>=aStopTime %d\n"),now>=aStopTime);
+ logTimeL(_L("---Nowx at"),nowx);
+ logTimeL(_L("---Stopx at"),stopx);
+ TheAlarmTest.Test().Printf(_L("nowx<stopx %d\n"),nowx<stopx);
+
+ TheAlarmTest.Test().Printf(_L("\nNow1 TInt64 %d\n"),now.Int64());
+ TheAlarmTest.Test().Printf(_L("Stop1 TInt64 %d\n\n"),aStopTime.Int64());
+ logTimeSameLineL(_L("Time is"),now);
+ //TheAlarmTest.Test().Printf(_L("Now2 TInt64 %d\n"),now.Int64());
+ //TheAlarmTest.Test().Printf(_L("Stop2 TInt64 %d\n"),aStopTime.Int64());
+ TRequestStatus status;
+ tickTimer.After(status,1000000);
+ User::WaitForRequest(status);
+ //TheAlarmTest.Test().Printf(_L("Now3 TInt64 %d\n"),now.Int64());
+ //TheAlarmTest.Test().Printf(_L("Stop3 TInt64 %d\n"),aStopTime.Int64());
+ now.HomeTime();
+ //TheAlarmTest.Test().Printf(_L("Now4 TInt64 %d\n"),now.Int64());
+ //TheAlarmTest.Test().Printf(_L("Stop4 TInt64 %d\n"),aStopTime.Int64());
+ logTimeL(_L("\nDebug now :"),now);
+ logTimeL(_L("Debug aStopTime:"),aStopTime);
+ TheAlarmTest.Test().Printf(_L("Now5 TInt64 %d\n"),now.Int64());
+ TheAlarmTest.Test().Printf(_L("Stop5 TInt64 %d\n"),aStopTime.Int64());
+
+ nowx=now;
+ stopx=aStopTime;
+
+ TheAlarmTest.Test().Printf(_L("\nnow<aStopTime %d\n"),now<aStopTime);
+ TheAlarmTest.Test().Printf(_L("now>aStopTime %d\n"),now>aStopTime);
+ TheAlarmTest.Test().Printf(_L("now<=aStopTime %d\n"),now<=aStopTime);
+ TheAlarmTest.Test().Printf(_L("now>=aStopTime %d\n"),now>=aStopTime);
+ TheAlarmTest.Test().Printf(_L("Nowx TInt64 %d\n"),nowx.Int64());
+ TheAlarmTest.Test().Printf(_L("Stopx TInt64 %d\n"),stopx.Int64());
+ TheAlarmTest.Test().Printf(_L("nowx<stopx %d\n"),nowx<stopx);
+ TheAlarmTest.Test().Printf(_L("End of Loop %d\n\n"),loop);
+ }
+ TheAlarmTest.Test().Printf(_L("leaving tickUntilTime\n"));
+ }
+
+static void finishTestL(TTime& aExpireTime, const TBool aStartServerWithinMinute)
+ {
+ closeServers();
+ //
+ if (aStartServerWithinMinute)
+ aExpireTime += TTimeIntervalSeconds(5);
+ else
+ {
+ aExpireTime += TTimeIntervalSeconds(60);
+ JumpJustBeforeL(aExpireTime);
+ }
+ //
+ logTimeL(_L("Starting servers at"),aExpireTime);
+ tickUntilTimeL(aExpireTime);
+ //
+ TheAlarmTest.TestStartServers();
+ //
+ if (aStartServerWithinMinute)
+ {
+ TheAlarmTest.Test().Printf(_L("You SHOULD see an Alert!\n\r"));
+#if defined(_DEBUG) && defined(__WINS__)
+ TheAlarmTest(IsNotifying());
+#endif
+ }
+ else
+ {
+ TheAlarmTest.Test().Printf(_L("You SHOULD NOT see an Alert!\n\r"));
+#if defined(_DEBUG) && defined(__WINS__)
+ TheAlarmTest(!IsNotifying());
+#endif
+ }
+ //
+
+ TheAlarmTest.TestClearStoreL();
+ closeServers();
+ }
+
+
+static void startTestUtcL(TASShdAlarm& aAlarm, TAlarmMessage& aMessage, TInt aTestNumber)
+ {
+ TheAlarmTest.Test().Console()->ClearScreen();
+ TheAlarmTest.Test().Printf(_L("Starting test [%2d/14]\n\r"), aTestNumber);
+
+ TheAlarmTest.TestStartServers();
+ //
+ TInt r=TheAlarmTest.Session().Connect();
+ TheAlarmTest(r==KErrNone, __LINE__);
+ TheAlarmTest.TestClearStoreL();
+ //
+ TTime expireTime;
+ expireTime.UniversalTime();
+ TDateTime expireDateTime=expireTime.DateTime();
+ logTimeL(_L("UTC Time now is"), expireTime);
+ //
+ expireTime.RoundUpToNextMinute();
+ if (expireDateTime.Second() > 40)
+ expireTime += TTimeIntervalMinutes(1);
+ //
+ expireTime.FormatL(aMessage, _L("expire time %H:%T:%S.%C:"));
+ // Note, JumpJustBefore takes a Floating Time and not a Universal Time.
+ JumpJustBeforeL(expireTime + User::UTCOffset());
+ aAlarm.SetUtcNextDueTime(expireTime);
+ }
+
+static void startTestL(TTime& aExpireTime, TAlarmMessage& aMessage, TInt aTestNumber)
+ {
+ TheAlarmTest.Test().Console()->ClearScreen();
+ TheAlarmTest.Test().Printf(_L("Starting test [%2d/14]\n\r"), aTestNumber);
+
+ TheAlarmTest.TestStartServers();
+ //
+ TInt r=TheAlarmTest.Session().Connect();
+ TheAlarmTest(r==KErrNone, __LINE__);
+ TheAlarmTest.TestClearStoreL();
+ //
+ aExpireTime.HomeTime();
+ TDateTime expireDateTime=aExpireTime.DateTime();
+ logTimeL(_L("Time now is"), aExpireTime);
+ //
+ aExpireTime.RoundUpToNextMinute();
+ if (expireDateTime.Second() > 40)
+ aExpireTime += TTimeIntervalMinutes(1);
+ //
+ aExpireTime.FormatL(aMessage, _L("expire time %H:%T:%S.%C:"));
+
+ JumpJustBeforeL(aExpireTime);
+ }
+
+static void clockAlarmTestL(TAlarmRepeatDefinition aRepeatType, TBool aStartServerWithinMinute, TInt aNumber)
+// aRepeatType - standard repeat choice, allows testing of different style clock alarms
+// aStartServerWithinMinute - whether to start the servers within the minute after expiry of the TheAlarmTest.Test() alarm
+ {
+ TASShdAlarm alarm;
+ startTestL(alarm.NextDueTime(), alarm.Message(), aNumber);
+ alarm.RepeatDefinition() = aRepeatType;
+ TheAlarmTest.Test().Printf(_L("Setting clock alarm, type:%d\n\r"), aRepeatType);
+ TheAlarmTest(TheAlarmTest.Session().AlarmAdd(alarm) == KErrNone, __LINE__);
+
+ logTimeL(_L("Set clock alarm to expire at"),alarm.NextDueTime());
+ finishTestL(alarm.NextDueTime(),aStartServerWithinMinute);
+ }
+
+static void agendaAlarmTestL(TBool aStartServerWithinMinute, TInt aNumber)
+// aSessionType - standard session choice, allows testing of different style agenda alarms
+// aStartServerWithinMinute - whether to start the servers within the minute after expiry of the TheAlarmTest.Test() alarm
+ {
+ TASShdAlarm alarm;
+ startTestL(alarm.NextDueTime(), alarm.Message(), aNumber);
+ TheAlarmTest.Test().Printf(_L("Setting agenda alarm\n\r"));
+ TheAlarmTest(TheAlarmTest.Session().AlarmAdd(alarm) == KErrNone, __LINE__);
+
+ logTimeL(_L("Set agenda alarm to expire at"),alarm.NextDueTime());
+
+ finishTestL(alarm.NextDueTime(),aStartServerWithinMinute);
+ }
+
+static void orphanAlarmTestL(TBool aStartServerWithinMinute, TInt aNumber)
+// aSessionType - standard session choice, allows testing of different style orphan alarms
+// aStartServerWithinMinute - whether to start the servers within the minute after expiry of the TheAlarmTest.Test() alarm
+ {
+ TASShdAlarm alarm;
+ alarm.Characteristics().Set(EAlarmCharacteristicsSessionSpecific);
+ startTestL(alarm.NextDueTime(), alarm.Message(), aNumber);
+
+ TheAlarmTest.Test().Printf(_L("Setting session alarm\n\r"));
+
+ // Set the session alarm
+ TRequestStatus status;
+ TheAlarmTest.Session().AlarmAddWithNotification(status, alarm);
+
+ // Now orphan it
+ TheAlarmTest.Test().Printf(_L("Session alarm set, now orphaning\n\r"));
+ TheAlarmTest.Session().SetAlarmCharacteristics(alarm.Id(), 0); // clear session specific flag
+
+ // Get the abort
+ User::WaitForRequest(status);
+ TheAlarmTest(status.Int() == KErrCancel, __LINE__);
+
+ logTimeL(_L("Created orphan alarm to expire at"),alarm.NextDueTime());
+
+ finishTestL(alarm.NextDueTime(),aStartServerWithinMinute);
+ }
+
+void serverRestartWithNotifyingAlarmTestL()
+ {
+#if defined(_DEBUG) && defined(__WINS__)
+ TheAlarmTest.TestStartServers();
+ TheAlarmTest.TestClearStoreL();
+ TheAlarmTest(TheAlertSrv.Connect() == KErrNone);
+ // Add an alarm due immediately
+ TASShdAlarm alarm;
+ TTime time;
+ time.HomeTime();
+ alarm.NextDueTime() = time;
+ TheAlarmTest(TheAlarmTest.Session().AlarmAdd(alarm) == KErrNone);
+ TAlarmId id = alarm.Id();
+ // Check that the alarm is notifying
+ TheAlarmTest(IsNotifying());
+ // Shut down and restart the server
+ closeServers();
+ TheAlarmTest.TestStartServers();
+ TheAlarmTest(TheAlarmTest.Session().Connect() == KErrNone);
+ // Check that the alarm is still notifying
+ TheAlarmTest.Test().Printf(_L("Check alarm still notifying after shutdown and restart\n"));
+ TheAlarmTest(IsNotifying());
+ // Snooze the alarm, and restart the server
+ TTime timeToSnoozeUntil = time + TTimeIntervalMinutes(1);
+ TheAlarmTest(TheAlarmTest.Session().__DbgSnoozeAlarm(id, timeToSnoozeUntil - User::UTCOffset()) == KErrNone);
+ TheAlarmTest(!IsNotifying());
+ closeServers();
+ TheAlarmTest.TestStartServers();
+ TheAlarmTest(TheAlarmTest.Session().Connect() == KErrNone);
+ // Check that the alarm is still snoozed
+ TheAlarmTest(!IsNotifying());
+ // Check the alarm notifies again after the snooze period
+ User::At(timeToSnoozeUntil);
+ TheAlarmTest.Test().Printf(_L("Check snoozed alarm notifies after shutdown and restart\n"));
+ TheAlarmTest(IsNotifying());
+ // Snooze the alarm again and shut down the server -
+ // Restart the server 3 months in the future
+ timeToSnoozeUntil.HomeTime();
+ timeToSnoozeUntil += TTimeIntervalMinutes(1);
+ TheAlarmTest(TheAlarmTest.Session().__DbgSnoozeAlarm(id, timeToSnoozeUntil - User::UTCOffset()) == KErrNone);
+ TheAlarmTest(!IsNotifying());
+ closeServers();
+
+ RPIMTestServer serv;
+ User::LeaveIfError(serv.Connect());
+ serv.SetHomeTime(timeToSnoozeUntil + TTimeIntervalMonths(3));
+ serv.Close();
+
+ TheAlarmTest.TestStartServers();
+ TheAlarmTest(TheAlarmTest.Session().Connect() == KErrNone);
+ // Check the alarm is notifying
+ TheAlarmTest.Test().Printf(_L("Check snoozed alarm notifies again after shutdown and restart\n"));
+ TheAlarmTest(IsNotifying());
+
+ TheAlertSrv.Close();
+#else
+ TheAlarmTest.Test().Printf(_L("THIS TEST IS A DEBUG, WINS TEST ONLY\r\n"));
+#endif
+ }
+
+// UTC tests
+
+
+static void clockUtcAlarmTestL(TAlarmRepeatDefinition aRepeatType, TBool aStartServerWithinMinute, TInt aNumber)
+// aRepeatType - standard repeat choice, allows testing of different style clock alarms
+// aStartServerWithinMinute - whether to start the servers within the minute after expiry of the TheAlarmTest.Test() alarm
+ {
+ TASShdAlarm alarm;
+ TBuf<KMaxAlarmMessageLength> message = alarm.Message();
+ startTestUtcL(alarm, message, aNumber);
+ alarm.RepeatDefinition()=aRepeatType;
+ TheAlarmTest.Test().Printf(_L("Setting clock alarm, type:%d\n\r"), aRepeatType);
+ TheAlarmTest(TheAlarmTest.Session().AlarmAdd(alarm) == KErrNone, __LINE__);
+
+ TTime time = alarm.NextDueTime() + User::UTCOffset();
+ logTimeL(_L("Set clock alarm to expire at"), time);
+
+ finishTestL(time, aStartServerWithinMinute);
+ }
+
+static void agendaUtcAlarmTestL(TBool aStartServerWithinMinute, TInt aNumber)
+// aSessionType - standard session choice, allows testing of different style agenda alarms
+// aStartServerWithinMinute - whether to start the servers within the minute after expiry of the TheAlarmTest.Test() alarm
+ {
+ TASShdAlarm alarm;
+ TBuf<KMaxAlarmMessageLength> message = alarm.Message();
+ startTestUtcL(alarm, message, aNumber);
+ TheAlarmTest.Test().Printf(_L("Setting agenda alarm\n\r"));
+ TheAlarmTest(TheAlarmTest.Session().AlarmAdd(alarm) == KErrNone, __LINE__);
+
+ TTime time = alarm.NextDueTime() + User::UTCOffset();
+ logTimeL(_L("Set agenda alarm to expire at"), time);
+
+ finishTestL(time, aStartServerWithinMinute);
+ }
+
+static void orphanUtcAlarmTestL(TBool aStartServerWithinMinute, TInt aNumber)
+// aSessionType - standard session choice, allows testing of different style orphan alarms
+// aStartServerWithinMinute - whether to start the servers within the minute after expiry of the TheAlarmTest.Test() alarm
+ {
+ TASShdAlarm alarm;
+ alarm.Characteristics().Set(EAlarmCharacteristicsSessionSpecific);
+ TBuf<KMaxAlarmMessageLength> message = alarm.Message();
+ startTestUtcL(alarm, message, aNumber);
+
+ TheAlarmTest.Test().Printf(_L("Setting session alarm\n\r"));
+
+ // Set the session alarm
+ TRequestStatus status;
+ TheAlarmTest.Session().AlarmAddWithNotification(status, alarm);
+
+ // Now orphan it
+ TheAlarmTest.Test().Printf(_L("Session alarm set, now orphaning\n\r"));
+ TheAlarmTest.Session().SetAlarmCharacteristics(alarm.Id(), 0); // clear session specific flag
+
+ // Get the abort
+ User::WaitForRequest(status);
+ TheAlarmTest(status.Int() == KErrCancel, __LINE__);
+
+ TTime time = alarm.NextDueTime() + User::UTCOffset();
+ logTimeL(_L("Created orphan alarm to expire at"), time);
+
+ finishTestL(time, aStartServerWithinMinute);
+ }
+
+void serverRestartWithNotifyingUtcAlarmTestL()
+ {
+#if defined(_DEBUG) && defined(__WINS__)
+ TheAlarmTest.TestStartServers();
+ TheAlarmTest.TestClearStoreL();
+ TheAlarmTest(TheAlertSrv.Connect() == KErrNone);
+ // Add an alarm due immediately
+ TASShdAlarm alarm;
+ TTime time;
+ time.UniversalTime();
+ alarm.SetUtcNextDueTime(time);
+ TheAlarmTest(TheAlarmTest.Session().AlarmAdd(alarm) == KErrNone);
+ TAlarmId id = alarm.Id();
+ // Check that the alarm is notifying
+ TheAlarmTest(IsNotifying());
+ // Shut down and restart the server
+ closeServers();
+ TheAlarmTest.TestStartServers();
+ TheAlarmTest(TheAlarmTest.Session().Connect() == KErrNone);
+ // Check that the alarm is still notifying
+ TheAlarmTest.Test().Printf(_L("Check alarm still notifying after shutdown and restart\n"));
+ TheAlarmTest(IsNotifying());
+ // Snooze the alarm, and restart the server
+ TTime timeToSnoozeUntil = time + TTimeIntervalMinutes(1);
+ TheAlarmTest(TheAlarmTest.Session().__DbgSnoozeAlarm(id, timeToSnoozeUntil) == KErrNone);
+ TheAlarmTest(!IsNotifying());
+ closeServers();
+ TheAlarmTest.TestStartServers();
+ TheAlarmTest(TheAlarmTest.Session().Connect() == KErrNone);
+ // Check that the alarm is still snoozed
+ TheAlarmTest(!IsNotifying());
+ // Check the alarm notifies again after the snooze period
+ // Note, User::At takes a Floating Time (wall-time) and not a Universal Time
+ User::At(timeToSnoozeUntil+User::UTCOffset());
+ TheAlarmTest.Test().Printf(_L("Check snoozed alarm notifies after shutdown and restart\n"));
+ TheAlarmTest(IsNotifying());
+ // Snooze the alarm again and shut down the server -
+ // Restart the server 3 months in the future
+ timeToSnoozeUntil.UniversalTime();
+ timeToSnoozeUntil += TTimeIntervalMinutes(1);
+ TheAlarmTest(TheAlarmTest.Session().__DbgSnoozeAlarm(id, timeToSnoozeUntil) == KErrNone);
+ TheAlarmTest(!IsNotifying());
+ closeServers();
+
+ User::SetUTCTime(timeToSnoozeUntil + TTimeIntervalMonths(3));
+
+ TheAlarmTest.TestStartServers();
+ TheAlarmTest(TheAlarmTest.Session().Connect() == KErrNone);
+ // Check the alarm is notifying
+ TheAlarmTest.Test().Printf(_L("Check snoozed alarm notifies again after shutdown and restart\n"));
+ TheAlarmTest(IsNotifying());
+
+ TheAlertSrv.Close();
+#else
+ TheAlarmTest.Test().Printf(_L("THIS TEST IS A DEBUG, WINS TEST ONLY\r\n"));
+#endif
+ }
+
+
+void serverRestartWithNotifiedUtcAlarmTestL()
+ {
+#if defined(_DEBUG) && defined(__WINS__)
+ TheAlarmTest.Next(_L("Acknowledge repeating alarm after restart in less then 1 minute) does not notify"));
+
+ TheAlarmTest.TestStartServers();
+ TheAlarmTest.TestClearStoreL();
+ TheAlarmTest(TheAlertSrv.Connect() == KErrNone);
+
+ // Add an alarm due in the future
+ TheAlarmTest.Test().Printf(_L("Add a repeating alarm to expire in the future\n"));
+ TASShdAlarm alarm;
+ alarm.RepeatDefinition() = EAlarmRepeatDefintionRepeatDaily;
+
+ TTime alarmTime;
+ alarmTime.UniversalTime();
+ alarmTime.RoundUpToNextMinute();
+ alarmTime += TTimeIntervalMinutes(1);
+
+ alarm.SetUtcNextDueTime(alarmTime);
+
+ TheAlarmTest(TheAlarmTest.Session().AlarmAdd(alarm) == KErrNone);
+ TAlarmId id = alarm.Id();
+
+ // wait until that time has occurred before checking
+ TheAlarmTest.Test().Printf(_L("Wait for alarm time to expire\n"));
+
+ User::At(alarmTime + User::UTCOffset());
+
+ TheAlarmTest.Test().Printf(_L("Check that alarm is notifying\n"));
+ TheAlarmTest(IsNotifying());
+ TheAlarmTest.Test().Printf(_L("Acknowledge alarm\n"));
+ TheAlertSrv.AcknowledgeAlarm();
+ TheAlarmTest.Test().Printf(_L("Check that alarm is cleared\n"));
+ TheAlarmTest(!IsNotifying());
+
+ TheAlarmTest.Test().Printf(_L("Shutdown servers\n"));
+ // Shut down and restart the server
+ TheAlertSrv.Close();
+ closeServers();
+
+ TheAlarmTest.TestStartServers();
+ TheAlarmTest(TheAlarmTest.Session().Connect() == KErrNone);
+ TheAlarmTest(TheAlertSrv.Connect() == KErrNone);
+
+ TheAlarmTest.Test().Printf(_L("Servers restarted\n"));
+
+ // Make sure that server was restarted in the same minute as the alarm
+ TTime currentTime;
+ currentTime.UniversalTime();
+ TTimeIntervalHours hours;
+ TTimeIntervalMinutes minutes;
+
+ TheAlarmTest.Test().Printf(_L("Check servers restarted in 1 minute\n"));
+ TheAlarmTest(currentTime.HoursFrom(alarmTime, hours) == KErrNone);
+ TheAlarmTest(currentTime.MinutesFrom(alarmTime, minutes) == KErrNone);
+ TheAlarmTest((hours == TTimeIntervalHours(0)) && (minutes == TTimeIntervalMinutes(0)));
+
+
+ // Check that the alarm is not notifying
+ TheAlarmTest.Test().Printf(_L("Check alarm still not notifying after shutdown and restart\n"));
+ TheAlarmTest(!IsNotifying());
+
+ closeServers();
+ TheAlertSrv.Close();
+#else
+ TheAlarmTest.Test().Printf(_L("THIS TEST IS A DEBUG, WINS TEST ONLY\r\n"));
+#endif
+ }
+
+static void doTestsL()
+ {
+#if defined(_DEBUG) && defined(__WINS__)
+ TheAlarmTest(TheAlertSrv.Connect() == KErrNone);
+#endif
+
+#if defined(_DEBUG)
+// The alarm should only be allowed to display notification in WINS builds.
+#if defined(__WINSCW__)
+ TheAlarmTest.Session().__DbgPreventUserNotify(EFalse);
+#else
+ TheAlarmTest.Session().__DbgPreventUserNotify(ETrue);
+#endif
+#endif
+
+ // Set all days to workdays.
+ TLocale previous;
+ locale.SetWorkDays(127);
+ locale.Set();
+ orphanAlarmTestL(ETrue, 1);
+ orphanAlarmTestL(EFalse, 2);
+
+ agendaAlarmTestL(ETrue, 3);
+ agendaAlarmTestL(EFalse, 4);
+
+
+ clockAlarmTestL(EAlarmRepeatDefintionRepeatWorkday,ETrue, 5);
+ clockAlarmTestL(EAlarmRepeatDefintionRepeatWorkday,EFalse, 6);
+
+ clockAlarmTestL(EAlarmRepeatDefintionRepeatWeekly,ETrue, 7);
+ clockAlarmTestL(EAlarmRepeatDefintionRepeatWeekly,EFalse, 8);
+
+ clockAlarmTestL(EAlarmRepeatDefintionRepeatDaily,ETrue, 9);
+ clockAlarmTestL(EAlarmRepeatDefintionRepeatDaily,EFalse, 10);
+
+ clockAlarmTestL(EAlarmRepeatDefintionRepeatNext24Hours,ETrue, 11);
+ clockAlarmTestL(EAlarmRepeatDefintionRepeatNext24Hours,EFalse, 12);
+
+ clockAlarmTestL(EAlarmRepeatDefintionRepeatOnce,ETrue, 13);
+ clockAlarmTestL(EAlarmRepeatDefintionRepeatOnce,EFalse, 14);
+
+#if defined(_DEBUG) && defined(__WINS__)
+ TheAlertSrv.Close();
+#endif
+
+ serverRestartWithNotifyingAlarmTestL();
+
+#if defined(_DEBUG) && defined(__WINS__)
+ TheAlarmTest(TheAlertSrv.Connect() == KErrNone);
+#endif
+
+ orphanUtcAlarmTestL(ETrue, 1);
+ orphanUtcAlarmTestL(EFalse, 2);
+
+ agendaUtcAlarmTestL(ETrue, 3);
+ agendaUtcAlarmTestL(EFalse, 4);
+
+ clockUtcAlarmTestL(EAlarmRepeatDefintionRepeatWorkday,ETrue, 5);
+ clockUtcAlarmTestL(EAlarmRepeatDefintionRepeatWorkday,EFalse, 6);
+
+ clockUtcAlarmTestL(EAlarmRepeatDefintionRepeatWeekly,ETrue, 7);
+ clockUtcAlarmTestL(EAlarmRepeatDefintionRepeatWeekly,EFalse, 8);
+
+ clockUtcAlarmTestL(EAlarmRepeatDefintionRepeatDaily,ETrue, 9);
+ clockUtcAlarmTestL(EAlarmRepeatDefintionRepeatDaily,EFalse, 10);
+
+ clockUtcAlarmTestL(EAlarmRepeatDefintionRepeatNext24Hours,ETrue, 11);
+ clockUtcAlarmTestL(EAlarmRepeatDefintionRepeatNext24Hours,EFalse, 12);
+
+ clockUtcAlarmTestL(EAlarmRepeatDefintionRepeatOnce,ETrue, 13);
+ clockUtcAlarmTestL(EAlarmRepeatDefintionRepeatOnce,EFalse, 14);
+
+#if defined(_DEBUG) && defined(__WINS__)
+ TheAlertSrv.Close();
+#endif
+
+ serverRestartWithNotifyingUtcAlarmTestL();
+ serverRestartWithNotifiedUtcAlarmTestL();
+
+ // Reset the previous locale.
+ previous.Set();
+ }
+
+/**
+@SYMTestCaseID PIM-TSTARTUPEXPIRE-0001
+*/
+GLDEF_C TInt E32Main()
+ {
+ __UHEAP_MARK;
+ TInt ret = KErrNone;
+ CTrapCleanup* cleanup = CTrapCleanup::New();
+ if (!cleanup)
+ return KErrNoMemory;
+
+ TheAlarmTest.Title();
+ TheAlarmTest.Start(_L("@SYMTestCaseID PIM-TSTARTUPEXPIRE-0001"));
+ TheAlarmTest.TestStartServers();
+ //
+ TRAPD(error, doTestsL());
+ TheAlarmTest(error == KErrNone, __LINE__);
+ //
+ TRAP(ret,TheAlarmTest.EndL());
+ TheAlarmTest.Test().Close();
+ ASTstAlarmTest::Close();
+
+ delete cleanup;
+ __UHEAP_MARKEND;
+ return ret;
+ }