stif/TestEngine/src/Testcasetimeout.cpp
branchRCL_3
changeset 59 8ad140f3dd41
parent 0 a03f92240627
--- /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 <e32svr.h>
+#include <hal.h>
+#include <StifLogger.h>
+#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