commonappservices/alarmserver/Test/TAlarmInfo.cpp
author William Roberts <williamr@symbian.org>
Fri, 23 Apr 2010 14:37:17 +0100
branchRCL_3
changeset 22 c82a39b81a38
parent 0 2e3d3ce01487
permissions -rw-r--r--
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"

// System includes
#include <asclisoundplay.h>

// Constants

// Type definitions
typedef CArrayFixFlat<TASCliSoundPlayDefinition> CPlayIntervalArray;

// This define appears in ASSrvSoundSettings.cpp (KAlarmCycleStartOffsetMinutes)
// update it if it changes there!
#define KDefaultAlarmCycleStartOffsetMinutes	{0,1,2,3,5,10,20,30,45,60,90,120,180,240,KErrNotFound};
#define KNewAlarmCycleStartOffsetMinutes		{0,10,20,30,50,100,200,300,450,600,900,1200,1800,2400, 3000, 4000, 5000, 10000,KErrNotFound};

static void testPrintAlarmL()
//
//	Print details about alarm
//
	{
	
	TheAlarmTest.Test().Next(_L("Test printing details about alarms"));
	TInt num;
	//
	num = TheAlarmTest.CountOrphanedAlarmsL();
	TheAlarmTest.Test().Printf(_L("\tThe number of orphan alarms is %d\n"), num);
	//
	num = TheAlarmTest.Session().AlarmCountByState(EAlarmStateNotified);
	TheAlarmTest.Test().Printf(_L("\tThe number of review alarms is %d\n"), num);
	//
	num = TheAlarmTest.Session().AlarmCountByState(EAlarmStateWaitingToNotify);
	TheAlarmTest.Test().Printf(_L("\tThe number of unacknowledged alarms is %d\n"),num);
	//
	num = TheAlarmTest.Session().NumberOfAlarmsActiveInQueue();
	TheAlarmTest.Test().Printf(_L("\tThe number of next alarms is %d\n"),num);
	//
	
	
	TheAlarmTest.Test().Next(_L("Clearing all alarms"));
	TheAlarmTest.TestClearStoreL();
	}

static void resetSoundArrayToDefaultValuesL()
	{
	// Initialise sound array with default values
	CPlayIntervalArray* array = new(ELeave) CPlayIntervalArray(20);
	CleanupStack::PushL(array);

	// Populate the new array to replace the default
	const TInt minuteCycle[]=KDefaultAlarmCycleStartOffsetMinutes;
	TInt i = 0;
	TInt offset = minuteCycle[i];
	while (offset != KErrNotFound)
		{
		const TASCliSoundPlayDefinition item(offset, KDefaultSoundPlayDurationInSeconds);
		array->AppendL(item);
		offset = minuteCycle[++i];
		}

	// Try setting the sound details
	TheAlarmTest.Session().SetAlarmPlayIntervalsL(*array);

	CleanupStack::PopAndDestroy(array);
	}


static void testDefaultSoundInfoL()
//
//	Get default sound info details
//
	{
	TheAlarmTest.Test().Next(_L("Test the default sound play intervals"));
	// When the server is started, the alarm sound intervals should currently be
	// set to their defaults defined in KDefaultAlarmCycleStartOffsetMinutes

	// Initialise sound array with default values
	CPlayIntervalArray* array = new(ELeave) CPlayIntervalArray(20);
	CleanupStack::PushL(array);

	// Get default sound intervals
	TheAlarmTest.Session().GetAlarmPlayIntervalsL(*array);

	// Check that the default values are correct
	const TInt minuteCycle[]=KDefaultAlarmCycleStartOffsetMinutes;
	TInt i = 0;
	TInt offset = minuteCycle[i];
	while (offset != KErrNotFound)
		{
		const TASCliSoundPlayDefinition& item = array->At(i);
		TheAlarmTest(item.Offset().Int() == offset, __LINE__);
		TheAlarmTest(item.Duration().Int() == KDefaultSoundPlayDurationInSeconds, __LINE__);
		offset = minuteCycle[++i];
		}
	CleanupStack::PopAndDestroy(array);
	}


static void testSettingSoundInfoL()
//
//	Get and set the sound info details
//
	{
	TheAlarmTest.Test().Next(_L("Test setting the sound play intervals"));
	// When the server is started, the alarm sound intervals should currently be
	// set to their defaults defined in KDefaultAlarmCycleStartOffsetMinutes

	// Initialise sound array with default values
	CPlayIntervalArray* array = new(ELeave) CPlayIntervalArray(20);
	CleanupStack::PushL(array);

	// Populate the new array to replace the default
	const TInt minuteCycle[]=KNewAlarmCycleStartOffsetMinutes;
	TInt i = 0;
	TInt offset = minuteCycle[i];
	while (offset != KErrNotFound)
		{
		const TASCliSoundPlayDefinition item(offset, KDefaultSoundPlayDurationInSeconds);
		array->AppendL(item);
		offset = minuteCycle[++i];
		}

	// Try setting the sound details
	TheAlarmTest.Session().SetAlarmPlayIntervalsL(*array);

	// Fetch the details back again.
	CPlayIntervalArray* array2 = new(ELeave) CPlayIntervalArray(20);
	CleanupStack::PushL(array2);
	TheAlarmTest.Session().GetAlarmPlayIntervalsL(*array2);

	// Test that there are the same number of entries
	TheAlarmTest(array->Count() == array2->Count(), __LINE__);

	// Test entries are the same
	TInt count = array->Count();
	for(TInt j=0; j<count; j++)
		{
		const TASCliSoundPlayDefinition& item = array->At(j);
		const TASCliSoundPlayDefinition& item2 = array2->At(j);
		TheAlarmTest(item.Offset().Int() == item2.Offset().Int(), __LINE__);
		TheAlarmTest(item.Duration().Int() == item2.Duration().Int(), __LINE__);
		}

	CleanupStack::PopAndDestroy(2);
	}


static void testSettingSoundInfoBadValuesL()
//
//	Attempt to set the sound interval array to invalid values.
//
	{
	TheAlarmTest.Test().Next(_L("Test setting sound play intervals to invalid values"));

	// Initialise sound array with default values
	CPlayIntervalArray* array = new(ELeave) CPlayIntervalArray(20);
	CleanupStack::PushL(array);

	// Try setting the sound details to an empty array
	TRAPD(err, TheAlarmTest.Session().SetAlarmPlayIntervalsL(*array));
	TheAlarmTest(err == KErrArgument, __LINE__);

	// Try setting the sound intervals to an array which doesn't contain an entry
	// with an offset of zero
	const TASCliSoundPlayDefinition item(1, KDefaultSoundPlayDurationInSeconds); // offset of 1 min
	array->AppendL(item);
	TRAP(err, TheAlarmTest.Session().SetAlarmPlayIntervalsL(*array));
	TheAlarmTest(err == KErrArgument, __LINE__);
	CleanupStack::PopAndDestroy(array);
	}
	
/**
@SYMTestCaseID PIM-TALARMINFO-0001
*/
static void doTestsL()
	{

	TheAlarmTest.Start(_L("@SYMTestCaseID PIM-TALARMINFO-0001 Connecting to server"));

	const TInt KGmtOffset = 3600;
	_LIT(KTime, "20040730:050000.000000"); //Summertime
	TInt err = User::SetUTCTimeAndOffset(TTime(KTime), KGmtOffset);
	TheAlarmTest(err == KErrNone, __LINE__);

	const TInt r = TheAlarmTest.Session().Connect();
	TheAlarmTest(r == KErrNone, __LINE__);

	testPrintAlarmL();
	testDefaultSoundInfoL();
	testSettingSoundInfoL();
	testSettingSoundInfoBadValuesL();

	resetSoundArrayToDefaultValuesL();
	TheAlarmTest.TestClearStoreL();

	TheAlarmTest.EndL();
	}


GLDEF_C TInt E32Main()
//
// Test the alarm server.
//
    {
	__UHEAP_MARK;
	CTrapCleanup* cleanup = CTrapCleanup::New();
	if	(!cleanup)
		return KErrNoMemory;

	TheAlarmTest.Title();
	TheAlarmTest.TestStartServers();
	//
	TRAPD(error, doTestsL());
	TheAlarmTest(error == KErrNone, __LINE__);
	TheAlarmTest.Session().Close();
	TheAlarmTest.Test().Close();
	ASTstAlarmTest::Close();

	delete cleanup;
	__UHEAP_MARKEND;
	return KErrNone;
    }