--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/supl/locationomasuplpostester/epos_comasuplpostestermodulecfg/src/epos_comasuplpositiontest.cpp Tue Feb 02 01:06:48 2010 +0200
@@ -0,0 +1,308 @@
+/*
+* Copyright (c) 2005-2006 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: Tests GetPositionL() in various scenarios.
+*
+*/
+
+#include <e32base.h>
+#include <epos_comasuplposhandlerbase.h>
+#include <epos_comasuplpossessionbase.h>
+#include <epos_comasuplposition.h>
+#include <epos_eomasuplposerrors.h>
+
+#include "epos_comasuplpositiontest.h"
+#include "epos_comasupltesthandler.h"
+#include "epos_comasuplpostesterlogger.h"
+
+
+// ---------------------------------------------------------------------------
+// Named constructor
+// ---------------------------------------------------------------------------
+//
+COMASuplPositionTest* COMASuplPositionTest::NewL(COMASuplPosHandlerBase*
+ aPosHandler
+ , COMASuplPosTesterCategory* aCallBack)
+ {
+ COMASuplPositionTest* self = new(ELeave)COMASuplPositionTest(aPosHandler
+ , aCallBack);
+ CleanupStack::PushL(self);
+ self->ConstructL();
+ CleanupStack::Pop(self);
+ return self;
+ }
+
+// ---------------------------------------------------------------------------
+// Destructor
+// ---------------------------------------------------------------------------
+//
+COMASuplPositionTest::~COMASuplPositionTest()
+ {
+ delete iPosition;
+ delete iSessionBase;
+ }
+
+COMASuplPositionTest::COMASuplPositionTest(COMASuplPosHandlerBase*
+ aPosHandler
+ , COMASuplPosTesterCategory* aCallBack)
+ : COMASuplPosTesterCategory(aCallBack)
+ , iPosHandler(*aPosHandler)
+ {
+
+ }
+
+// ---------------------------------------------------------------------------
+// Second phase constructor
+// ---------------------------------------------------------------------------
+//
+void COMASuplPositionTest::ConstructL()
+ {
+ CActiveScheduler::Add(this);
+ }
+
+void COMASuplPositionTest::InitializePositionL()
+ {
+ delete iPosition;
+ iPosition = NULL;
+ iPosition = COMASuplPosition::NewL();
+ }
+
+void COMASuplPositionTest::RequestForPositionL()
+ {
+ TRAPD(err, InitializePositionL());
+ if(KErrNone != err)
+ {
+ iError++;
+ iLogger->WriteStatus(KLeaveResettingPosition(), err, iTestNo);
+ TestingAborted(KPositionTestAborted);
+ return;
+ }
+ __ASSERT_ALWAYS(!IsActive(),User::Panic(KPanicSetActive, KErrAlreadyExists));
+ iSessionBase->GetPositionL(iStatus, iPosition);
+ SetActive();
+ }
+
+// ---------------------------------------------------------------------------
+// This function is called by test handler. It is entry point of execution
+// of a test case.
+// ---------------------------------------------------------------------------
+//
+void COMASuplPositionTest::StartTestingL()
+ {
+ if(iCallBack)
+ {
+ iLogger->WriteTestHeader(KPositionTest, iTestNo);
+ }
+ iNextInSeq = EStartTest;
+ __ASSERT_ALWAYS(!IsActive(),User::Panic(KPanicSetActive, KErrAlreadyExists));
+ DummyRequest(iStatus);
+ SetActive();
+ }
+
+// ---------------------------------------------------------------------------
+// Handles an active object's request completion event.
+// ---------------------------------------------------------------------------
+//
+void COMASuplPositionTest::RunL()
+ {
+ switch(iNextInSeq)
+ {
+ case EStartTest:
+ {
+ iLogger->GetRequestStartTime();
+ TRAPD( err, iSessionBase = iPosHandler.CreateNewSessionL(this));
+ if( KErrNone != err )
+ {
+ iError++;
+ iLogger->WriteLine(KCreatingSessionFail, iTestNo);
+ User::Leave(err);
+ }
+ iInfo++;
+ iLogger->LogExecutionTime(KExecCreateNewSessionL);
+ iInfo++;
+ iLogger->WriteLine(KSessionCreated, iTestNo);
+ __ASSERT_ALWAYS(!IsActive(),User::Panic(KPanicSetActive, KErrAlreadyExists));
+ iNextInSeq = EGetPositionBeforeInitialize;
+ DummyRequest(iStatus);
+ SetActive();
+ break;
+ }
+ case EGetPositionBeforeInitialize:
+ {
+ iNextInSeq = EGetPositionCompleteBeforeInitialize;
+ iInfo++;
+ iLogger->WriteLine(KGetPositionLInfo, iTestNo);
+ RequestForPositionL();
+ break;
+ }
+
+ case EGetPositionCompleteBeforeInitialize:
+ {
+ iNextInSeq = EInitializeSession;
+ if(iStatus == KErrOMASuplPosInActive)
+ {
+ iInfo++;
+ iLogger->WriteStatus(
+ _L8("Info: GetPositionL completed with ")
+ , iStatus.Int(), iTestNo);
+ }
+ else
+ {
+ iWarning++;
+ iLogger->WriteStatus(
+ _L8("Warning: GetPositionL completed with ")
+ , iStatus.Int(), iTestNo);
+ }
+ __ASSERT_ALWAYS(!IsActive(),User::Panic(KPanicSetActive, KErrAlreadyExists));
+ DummyRequest(iStatus);
+ SetActive();
+ break;
+ }
+
+ case EInitializeSession:
+ {
+ __ASSERT_ALWAYS(!IsActive(),User::Panic(KPanicSetActive, KErrAlreadyExists));
+ iNextInSeq = EGetPositionAfterInitialize;
+ iInfo++;
+ iLogger->WriteLine(KInitializingSession);
+
+ iSessionBase->InitializeL(iRequestID, iStatus);
+ SetActive();
+ break;
+ }
+
+ case EGetPositionAfterInitialize:
+ {
+ if(iStatus != KErrNone)
+ {
+ iError++;
+ iLogger->WriteStatus(KError, iStatus.Int(), iTestNo, &KReqCompWith());
+ TestingAborted(KPositionTestAborted);
+ return;
+ }
+ else
+ {
+ iInfo++;
+ iLogger->WriteStatus(KInfo, KErrNone, iTestNo, &KReqCompWith());
+ }
+ iNextInSeq = EGetPositionCompleteAfterInitialize;
+ iInfo++;
+ iLogger->WriteLine(KGetPositionLSessionInitInfo, iTestNo);
+ RequestForPositionL();
+ break;
+ }
+ case EGetPositionCompleteAfterInitialize:
+ {
+ iNextInSeq = EEndSessionAndGetPosition;
+ if(iStatus != KErrNone)
+ {
+ iWarning++;
+ iLogger->WriteStatus(
+ _L8("Warning: GetPositionL completed with ")
+ , iStatus.Int(), iTestNo);
+ }
+ else
+ {
+ iInfo++;
+ iLogger->WriteStatus(
+ _L8("Info: GetPositionL completed with ")
+ , iStatus.Int(), iTestNo);
+ }
+ iLogger->LogSuplPosition(iPosition);
+ __ASSERT_ALWAYS(!IsActive(),User::Panic(KPanicSetActive, KErrAlreadyExists));
+ DummyRequest(iStatus);
+ SetActive();
+ break;
+ }
+ case EEndSessionAndGetPosition:
+ {
+ iNextInSeq = EGetPositionCompleteAfterEndSession;
+ iInfo++;
+ iLogger->WriteLine(KEndingSession, iTestNo);
+ iSessionBase->SessionEnd();
+ iInfo++;
+ iLogger->WriteLine(KGetPositionLSessionEndInfo, iTestNo);
+ RequestForPositionL();
+ break;
+ }
+ case EGetPositionCompleteAfterEndSession:
+ {
+ if(iStatus == KErrOMASuplPosInActive)
+ {
+ iInfo++;
+ iLogger->WriteStatus(KAfterEndSessionI, iStatus.Int()
+ , iTestNo);
+ }
+ else
+ {
+ iWarning++;
+ iLogger->WriteStatus(KAfterEndSessionW, iStatus.Int()
+ , iTestNo);
+ }
+ iLogger->LogSuplPosition(iPosition);
+ TestingComplete(KPositionTestComplete);
+ break;
+ }
+ }
+ }
+
+// ---------------------------------------------------------------------------
+// Implements cancellation of an outstanding request.
+// ---------------------------------------------------------------------------
+//
+void COMASuplPositionTest::DoCancel()
+ {
+ if(EGetPositionCompleteBeforeInitialize == iNextInSeq
+ || EGetPositionCompleteAfterInitialize == iNextInSeq
+ || EGetPositionCompleteAfterEndSession == iNextInSeq)
+ {
+ //Cancel position
+ iSessionBase->CancelGetPosition();
+ return;
+ }
+ if(EGetPositionAfterInitialize == iNextInSeq)
+ {
+ //Cancel sessionInit
+ iSessionBase->CancelInitialize();
+ return;
+ }
+ }
+
+// ---------------------------------------------------------------------------
+// Handles a leave occurring in the request completion event handler RunL().
+// ---------------------------------------------------------------------------
+//
+TInt COMASuplPositionTest::RunError(TInt aError)
+ {
+ if(EStartTest == iNextInSeq)
+ {
+ iError++;
+ iLogger->WriteStatus(KLeaveInCreateNewSession, aError, iTestNo);
+ }
+ if(EGetPositionCompleteBeforeInitialize == iNextInSeq
+ || EGetPositionCompleteAfterInitialize == iNextInSeq
+ || EGetPositionCompleteAfterEndSession == iNextInSeq)
+ {
+ //Leave in Position
+ iError++;
+ iLogger->WriteStatus(KLeaveInGetPosition, aError, iTestNo);
+ }
+ if(EGetPositionAfterInitialize == iNextInSeq)
+ {
+ //Leave in Session Initialization
+ iError++;
+ iLogger->WriteStatus(KLeaveInSessionInit, aError, iTestNo);
+ }
+ TestingAborted(KPositionTestAborted);
+ return KErrNone;
+ }