--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/commonappservices/alarmserver/Test/TSoundControl.cpp Tue Feb 02 10:12:00 2010 +0200
@@ -0,0 +1,465 @@
+// 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;
+
+TAlarmId addAlarm(const TTime& aTime)
+ {
+ TheAlarmTest.Test().Printf(_L("Adding alarm\n"));
+ //
+ TASShdAlarm alarm;
+ alarm.Category() = KASCliCategoryClock;
+ 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(const TTime& aTime)
+ {
+ TheAlarmTest.Test().Printf(_L("Adding UTC alarm\n"));
+ //
+ TASShdAlarm alarm;
+ alarm.Category()=KASCliCategoryClock;
+ 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()
+ {
+ TheAlarmTest.Test().Printf(_L("Waiting for alarm to expire...\n"));
+
+ TAlarmId alarmId;
+ TRequestStatus status;
+ FOREVER
+ {
+ TheAlarmTest.Session().NotifyChange(status, alarmId);
+ User::WaitForRequest(status);
+ if (status.Int() == EAlarmChangeEventTimerExpired)
+ break;
+ }
+ }
+
+void verifyStates(TInt aQueued, TInt aNotifying=0, TInt aWaitingToNotify=0, TInt aNotified=0, TInt aSnoozed=0)
+ {
+ 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__);
+ TheAlarmTest(notifying == aNotifying, __LINE__);
+ TheAlarmTest(waitingToNotify == aWaitingToNotify, __LINE__);
+ TheAlarmTest(notified == aNotified, __LINE__);
+ TheAlarmTest(snoozed == aSnoozed, __LINE__);
+ }
+
+void checkGlobalSoundState(TAlarmGlobalSoundState aGlobalSoundState)
+ {
+ TAlarmGlobalSoundState soundState;
+ TInt r = TheAlarmTest.Session().GetAlarmSoundState(soundState);
+ TheAlarmTest(r == KErrNone, __LINE__);
+ TheAlarmTest(soundState == aGlobalSoundState, __LINE__);
+ }
+
+//
+//
+//
+//
+//
+
+void simpleTestOfGlobalSoundState()
+ {
+ TheAlarmTest.Test().Next(_L("test global sound state"));
+
+ checkGlobalSoundState(EAlarmGlobalSoundStateOn);
+ TheAlarmTest.Session().SetAlarmSoundState(EAlarmGlobalSoundStateOff);
+ checkGlobalSoundState(EAlarmGlobalSoundStateOff);
+ TheAlarmTest.Session().SetAlarmSoundState(EAlarmGlobalSoundStateOn);
+ checkGlobalSoundState(EAlarmGlobalSoundStateOn);
+
+ TheAlarmTest.Test().Printf(_L("- test silent period\n"));
+ TheAlarmTest.Session().SetAlarmSoundsSilentFor(TTimeIntervalMinutes(1));
+ checkGlobalSoundState(EAlarmGlobalSoundStateOff);
+ //wait for the silent period to expire
+ User::After(1000000 * 61);
+ checkGlobalSoundState(EAlarmGlobalSoundStateOn);
+ }
+
+void testSoundsSilentUntilL()
+ {
+ TheAlarmTest.Test().Next(_L("test sounds silent until"));
+
+ TheAlarmTest.TestClearStoreL();
+
+ // Add an alarm
+ TTime time;
+ time.HomeTime();
+ time += TTimeIntervalSeconds(10);
+ TInt alarmId = addAlarm(time);
+
+ // Silence alarms until 1 minute after this alarm expires - this gets rounded
+ // down to the nearest minute - do here so we have the actual time silenced until
+ time += TTimeIntervalMinutes(1);
+ TDateTime temp(time.DateTime());
+ temp.SetSecond(0);
+ temp.SetMicroSecond(0);
+ time = temp;
+
+ TInt r = TheAlarmTest.Session().SetAlarmSoundsSilentUntil(time);
+ TheAlarmTest(r == KErrNone, __LINE__);
+
+ // Check silent until time
+ TTime checkTime;
+ r = TheAlarmTest.Session().GetAlarmSoundsSilentUntil(checkTime);
+ TheAlarmTest(r == KErrNone, __LINE__);
+ TheAlarmTest(time == checkTime, __LINE__);
+
+ // Wait for the alarm to expire
+ waitForAlarmToExpire();
+
+ // Test sound state is correct
+ TheAlarmTest.Test().Printf(_L("- alarm expired, check silent\r\n"));
+ checkGlobalSoundState(EAlarmGlobalSoundStateOff);
+ TheAlarmTest(TheAlarmTest.Session().AlarmSoundsTemporarilySilenced(), __LINE__);
+
+ // Wait until sounds are allowed again
+ User::At(time);
+
+ TheAlarmTest.Test().Printf(_L("- silence expired, check sounding\r\n"));
+ checkGlobalSoundState(EAlarmGlobalSoundStateOn);
+ TheAlarmTest(!TheAlarmTest.Session().AlarmSoundsTemporarilySilenced(), __LINE__);
+
+ // delete this alarm
+ r = TheAlarmTest.Session().AlarmDelete(alarmId);
+ TheAlarmTest(r == KErrNone, __LINE__);
+ }
+
+void simpleTestOfSoundsSilentForL()
+ {
+ TheAlarmTest.Test().Next(_L("test sounds silent for - 1"));
+
+ TheAlarmTest.TestClearStoreL();
+
+ // Add 3 alarms, due in 1, 2 and 4 minutes
+ TTime time;
+ time.HomeTime();
+ time += TTimeIntervalMinutes(1);
+ addAlarm(time);
+ time += TTimeIntervalMinutes(1);
+ addAlarm(time);
+ time += TTimeIntervalMinutes(2);
+ addAlarm(time);
+
+ // Silence alarms for 3 minutes
+ TInt r = TheAlarmTest.Session().SetAlarmSoundsSilentFor(3);
+ TheAlarmTest(r == KErrNone, __LINE__);
+
+ //wait for first alarm to expire - should be silent
+ waitForAlarmToExpire();
+ TheAlarmTest.Test().Printf(_L("- alarm 1 expired, check silent\r\n"));
+ checkGlobalSoundState(EAlarmGlobalSoundStateOff);
+ TheAlarmTest(TheAlarmTest.Session().AlarmSoundsTemporarilySilenced(), __LINE__);
+
+ //wait for the next alarm to expire - should still be silent
+ waitForAlarmToExpire();
+ TheAlarmTest.Test().Printf(_L("- alarm 2 expired, check silent\r\n"));
+ checkGlobalSoundState(EAlarmGlobalSoundStateOff);
+ TheAlarmTest(TheAlarmTest.Session().AlarmSoundsTemporarilySilenced(), __LINE__);
+
+ //wait 1 minute for the silent period to expire
+ User::After(1000000 * 61);
+ TheAlarmTest.Test().Printf(_L("- silence expired, check sound state\r\n"));
+ checkGlobalSoundState(EAlarmGlobalSoundStateOn);
+ TheAlarmTest(!TheAlarmTest.Session().AlarmSoundsTemporarilySilenced(), __LINE__);
+
+ //wait for the next alarm to expire - sounds should be back on
+ waitForAlarmToExpire();
+ TheAlarmTest.Test().Printf(_L("- alarm 3 expired, check sound state\r\n"));
+ checkGlobalSoundState(EAlarmGlobalSoundStateOn);
+ TheAlarmTest(!TheAlarmTest.Session().AlarmSoundsTemporarilySilenced(), __LINE__);
+ }
+
+void testSoundsSilentFor()
+ {
+ TheAlarmTest.Test().Next(_L("test sounds silent for - 2"));
+
+ // add 2 alarms to expire immediately
+ TTime time;
+ time.HomeTime();
+ addAlarm(time);
+ addAlarm(time);
+ checkGlobalSoundState(EAlarmGlobalSoundStateOn);
+ TheAlarmTest(!TheAlarmTest.Session().AlarmSoundsTemporarilySilenced(), __LINE__);
+
+ // Silence alarms for 1 minute, wait 10 seconds, then silence again for 1 minute
+ TInt r = TheAlarmTest.Session().SetAlarmSoundsSilentFor(1);
+ TheAlarmTest(r == KErrNone, __LINE__);
+ User::After(1000000 * 10);
+ r = TheAlarmTest.Session().SetAlarmSoundsSilentFor(1);
+ TheAlarmTest(r == KErrNone, __LINE__);
+ // expect to be silent for 70 seconds (from alarm time)
+ time += TTimeIntervalSeconds(65);
+ User::At(time);
+ // approx 5 seconds before silence ends - check still silent
+ TheAlarmTest.Test().Printf(_L("- check sound state is still silent\r\n"));
+ checkGlobalSoundState(EAlarmGlobalSoundStateOff);
+ TheAlarmTest(TheAlarmTest.Session().AlarmSoundsTemporarilySilenced(), __LINE__);
+
+ time += TTimeIntervalSeconds(7);
+ User::At(time);
+ // 2 seconds after silence should end - check state
+ TheAlarmTest.Test().Printf(_L("- check sound state is now sounding\r\n"));
+ checkGlobalSoundState(EAlarmGlobalSoundStateOn);
+ TheAlarmTest(!TheAlarmTest.Session().AlarmSoundsTemporarilySilenced(), __LINE__);
+
+ // test cancel alarm silence
+ TheAlarmTest.Test().Printf(_L("- check sound state is silent\r\n"));
+ r = TheAlarmTest.Session().SetAlarmSoundsSilentFor(10);
+ TheAlarmTest(r == KErrNone, __LINE__);
+ checkGlobalSoundState(EAlarmGlobalSoundStateOff);
+ TheAlarmTest(TheAlarmTest.Session().AlarmSoundsTemporarilySilenced(), __LINE__);
+
+ TheAlarmTest.Test().Printf(_L("- check silence is canceled\r\n"));
+ r = TheAlarmTest.Session().CancelAlarmSilence();
+ checkGlobalSoundState(EAlarmGlobalSoundStateOn);
+ TheAlarmTest(!TheAlarmTest.Session().AlarmSoundsTemporarilySilenced(), __LINE__);
+ }
+
+
+void testSoundsSilentUntilUtcL()
+ {
+ TheAlarmTest.Test().Next(_L("test sounds silent until"));
+
+ TheAlarmTest.TestClearStoreL();
+
+ // Add an alarm
+ TTime time;
+ time.UniversalTime();
+ time += TTimeIntervalSeconds(10);
+ TInt alarmId = addUtcAlarm(time);
+
+ // Silence alarms until 1 minute after this alarm expires - this gets rounded
+ // down to the nearest minute - do here so we have the actual time silenced until
+ TTimeIntervalSeconds offset = User::UTCOffset();
+ time += TTimeIntervalMinutes(1);
+ time += offset;
+ TDateTime temp(time.DateTime());
+ temp.SetSecond(0);
+ temp.SetMicroSecond(0);
+ time = temp;
+
+ TInt r = TheAlarmTest.Session().SetAlarmSoundsSilentUntil(time);
+ TheAlarmTest(r == KErrNone, __LINE__);
+
+ // Check silent until time
+ TTime checkTime;
+ r = TheAlarmTest.Session().GetAlarmSoundsSilentUntil(checkTime);
+ TheAlarmTest(r == KErrNone, __LINE__);
+ TheAlarmTest(time == checkTime, __LINE__);
+
+ // Wait for the alarm to expire
+ waitForAlarmToExpire();
+
+ // Test sound state is correct
+ TheAlarmTest.Test().Printf(_L("- alarm expired, check silent\r\n"));
+ checkGlobalSoundState(EAlarmGlobalSoundStateOff);
+ TheAlarmTest(TheAlarmTest.Session().AlarmSoundsTemporarilySilenced(), __LINE__);
+
+ // Wait until sounds are allowed again
+ User::At(time);
+
+ TheAlarmTest.Test().Printf(_L("- silence expired, check sounding\r\n"));
+ checkGlobalSoundState(EAlarmGlobalSoundStateOn);
+ TheAlarmTest(!TheAlarmTest.Session().AlarmSoundsTemporarilySilenced(), __LINE__);
+
+ // delete this alarm
+ r = TheAlarmTest.Session().AlarmDelete(alarmId);
+ TheAlarmTest(r == KErrNone, __LINE__);
+ }
+
+
+void simpleTestOfSoundsSilentForUtcL()
+ {
+ TheAlarmTest.Test().Next(_L("test sounds silent for - 1"));
+
+ TheAlarmTest.TestClearStoreL();
+
+ // Add 3 alarms, due in 1, 2 and 4 minutes
+ TTime time;
+ time.UniversalTime();
+ time += TTimeIntervalMinutes(1);
+ addUtcAlarm(time);
+ time += TTimeIntervalMinutes(1);
+ addUtcAlarm(time);
+ time += TTimeIntervalMinutes(2);
+ addUtcAlarm(time);
+
+ // Silence alarms for 3 minutes
+ TInt r = TheAlarmTest.Session().SetAlarmSoundsSilentFor(3);
+ TheAlarmTest(r == KErrNone, __LINE__);
+
+ //wait for first alarm to expire - should be silent
+ waitForAlarmToExpire();
+ TheAlarmTest.Test().Printf(_L("- alarm 1 expired, check silent\r\n"));
+ checkGlobalSoundState(EAlarmGlobalSoundStateOff);
+ TheAlarmTest(TheAlarmTest.Session().AlarmSoundsTemporarilySilenced(), __LINE__);
+
+ //wait for the next alarm to expire - should still be silent
+ waitForAlarmToExpire();
+ TheAlarmTest.Test().Printf(_L("- alarm 2 expired, check silent\r\n"));
+ checkGlobalSoundState(EAlarmGlobalSoundStateOff);
+ TheAlarmTest(TheAlarmTest.Session().AlarmSoundsTemporarilySilenced(), __LINE__);
+
+ //wait 1 minute for the silent period to expire
+ User::After(1000000 * 61);
+ TheAlarmTest.Test().Printf(_L("- silence expired, check sound state\r\n"));
+ checkGlobalSoundState(EAlarmGlobalSoundStateOn);
+ TheAlarmTest(!TheAlarmTest.Session().AlarmSoundsTemporarilySilenced(), __LINE__);
+
+ //wait for the next alarm to expire - sounds should be back on
+ waitForAlarmToExpire();
+ TheAlarmTest.Test().Printf(_L("- alarm 3 expired, check sound state\r\n"));
+ checkGlobalSoundState(EAlarmGlobalSoundStateOn);
+ TheAlarmTest(!TheAlarmTest.Session().AlarmSoundsTemporarilySilenced(), __LINE__);
+ }
+
+void testSoundsSilentForUtc()
+ {
+ TheAlarmTest.Test().Next(_L("test sounds silent for - 2"));
+
+ // add 2 alarms to expire immediately
+ TTimeIntervalSeconds offset = User::UTCOffset();
+
+ TTime time;
+ time.UniversalTime();
+ addUtcAlarm(time);
+ addUtcAlarm(time);
+ checkGlobalSoundState(EAlarmGlobalSoundStateOn);
+ TheAlarmTest(!TheAlarmTest.Session().AlarmSoundsTemporarilySilenced(), __LINE__);
+
+ // Silence alarms for 1 minute, wait 10 seconds, then silence again for 1 minute
+ TInt r = TheAlarmTest.Session().SetAlarmSoundsSilentFor(1);
+ TheAlarmTest(r == KErrNone, __LINE__);
+ User::After(1000000 * 10);
+ r = TheAlarmTest.Session().SetAlarmSoundsSilentFor(1);
+ TheAlarmTest(r == KErrNone, __LINE__);
+ // expect to be silent for 70 seconds (from alarm time)
+ time += TTimeIntervalSeconds(65);
+ User::At(time + offset);
+ // approx 5 seconds before silence ends - check still silent
+ TheAlarmTest.Test().Printf(_L("- check sound state is still silent\r\n"));
+ checkGlobalSoundState(EAlarmGlobalSoundStateOff);
+ TheAlarmTest(TheAlarmTest.Session().AlarmSoundsTemporarilySilenced(), __LINE__);
+
+ time += TTimeIntervalSeconds(7);
+ User::At(time + offset);
+ // 2 seconds after silence should end - check state
+ TheAlarmTest.Test().Printf(_L("- check sound state is now sounding\r\n"));
+ checkGlobalSoundState(EAlarmGlobalSoundStateOn);
+ TheAlarmTest(!TheAlarmTest.Session().AlarmSoundsTemporarilySilenced(), __LINE__);
+
+ // test cancel alarm silence
+ TheAlarmTest.Test().Printf(_L("- check sound state is silent\r\n"));
+ r = TheAlarmTest.Session().SetAlarmSoundsSilentFor(10);
+ TheAlarmTest(r == KErrNone, __LINE__);
+ checkGlobalSoundState(EAlarmGlobalSoundStateOff);
+ TheAlarmTest(TheAlarmTest.Session().AlarmSoundsTemporarilySilenced(), __LINE__);
+
+ TheAlarmTest.Test().Printf(_L("- check silence is canceled\r\n"));
+ r = TheAlarmTest.Session().CancelAlarmSilence();
+ checkGlobalSoundState(EAlarmGlobalSoundStateOn);
+ TheAlarmTest(!TheAlarmTest.Session().AlarmSoundsTemporarilySilenced(), __LINE__);
+ }
+
+/**
+@SYMTestCaseID PIM-TSOUNDCONTROL-0001
+*/
+static void doTestsL()
+ {
+ TheAlarmTest.Start(_L("@SYMTestCaseID PIM-TSOUNDCONTROL-0001 Connecting to server"));
+
+ const TInt KGmtOffset = 3600;
+ _LIT(KTime, "20040730:050000.000000"); //In summer time
+ TInt err = User::SetUTCTimeAndOffset(TTime(KTime), KGmtOffset);
+ TheAlarmTest(err == KErrNone, __LINE__);
+
+
+ TInt r = TheAlarmTest.Session().Connect();
+ TheAlarmTest(r == KErrNone, __LINE__);
+
+ TheAlarmTest.TestClearStoreL();
+
+ CActiveScheduler* scheduler = new (ELeave) CActiveScheduler;
+ CleanupStack::PushL(scheduler);
+ CActiveScheduler::Install(scheduler);
+
+ simpleTestOfGlobalSoundState();
+
+ testSoundsSilentUntilL();
+ simpleTestOfSoundsSilentForL();
+ testSoundsSilentFor();
+
+ testSoundsSilentUntilUtcL();
+ simpleTestOfSoundsSilentForUtcL();
+ testSoundsSilentForUtc();
+
+ TheAlarmTest.TestClearStoreL();
+
+ TheAlarmTest.Session().Close();
+
+ CleanupStack::PopAndDestroy(scheduler);
+ }
+
+GLDEF_C TInt E32Main()
+//
+// Test the alarm server.
+//
+ {
+ TInt ret = KErrNone;
+ __UHEAP_MARK;
+ 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;
+ }