diff -r 000000000000 -r dfb7c4ff071f commsfwsupport/commselements/testing/ElementServer/src/StateMachineImpl.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/commsfwsupport/commselements/testing/ElementServer/src/StateMachineImpl.cpp Thu Dec 17 09:22:25 2009 +0200 @@ -0,0 +1,108 @@ +// Copyright (c) 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: +// This contains the implementation of a StateMachine for testing +// purpose. +// +// + +#include "StateMachineImpl.h" + +/* + * @file StateMachineImpl.cpp + */ + +/* + * Creates a new state machine object. + * + * @return Pointer to a state machine implementation. + */ +CStateMachineImpl* CStateMachineImpl::NewL() + { + CStateMachineImpl* stateMachine = new (ELeave) CStateMachineImpl(); + CleanupStack::PushL(stateMachine); + return stateMachine; + } + +/* + * Sets the state machines fragment member to the given HBuf. + * + * @param HBufC8* The fragment that the member should be set to. + */ +void CStateMachineImpl::SetFragment(HBufC8* aFragment) + { + iFragment = aFragment; + } + +/* + * Returns the member variable to test the setting function. + * + * @return The member variable value. + */ +MStateMachineNotify* CStateMachineImpl::StateMachineNotifier() + { + return iStateMachineNotify; + } + +/* + * Overriden function so we can stop the active scheduler. + */ +void CStateMachineImpl::OnCompletion() + { + CActiveScheduler::Stop(); + CStateMachine::OnCompletion(); + } + +/* + * Creates an active scheduler that a newly created state machine will be added too. + * + * @return An active scheduler used for testing. + */ +CActiveScheduler* CStateMachineImpl::StartActiveSchedulerL() + { + CActiveScheduler* activeScheduler = new (ELeave) CActiveScheduler; + CActiveScheduler::Install(activeScheduler); + return activeScheduler; + } + +/* + * The processing method called from within a state machine's RunL. Processes + * state changes. + * + * @param TRequestStatus The state machines internal status. + * @return CAsyncEvent* A pointer to the next state, or NULL to complete. + */ +CAsynchEvent* CAsyncEventImpl::ProcessL(TRequestStatus& aStatus) + { + iRuns++; + iTestStep->LogStateChange(iAsyncEvent); + if (iAsyncEvent == EPanicAsyncEvent) + User::Leave(KElementStateMachineError); + if (iAsyncEvent == EForcedErrorAsyncEvent) + { + iStateMachine->SetLastError(iError); + if (iRuns == 2) + iStateMachine->SetErrorEvent(NULL); + } + if (iAsyncEvent == ESuspendAsyncEvent) + { + iStateMachine->SetSuspendRequest(ETrue); + } + TRequestStatus* p = &aStatus; + User::RequestComplete(p, iError); //move to the next state + if (iAsyncEvent == ECancelAsyncEvent) + { + iStateMachine->Cancel(iError); + } + return Next(); + }