diff -r 7fdc9a71d314 -r 8ad140f3dd41 stif/TestEngine/src/Testcasetimeout.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/stif/TestEngine/src/Testcasetimeout.cpp Wed Oct 13 16:17:58 2010 +0300 @@ -0,0 +1,321 @@ +/* +* 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 module contains implementation of +* CTestCaseTimeout class member functions. +* +*/ + +// INCLUDE FILES +#include +#include +#include +#include "TestReport.h" +#include "TestEngine.h" +#include "TestEngineCommon.h" +#include "TestCaseController.h" + +// EXTERNAL DATA STRUCTURES +// None + +// EXTERNAL FUNCTION PROTOTYPES +// None + +// CONSTANTS +// None + +// MACROS +// None + +// LOCAL CONSTANTS AND MACROS +// None + +// MODULE DATA STRUCTURES +// None + +// LOCAL FUNCTION PROTOTYPES +// None + +// FORWARD DECLARATIONS +// None + +// ==================== LOCAL FUNCTIONS ======================================= +// None + +// ================= MEMBER FUNCTIONS ========================================= + +/* +------------------------------------------------------------------------------- + + Class: CTestCaseTimeout + + Method: CTestCaseTimeout + + Description: Default constructor + + C++ default constructor can NOT contain any code, that + might leave. + + Parameters: None + + Return Values: None + + Errors/Exceptions: None + + Status: Approved + +------------------------------------------------------------------------------- +*/ +CTestCaseTimeout::CTestCaseTimeout() : CActive (CActive::EPriorityStandard) + { + + } + +/* +------------------------------------------------------------------------------- + + Class: CTestCaseTimeout + + Method: ConstructL + + Description: Symbian OS second phase constructor + + Symbian OS default constructor can leave. + + Parameters: + + Return Values: None + + Errors/Exceptions: + + Status: Approved + +------------------------------------------------------------------------------- +*/ +void CTestCaseTimeout::ConstructL( CTestCaseController* aCase, + TTimeIntervalMicroSeconds aTimeout ) + { + iCase = aCase; + iTimeout = aTimeout; + iTimer.CreateLocal(); + + iTestCaseTimeout = 0; // Initialize + + } + +/* +------------------------------------------------------------------------------- + + Class: CTestCaseTimeout + + Method: NewL + + Description: Two-phased constructor. + + Parameters: const TTestReportOutput aReportOutput: in: Report output type + + Return Values: CTestCaseTimeout* : pointer to created object + + Errors/Exceptions: Leaves if memory allocation for object fails + Leaves if ConstructL leaves + + Status: Approved + +------------------------------------------------------------------------------- +*/ +CTestCaseTimeout* CTestCaseTimeout::NewL( CTestCaseController* aCase, + TTimeIntervalMicroSeconds aTimeout ) + { + CTestCaseTimeout* self = new ( ELeave ) CTestCaseTimeout(); + CleanupStack::PushL( self ); + self->ConstructL( aCase, aTimeout ); + CleanupStack::Pop( self ); + return self; + + } + +/* +------------------------------------------------------------------------------- + + Class: CTestCaseTimeout + + Method: ~CTestCaseTimeout + + Description: Destructor. + + Cancel request + + Parameters: None + + Return Values: None + + Errors/Exceptions: None + + Status: Approved + +------------------------------------------------------------------------------- +*/ +CTestCaseTimeout::~CTestCaseTimeout() + { + Cancel(); + + } + +/* +------------------------------------------------------------------------------- + + Class: CTestCaseTimeout + + Method: Start + + Description: Start timeout counting + + Parameters: None + + Return Values: None + + Errors/Exceptions: None + + Status: Approved + +------------------------------------------------------------------------------- +*/ +void CTestCaseTimeout::Start() + { + // Add to active scheduler + CActiveScheduler::Add ( this ); + SetActive(); + + // Request timer + TTime timeout; + timeout.HomeTime(); + timeout = timeout + iTimeout; + + // Store absolute timeout + iTestCaseTimeout = timeout; + + // Note: iTimer.After() method cannot use because there needed + // TTimeIntervalMicroSeconds32 and it is 32 bit. So then cannot create + // timeout time that is long enough. At() uses 64 bit value=>Long enough. + iTimer.At( iStatus, timeout ); + + } + +/* +------------------------------------------------------------------------------- + + Class: CTestCaseTimeout + + Method: RunL + + Description: RunL handles completed timeouts. + + Parameters: None + + Return Values: None + + Errors/Exceptions: None + + Status: Approved + +------------------------------------------------------------------------------- +*/ +void CTestCaseTimeout::RunL() + { + // Timeout + TTime timeout; + timeout.HomeTime(); + // Handle the abort case when system time gets changed, but timeout is + // still valid. All other cases should timeout since they invalidate the + // logic of the timers. + if ( iStatus == KErrAbort) + { + if ( iTestCaseTimeout > timeout ) + { + RDebug::Print( _L( "Absolute timer still valid. Restaring timer. iStatus: %d" ), iStatus.Int() ); + // Start new timer + iStatus = KErrNone; // reset value + iTimer.At ( iStatus, iTestCaseTimeout ); // restart timer + SetActive(); + } + else + { + // Absolute timer no longer valid. Must timeout. + iCase->Timeout(); + } + + } + else + { + // Status was not KErrAbort. Timing out! + iCase->Timeout(); + } + + } + +/* +------------------------------------------------------------------------------- + + Class: CTestCaseTimeout + + Method: DoCancel + + Description: Cancel active request + + Parameters: None + + Return Values: None + + Errors/Exceptions: None + + Status: Approved + +------------------------------------------------------------------------------- +*/ +void CTestCaseTimeout::DoCancel() + { + iTimer.Cancel(); + + } + +/* +------------------------------------------------------------------------------- + + Class: CTestCaseTimeout + + Method: RunError + + Description: Handle errors. Just let framework handle errors because + RunL does not leave. + + Parameters: TInt aError: in: Symbian OS error: Error code + + Return Values: TInt: Symbian OS error code + + Errors/Exceptions: None + + Status: Approved + +------------------------------------------------------------------------------- +*/ +TInt CTestCaseTimeout::RunError( TInt aError ) + { + return aError; + + } + +// ================= OTHER EXPORTED FUNCTIONS ================================= + +// None + +// End of File