diff -r 000000000000 -r 3e07fef1e154 testexecfw/symbianunittestfw/sutfw/sutfwcore/sutfwframework/src/symbianunittestresult.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/testexecfw/symbianunittestfw/sutfw/sutfwcore/sutfwframework/src/symbianunittestresult.cpp Mon Mar 08 15:03:44 2010 +0800 @@ -0,0 +1,319 @@ +/* +* 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: +* +*/ + +#include "symbianunittestresult.h" +#include "symbianunittestfailure.h" +#include "sutlogger.h" + +_LIT8( KSymbianUnitTestLeaveCodeMessageFormat, "Leave code: %d" ); +_LIT8( KSymbianUnitTestMemoryLeakPhrase, "Leaked %d bytes of memory" ); +_LIT8( KSymbianUnitTestPanicPhrase, "Panic: " ); +_LIT8( KSymbianUnitTestPanicReasonFormat, ", reason: %d" ); +_LIT8( KSymbianUnitTestAllocFailureRateFormat, ", alloc failure rate: %d" ); +_LIT8( KSymbianUnitTestSetupFailed, "Leave from the setup function: %d" ); +_LIT8( KSymbianUnitTestErrorFormat, "Test Failed File[%S], Line[%d], Msg[%S]"); +_LIT8( KSymbianUnitTestFailed, "Test Failed Reason[%S]"); +_LIT( KSymbianUnitTestPass, "pass" ); +_LIT( KSymbianUnitTestFail, "fail" ); +_LIT8( KSymbianUnitTestTimedOut, "Timed out: %d s" ); + +const TInt KMax64BitUintLengthAsDescriptor = 20; + +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +CSymbianUnitTestResult* CSymbianUnitTestResult::NewLC() + { + CSymbianUnitTestResult* self = new( ELeave )CSymbianUnitTestResult; + CleanupStack::PushL( self ); + self->ConstructL(); + return self; + } + +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +CSymbianUnitTestResult* CSymbianUnitTestResult::NewL() + { + CSymbianUnitTestResult* self = CSymbianUnitTestResult::NewLC(); + CleanupStack::Pop( self ); + return self; + } + +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +CSymbianUnitTestResult::CSymbianUnitTestResult() + : iOriginalHeap( User::Heap() ) + { + } + +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +void CSymbianUnitTestResult::ConstructL() + { + iCurrentTestName = KNullDesC().AllocL(); + } + +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +CSymbianUnitTestResult::~CSymbianUnitTestResult() + { + delete iCurrentTestName; + iFailures.ResetAndDestroy(); + } + +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +TInt CSymbianUnitTestResult::TestCount() const + { + return iTestCount; + } + +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +TInt CSymbianUnitTestResult::PassedTestCount() const + { + return ( iTestCount - iFailures.Count() ); + } + +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +RPointerArray< CSymbianUnitTestFailure >& CSymbianUnitTestResult::Failures() + { + return iFailures; + } + +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +void CSymbianUnitTestResult::StartTestL( const TDesC& aTestName ) + { + SUT_LOG_FORMAT(_L("StartCase[%S]"), &aTestName); + HBufC* tmp = aTestName.AllocL(); + delete iCurrentTestName; + iCurrentTestName = tmp; + iTestCount++; + iCurrentResult = ETrue; + iTime.UniversalTime(); + } + + +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +void CSymbianUnitTestResult::EndTestL() + { + TTime now; + now.UniversalTime(); + TTimeIntervalMicroSeconds microSeconds = now.MicroSecondsFrom(iTime); + TReal64 ms= microSeconds.Int64(); + //log the test time in milliseconds + SUT_LOG_FORMAT2(_L("EndCase Result[%S] Time[%d]ms"), + iCurrentResult?&KSymbianUnitTestPass:&KSymbianUnitTestFail, + microSeconds.Int64()/1000); + //SUT_LOG_FORMAT2(_L("EndCase Result[%S] Time[%d]ms"), &KSymbianUnitTestPass, microSeconds.Int64()/1000); + } + + + +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +void CSymbianUnitTestResult::AddSetupErrorL( TInt aError ) + { + const TInt KLength = + KSymbianUnitTestSetupFailed().Length() + + KMax64BitUintLengthAsDescriptor; + HBufC8* errorAsText = HBufC8::NewLC( KLength ); + errorAsText->Des().Format( KSymbianUnitTestSetupFailed, aError ); + User::LeaveIfError( AddFailure( *errorAsText, 0 ) ); + CleanupStack::PopAndDestroy( errorAsText ); + } + +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +void CSymbianUnitTestResult::AddLeaveFromTestL( + TInt aLeaveCode, + TInt aAllocFailureRate ) + { + const TInt KLength = + KSymbianUnitTestLeaveCodeMessageFormat().Length() + + KMax64BitUintLengthAsDescriptor; + HBufC8* failureMsg = HBufC8::NewLC( KLength ); + failureMsg->Des().Format( + KSymbianUnitTestLeaveCodeMessageFormat, aLeaveCode ); + User::LeaveIfError( AddFailure( *failureMsg, aAllocFailureRate ) ); + CleanupStack::PopAndDestroy( failureMsg ); + } + +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +void CSymbianUnitTestResult::AddMemoryLeakInfoL( + TInt aLeakedMemory, + TInt aAllocFailureRate ) + { + const TInt KLength = + KSymbianUnitTestMemoryLeakPhrase().Length() + + KMax64BitUintLengthAsDescriptor; + HBufC8* failureMsg = HBufC8::NewLC( KLength ); + failureMsg->Des().Format( + KSymbianUnitTestMemoryLeakPhrase, aLeakedMemory ); + User::LeaveIfError( AddFailure( *failureMsg, aAllocFailureRate ) ); + CleanupStack::PopAndDestroy( failureMsg ); + } + +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +void CSymbianUnitTestResult::AddPanicInfoL( + const TExitCategoryName& aPanicCategory, + TInt aPanicReason, + TInt aAllocFailureRate ) + { + const TInt KLength = + KSymbianUnitTestPanicPhrase().Length() + aPanicCategory.Length() + + KSymbianUnitTestPanicReasonFormat().Length() + + KMax64BitUintLengthAsDescriptor; + HBufC8* panicAsText = HBufC8::NewLC( KLength ); + TPtr8 panicAsTextPtr( panicAsText->Des() ); + panicAsTextPtr.Append( KSymbianUnitTestPanicPhrase ); + panicAsTextPtr.Append( aPanicCategory ); + panicAsTextPtr.AppendFormat( + KSymbianUnitTestPanicReasonFormat, aPanicReason ); + User::LeaveIfError( AddFailure( panicAsTextPtr, aAllocFailureRate ) ); + CleanupStack::PopAndDestroy( panicAsText ); + } + +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +TInt CSymbianUnitTestResult::AddAssertFailure( + const TDesC8& aFailureMessage, + TInt aLineNumber, + const TDesC8& aFileName ) + { + RHeap* currentHeap = User::SwitchHeap( &iOriginalHeap ); + TRAPD( err, AddAssertFailureL( aFailureMessage, aLineNumber, aFileName ) ); + User::SwitchHeap( currentHeap ); + return err; + } + +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +void CSymbianUnitTestResult::AddAssertFailureL( + const TDesC8& aFailureMessage, + TInt aLineNumber, + const TDesC8& aFileName ) + { + CSymbianUnitTestFailure* failure = + CSymbianUnitTestFailure::NewLC( + *iCurrentTestName, aFailureMessage, aLineNumber, aFileName ); + SUT_LOG_FORMAT3(KSymbianUnitTestErrorFormat, &aFileName, aLineNumber, &aFailureMessage); + iCurrentResult = EFalse; + iFailures.AppendL( failure ); + CleanupStack::Pop( failure ); + } + +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +void CSymbianUnitTestResult::AddTimeOutErrorL( TInt aTimeOut ) + { + const TInt KLength = + KSymbianUnitTestTimedOut().Length() + + KMax64BitUintLengthAsDescriptor; + HBufC8* errorAsText = HBufC8::NewLC( KLength ); + errorAsText->Des().Format( KSymbianUnitTestTimedOut, aTimeOut ); + User::LeaveIfError( AddFailure( *errorAsText, 0 ) ); + CleanupStack::PopAndDestroy( errorAsText ); + } + + +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +TInt CSymbianUnitTestResult::AddFailure( + const TDesC8& aFailureText, + TInt aAllocFailureRate ) + { + RHeap* currentHeap = User::SwitchHeap( &iOriginalHeap ); + TRAPD( err, AddFailureL( aFailureText, aAllocFailureRate ) ) + User::SwitchHeap( currentHeap ); + return err; + } + +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +void CSymbianUnitTestResult::AddFailureL( + const TDesC8& aFailureText, + TInt aAllocFailureRate ) + { + CSymbianUnitTestFailure* failure = NULL; + if ( aAllocFailureRate > 0 ) + { + const TInt KLength = + aFailureText.Length() + + KSymbianUnitTestAllocFailureRateFormat().Length() + + KMax64BitUintLengthAsDescriptor; + HBufC8* failureMsg = HBufC8::NewLC( KLength ); + failureMsg->Des() = aFailureText; + failureMsg->Des().AppendFormat( + KSymbianUnitTestAllocFailureRateFormat, aAllocFailureRate ); + failure = CSymbianUnitTestFailure::NewL( + *iCurrentTestName, *failureMsg, KErrNotFound, KNullDesC8 ); + CleanupStack::PopAndDestroy( failureMsg ); + CleanupStack::PushL( failure ); + } + else + { + failure = CSymbianUnitTestFailure::NewLC( + *iCurrentTestName, aFailureText, KErrNotFound, KNullDesC8 ); + } + SUT_LOG_FORMAT(KSymbianUnitTestFailed, &aFailureText); + iCurrentResult = EFalse; + iFailures.AppendL( failure ); + CleanupStack::Pop( failure ); + }