Rework addition of Symbian splash screen to reduce the source impact (uses SVG from Bug 2414)
Notes: by using the OPTION SOURCEDIR parameter in the mifconv extension instructions, I can
arrange to use the same source file name in sfimage, without having to export over the original
Nokia file. This means that the name inside splashscreen.mbg is the same, which removes the need
for the conditional compilation in SplashScreen.cpp, and gets rid of sf_splashscreen.mmp.
// 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"
// Globals
static TRequestStatus TheStatus;
// Constants
const TAlarmCategory KASCliCategoryTest = { 0x101F5031 };
TAlarmId AddAlarm(TInt aMinutesFromNow, TAlarmCategory aAlarmCategory = KASCliCategoryClock)
{
TBuf<200> testTitle;
testTitle.Format(_L("\nAdding alarm to expire in %d minutes\n"), aMinutesFromNow);
TheAlarmTest.Test().Printf(testTitle);
//
TASShdAlarm alarm;
alarm.Category() = aAlarmCategory;
alarm.RepeatDefinition() = EAlarmRepeatDefintionRepeatOnce;
alarm.NextDueTime().HomeTime();
alarm.NextDueTime() += TTimeIntervalMinutes(aMinutesFromNow);
//
TheAlarmTest(TheAlarmTest.Session().AlarmAdd(alarm) == KErrNone, __LINE__);
const TAlarmId id = alarm.Id();
TheAlarmTest(id != KNullAlarmId, __LINE__);
TAlarmCategory category;
TheAlarmTest.Session().GetAlarmCategory(id, category);
TheAlarmTest(category == aAlarmCategory, __LINE__);
return id;
}
TAlarmId AddAlarm(const TTime& aTime, TAlarmCategory aAlarmCategory = KASCliCategoryClock)
{
TheAlarmTest.Test().Printf(_L("\nAdding alarm\n"));
//
TASShdAlarm alarm;
alarm.Category() = aAlarmCategory;
alarm.RepeatDefinition() = EAlarmRepeatDefintionRepeatOnce;
alarm.NextDueTime()=aTime;
//
TheAlarmTest(TheAlarmTest.Session().AlarmAdd(alarm) == KErrNone, __LINE__);
const TAlarmId id = alarm.Id();
TheAlarmTest(id != KNullAlarmId, __LINE__);
return id;
}
TAlarmId AddUtcAlarm(TInt aMinutesFromNow, TAlarmCategory aAlarmCategory = KASCliCategoryClock)
{
TBuf<200> testTitle;
testTitle.Format(_L("\nAdding UTC alarm to expire in %d minutes\n"), aMinutesFromNow);
TheAlarmTest.Test().Printf(testTitle);
//
TASShdAlarm alarm;
alarm.Category()=aAlarmCategory;
alarm.RepeatDefinition()=(EAlarmRepeatDefintionRepeatOnce);
TTime time;
time.UniversalTime();
time += TTimeIntervalMinutes(aMinutesFromNow);
alarm.SetUtcNextDueTime(time);
//
TheAlarmTest(TheAlarmTest.Session().AlarmAdd(alarm) == KErrNone, __LINE__);
const TAlarmId id = alarm.Id();
TheAlarmTest(id != KNullAlarmId, __LINE__);
TAlarmCategory category;
TheAlarmTest.Session().GetAlarmCategory(id, category);
TheAlarmTest(category == aAlarmCategory, __LINE__);
return id;
}
TAlarmId AddUtcAlarm(const TTime& aTime, TAlarmCategory aAlarmCategory = KASCliCategoryClock)
{
TheAlarmTest.Test().Printf(_L("\nAdding UTC alarm\n"));
//
TASShdAlarm alarm;
alarm.Category()=aAlarmCategory;
alarm.RepeatDefinition()=EAlarmRepeatDefintionRepeatOnce;
alarm.SetUtcNextDueTime(aTime);
//
TheAlarmTest(TheAlarmTest.Session().AlarmAdd(alarm) == KErrNone, __LINE__);
const TAlarmId id = alarm.Id();
TheAlarmTest(id != KNullAlarmId, __LINE__);
return id;
}
void WaitForAlarmToExpire()
{
#if defined(_DEBUG) || defined(__WINSCW__)
TheAlarmTest.Test().Printf(_L("\nWaiting for alarm to expire...\n"));
TAlarmId alarmId;
TRequestStatus status;
FOREVER
{
TheAlarmTest.Session().NotifyChange(status, alarmId);
User::WaitForRequest(status);
if (status.Int() == EAlarmChangeEventTimerExpired)
break;
}
#endif
}
void VerifyStates(TInt aQueued, TInt aNotifying=0, TInt aWaitingToNotify=0, TInt aNotified=0, TInt aSnoozed=0)
{
#if defined(_DEBUG) || defined(__WINSCW__)
TInt queued = TheAlarmTest.Session().AlarmCountByState(EAlarmStateQueued);
TInt notifying = TheAlarmTest.Session().AlarmCountByState(EAlarmStateNotifying);
TInt waitingToNotify = TheAlarmTest.Session().AlarmCountByState(EAlarmStateWaitingToNotify);
TInt notified = TheAlarmTest.Session().AlarmCountByState(EAlarmStateNotified);
TInt snoozed = TheAlarmTest.Session().AlarmCountByState(EAlarmStateSnoozed);
//
TheAlarmTest(queued == aQueued, __LINE__);
// When TheAlarmTest.Session().__DbgPreventUserNotify() is set with ETrue (i.e. when
// on target platform), all notifying alarms immediately become notified.
#if defined(__WINSCW__)
TheAlarmTest(notifying == aNotifying, __LINE__);
TheAlarmTest(waitingToNotify == aWaitingToNotify, __LINE__);
TheAlarmTest(notified == aNotified, __LINE__);
#else // __WINSCW__
TheAlarmTest(notifying == 0, __LINE__);
TheAlarmTest(waitingToNotify == 0, __LINE__);
TheAlarmTest(notified == aNotified + aWaitingToNotify + aNotifying, __LINE__);
#endif // __WINSCW__
TheAlarmTest(snoozed == aSnoozed, __LINE__);
#endif
}
void AlarmDeleteAllByCategoryIndirectlyL(TAlarmCategory aCategory)
{
if (TheAlarmTest.Session().GetAlarmCountForCategory(aCategory) == 0)
return;
//get ids of alarms with this category
RArray<TAlarmId> alarmIds;
CleanupClosePushL(alarmIds);
TheAlarmTest.Session().GetAlarmIdListForCategoryL(aCategory, alarmIds);
//delete alarms
for (TInt ii = alarmIds.Count() - 1; ii >= 0; ii--)
{
TheAlarmTest.Session().AlarmDelete(alarmIds[ii]);
TheAlarmTest(TheAlarmTest.Session().GetAlarmCountForCategory(aCategory) == ii, __LINE__);
}
CleanupStack::PopAndDestroy(&alarmIds); // Close array.
}
//
//
//
//
//
static void TestCategorySpecificFunctionalityL()
{
TheAlarmTest.Test().Next(_L("test category specific functionality"));
RArray<TAlarmCategory> categoryList;
CleanupClosePushL(categoryList);
TheAlarmTest.Session().GetAvailableCategoryListL(categoryList);
TheAlarmTest(categoryList.Count() == 0, __LINE__);
categoryList.Reset();
//add 5 alarms with category KASCliCategoryClock 1,3,5,7,9 minutes from now
TAlarmId id = KNullAlarmId;
for (TInt ii=1; ii<=5; ++ii)
{
const TAlarmId allocatedId = AddAlarm(2*ii - 1);
if (id == KNullAlarmId)
{
id = allocatedId;
}
TheAlarmTest(TheAlarmTest.Session().GetAlarmCountForCategory(KASCliCategoryClock) == ii, __LINE__);
}
TheAlarmTest.Session().GetAvailableCategoryListL(categoryList);
TheAlarmTest(categoryList.Count() == 1 && categoryList[0] == KASCliCategoryClock, __LINE__);
categoryList.Reset();
//add 5 alarms with category KASCliCategoryTest 2,4,6,8,10 minutes from now
for (TInt jj=1; jj<=5; ++jj)
{
AddAlarm(2*jj, KASCliCategoryTest);
TheAlarmTest(TheAlarmTest.Session().GetAlarmCountForCategory(KASCliCategoryTest) == jj, __LINE__);
}
TheAlarmTest.Session().GetAvailableCategoryListL(categoryList);
TheAlarmTest(categoryList.Count() == 2, __LINE__);
categoryList.Reset();
VerifyStates(10);
WaitForAlarmToExpire();
VerifyStates(9,1);
WaitForAlarmToExpire();
VerifyStates(8,1,1);
//delete all KASCliCategoryTest alarms
AlarmDeleteAllByCategoryIndirectlyL(KASCliCategoryTest);
TheAlarmTest.Session().GetAvailableCategoryListL(categoryList);
TheAlarmTest(categoryList.Count() == 1 && categoryList[0] == KASCliCategoryClock, __LINE__);
categoryList.Reset();
//delete all KASCliCategoryClock alarms
TheAlarmTest.Session().AlarmDeleteAllByCategory(KASCliCategoryClock, EFalse);
TheAlarmTest.Session().GetAvailableCategoryListL(categoryList);
TheAlarmTest(categoryList.Count() == 0, __LINE__);
TheAlarmTest.TestClearStoreL();
CleanupStack::PopAndDestroy(&categoryList); // Close array.
}
void TestOverlappingAlarmsL()
{
TheAlarmTest.Test().Next(_L("test overlapping alarms"));
//schedule 3 alarms for the same time
TTime time;
time.HomeTime();
time += TTimeIntervalSeconds(10);
for(TInt ii=0; ii<3; ii++)
{
AddAlarm(time);
}
VerifyStates(3);
WaitForAlarmToExpire();
User::After(1000000);
VerifyStates(0,1,2);
TheAlarmTest.TestClearStoreL();
TRequestStatus status;
TAlarmId alarmId;
TheAlarmTest.WaitForNotificationBufferToBeEmptied(status, alarmId);
time.HomeTime();
time += TTimeIntervalSeconds(10);
TAlarmId id1 = AddAlarm(time);
time += TTimeIntervalSeconds(10);
TAlarmId id2 = AddAlarm(time);
TASShdAlarm alarm1;
TASShdAlarm alarm2;
#if defined(_DEBUG)
WaitForAlarmToExpire();
TheAlarmTest(TheAlarmTest.Session().GetAlarmDetails(id1, alarm1) == KErrNone, __LINE__);
TheAlarmTest(TheAlarmTest.Session().GetAlarmDetails(id2, alarm2) == KErrNone, __LINE__);
#if defined(__WINSCW__)
TheAlarmTest(alarm1.State() == EAlarmStateNotifying, __LINE__);
TheAlarmTest(alarm2.State() == EAlarmStateQueued, __LINE__);
#else
TheAlarmTest(alarm1.State() == EAlarmStateNotified, __LINE__);
TheAlarmTest(alarm2.State() == EAlarmStateQueued, __LINE__);
#endif
WaitForAlarmToExpire();
TheAlarmTest(TheAlarmTest.Session().GetAlarmDetails(id1, alarm1) == KErrNone, __LINE__);
TheAlarmTest(TheAlarmTest.Session().GetAlarmDetails(id2, alarm2) == KErrNone, __LINE__);
#if defined(__WINSCW__)
TheAlarmTest(alarm1.State() == EAlarmStateNotifying, __LINE__);
TheAlarmTest(alarm2.State() == EAlarmStateWaitingToNotify, __LINE__);
#else
TheAlarmTest(alarm1.State() == EAlarmStateNotified, __LINE__);
TheAlarmTest(alarm2.State() == EAlarmStateNotified, __LINE__);
#endif
#endif
TheAlarmTest.TestClearStoreL();
}
void TestAlarmDetails1L()
{
TheAlarmTest.Test().Next(_L("test alarm details - 1"));
TheAlarmTest.TestClearStoreL();
TInt id = AddAlarm(1);
TAlarmStatus status;
TheAlarmTest(TheAlarmTest.Session().GetAlarmStatus(id, status) == KErrNone, __LINE__);
TheAlarmTest(status == EAlarmStatusEnabled, __LINE__);
TheAlarmTest(TheAlarmTest.Session().SetAlarmStatus(id, EAlarmStatusDisabled) == KErrNone, __LINE__);
TheAlarmTest(TheAlarmTest.Session().GetAlarmStatus(id, status) == KErrNone, __LINE__);
TheAlarmTest(status == EAlarmStatusDisabled, __LINE__);
TheAlarmTest(TheAlarmTest.Session().SetAlarmStatusByCategory(KASCliCategoryClock, EAlarmStatusEnabled) == KErrNone, __LINE__);
TheAlarmTest(TheAlarmTest.Session().GetAlarmStatus(id, status) == KErrNone, __LINE__);
TheAlarmTest(status == EAlarmStatusEnabled, __LINE__);
WaitForAlarmToExpire();
TheAlarmTest.Session().AlarmDelete(id);
}
void TestAlarmDetails2L()
{
TheAlarmTest.Test().Next(_L("test alarm details - 2"));
//******************************************************************************
// tests
//
// AlarmAddL
// AlarmDeleteL
// AlarmCountByCategory
// AlarmCountByState
// AlarmIdListByStateLC
//******************************************************************************
TheAlarmTest.TestClearStoreL();
RArray<TAlarmId> alarmIds;
CleanupClosePushL(alarmIds);
//add 10 alarms (category KASCliCategoryClock)
for(TInt ii=1; ii<=10; ii++)
{
TInt minutesFromNow = (ii);
TAlarmId id = AddAlarm(minutesFromNow);
alarmIds.AppendL(id);
TInt numberOfAlarms = TheAlarmTest.Session().GetAlarmCountForCategory(KASCliCategoryClock);
TheAlarmTest(numberOfAlarms == ii, __LINE__);
}
//check states of alarms
TInt alarmCount=0;
//states should be:
// 10 x EAlarmStateQueued
alarmCount = TheAlarmTest.Session().AlarmCountByState(EAlarmStateQueued);
TheAlarmTest(alarmCount == 10, __LINE__);
#if defined(_DEBUG)
#if defined(__WINSCW__)
//wait for alarm to expire
WaitForAlarmToExpire();
//states should be:
// 1 x EAlarmStateNotifying
// 9 x EAlarmStateQueued
alarmCount = TheAlarmTest.Session().AlarmCountByState(EAlarmStateNotifying);
TheAlarmTest(alarmCount == 1, __LINE__);
alarmCount = TheAlarmTest.Session().AlarmCountByState(EAlarmStateQueued);
TheAlarmTest(alarmCount == 9, __LINE__);
//wait for another alarm to expire
WaitForAlarmToExpire();
//states should be:
// 1 x EAlarmStateNotifying
// 1 x EAlarmStateWaitingToNotify
// 8 x EAlarmStateQueued
alarmCount = TheAlarmTest.Session().AlarmCountByState(EAlarmStateNotifying);
TheAlarmTest(alarmCount == 1, __LINE__);
alarmCount = TheAlarmTest.Session().AlarmCountByState(EAlarmStateWaitingToNotify);
TheAlarmTest(alarmCount == 1, __LINE__);
alarmCount = TheAlarmTest.Session().AlarmCountByState(EAlarmStateQueued);
TheAlarmTest(alarmCount == 8, __LINE__);
//last 8 alarms in our array should correspond to array of alarms with state queued
RArray<TAlarmId> alarmsWithStateQueued;
CleanupClosePushL(alarmsWithStateQueued);
TheAlarmTest.Session().GetAlarmIdListByStateL(EAlarmStateQueued, alarmsWithStateQueued);
for(TInt jj=0; jj<8; jj++)
{
TheAlarmTest(alarmIds[jj+2] == alarmsWithStateQueued[jj], __LINE__);
}
CleanupStack::PopAndDestroy(&alarmsWithStateQueued); // Close array.
#else
//wait for alarm to expire
WaitForAlarmToExpire();
//states should be:
// 1 x EAlarmStateNotified
// 9 x EAlarmStateQueued
alarmCount = TheAlarmTest.Session().AlarmCountByState(EAlarmStateNotified);
TheAlarmTest(alarmCount == 1, __LINE__);
alarmCount = TheAlarmTest.Session().AlarmCountByState(EAlarmStateQueued);
TheAlarmTest(alarmCount == 9, __LINE__);
//wait for another alarm to expire
WaitForAlarmToExpire();
//states should be:
// 2 x EAlarmStateNotified
// 8 x EAlarmStateQueued
alarmCount = TheAlarmTest.Session().AlarmCountByState(EAlarmStateNotified);
TheAlarmTest(alarmCount == 2, __LINE__);
alarmCount = TheAlarmTest.Session().AlarmCountByState(EAlarmStateQueued);
TheAlarmTest(alarmCount == 8, __LINE__);
//last 8 alarms in our array should correspond to array of alarms with state queued
RArray<TAlarmId> alarmsWithStateQueued;
CleanupClosePushL(alarmsWithStateQueued);
TheAlarmTest.Session().GetAlarmIdListByStateL(EAlarmStateQueued, alarmsWithStateQueued);
for(TInt jj=0; jj<8; jj++)
{
TheAlarmTest(alarmIds[jj+2] == alarmsWithStateQueued[jj], __LINE__);
}
CleanupStack::PopAndDestroy(&alarmsWithStateQueued); // Close array.
#endif
#endif
//delete all alarms individually
for (TInt count = alarmIds.Count() - 1; count >= 0; count--)
{
TheAlarmTest.Session().AlarmDelete(alarmIds[count]);
}
CleanupStack::PopAndDestroy(&alarmIds); // Close array.
}
void TestAlarmDetails3L()
{
TheAlarmTest.Test().Next(_L("test alarm details - 3"));
//******************************************************************************
// tests
//
// AlarmDetailsL
// AlarmCategoryL
// SetAlarmStatusByCategoryL
// AlarmCountByCategory
// DeleteAllAlarmsByCategoryL
// AlarmCategoryListLC
// AlarmIdListByCategoryLC
// SetAlarmStatusL
// AlarmStatus
//******************************************************************************
TheAlarmTest.TestClearStoreL();
//add 5 alarms with category KASCliCategoryClock
for(TInt ii=1; ii<=5; ii++)
{
AddAlarm(ii, KASCliCategoryClock);
}
//get list of categories - should contain only KASCliCategoryClock
RArray<TAlarmCategory> alarmCategories;
CleanupClosePushL(alarmCategories);
TheAlarmTest.Session().GetAvailableCategoryListL(alarmCategories);
TheAlarmTest(alarmCategories.Count() == 1 && alarmCategories[0] == KASCliCategoryClock, __LINE__);
//add 5 alarms with category KASCliCategoryTest
for(TInt jj=1; jj<=5; jj++)
{
AddAlarm(jj, KASCliCategoryTest);
}
alarmCategories.Reset();
TheAlarmTest.Session().GetAvailableCategoryListL(alarmCategories);
TheAlarmTest(alarmCategories.Count() == 2, __LINE__);
CleanupStack::PopAndDestroy(&alarmCategories); // Close array.
//add another 10 alarms with category KASCliCategoryClock
for(TInt kk=1; kk<=10; kk++)
{
AddAlarm(kk, KASCliCategoryClock);
}
//get alarms with category KASCliCategoryClock
RArray<TAlarmId> alarms;
CleanupClosePushL(alarms);
TheAlarmTest.Session().GetAlarmIdListForCategoryL(KASCliCategoryClock, alarms);
TInt count = alarms.Count();
TheAlarmTest(count == 15, __LINE__);
//check each alarm has category KASCliCategoryClock
for(TInt mm=0; mm<15; mm++)
{
//directly
TAlarmCategory category;
TheAlarmTest(TheAlarmTest.Session().GetAlarmCategory(alarms[mm], category) == KErrNone, __LINE__);
TheAlarmTest(category == KASCliCategoryClock, __LINE__);
//indirectly
TASShdAlarm alarm;
TheAlarmTest(TheAlarmTest.Session().GetAlarmDetails(alarms[mm], alarm) == KErrNone, __LINE__);
TheAlarmTest(alarm.Category() == KASCliCategoryClock, __LINE__);
}
CleanupStack::PopAndDestroy(&alarms); // Close array.
//should now have 15 alarms with category KASCliCategoryClock and 5 with category KASCliCategoryTest
TheAlarmTest(TheAlarmTest.Session().GetAlarmCountForCategory(KASCliCategoryClock)==15 &&
TheAlarmTest.Session().GetAlarmCountForCategory(KASCliCategoryTest)==5, __LINE__);
//disable all KASCliCategoryClock alarms
TheAlarmTest.Session().SetAlarmStatusByCategory(KASCliCategoryClock, EAlarmStatusDisabled);
TheAlarmTest(TheAlarmTest.Session().NumberOfAlarmsActiveInQueue()==5, __LINE__);
//try to delete all KASCliCategoryTest orphaned alarms (should be none)
TheAlarmTest.Session().AlarmDeleteAllByCategory(KASCliCategoryTest, ETrue);
TheAlarmTest(TheAlarmTest.Session().NumberOfAlarmsActiveInQueue()==5, __LINE__);
//delete all KASCliCategoryTest alarms
TheAlarmTest.Session().AlarmDeleteAllByCategory(KASCliCategoryTest, EFalse);
TheAlarmTest(TheAlarmTest.Session().NumberOfAlarmsActiveInQueue()==0, __LINE__);
//re-enable the KASCliCategoryClock alarms
TheAlarmTest.Session().SetAlarmStatusByCategory(KASCliCategoryClock, EAlarmStatusEnabled);
TheAlarmTest(TheAlarmTest.Session().NumberOfAlarmsActiveInQueue()==15, __LINE__);
//create a new enabled alarm
TAlarmId id = AddAlarm(1, KASCliCategoryClock);
TheAlarmTest(TheAlarmTest.Session().NumberOfAlarmsActiveInQueue()==16, __LINE__);
//check status
TAlarmStatus status;
TheAlarmTest(TheAlarmTest.Session().GetAlarmStatus(id, status) == KErrNone, __LINE__);
TheAlarmTest(status == EAlarmStatusEnabled, __LINE__);
//disable it
TheAlarmTest.Session().SetAlarmStatus(id, EAlarmStatusDisabled);
TheAlarmTest(TheAlarmTest.Session().NumberOfAlarmsActiveInQueue()==15, __LINE__);
TheAlarmTest(TheAlarmTest.Session().GetAlarmStatus(id, status) == KErrNone, __LINE__);
TheAlarmTest(status == EAlarmStatusDisabled, __LINE__);
//delete all remaining alarms
TheAlarmTest.Session().AlarmDeleteAllByCategory(KASCliCategoryClock, EFalse);
TheAlarmTest(TheAlarmTest.Session().NumberOfAlarmsActiveInQueue()==0, __LINE__);
}
void TestDeleteSnoozedAlarmL()
{
TheAlarmTest.Test().Next(_L("test delete snoozed agenda alarm"));
//******************************************************************************
// tests
//
// AlarmDeleteByCategory
//******************************************************************************
TheAlarmTest.TestClearStoreL();
//add 1 alarm with category KUidAgendaModelAlarmCategory
const TUid KUidAgendaModelAlarmCategory = { 0x101F4A70 };
TAlarmId id=AddAlarm(1, KUidAgendaModelAlarmCategory);
TheAlarmTest(TheAlarmTest.Session().NumberOfAlarmsActiveInQueue()==1, __LINE__);
User::After(1000000 * 61);
TTime now;
now.UniversalTime();
TTime timeToSnoozeUntil = now+ TTimeIntervalMinutes(1);
TheAlarmTest(TheAlarmTest.Session().__DbgSnoozeAlarm(id, timeToSnoozeUntil) == KErrNone);
TDeleteType whatToDelete=0;
whatToDelete=EFuture|EExpired;
User::LeaveIfError(TheAlarmTest.Session().AlarmDeleteByCategory(KUidAgendaModelAlarmCategory, whatToDelete));
TheAlarmTest(TheAlarmTest.Session().NumberOfAlarmsActiveInQueue()==1, __LINE__);
//delete all alarms
TheAlarmTest.Session().AlarmDeleteAllByCategory(KUidAgendaModelAlarmCategory, EFalse);
TheAlarmTest(TheAlarmTest.Session().NumberOfAlarmsActiveInQueue()==0, __LINE__);
}
static void TestCategorySpecificFunctionalityUtcL()
{
TheAlarmTest.Test().Next(_L("test category specific functionality for UTC alarms"));
RArray<TAlarmCategory> categoryList;
CleanupClosePushL(categoryList);
TheAlarmTest.Session().GetAvailableCategoryListL(categoryList);
TheAlarmTest(categoryList.Count() == 0, __LINE__);
categoryList.Reset();
//add 5 alarms with category KASCliCategoryClock 1,3,5,7,9 minutes from now
TAlarmId id = KNullAlarmId;
for (TInt ii=1; ii<=5; ++ii)
{
const TAlarmId allocatedId = AddUtcAlarm(2*ii - 1);
if (id == KNullAlarmId)
{
id = allocatedId;
}
TheAlarmTest(TheAlarmTest.Session().GetAlarmCountForCategory(KASCliCategoryClock) == ii, __LINE__);
}
TheAlarmTest.Session().GetAvailableCategoryListL(categoryList);
TheAlarmTest(categoryList.Count() == 1 && categoryList[0] == KASCliCategoryClock, __LINE__);
categoryList.Reset();
//add 5 alarms with category KASCliCategoryTest 2,4,6,8,10 minutes from now
for (TInt jj=1; jj<=5; ++jj)
{
AddUtcAlarm(2*jj, KASCliCategoryTest);
TheAlarmTest(TheAlarmTest.Session().GetAlarmCountForCategory(KASCliCategoryTest) == jj, __LINE__);
}
TheAlarmTest.Session().GetAvailableCategoryListL(categoryList);
TheAlarmTest(categoryList.Count() == 2, __LINE__);
categoryList.Reset();
VerifyStates(10);
WaitForAlarmToExpire();
VerifyStates(9,1);
WaitForAlarmToExpire();
VerifyStates(8,1,1);
//delete all KASCliCategoryTest alarms
AlarmDeleteAllByCategoryIndirectlyL(KASCliCategoryTest);
TheAlarmTest.Session().GetAvailableCategoryListL(categoryList);
TheAlarmTest(categoryList.Count() == 1 && categoryList[0] == KASCliCategoryClock, __LINE__);
categoryList.Reset();
//delete all KASCliCategoryClock alarms
TheAlarmTest.Session().AlarmDeleteAllByCategory(KASCliCategoryClock, EFalse);
TheAlarmTest.Session().GetAvailableCategoryListL(categoryList);
TheAlarmTest(categoryList.Count() == 0, __LINE__);
CleanupStack::PopAndDestroy(&categoryList); // Close array.
}
void TestOverlappingUtcAlarmsL()
{
TheAlarmTest.Test().Next(_L("test overlapping alarms"));
//schedule 3 alarms for the same time
TTime time;
// TASShdAlarm::SetUtcNextDueTime(TTime aUtcTime), therefore can't use time.HomeTime()
time.UniversalTime();
time += TTimeIntervalSeconds(10);
for(TInt ii=0; ii<3; ii++)
{
AddUtcAlarm(time);
}
VerifyStates(3);
WaitForAlarmToExpire();
VerifyStates(0,1,2);
TheAlarmTest.TestClearStoreL();
TRequestStatus status;
TAlarmId alarmId;
TheAlarmTest.WaitForNotificationBufferToBeEmptied(status, alarmId);
// TASShdAlarm::SetUtcNextDueTime(TTime aUtcTime), therefore can't use time.HomeTime()
time.UniversalTime();
time += TTimeIntervalSeconds(10);
TAlarmId id1 = AddUtcAlarm(time);
time += TTimeIntervalSeconds(10);
TAlarmId id2 = AddUtcAlarm(time);
TASShdAlarm alarm1;
TASShdAlarm alarm2;
#if defined(_DEBUG)
WaitForAlarmToExpire();
TheAlarmTest(TheAlarmTest.Session().GetAlarmDetails(id1, alarm1) == KErrNone, __LINE__);
TheAlarmTest(TheAlarmTest.Session().GetAlarmDetails(id2, alarm2) == KErrNone, __LINE__);
#if defined(__WINSCW__)
TheAlarmTest(alarm1.State() == EAlarmStateNotifying, __LINE__);
TheAlarmTest(alarm2.State() == EAlarmStateQueued, __LINE__);
#else
TheAlarmTest(alarm1.State() == EAlarmStateNotified, __LINE__);
TheAlarmTest(alarm2.State() == EAlarmStateQueued, __LINE__);
#endif
WaitForAlarmToExpire();
TheAlarmTest(TheAlarmTest.Session().GetAlarmDetails(id1, alarm1) == KErrNone, __LINE__);
TheAlarmTest(TheAlarmTest.Session().GetAlarmDetails(id2, alarm2) == KErrNone, __LINE__);
#if defined(__WINSCW__)
TheAlarmTest(alarm1.State() == EAlarmStateNotifying, __LINE__);
TheAlarmTest(alarm2.State() == EAlarmStateWaitingToNotify, __LINE__);
#else
TheAlarmTest(alarm1.State() == EAlarmStateNotified, __LINE__);
TheAlarmTest(alarm2.State() == EAlarmStateNotified, __LINE__);
#endif
#endif
TheAlarmTest.TestClearStoreL();
}
void TestUtcAlarmDetails1L()
{
TheAlarmTest.Test().Next(_L("test alarm details - 1"));
TheAlarmTest.TestClearStoreL();
TInt id = AddUtcAlarm(1);
TAlarmStatus status;
TheAlarmTest(TheAlarmTest.Session().GetAlarmStatus(id, status) == KErrNone, __LINE__);
TheAlarmTest(status == EAlarmStatusEnabled, __LINE__);
TheAlarmTest(TheAlarmTest.Session().SetAlarmStatus(id, EAlarmStatusDisabled) == KErrNone, __LINE__);
TheAlarmTest(TheAlarmTest.Session().GetAlarmStatus(id, status) == KErrNone, __LINE__);
TheAlarmTest(status == EAlarmStatusDisabled, __LINE__);
TheAlarmTest(TheAlarmTest.Session().SetAlarmStatusByCategory(KASCliCategoryClock, EAlarmStatusEnabled) == KErrNone, __LINE__);
TheAlarmTest(TheAlarmTest.Session().GetAlarmStatus(id, status) == KErrNone, __LINE__);
TheAlarmTest(status == EAlarmStatusEnabled, __LINE__);
WaitForAlarmToExpire();
TheAlarmTest.Session().AlarmDelete(id);
}
void TestUtcAlarmDetails2L()
{
TheAlarmTest.Test().Next(_L("test alarm details - 2"));
//******************************************************************************
// tests
//
// AlarmAddL
// AlarmDeleteL
// AlarmCountByCategory
// AlarmCountByState
// AlarmIdListByStateLC
//******************************************************************************
TheAlarmTest.TestClearStoreL();
RArray<TAlarmId> alarmIds;
CleanupClosePushL(alarmIds);
//add 10 alarms (category KASCliCategoryClock)
for(TInt ii=1; ii<=10; ii++)
{
TInt minutesFromNow = (ii);
TAlarmId id = AddUtcAlarm(minutesFromNow);
alarmIds.AppendL(id);
TInt numberOfAlarms = TheAlarmTest.Session().GetAlarmCountForCategory(KASCliCategoryClock);
TheAlarmTest(numberOfAlarms == ii, __LINE__);
}
//check states of alarms
TInt alarmCount=0;
//states should be:
// 10 x EAlarmStateQueued
alarmCount = TheAlarmTest.Session().AlarmCountByState(EAlarmStateQueued);
TheAlarmTest(alarmCount == 10, __LINE__);
#if defined(_DEBUG)
#if defined(__WINSCW__)
//wait for alarm to expire
WaitForAlarmToExpire();
//states should be:
// 1 x EAlarmStateNotifying
// 9 x EAlarmStateQueued
alarmCount = TheAlarmTest.Session().AlarmCountByState(EAlarmStateNotifying);
TheAlarmTest(alarmCount == 1, __LINE__);
alarmCount = TheAlarmTest.Session().AlarmCountByState(EAlarmStateQueued);
TheAlarmTest(alarmCount == 9, __LINE__);
//wait for another alarm to expire
WaitForAlarmToExpire();
//states should be:
// 1 x EAlarmStateNotifying
// 1 x EAlarmStateWaitingToNotify
// 8 x EAlarmStateQueued
alarmCount = TheAlarmTest.Session().AlarmCountByState(EAlarmStateNotifying);
TheAlarmTest(alarmCount == 1, __LINE__);
alarmCount = TheAlarmTest.Session().AlarmCountByState(EAlarmStateWaitingToNotify);
TheAlarmTest(alarmCount == 1, __LINE__);
alarmCount = TheAlarmTest.Session().AlarmCountByState(EAlarmStateQueued);
TheAlarmTest(alarmCount == 8, __LINE__);
//last 8 alarms in our array should correspond to array of alarms with state queued
RArray<TAlarmId> alarmsWithStateQueued;
CleanupClosePushL(alarmsWithStateQueued);
TheAlarmTest.Session().GetAlarmIdListByStateL(EAlarmStateQueued, alarmsWithStateQueued);
for(TInt jj=0; jj<8; jj++)
{
TheAlarmTest(alarmIds[jj+2] == alarmsWithStateQueued[jj], __LINE__);
}
CleanupStack::PopAndDestroy(&alarmsWithStateQueued); // Close array.
#else
//wait for alarm to expire
WaitForAlarmToExpire();
//states should be:
// 1 x EAlarmStateNotified
// 9 x EAlarmStateQueued
alarmCount = TheAlarmTest.Session().AlarmCountByState(EAlarmStateNotified);
TheAlarmTest(alarmCount == 1, __LINE__);
alarmCount = TheAlarmTest.Session().AlarmCountByState(EAlarmStateQueued);
TheAlarmTest(alarmCount == 9, __LINE__);
//wait for another alarm to expire
WaitForAlarmToExpire();
//states should be:
// 2 x EAlarmStateNotified
// 8 x EAlarmStateQueued
alarmCount = TheAlarmTest.Session().AlarmCountByState(EAlarmStateNotified);
TheAlarmTest(alarmCount == 2, __LINE__);
alarmCount = TheAlarmTest.Session().AlarmCountByState(EAlarmStateQueued);
TheAlarmTest(alarmCount == 8, __LINE__);
//last 8 alarms in our array should correspond to array of alarms with state queued
RArray<TAlarmId> alarmsWithStateQueued;
CleanupClosePushL(alarmsWithStateQueued);
TheAlarmTest.Session().GetAlarmIdListByStateL(EAlarmStateQueued, alarmsWithStateQueued);
for(TInt jj=0; jj<8; jj++)
{
TheAlarmTest(alarmIds[jj+2] == alarmsWithStateQueued[jj], __LINE__);
}
CleanupStack::PopAndDestroy(&alarmsWithStateQueued); // Close array.
#endif
#endif
//delete all alarms individually
for (TInt count = alarmIds.Count() - 1; count >= 0; count--)
{
TheAlarmTest.Session().AlarmDelete(alarmIds[count]);
}
CleanupStack::PopAndDestroy(&alarmIds); // Close array.
}
void TestUtcAlarmDetails3L()
{
TheAlarmTest.Test().Next(_L("test alarm details - 3"));
//******************************************************************************
// tests
//
// AlarmDetailsL
// AlarmCategoryL
// SetAlarmStatusByCategoryL
// AlarmCountByCategory
// DeleteAllAlarmsByCategoryL
// AlarmCategoryListLC
// AlarmIdListByCategoryLC
// SetAlarmStatusL
// AlarmStatus
//******************************************************************************
TheAlarmTest.TestClearStoreL();
//add 5 alarms with category KASCliCategoryClock
for(TInt ii=1; ii<=5; ii++)
{
AddUtcAlarm(ii, KASCliCategoryClock);
}
//get list of categories - should contain only KASCliCategoryClock
RArray<TAlarmCategory> alarmCategories;
CleanupClosePushL(alarmCategories);
TheAlarmTest.Session().GetAvailableCategoryListL(alarmCategories);
TheAlarmTest(alarmCategories.Count() == 1 && alarmCategories[0] == KASCliCategoryClock, __LINE__);
//add 5 alarms with category KASCliCategoryTest
for(TInt jj=1; jj<=5; jj++)
{
AddUtcAlarm(jj, KASCliCategoryTest);
}
alarmCategories.Reset();
TheAlarmTest.Session().GetAvailableCategoryListL(alarmCategories);
TheAlarmTest(alarmCategories.Count() == 2, __LINE__);
CleanupStack::PopAndDestroy(&alarmCategories); // Close array.
//add another 10 alarms with category KASCliCategoryClock
for(TInt kk=1; kk<=10; kk++)
{
AddUtcAlarm(kk, KASCliCategoryClock);
}
//get alarms with category KASCliCategoryClock
RArray<TAlarmId> alarms;
CleanupClosePushL(alarms);
TheAlarmTest.Session().GetAlarmIdListForCategoryL(KASCliCategoryClock, alarms);
TInt count = alarms.Count();
TheAlarmTest(count == 15, __LINE__);
//check each alarm has category KASCliCategoryClock
for(TInt mm=0; mm<15; mm++)
{
//directly
TAlarmCategory category;
TheAlarmTest(TheAlarmTest.Session().GetAlarmCategory(alarms[mm], category) == KErrNone, __LINE__);
TheAlarmTest(category == KASCliCategoryClock, __LINE__);
//indirectly
TASShdAlarm alarm;
TheAlarmTest(TheAlarmTest.Session().GetAlarmDetails(alarms[mm], alarm) == KErrNone, __LINE__);
TheAlarmTest(alarm.Category() == KASCliCategoryClock, __LINE__);
}
CleanupStack::PopAndDestroy(&alarms); // Close array.
//should now have 15 alarms with category KASCliCategoryClock and 5 with category KASCliCategoryTest
TheAlarmTest(TheAlarmTest.Session().GetAlarmCountForCategory(KASCliCategoryClock)==15 &&
TheAlarmTest.Session().GetAlarmCountForCategory(KASCliCategoryTest)==5, __LINE__);
//disable all KASCliCategoryClock alarms
TheAlarmTest.Session().SetAlarmStatusByCategory(KASCliCategoryClock, EAlarmStatusDisabled);
TheAlarmTest(TheAlarmTest.Session().NumberOfAlarmsActiveInQueue()==5, __LINE__);
//try to delete all KASCliCategoryTest orphaned alarms (should be none)
TheAlarmTest.Session().AlarmDeleteAllByCategory(KASCliCategoryTest, ETrue);
TheAlarmTest(TheAlarmTest.Session().NumberOfAlarmsActiveInQueue()==5, __LINE__);
//delete all KASCliCategoryTest alarms
TheAlarmTest.Session().AlarmDeleteAllByCategory(KASCliCategoryTest, EFalse);
TheAlarmTest(TheAlarmTest.Session().NumberOfAlarmsActiveInQueue()==0, __LINE__);
//re-enable the KASCliCategoryClock alarms
TheAlarmTest.Session().SetAlarmStatusByCategory(KASCliCategoryClock, EAlarmStatusEnabled);
TheAlarmTest(TheAlarmTest.Session().NumberOfAlarmsActiveInQueue()==15, __LINE__);
//create a new enabled alarm
TAlarmId id = AddUtcAlarm(1, KASCliCategoryClock);
TheAlarmTest(TheAlarmTest.Session().NumberOfAlarmsActiveInQueue()==16, __LINE__);
//check status
TAlarmStatus status;
TheAlarmTest(TheAlarmTest.Session().GetAlarmStatus(id, status) == KErrNone, __LINE__);
TheAlarmTest(status == EAlarmStatusEnabled, __LINE__);
//disable it
TheAlarmTest.Session().SetAlarmStatus(id, EAlarmStatusDisabled);
TheAlarmTest(TheAlarmTest.Session().NumberOfAlarmsActiveInQueue()==15, __LINE__);
TheAlarmTest(TheAlarmTest.Session().GetAlarmStatus(id, status) == KErrNone, __LINE__);
TheAlarmTest(status == EAlarmStatusDisabled, __LINE__);
//delete all remaining alarms
TheAlarmTest.Session().AlarmDeleteAllByCategory(KASCliCategoryClock, EFalse);
TheAlarmTest(TheAlarmTest.Session().NumberOfAlarmsActiveInQueue()==0, __LINE__);
}
void TestDeleteSnoozedUtcAlarmL()
{
TheAlarmTest.Test().Next(_L("test delete snoozed agenda alarm"));
//******************************************************************************
// tests
//
// AlarmDeleteByCategory
//******************************************************************************
TheAlarmTest.TestClearStoreL();
//add 1 alarm with category KUidAgendaModelAlarmCategory
const TUid KUidAgendaModelAlarmCategory = { 0x101F4A70 };
TAlarmId id=AddUtcAlarm(1, KUidAgendaModelAlarmCategory);
TheAlarmTest(TheAlarmTest.Session().NumberOfAlarmsActiveInQueue()==1, __LINE__);
User::After(1000000 * 61);
TTime now;
now.UniversalTime();
TTime timeToSnoozeUntil = now+ TTimeIntervalMinutes(1);
TheAlarmTest(TheAlarmTest.Session().__DbgSnoozeAlarm(id, timeToSnoozeUntil) == KErrNone);
TDeleteType whatToDelete=0;
whatToDelete=EFuture|EExpired;
User::LeaveIfError(TheAlarmTest.Session().AlarmDeleteByCategory(KUidAgendaModelAlarmCategory, whatToDelete));
TheAlarmTest(TheAlarmTest.Session().NumberOfAlarmsActiveInQueue()==1, __LINE__);
//delete all alarms
TheAlarmTest.Session().AlarmDeleteAllByCategory(KUidAgendaModelAlarmCategory, EFalse);
TheAlarmTest(TheAlarmTest.Session().NumberOfAlarmsActiveInQueue()==0, __LINE__);
}
/**
@SYMTestCaseID PIM-TCLIENTSESSION-0001
*/
static void DoTestsL()
{
CActiveScheduler* scheduler = new (ELeave) CActiveScheduler;
CleanupStack::PushL(scheduler);
CActiveScheduler::Install(scheduler);
TheAlarmTest.Test().Start(_L("@SYMTestCaseID PIM-TCLIENTSESSION-0001 Connecting to server"));
TInt r = TheAlarmTest.Session().Connect();
TheAlarmTest(r == KErrNone, __LINE__);
#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
TheAlarmTest.TestClearStoreL();
TestCategorySpecificFunctionalityL();
TestOverlappingAlarmsL();
TestAlarmDetails1L();
TestAlarmDetails2L();
TestAlarmDetails3L();
#if defined(_DEBUG) && defined(__WINS__)
TestDeleteSnoozedAlarmL();
#endif
TheAlarmTest.TestClearStoreL();
TestCategorySpecificFunctionalityUtcL();
TestOverlappingUtcAlarmsL();
TestUtcAlarmDetails1L();
TestUtcAlarmDetails2L();
TestUtcAlarmDetails3L();
#if defined(_DEBUG) && defined(__WINS__)
TestDeleteSnoozedUtcAlarmL();
#endif
TheAlarmTest.TestClearStoreL();
TheAlarmTest.Session().Close();
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;
}