commonappservices/alarmserver/Test/TServerSessionEngineMain.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) 1999-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:
//

// System includes
#include <e32base.h>
#include <e32test.h>
#include <f32file.h>

// User includes
#include "TServerSessionEngine.h"

// Literal constants
_LIT(KTest,		"server session engine test");

// Constants
const TAlarmCategory KASCliCategoryTest		= { 0x101F5031 };

// Globals
static RTest TheTest(KTest);


void Test1L(CTestServerSessionEngine* aSessionEngine)
	{
	TheTest.Next(_L("Test 1"));
	//******************************************************************************
	// Test1 tests
	//
	// AlarmAddL
	// AlarmDeleteL
	// AlarmCountByCategory
	// AlarmCountByState
	// AlarmIdListByStateLC
	//******************************************************************************
	aSessionEngine->ClearAlarmStoreL();

	RArray<TAlarmId> alarmIds;
	CleanupClosePushL(alarmIds);

	//add 10 alarms (category KASCliCategoryClock)
	for(TInt ii=1; ii<=10; ii++)
		{
		TInt secondsFromNow = (ii)*2;
		TAlarmId id = aSessionEngine->AddAlarmWithSpecificTimeL(secondsFromNow);
		alarmIds.AppendL(id);
		
		TInt numberOfAlarms = aSessionEngine->Engine().AlarmCountByCategory(KASCliCategoryClock);
		TheTest(numberOfAlarms == ii, __LINE__);
		}

	//check states of alarms
	TInt alarmCount=0;
	//states should be:
	// 10 x EAlarmStateQueued
	alarmCount = aSessionEngine->Engine().AlarmCountByState(EAlarmStateQueued);
	TheTest(alarmCount == 10, __LINE__);

	//wait for alarm to expire
	aSessionEngine->AwaitNotificationL();
	CActiveScheduler::Start();
	//states should be:
	// 1 x EAlarmStateNotifying
	// 9 x EAlarmStateQueued
	alarmCount = aSessionEngine->Engine().AlarmCountByState(EAlarmStateNotifying);
	TheTest(alarmCount == 1, __LINE__);
	alarmCount = aSessionEngine->Engine().AlarmCountByState(EAlarmStateQueued);
	TheTest(alarmCount == 9, __LINE__);

	//wait for another alarm to expire
	CActiveScheduler::Start();
	//states should be:
	// 1 x EAlarmStateNotifying
	// 1 x EAlarmStateWaitingToNotify
	// 8 x EAlarmStateQueued
	alarmCount = aSessionEngine->Engine().AlarmCountByState(EAlarmStateNotifying);
	TheTest(alarmCount == 1, __LINE__);
	alarmCount = aSessionEngine->Engine().AlarmCountByState(EAlarmStateWaitingToNotify);
	TheTest(alarmCount == 1, __LINE__);
	alarmCount = aSessionEngine->Engine().AlarmCountByState(EAlarmStateQueued);
	TheTest(alarmCount == 8, __LINE__);

	//last 8 alarms in our array should correspond to array of alarms with state queued
	RArray<TAlarmId>* alarmsWithStateQueued = aSessionEngine->Engine().AlarmIdListByStateLC(EAlarmStateQueued);
		for(TInt jj=0; jj<8; jj++)
		{
		TheTest(alarmIds[jj+2] == (*alarmsWithStateQueued)[jj], __LINE__);
		}
	alarmsWithStateQueued->Close();
	CleanupStack::PopAndDestroy(alarmsWithStateQueued);

	//delete all alarms individually
	for(TInt count=alarmIds.Count(); count>0; count--)
		{
		aSessionEngine->Engine().AlarmDeleteL(alarmIds[count-1]);
		}
	CleanupStack::PopAndDestroy();//alarmIds
	}


void Test2L(CTestServerSessionEngine* aSessionEngine)
	{
	TheTest.Next(_L("Test 2"));
	//******************************************************************************
	// Test2 tests
	//
	// AlarmDetailsL
	// AlarmCategoryL
	// SetAlarmStatusByCategoryL
	// AlarmCountByCategory
	// DeleteAllAlarmsByCategoryL
	// AlarmCategoryListLC
	// AlarmIdListByCategoryLC
	// SetAlarmStatusL
	// AlarmStatus
	//******************************************************************************
	aSessionEngine->ClearAlarmStoreL();

	//add 5 alarms with category KASCliCategoryClock
	for(TInt ii=0; ii<5; ii++)
		{
		aSessionEngine->AddAlarmWithSpecificCategoryL(KASCliCategoryClock);
		}

	//get list of categories - should contain only KASCliCategoryClock
	RArray<TAlarmCategory>* alarmCategories = aSessionEngine->Engine().AlarmCategoryListLC();
		
	TheTest(alarmCategories->Count() == 1 && (*alarmCategories)[0] == KASCliCategoryClock, __LINE__);
	alarmCategories->Close();
	CleanupStack::PopAndDestroy(alarmCategories);
	
	//add 5 alarms with category KASCliCategoryTest
	for(TInt jj=0; jj<5; jj++)
		{
		aSessionEngine->AddAlarmWithSpecificCategoryL(KASCliCategoryTest);
		}
	
	RArray<TAlarmCategory>* alarmCategories2 = aSessionEngine->Engine().AlarmCategoryListLC();
	TheTest(alarmCategories2->Count() == 2, __LINE__);
	alarmCategories2->Close();
	CleanupStack::PopAndDestroy(alarmCategories2);

	//add another 10 alarms with category KASCliCategoryClock
	for(TInt kk=0; kk<10; kk++)
		{
		aSessionEngine->AddAlarmWithSpecificCategoryL(KASCliCategoryClock);
		}

	//get alarms with category KASCliCategoryClock
	RArray<TAlarmId>* alarms = aSessionEngine->Engine().AlarmIdListByCategoryLC(KASCliCategoryClock);
	TInt count = alarms->Count();
	TheTest(count == 15, __LINE__);
	//check each alarm has category KASCliCategoryClock
	for(TInt mm=0; mm<15; mm++)
		{
		//directly
		TheTest(aSessionEngine->Engine().AlarmCategoryL((*alarms)[mm]) == KASCliCategoryClock, __LINE__);
		//indirectly
		TASSrvAlarm alarm(aSessionEngine->ServerWideData());
		aSessionEngine->Engine().AlarmDetailsL((*alarms)[mm], alarm);
		TheTest(alarm.Category() == KASCliCategoryClock, __LINE__);
		}
	alarms->Close();
	CleanupStack::PopAndDestroy(alarms);

	//should now have 15 alarms with category KASCliCategoryClock and 5 with category KASCliCategoryTest
	TheTest(aSessionEngine->Engine().AlarmCountByCategory(KASCliCategoryClock)==15 &&
		aSessionEngine->Engine().AlarmCountByCategory(KASCliCategoryTest)==5, __LINE__);
	//disable all KASCliCategoryClock alarms
	aSessionEngine->Engine().SetAlarmStatusByCategoryL(KASCliCategoryClock, EAlarmStatusDisabled);
	TheTest(aSessionEngine->Engine().NumberOfActiveAlarmsInQueue()==5, __LINE__);
	//try to delete all KASCliCategoryTest orphaned alarms (should be none)
	aSessionEngine->Engine().DeleteAllAlarmsByCategoryL(KASCliCategoryTest, ETrue);
	TheTest(aSessionEngine->Engine().NumberOfActiveAlarmsInQueue()==5, __LINE__);
	//delete all KASCliCategoryTest alarms
	aSessionEngine->Engine().DeleteAllAlarmsByCategoryL(KASCliCategoryTest, EFalse);
	TheTest(aSessionEngine->Engine().NumberOfActiveAlarmsInQueue()==0, __LINE__);
	//re-enable the KASCliCategoryClock alarms
	aSessionEngine->Engine().SetAlarmStatusByCategoryL(KASCliCategoryClock, EAlarmStatusEnabled);
	TheTest(aSessionEngine->Engine().NumberOfActiveAlarmsInQueue()==15, __LINE__);
	//create a new enabled alarm
	TAlarmId id = aSessionEngine->AddAlarmWithSpecificCategoryL(KASCliCategoryClock);
	TheTest(aSessionEngine->Engine().NumberOfActiveAlarmsInQueue()==16, __LINE__);
	//check status
	TheTest(aSessionEngine->Engine().AlarmStatusL(id) == EAlarmStatusEnabled, __LINE__);
	//disable it
	aSessionEngine->Engine().SetAlarmStatusL(id, EAlarmStatusDisabled);
	TheTest(aSessionEngine->Engine().NumberOfActiveAlarmsInQueue()==15, __LINE__);
	TheTest(aSessionEngine->Engine().AlarmStatusL(id) == EAlarmStatusDisabled, __LINE__);
	
	//delete all remaining alarms
	aSessionEngine->Engine().DeleteAllAlarmsByCategoryL(KASCliCategoryClock, EFalse);
	TheTest(aSessionEngine->Engine().NumberOfActiveAlarmsInQueue()==0, __LINE__);
	}


static void doTestsL()
	{
	// this is a WINS test only, because it tests the functionality of the alarm server
	// engine directly.  The tests are repeated in TClientSession which exercises the same
	// functionality through a client session
	
#ifdef __WINS__
	CTestServerSessionEngine* sessionEngine = CTestServerSessionEngine::NewLC();
	//
	TheTest.Next(_L("Start tests"));
	Test1L(sessionEngine);
	Test2L(sessionEngine);
	
	CleanupStack::PopAndDestroy(sessionEngine);
#else
	TheTest.Printf(_L("\nThis is a WINS test only\n"));
#endif
	}

/**
@SYMTestCaseID PIM-TSERVERSESSIONENGINEMAIN-0001
*/	
TInt E32Main()
	{
	__UHEAP_MARK;
	//
	TheTest.Title();
	CTrapCleanup* cleanup = CTrapCleanup::New();
	if	(!cleanup)
		return KErrNoMemory;
	//
	TheTest.Start(_L("@SYMTestCaseID PIM-TSERVERSESSIONENGINEMAIN-0001"));
	//
	TRAPD(err, doTestsL());
	TheTest(err == KErrNone, __LINE__);

	delete cleanup;
	TheTest.End();
	TheTest.Close();

	__UHEAP_MARKEND;
	return KErrNone;
	}