commonappservices/alarmserver/Test/TPseudoClockAlarms.cpp
changeset 0 2e3d3ce01487
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/commonappservices/alarmserver/Test/TPseudoClockAlarms.cpp	Tue Feb 02 10:12:00 2010 +0200
@@ -0,0 +1,622 @@
+// 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"
+
+// Constants
+const TInt KMaxClockAlarms = 8;
+
+
+static void testSetClockAlarms()
+//
+//	Set all clock alarms
+//
+	{
+	TheAlarmTest.Test().Next(_L("Set Clock Alarms"));
+	TInt n = TheAlarmTest.Session().NumberOfAlarmsActiveInQueue();
+	TheAlarmTest(n==0, __LINE__);
+	//
+	TASShdAlarm alarm;
+	alarm.NextDueTime().HomeTime();
+	alarm.NextDueTime() += TTimeIntervalDays(3);
+	alarm.RepeatDefinition() = EAlarmRepeatDefintionRepeatOnce;
+	//
+	for (TInt i=0; i<KMaxClockAlarms; i++)
+		{
+		alarm.Message().Num(i);
+		TInt r = TheAlarmTest.Session().AlarmAdd(alarm);
+		TheAlarmTest(r == KErrNone, __LINE__);
+		}
+	n = TheAlarmTest.Session().NumberOfAlarmsActiveInQueue();
+	TheAlarmTest(n==KMaxClockAlarms, __LINE__);
+	}
+
+static TAlarmId SetAlarmLastMonday(TAlarmRepeatDefinition aRepeat, TTimeIntervalMinutes aMinuteOffset = 0)
+//
+//	Set clock alarm 0 for monday
+//
+	{
+	TTime time;
+	time.HomeTime();
+	time+=TTimeIntervalDays(-time.DayNoInWeek());
+	time+=aMinuteOffset;
+	//
+	TASShdAlarm alarm;
+	alarm.NextDueTime() = time;
+	alarm.Message() = _L("test alarm repeat");
+	alarm.RepeatDefinition() = aRepeat;
+	//
+	TInt r = TheAlarmTest.Session().AlarmAdd(alarm);
+	TheAlarmTest(r == KErrNone, __LINE__);
+	return alarm.Id();
+	}
+
+TAlarmId SetAlarmNextMonday(TAlarmRepeatDefinition aRepeat)
+//
+//	Set clock alarm 0 for monday
+//
+	{
+	TTime time;
+	time.HomeTime();
+	time+=TTimeIntervalDays(7-time.DayNoInWeek());
+	//
+	TASShdAlarm alarm;
+	alarm.NextDueTime() = time;
+	alarm.Message() = _L("test alarm repeat");
+	alarm.RepeatDefinition() = aRepeat;
+	//
+	TInt r = TheAlarmTest.Session().AlarmAdd(alarm);
+	TheAlarmTest(r == KErrNone, __LINE__);
+	return alarm.Id();
+	}
+
+
+static void testSetClockUtcAlarms()
+//
+//	Set all clock UTC alarms
+//
+	{
+	TheAlarmTest.Test().Next(_L("Set Clock Alarms"));
+	TInt n = TheAlarmTest.Session().NumberOfAlarmsActiveInQueue();
+	TheAlarmTest(n==0, __LINE__);
+	//
+	TASShdAlarm alarm;
+	TTime time;
+	time.UniversalTime();
+	time += TTimeIntervalDays(3);
+	alarm.SetUtcNextDueTime(time);
+	alarm.RepeatDefinition()=EAlarmRepeatDefintionRepeatOnce;
+	//
+	for (TInt i=0; i<KMaxClockAlarms; i++)
+		{
+		TAlarmMessage m = alarm.Message();
+		m.Num(i);
+		alarm.Message()=m;
+		TInt r = TheAlarmTest.Session().AlarmAdd(alarm);
+		TheAlarmTest(r == KErrNone, __LINE__);
+		}
+	n = TheAlarmTest.Session().NumberOfAlarmsActiveInQueue();
+	TheAlarmTest(n==KMaxClockAlarms, __LINE__);
+	}
+
+static TAlarmId SetUtcAlarmLastMonday(TAlarmRepeatDefinition aRepeat, TTimeIntervalMinutes aMinuteOffset = 0)
+//
+//	Set clock UTC alarm 0 for monday
+//
+	{
+	TTime time;
+	time.UniversalTime();
+	time+=TTimeIntervalDays(-time.DayNoInWeek());
+	time+=aMinuteOffset;
+	//
+	TASShdAlarm alarm;
+	alarm.SetUtcNextDueTime(time);
+	alarm.Message()=(_L("test alarm repeat"));
+	alarm.RepeatDefinition()=aRepeat;
+	//
+	TInt r = TheAlarmTest.Session().AlarmAdd(alarm);
+	TheAlarmTest(r == KErrNone, __LINE__);
+	return alarm.Id();
+	}
+
+TAlarmId SetUtcAlarmNextMonday(TAlarmRepeatDefinition aRepeat)
+//
+//	Set clock UTC alarm 0 for monday
+//
+	{
+	TTime time;
+	time.UniversalTime();
+	time+=TTimeIntervalDays(7-time.DayNoInWeek());
+	//
+	TASShdAlarm alarm;
+	alarm.SetUtcNextDueTime(time);
+	alarm.Message()=(_L("test alarm repeat"));
+	alarm.RepeatDefinition()=aRepeat;
+	//
+	TInt r = TheAlarmTest.Session().AlarmAdd(alarm);
+	TheAlarmTest(r == KErrNone, __LINE__);
+	return alarm.Id();
+	}
+
+
+#ifdef _DEBUG
+void ChangeDayToTuesday()
+//
+//	Change the system time/date to Tuesday
+//
+	{
+	TTime time;
+	time.UniversalTime();
+	time+=TTimeIntervalDays(7-time.DayNoInWeek()+ETuesday);
+
+    User::SetUTCTime(time);
+	User::After(KTimeToWait);
+	}
+#endif
+
+
+static void testNextAlarm(TDay aDay, TInt aLineNum, TInt aAlarmNumber=1)
+//
+//	Test the day of the next alarm
+//
+	{
+	// Wait for a fraction of a second before testing. The alarm
+	// server takes some time to update the states of alarm objects
+	// and if we request information from the server too quickly after
+	// adding an alarm to its queue, it won't have had time to update
+	// the state of the objects accordingly.
+	User::After(KTimeToWait);
+	//
+	TInt n = TheAlarmTest.Session().NumberOfAlarmsActiveInQueue();
+	if (n != aAlarmNumber)
+		{
+		TheAlarmTest.Test().Printf(_L("testNextAlarm: aDay %i, aAlarmNumber %i, called from line %u"),
+			aDay, aAlarmNumber, aLineNum);
+		TheAlarmTest(EFalse, __LINE__);
+		}
+	//
+	if	(aAlarmNumber)
+		{
+		TInt r;
+		TAlarmId nextDueAlarmId;
+		//
+		r = TheAlarmTest.Session().GetNextDueAlarmId(nextDueAlarmId);
+		if (r == KErrNotFound)
+			{
+			TheAlarmTest.Test().Printf(_L("testNextAlarm: aDay %i, aAlarmNumber %i, called from line %u"),
+				aDay, aAlarmNumber, aLineNum);
+			TheAlarmTest(EFalse, __LINE__);
+			}
+		//
+		TASShdAlarm alarm;
+		r = TheAlarmTest.Session().GetAlarmDetails(nextDueAlarmId, alarm);
+		if (r != KErrNone)
+			{
+			TheAlarmTest.Test().Printf(_L("testNextAlarm: aDay %i, aAlarmNumber %i, called from line %u"),
+				aDay, aAlarmNumber, aLineNum);
+			TheAlarmTest(EFalse, __LINE__);
+			}
+		//
+		const TDay day = alarm.NextDueTime().DayNoInWeek();
+		if (day != aDay)
+			{
+			TheAlarmTest.Test().Printf(_L("testNextAlarm: aDay %i, aAlarmNumber %i, called from line %u"),
+				aDay, aAlarmNumber, aLineNum);
+			TheAlarmTest(EFalse, __LINE__);
+			}
+		}
+	}
+
+	
+static void testClockRepeats()
+//
+//	Test clock alarm repeats
+//
+	{
+	TheAlarmTest.Test().Next(_L("Clock Alarm repeats"));
+#if !defined(_DEBUG)
+	TheAlarmTest.Test().Printf(_L("This test can only be done in debug builds\n"));
+#else
+	TAlarmId id;
+	TInt n;
+	TInt r;
+	//
+	n = TheAlarmTest.Session().NumberOfAlarmsActiveInQueue();
+	TheAlarmTest(n==0, __LINE__);
+	//
+	id = SetAlarmNextMonday(EAlarmRepeatDefintionRepeatOnce);
+	ChangeDayToTuesday();
+	testNextAlarm(EMonday, __LINE__, 0);
+	n = TheAlarmTest.Session().NumberOfAlarmsActiveInQueue();
+	TheAlarmTest(n==0, __LINE__);
+	// Don't need to delete it - it shouldn't be there anyway
+	//
+	id = SetAlarmNextMonday(EAlarmRepeatDefintionRepeatDaily);
+	ChangeDayToTuesday();
+	testNextAlarm(EWednesday, __LINE__);
+	r = TheAlarmTest.Session().AlarmDelete(id);
+	TheAlarmTest(r == KErrNone, __LINE__);
+	//
+	id = SetAlarmNextMonday(EAlarmRepeatDefintionRepeatWeekly);
+	ChangeDayToTuesday();
+	testNextAlarm(EMonday, __LINE__);
+	r = TheAlarmTest.Session().AlarmDelete(id);
+	TheAlarmTest(r == KErrNone, __LINE__);
+	//
+	id = SetAlarmNextMonday(EAlarmRepeatDefintionRepeatWorkday);
+	ChangeDayToTuesday();
+	testNextAlarm(EWednesday, __LINE__);
+	r = TheAlarmTest.Session().AlarmDelete(id);
+	TheAlarmTest(r == KErrNone, __LINE__);
+	//
+	n = TheAlarmTest.Session().NumberOfAlarmsActiveInQueue();
+	TheAlarmTest(n==0, __LINE__);
+#endif
+	}
+
+	
+static void testPastClockRepeats()
+//
+//	Test past clock alarm repeats
+//
+	{
+	TheAlarmTest.Test().Next(_L("Past Clock Repeats"));
+	//
+	TAlarmId id;
+	TInt n;
+	TInt r;
+	//
+	n = TheAlarmTest.Session().NumberOfAlarmsActiveInQueue();
+	TheAlarmTest(n == 0, __LINE__);
+	//
+	id = SetAlarmLastMonday(EAlarmRepeatDefintionRepeatOnce);
+	testNextAlarm(EMonday, __LINE__, 0);
+	r = TheAlarmTest.Session().AlarmDelete(id);
+	TheAlarmTest(r == KErrNone, __LINE__);
+	//
+	n = TheAlarmTest.Session().NumberOfAlarmsActiveInQueue();
+	TheAlarmTest(n == 0, __LINE__);
+	//
+	TTime time;
+	time.HomeTime();
+	time+=TTimeIntervalDays(1);
+	TDay day=time.DayNoInWeek();
+	//
+	id = SetAlarmLastMonday(EAlarmRepeatDefintionRepeatDaily);
+	testNextAlarm(day, __LINE__);
+	r = TheAlarmTest.Session().AlarmDelete(id);
+	TheAlarmTest(r == KErrNone, __LINE__);
+	//
+	id = SetAlarmLastMonday(EAlarmRepeatDefintionRepeatWeekly);
+	testNextAlarm(EMonday, __LINE__);
+	r = TheAlarmTest.Session().AlarmDelete(id);
+	TheAlarmTest(r == KErrNone, __LINE__);
+
+	// Assumes clock repeats use current locale
+	TLocale locale;
+	locale.SetWorkDays(2); // Tuesday
+	locale.Set();
+	User::After(KTimeToWait);
+	//
+	id = SetAlarmLastMonday(EAlarmRepeatDefintionRepeatWorkday);
+	testNextAlarm(ETuesday, __LINE__);
+	r = TheAlarmTest.Session().AlarmDelete(id);
+	TheAlarmTest(r == KErrNone, __LINE__);
+	//
+	locale.SetWorkDays(4); // Wednesday
+	locale.Set();
+	User::After(KTimeToWait);
+	//
+	id = SetAlarmLastMonday(EAlarmRepeatDefintionRepeatWorkday);
+	testNextAlarm(EWednesday, __LINE__);
+	r = TheAlarmTest.Session().AlarmDelete(id);
+	TheAlarmTest(r == KErrNone, __LINE__);
+	//
+	locale.SetWorkDays(0); // None
+	locale.Set();
+	User::After(KTimeToWait);
+	//
+	id = SetAlarmLastMonday(EAlarmRepeatDefintionRepeatWorkday);
+	r = TheAlarmTest.Session().AlarmDelete(id);
+	TheAlarmTest(r == KErrNone, __LINE__);
+	//
+	n = TheAlarmTest.Session().NumberOfAlarmsActiveInQueue();
+	TheAlarmTest(n == 0, __LINE__);
+	//
+	locale.SetWorkDays(1|2|4|8|16); // Mon-Fri
+	locale.Set();
+	User::After(KTimeToWait);
+	//
+	TTimeIntervalMinutes minuteOffSet = -10;
+	id = SetAlarmLastMonday(EAlarmRepeatDefintionRepeatNext24Hours,minuteOffSet);
+	time.HomeTime();
+	time+=minuteOffSet;
+	time+=TTimeIntervalDays(1);
+	day=time.DayNoInWeek();
+	testNextAlarm(day, __LINE__);
+	r = TheAlarmTest.Session().AlarmDelete(id);
+	TheAlarmTest(r == KErrNone, __LINE__);
+	//
+	minuteOffSet = 30;
+	id = SetAlarmLastMonday(EAlarmRepeatDefintionRepeatNext24Hours,minuteOffSet);
+	time.HomeTime();
+	//DEF062643 - Increase the time by the same number of minutes as the offset in
+	//SetAlarmLastMonday which has the effect of going back 23.5 hrs in
+	//the past so that we can be sure that the day does switch over just
+	//incase the testcase runs between 23.30 and 24.00 hrs
+	time+=minuteOffSet;
+	day=time.DayNoInWeek();
+	testNextAlarm(day, __LINE__);
+	r = TheAlarmTest.Session().AlarmDelete(id);
+	TheAlarmTest(r == KErrNone, __LINE__);
+	}
+
+static void testNextUtcAlarm(TDay aDay, TInt aLineNum, TInt aAlarmNumber=1)
+//
+//	Test the day of the next UTC alarm
+//
+	{
+	// Wait for a fraction of a second before testing. The alarm
+	// server takes some time to update the states of alarm objects
+	// and if we request information from the server too quickly after
+	// adding an alarm to its queue, it won't have had time to update
+	// the state of the objects accordingly.
+	User::After(KTimeToWait);
+	//
+	TInt n = TheAlarmTest.Session().NumberOfAlarmsActiveInQueue();
+	if (!n==aAlarmNumber)
+		{
+		TheAlarmTest.Test().Printf(_L("testNextUtcAlarm: aDay %i, aAlarmNumber %i, called from line %u"),
+			aDay, aAlarmNumber, aLineNum);
+		TheAlarmTest(EFalse, __LINE__);
+		}
+	//
+	if	(aAlarmNumber)
+		{
+		TInt r;
+		TAlarmId nextDueAlarmId;
+		//
+		r = TheAlarmTest.Session().GetNextDueAlarmId(nextDueAlarmId);
+		if (r == KErrNotFound)
+			{
+			TheAlarmTest.Test().Printf(_L("testNextUtcAlarm: aDay %i, aAlarmNumber %i, called from line %u"),
+				aDay, aAlarmNumber, aLineNum);
+			TheAlarmTest(EFalse, __LINE__);
+			}
+		//
+		TASShdAlarm alarm;
+		r = TheAlarmTest.Session().GetAlarmDetails(nextDueAlarmId, alarm);
+		if (r != KErrNone)
+			{
+			TheAlarmTest.Test().Printf(_L("testNextUtcAlarm: aDay %i, aAlarmNumber %i, called from line %u"),
+				aDay, aAlarmNumber, aLineNum);
+			TheAlarmTest(EFalse, __LINE__);
+			}
+		//
+		const TDay day = alarm.NextDueTime().DayNoInWeek();
+		if (day != aDay)
+			{
+			TheAlarmTest.Test().Printf(_L("testNextUtcAlarm: aDay %i, aAlarmNumber %i, called from line %u"),
+				aDay, aAlarmNumber, aLineNum);
+			TheAlarmTest(EFalse, __LINE__);
+			}
+		}
+	}
+
+
+static void testClockRepeatsUtc()
+//
+//	Test clock UTC alarm repeats
+//
+	{
+	TheAlarmTest.Test().Next(_L("Clock UTC Alarm repeats"));
+#if !defined(_DEBUG)
+	TheAlarmTest.Test().Printf(_L("This test can only be done in debug builds\n"));
+#else
+	TAlarmId id;
+	TInt n;
+	TInt r;
+	//
+	n = TheAlarmTest.Session().NumberOfAlarmsActiveInQueue();
+	TheAlarmTest(n==0, __LINE__);
+	//
+	id = SetUtcAlarmNextMonday(EAlarmRepeatDefintionRepeatOnce);
+	ChangeDayToTuesday();
+	testNextUtcAlarm(EMonday, __LINE__, 0);
+	n = TheAlarmTest.Session().NumberOfAlarmsActiveInQueue();
+	TheAlarmTest(n==0, __LINE__);
+	// Don't need to delete it - it shouldn't be there anyway
+	//
+	id = SetUtcAlarmNextMonday(EAlarmRepeatDefintionRepeatDaily);
+	ChangeDayToTuesday();
+	testNextUtcAlarm(EWednesday, __LINE__);
+	r = TheAlarmTest.Session().AlarmDelete(id);
+	TheAlarmTest(r == KErrNone, __LINE__);
+	//
+	id = SetUtcAlarmNextMonday(EAlarmRepeatDefintionRepeatWeekly);
+	ChangeDayToTuesday();
+	testNextUtcAlarm(EMonday, __LINE__);
+	r = TheAlarmTest.Session().AlarmDelete(id);
+	TheAlarmTest(r == KErrNone, __LINE__);
+	//
+	id = SetUtcAlarmNextMonday(EAlarmRepeatDefintionRepeatWorkday);
+	ChangeDayToTuesday();
+	testNextUtcAlarm(EWednesday, __LINE__);
+	r = TheAlarmTest.Session().AlarmDelete(id);
+	TheAlarmTest(r == KErrNone, __LINE__);
+	//
+	n = TheAlarmTest.Session().NumberOfAlarmsActiveInQueue();
+	TheAlarmTest(n==0, __LINE__);
+#endif
+	}
+
+	
+static void testPastClockRepeatsUtc()
+//
+//	Test past clock UTC alarm repeats
+//
+	{
+	TheAlarmTest.Test().Next(_L("Past Clock Repeats for UTC alarms"));
+	//
+	TAlarmId id;
+	TInt n;
+	TInt r;
+	//
+	n = TheAlarmTest.Session().NumberOfAlarmsActiveInQueue();
+	TheAlarmTest(n == 0, __LINE__);
+	//
+	id = SetUtcAlarmLastMonday(EAlarmRepeatDefintionRepeatOnce);
+	testNextUtcAlarm(EMonday, __LINE__, 0);
+	r = TheAlarmTest.Session().AlarmDelete(id);
+	TheAlarmTest(r == KErrNone, __LINE__);
+	//
+	n = TheAlarmTest.Session().NumberOfAlarmsActiveInQueue();
+	TheAlarmTest(n == 0, __LINE__);
+	//
+	TTime time;
+	time.UniversalTime();
+	time+=TTimeIntervalDays(1);
+	TDay day=time.DayNoInWeek();
+	//
+	id = SetUtcAlarmLastMonday(EAlarmRepeatDefintionRepeatDaily);
+	testNextUtcAlarm(day, __LINE__);
+	r = TheAlarmTest.Session().AlarmDelete(id);
+	TheAlarmTest(r == KErrNone, __LINE__);
+	//
+	id = SetUtcAlarmLastMonday(EAlarmRepeatDefintionRepeatWeekly);
+	testNextUtcAlarm(EMonday, __LINE__);
+	r = TheAlarmTest.Session().AlarmDelete(id);
+	TheAlarmTest(r == KErrNone, __LINE__);
+
+	// Assumes clock repeats use current locale
+	TLocale locale;
+	locale.SetWorkDays(2); // Tuesday
+	locale.Set();
+	User::After(KTimeToWait);
+	//
+	id = SetUtcAlarmLastMonday(EAlarmRepeatDefintionRepeatWorkday);
+	testNextUtcAlarm(ETuesday, __LINE__);
+	r = TheAlarmTest.Session().AlarmDelete(id);
+	TheAlarmTest(r == KErrNone, __LINE__);
+	//
+	locale.SetWorkDays(4); // Wednesday
+	locale.Set();
+	User::After(KTimeToWait);
+	//
+	id = SetUtcAlarmLastMonday(EAlarmRepeatDefintionRepeatWorkday);
+	testNextUtcAlarm(EWednesday, __LINE__);
+	r = TheAlarmTest.Session().AlarmDelete(id);
+	TheAlarmTest(r == KErrNone, __LINE__);
+	//
+	locale.SetWorkDays(0); // None
+	locale.Set();
+	User::After(KTimeToWait);
+	//
+	id = SetUtcAlarmLastMonday(EAlarmRepeatDefintionRepeatWorkday);
+	r = TheAlarmTest.Session().AlarmDelete(id);
+	TheAlarmTest(r == KErrNone, __LINE__);
+	//
+	n = TheAlarmTest.Session().NumberOfAlarmsActiveInQueue();
+	TheAlarmTest(n == 0, __LINE__);
+	//
+	locale.SetWorkDays(1|2|4|8|16); // Mon-Fri
+	locale.Set();
+	User::After(KTimeToWait);
+	//
+	TTimeIntervalMinutes minuteOffSet = -10;
+	id = SetUtcAlarmLastMonday(EAlarmRepeatDefintionRepeatNext24Hours,minuteOffSet);
+	time.UniversalTime();
+	time+=minuteOffSet;
+	time+=TTimeIntervalDays(1);
+	day=time.DayNoInWeek();
+	testNextUtcAlarm(day, __LINE__);
+	r = TheAlarmTest.Session().AlarmDelete(id);
+	TheAlarmTest(r == KErrNone, __LINE__);
+	//
+
+	minuteOffSet = 30;
+	id = SetUtcAlarmLastMonday(EAlarmRepeatDefintionRepeatNext24Hours,minuteOffSet);
+	time.UniversalTime();
+	//DEF062643 - Increase the time by the same number of minutes as the offset in
+	//SetAlarmLastMonday which has the effect of going back 23.5 hrs in
+	//the past so that we can be sure that the day does switch over just
+	//incase the testcase runs between 23.30 and 24.00 hrs
+	time+=minuteOffSet;
+	day=time.DayNoInWeek();
+	testNextUtcAlarm(day, __LINE__);
+	r = TheAlarmTest.Session().AlarmDelete(id);
+	TheAlarmTest(r == KErrNone, __LINE__);
+	}
+
+/**
+@SYMTestCaseID PIM-TPSEUDOCLOCKALARMS-0001 
+ */
+
+static void doTestsL()
+	{
+	CActiveScheduler* scheduler = new (ELeave) CActiveScheduler;
+	CleanupStack::PushL(scheduler);
+	CActiveScheduler::Install(scheduler);
+
+	TheAlarmTest.Test().Start(_L("@SYMTestCaseID PIM-TPSEUDOCLOCKALARMS-0001 Connecting to server"));
+	TInt r = TheAlarmTest.Session().Connect();
+	TheAlarmTest(r == KErrNone, __LINE__);
+
+	TheAlarmTest.TestClearStoreL();
+#if defined(_DEBUG)
+	TheAlarmTest.Session().__DbgPreventUserNotify(ETrue);
+#endif
+
+	testSetClockAlarms();
+	TheAlarmTest.TestClearStoreL();
+	testClockRepeats();
+	testPastClockRepeats();
+	TheAlarmTest.TestClearStoreL();
+
+	testSetClockUtcAlarms();
+	TheAlarmTest.TestClearStoreL();
+	testClockRepeatsUtc();
+	testPastClockRepeatsUtc();
+	TheAlarmTest.TestClearStoreL();
+
+	CleanupStack::PopAndDestroy(scheduler);
+	}
+
+GLDEF_C TInt E32Main()
+//
+// Test the alarm server.
+//
+    {
+	__UHEAP_MARK;
+	TInt ret = KErrNone;
+	CTrapCleanup* cleanup = CTrapCleanup::New();
+	if	(!cleanup)
+		return KErrNoMemory;
+
+	TheAlarmTest.Title();
+	TheAlarmTest.TestStartServers();
+	//
+	TRAPD(error, doTestsL());
+	TheAlarmTest(error == KErrNone, __LINE__);
+	//
+    TRAP(ret,TheAlarmTest.EndL());
+	TheAlarmTest.Test().Close();
+	ASTstAlarmTest::Close();
+
+	delete cleanup;
+	__UHEAP_MARKEND;
+	return ret;
+    }
+