stif/TestScripter/src/TestScripter.cpp
branchRCL_3
changeset 19 07b41fa8d1dd
parent 18 3406c99bc375
child 20 ca8a1b6995f6
--- a/stif/TestScripter/src/TestScripter.cpp	Thu Jul 15 20:25:38 2010 +0300
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,5169 +0,0 @@
-/*
-* 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 file contains TestScripter implementation.
-*
-*/
-
-// INCLUDE FILES
-#include <StifTestEventInterface.h>
-#include <StifLogger.h>
-#include "TestScripter.h"
-#include "TestKeywords.h"
-#include "Logging.h"
-#include "TestEngineClient.h"
-#include "SettingServerClient.h"
-
-#include <stifinternal/UiEnvProxy.h>
-
-// EXTERNAL DATA STRUCTURES
-// None
-
-// EXTERNAL FUNCTION PROTOTYPES  
-// None
-
-// CONSTANTS
-// None
-
-// MACROS
-#ifdef LOGGER
-#undef LOGGER
-#endif
-#define LOGGER iLog
-
-// LOCAL CONSTANTS AND MACROS
-// None
- 
-// MODULE DATA STRUCTURES
-// None
-
-// LOCAL FUNCTION PROTOTYPES
-// None
-
-// FORWARD DECLARATIONS
-// None
-
-// ==================== LOCAL FUNCTIONS =======================================
-
-/*
--------------------------------------------------------------------------------
-
-     Class: -
-
-     Method: CallBack
-
-     Description: (Function pointer) Called from CScriptBase class. Generic
-                  method for call back operations from Test Script Class to
-                  TestScripter.
-  
-     Parameters: CTestScripter* aTestScripter: in: Pointer to TestScripter
-                 TStifTSCallBackType aCallType: in: Call back type
-                 const TDesC& aLine: in Script line
-                    
-     Return Values: TInt: Symbian error code
-
-     Errors/Exceptions: None
-
-     Status: Draft
-    
--------------------------------------------------------------------------------
-*/
-TInt CallBack( CTestScripter* aTestScripter,
-                TStifTSCallBackType aCallType,
-                const TDesC& aLine )
-    {
-    TInt ret( 0 );
-    switch( aCallType )
-        {
-        case EStifTSCallClass:
-            {
-            ret = aTestScripter->CallTestClass( aLine );
-            break;
-            }
-        case EStifTSGetObject:
-            {
-            ret = aTestScripter->GetTestScriptObject( aLine );
-            break;
-            }
-        default:
-            {
-            ret = KErrArgument;
-            break;
-            }
-        }
-
-    return ret;
-
-    }
-
-/*
--------------------------------------------------------------------------------
-
-    DESCRIPTION
-
-    This module contains the implementation of CTestScripter class 
-    member functions.
-
--------------------------------------------------------------------------------
-*/
-
-// ================= MEMBER FUNCTIONS =========================================
-
-/*
--------------------------------------------------------------------------------
-
-     Class: CTestScripter
-
-     Method: CTestScripter
-
-     Description: Default constructor
-
-     C++ default constructor can NOT contain any code, that
-     might leave.
-     
-     Parameters:    None
-
-     Return Values: None
-
-     Errors/Exceptions: None
-
-     Status: Draft
-    
--------------------------------------------------------------------------------
-*/
-CTestScripter::CTestScripter()
-    {
-
-    }
-
-/*
--------------------------------------------------------------------------------
-
-     Class: CTestScripter
-
-     Method: ConstructL
-
-     Description: Symbian OS second phase constructor
-
-     Symbian OS default constructor can leave.
-
-     Parameters:    None
-
-     Return Values: None
-
-     Errors/Exceptions: None.
-
-     Status: Draft
-
--------------------------------------------------------------------------------
-*/
-void CTestScripter::ConstructL()
-    {
-    __TRACE( KPrint, ( _L("New TestScripter") ) );
-    iStdLog = CStifLogger::NewL( KTestScripterLogDir,
-                                KTestScripterLogFile );
-    iLog = iStdLog;
-
-    iOOMIgnoreFailure = EFalse; // OFF for default
-
-    iCheckHeapBalance = EFalse; // No checking heap balance by default
-
-    //Read logger settings to check whether test case name is to be
-    //appended to log file name.
-    RSettingServer settingServer;
-    TInt ret = settingServer.Connect();
-    if(ret != KErrNone)
-        {
-        User::Leave(ret);
-        }
-    // Struct to StifLogger settigs.
-    TLoggerSettings loggerSettings; 
-    // Parse StifLogger defaults from STIF initialization file.
-    ret = settingServer.GetLoggerSettings(loggerSettings);
-    if(ret != KErrNone)
-        {
-        User::Leave(ret);
-        } 
-    // Close Setting server session
-    settingServer.Close();
-    iAddTestCaseTitleToLogName = loggerSettings.iAddTestCaseTitle;
-    
-    // Initialize parser variables
-    iCurrentParser = NULL;
-    iCurrentParserReadFirstLine = EFalse;
-    }
-
-/*
--------------------------------------------------------------------------------
-
-     Class: CTestScripter
-
-     Method: NewL
-
-     Description: Two-phased constructor.
-          
-     Parameters:    None
-
-     Return Values: CTestScripter*: new object
-
-     Errors/Exceptions: Leaves if new or ConstructL leaves.
-
-     Status: Draft
-    
--------------------------------------------------------------------------------
-*/
-CTestScripter* CTestScripter::NewL()
-    {
-     
-    CTestScripter* self = new (ELeave) CTestScripter();
-    
-    CleanupStack::PushL( self );
-    self->ConstructL();
-    CleanupStack::Pop();
-
-    return self;
-     
-    }
-
-/*
--------------------------------------------------------------------------------
-
-     Class: CTestScripter
-
-     Method: ~CTestScripter
-
-     Description: Destructor
-     
-     Parameters:    None
-
-     Return Values: None
-
-     Errors/Exceptions: None
-
-     Status: Draft
-    
--------------------------------------------------------------------------------
-*/
-CTestScripter::~CTestScripter()
-    {
-    iTestObjects.ResetAndDestroy();
-    iTestModules.ResetAndDestroy();
-    iDefinedIni.ResetAndDestroy();
-    iDefinedRuntime.ResetAndDestroy();
-    iDefinedLocal.ResetAndDestroy();
-    iParserStack.ResetAndDestroy();
-    iTestObjects.Close();
-    iTestModules.Close();
-    iDefinedIni.Close();
-    iDefinedRuntime.Close();
-    iDefinedLocal.Close();
-    iParserStack.Close();
-
-    iCurrentParser = NULL;
-    delete iSectionParser;
-    delete iTestRunner;
-
-    iLog = NULL;
-    delete iStdLog;
-    iStdLog = NULL;
-    delete iTCLog;
-    iTCLog = NULL;
-    }
-
-/*
--------------------------------------------------------------------------------
-
-     Class: CTestScripter
-
-     Method: InitL
-
-     Description: InitL is used to initialize the Test Module.
-
-     Parameters: const TFileName& aIniFile: in: Initialization file
-                 TBool aFirstTime: in: First time flag 
-                         
-     Return Values: Symbian OS error code
-
-     Errors/Exceptions: Leaves if ReadInitializationL leaves
-     
-     Status: Draft
-
--------------------------------------------------------------------------------
-*/        
-TInt CTestScripter::InitL( TFileName& aIniFile, 
-                           TBool /*aFirstTime*/ )
-    {
- 
-    __TRACEFUNC();
- 
-    if( aIniFile.Length() > 0 )
-        {
-        // Read initialization from test case file
-        ReadInitializationL( aIniFile, iDefinedIni );
-        }
-        
-    return KErrNone;
-    
-    }
-
-/*
--------------------------------------------------------------------------------
-
-     Class: CTestScripter
-
-     Method: GetTestCases
-
-     Description: GetTestCases is used to inquired test cases
-
-     Parameters:    const TFileName& aConfigFile: in: Test case file
-                    RPointerArray<RTestEngine::TTestCaseInfo>& aTestCases: out: 
-                          Array of TestCases 
-     
-     Return Values: KErrNone: Success
-                    Symbian OS error code
-
-     Errors/Exceptions: Leaves if CStifParser::SectionL leaves
-                        Leaves if CStifParser::NextSectionL leaves
-                        Leaves if memory allocation fails
-
-     Status: Draft
-    
--------------------------------------------------------------------------------
-*/        
-TInt CTestScripter::GetTestCasesL( const TFileName& aConfigFile, 
-                                   RPointerArray<TTestCaseInfo>& aTestCases )
-    {
-    __TRACEFUNC();
-    
-    if( aConfigFile.Length() == 0 )
-        {
-        __TRACE( KError, (_L("No test case script file given") ) );
-        __RDEBUG( (_L("No test case script file given") ) );
-        return KErrNotFound;
-        }
-
-    CStifParser* parser = NULL; 
-    
-    // Open test case file
-    TRAPD( err, 
-        parser = CStifParser::NewL( _L(""), 
-                                    aConfigFile, 
-                                    CStifParser::ECStyleComments ) );
-    if( err != KErrNone )
-        {
-        __TRACE( KError, (_L("Given test case script file [%S] not found"),
-            &aConfigFile ) );
-        __RDEBUG( (_L("Given test case script file [%S] not found"),
-            &aConfigFile ) );
-        return err;
-        }
-        
-    CleanupStack::PushL( parser );
-    CStifSectionParser* section;
-    TPtrC tmp;
-    TInt index = 0;
-    TInt ret = KErrNone;
-
-    // Find first section
-    section = parser->SectionL( KTestStartTag, KTestEndTag );
-    if( section == NULL )
-        {
-        ret = KErrNotFound;
-        }
-    else
-        {    
-        // Parse all sections
-        while( section )
-            {
-            CleanupStack::PushL( section );
-             
-            // Get title line
-            if( section->GetLine( TTestKeywords::Keyword( TTestKeywords::ETitle ),
-                tmp, ENoTag ) != KErrNone )
-                {
-                __TRACE( KError, (_L("Title not given for test case")));
-                User::Leave( KErrNotFound );
-                }
-            else
-                {
-                if( tmp.Length() > KMaxName )
-                    {
-                    tmp.Set( tmp.Left( KMaxName ) );
-                    }   
-                TTestCaseInfo* tc = new ( ELeave ) TTestCaseInfo();
-                CleanupStack::PushL( tc );
-                __TRACE( KVerbose, (_L("TestCase: %S"), &tmp));
-                tc->iTitle.Copy( tmp );
-                tc->iCaseNumber = ++index;
-                 
-                 // Get timeout if defined
-                CStifItemParser* item = section->GetItemLineL(  
-                   TTestKeywords::Keyword( TTestKeywords::ETimeout ) );
-                if( item )
-                    {
-                    TInt timeout; // In milliseconds
-                    ret = item->GetInt( 
-                        TTestKeywords::Keyword( TTestKeywords::ETimeout ), 
-                        timeout ); 
-                    if( ret != KErrNone )
-                        {
-                        __TRACE( KError, (_L("Illegal timeout")));
-                        User::Leave( ret ); 
-                        }
-                        
-                    // Type cast timeout to TInt64    
-                    tc->iTimeout = TInt64( timeout ) * 1000;
-                    __TRACE( KMessage, (_L("Timeout: %i"), tc->iTimeout.Int64() ));
-                    }
-                    
-                 // Get priority if defined
-                item = section->GetItemLineL(  
-                   TTestKeywords::Keyword( TTestKeywords::EPriority ) );
-                if( item )
-                    {
-                    // First try to interpret as integer
-                    ret = item->GetInt( 
-                        TTestKeywords::Keyword( TTestKeywords::EPriority ), 
-                        tc->iPriority ); 
-                    if( ret != KErrNone )
-                        {
-                        TPtrC priority;
-                        // If priority was not given as integer, it must be 
-                        // one of the predefined values
-                        ret = item->GetString( 
-                            TTestKeywords::Keyword( TTestKeywords::EPriority ),
-                            priority );
-                        if( ret != KErrNone )
-                            {
-                            __TRACE( KError, (_L("Illegal priority")));
-                            User::Leave( ret ); 
-                            }
-                        switch( TTestKeywords::Parse( priority, 
-                                                       TTestKeywords::Priority ) )
-                            {
-                            case TTestKeywords::EPriHigh:
-                                tc->iPriority = TTestCaseInfo::EPriorityHigh;
-                                break;
-                            case TTestKeywords::EPriNormal:
-                                tc->iPriority = TTestCaseInfo::EPriorityNormal;
-                                break;
-                            case TTestKeywords::EPriLow:
-                                tc->iPriority = TTestCaseInfo::EPriorityLow;
-                                break;
-                            default:
-                                __TRACE( KError, (_L("Illegal priority")));
-                                User::Leave( KErrArgument ); 
-                            }
-                        }
-                    __TRACE( KMessage, (_L("Priority: %i"), tc->iPriority ));
-                    }
-                    
-                aTestCases.Append(tc);
-                CleanupStack::Pop( tc );
-                }
-            CleanupStack::PopAndDestroy( section );
-            section = parser->NextSectionL( KTestStartTag, KTestEndTag );
-            }
-        }
-          
-    CleanupStack::PopAndDestroy( parser );
-
-    __TRACE( KPrint, (  _L( "Configfile '%S', testcases %d" ),
-        &aConfigFile, index ));     
-     
-    return ret;
-     
-    }
-
-/*
--------------------------------------------------------------------------------
-
-     Class: CTestScripter
-
-     Method: GetConstantValue
-
-     Description: Internal fuction to get const value defined in 
-                  [Define]...[Enddefine] section of script file
-
-     GetConstantValue gets const value defined in [Define]...[Enddefine] 
-     section of script file
-
-     Parameters:    const TDesC& aName: in: constant name 
-                    TDes& avalue: out: constant value
-
-     Return Values: KErrNone: Value is returned succesfully.
-                    KErrNotFound: Constant was not found
-                    Any other SymbianOS error
-                    
--------------------------------------------------------------------------------
-*/
-EXPORT_C TInt CTestScripter::GetConstantValue( const TDesC& aName, TDes& aValue )
-	{
-	
-	__TRACEFUNC();
-
-    TInt count = iDefinedLocal.Count();
-    for(TInt i = 0; i < count; i++)
-        {
-        if(iDefinedLocal[i]->Name() == aName)
-            {
-            aValue.Copy(iDefinedLocal[i]->Value());
-            return KErrNone;
-            }
-        }	
-
-	  count = iDefinedIni.Count();
-    for( TInt i = 0; i < count; i++ )
-        {
-        if( iDefinedIni[i]->Name() == aName )
-            {
-            aValue.Copy( iDefinedIni[i]->Value() );
-            return KErrNone;
-            }
-        }	
-	
-    count = iDefinedRuntime.Count();
-    for( TInt i = 0; i < count; i++ )
-        {
-        if( iDefinedRuntime[i]->Name() == aName )
-            {
-            aValue.Copy( iDefinedRuntime[i]->Value() );
-            return KErrNone;
-            }
-        }	
-    return KErrNotFound;
-	}
-
-
-/*
--------------------------------------------------------------------------------
-
-     Class: CTestScripter
-
-     Method: RunTestCaseL
-
-     Description: Run a specified testcase.
-
-     RunTestCaseL is used to run an individual test case. 
-  
-     Parameters:    const TInt aCaseNumber: in: Testcase number 
-                    const TFileName& aConfig: in: Test case file
-                    TTestResult& aResult: out: test case result
-
-     Return Values: KErrNone: Test case started succesfully.
-                    KErrNotFound: Testcase not found
-                    KErrUnknown: Unknown TestScripter error
-                    Any other SymbianOS error
-
-     Errors/Exceptions: Leaves if GetTestCaseL leaves
-                        Leaves if RunTestL leaves
-                        Leaves if memory allocation fails
-     
-     Status: Draft
-
--------------------------------------------------------------------------------
-*/
-TInt CTestScripter::RunTestCaseL( const TInt aCaseNumber,
-                                  const TFileName& aConfig,
-                                  TTestResult& aResult )
-    {
-
-    // Heap is checked by test server
-    //__UHEAP_MARK;
-
-    __TRACEFUNC();
-
-    //Open new log file with test case title in file name
-    if(iAddTestCaseTitleToLogName)
-        {
-        //Delete test case logger if exists
-        if(iTCLog)
-            {
-            delete iTCLog;
-            iTCLog = NULL;
-            }
-            
-        TFileName logFileName;
-        TName title;
-        TestModuleIf().GetTestCaseTitleL(title);
-        
-        logFileName.Format(KTestScripterLogFileWithTitle, &title);
-        iTCLog = CStifLogger::NewL(KTestScripterLogDir, logFileName);
-        iLog = iTCLog;
-        }
-
-    __TRACE( KMessage, (_L("\n\n***Testcase started***")));
-
-    // Remove locally defined variables 
-    iDefinedLocal.ResetAndDestroy();
-    // Remove existing function parsers (there shouldn't be any)
-    iParserStack.ResetAndDestroy();
-    
-    // Keep file name of config file
-    iConfig = aConfig;
-
-    // Read initialization from test case file
-    ReadInitializationL( aConfig, iDefinedRuntime );
-
-    // Get case from test case file
-    iSectionParser = GetTestCaseL( aCaseNumber, aConfig );
-    iCurrentParser = iSectionParser;
-    iCurrentParserReadFirstLine = EFalse;
-
-    // Check parsing result
-    if( iSectionParser == NULL )
-        {
-        __TRACE( KError, (_L("***Parsing testcase failed***\n\n")));
-        // Delete runtime defines
-        iDefinedRuntime.ResetAndDestroy();
-        //__UHEAP_MARKEND;
-        return KErrNotFound;
-        }
-
-    // When option is set in cfg file, on EKA2 env memory leaking is enabled
-	TInt memCellsBef = 0; //memory in current thread allocated before the test case is run
-	TInt memCellsAft = 0; //memory in current thread allocated after the test case has run
-
-   	memCellsBef = User::Heap().Count();
-	__TRACE(KMessage, (_L("Allocated memory cells before the test case: %d"), memCellsBef));
-
-    CActiveScheduler* activeScheduler =
-        new ( ELeave ) CActiveScheduler();
-    CleanupStack::PushL( activeScheduler );
-     
-    if ( CActiveScheduler::Current() == NULL )
-    	{
-    	CActiveScheduler::Install( activeScheduler );
-    	}
-
-    // Run the given testcase described in iSectionParser section
-    RunTestL();
-
-    iTestObjects.ResetAndDestroy();
-    iTestModules.ResetAndDestroy();
-
-    // TestScripter must stop Active Scheduler after test
-    // object is destroyed. Otherwise if unexpected error occurs
-    // handling is erronous.
-    CleanupStack::PopAndDestroy( activeScheduler );
-
-	// Check for memory leak.
-	// It is reported in log always, but result of test case is changed only
-	// when option in cfg file is enabled.
-	memCellsAft = User::Heap().Count();
-	__TRACE(KMessage, (_L("Allocated memory cells after the test case: %d"), memCellsAft));
-
-	// if there is a difference report memory leak
-	if(memCellsAft != memCellsBef)
-		{
-		__TRACE(KError, (_L("Memory leak, %d cell(s) is missing"), memCellsAft - memCellsBef));
-		if(iCheckHeapBalance)
-			{
-			// Memory leaks detection is disabled for UI components testing
-			if ( !( TestModuleIf().UITesting() ) )
-				{
-				UpdateTestCaseResult(KErrGeneral, _L("Memory leak has occured"));
-				}
-			}
-		}
-
-    // Delete parser and set current parser to NULL
-    iCurrentParser = NULL;
-    delete iSectionParser;
-    iSectionParser = NULL;  
-    
-    // Erase config file name
-    iConfig = KNullDesC; 
-    
-    // Return result 
-    aResult = iResult;
-    
-    if( iResult.iResult == KErrNone )
-        {
-        __TRACE( KPrint, (_L("***Testcase PASSED***\n\n")));
-        TestModuleIf().Printf( KPrintPriNorm, _L("TestScripter"), 
-            _L("***Testcase PASSED***\n\n"));
-        }
-    else
-        {        
-        __TRACE( KPrint, (_L("***Testcase FAILED***\n\n")));
-        TestModuleIf().Printf( KPrintPriNorm, _L("TestScripter"), 
-            _L("***Testcase FAILED***\n\n"));
-        }
-    User::After(300000);
-    // Delete runtime defines
-    iDefinedRuntime.ResetAndDestroy();
-    
-    //__UHEAP_MARKEND;
-             
-    //If log was replaced then restore it
-    if(iAddTestCaseTitleToLogName)
-        {
-        iLog = iStdLog;
-        delete iTCLog;
-        iTCLog = NULL;
-        }
-    
-    return KErrNone;
-     
-    }
-    
-/*
--------------------------------------------------------------------------------
-
-     Class: CTestScripter
-
-     Method: ReadInitializationL
-
-     Description: Read initialization from file.
-
-     Parameters:    const TDesC& aIniFile: in: File that contains initialization
-                    
-     Return Values: None
-     
-     Errors/Exceptions: None
-     
-     Status: Draft
-
--------------------------------------------------------------------------------
-*/
-void CTestScripter::ReadInitializationL(
-    const TDesC& aIniFile,
-    RPointerArray<CDefinedValue>& aDefines )
-    {
-
-    CStifParser* parser = NULL;
-
-    // Open file
-    TRAPD( err,
-        parser = CStifParser::NewL( _L(""),
-                                    aIniFile,
-                                    CStifParser::ECStyleComments ) );
-    if( ( err == KErrNone ) && parser )
-        {
-        CleanupStack::PushL( parser );
-        __TRACE( KMessage, (_L("Read initialization from [%S]"),
-            &aIniFile ) );
-
-        CStifSectionParser* section = parser->SectionL( KDefineStartTag,
-                                                        KDefineEndTag );
-        while(section)
-            {
-            CleanupStack::PushL( section );
-            __TRACE( KMessage, (_L("Read defines")) );
-
-            TPtrC name;
-            TPtrC value;
-            CStifItemParser* item = section->GetItemLineL( _L("") );
-            while( item )
-                {
-                CleanupStack::PushL( item );
-
-                if( item->GetString( _L(""), name ) != KErrNone )
-                    {
-                    __TRACE( KError, (_L("No define name given")) );
-                    User::Leave( KErrGeneral );
-                    }
-                if( item->Remainder( value ) != KErrNone )
-                    {
-                    __TRACE( KError, (_L("No define value given")) );
-                    User::Leave( KErrGeneral );
-                    }
-                TInt count = aDefines.Count();
-                TInt i = 0;
-                for( ; i < count; i++ )
-                    {
-                    if( aDefines[i]->Name() == name )
-                        {
-                        // Update existing
-                        aDefines[i]->SetValueL( value );
-                        __TRACE(KMessage, (_L("Update define [%S]: [%S]"), &name, &value));
-                        break;
-                        }
-                    }
-                if( i == count)
-                    {
-                    // New define, store it
-                    CDefinedValue* define = CDefinedValue::NewL( name, value );
-                    CleanupStack::PushL( define );
-                    User::LeaveIfError( aDefines.Append( define ) );
-                    CleanupStack::Pop( define );
-                    }
-
-                CleanupStack::PopAndDestroy( item );
-                item = section->GetNextItemLineL();
-                }
-            CleanupStack::PopAndDestroy( section );
-            section = parser->NextSectionL(KDefineStartTag, KDefineEndTag);
-            }
-
-		//Read StifSettings section and find value for CheckHeapBalance.
-		//(In cfg file in settings section User may also set CapsModifier
-		// option. This is handled in TestServerClient.cpp in 
-		// RTestServer::GetCapsModifier method).
-		section = parser->SectionL(KStifSettingsStartTag, KStifSettingsEndTag);
-
-		if(section)
-			{
-			CleanupStack::PushL(section);
-			__TRACE(KMessage, (_L("Read stif settings")));
-
-			TPtrC value;
-			CStifItemParser* item = section->GetItemLineL(_L(""));
-			while(item)
-				{
-				CleanupStack::PushL(item);
-				__TRACE( KMessage, (_L("Got settings line")));
-
-				if(item->GetString(_L("CheckHeapBalance="), value) == KErrNone)
-					{
-					__TRACE(KMessage, (_L("Got CheckHeapBalance item, value=%S"), &value));
-					if(value.Compare(_L("off")) == 0)
-		       			{
-		       			iCheckHeapBalance = EFalse;
-		       			}
-					else if(value.Compare(_L("on")) == 0)
-						{
-						iCheckHeapBalance = ETrue;
-		       			}
-					else
-						{
-						__TRACE(KError, (_L("Value '%S' for CheckHeapBalance setting is not supported. Aborting"), &value));
-						User::Leave(KErrNotSupported);
-						}
-					}
-				CleanupStack::PopAndDestroy(item);
-				item = section->GetNextItemLineL();
-				}
-			CleanupStack::PopAndDestroy(section);
-			}
-
-        CleanupStack::PopAndDestroy( parser );
-        }
-    }
-
-
-/*
--------------------------------------------------------------------------------
-
-     Class: CTestScripter
-
-     Method: GetTestCaseL
-
-     Description: Get specified test case section from configfile.
-
-     Parameters:    const TInt aCaseNumber: in: Test case number
-                    const TFileName& aConfig: in: Configfile name 
-     
-     Return Values: CStifSectionParser*: pointer to test case section
-
-     Errors/Exceptions: Leaves if CStifParser::NewL leaves
-                        Leaves if CStifParser::SectionL leaves
-                        Leaves if memory allocation fails
-                                
-
-     Status: Draft
-    
--------------------------------------------------------------------------------
-*/
-CStifSectionParser* CTestScripter::GetTestCaseL( const TInt aCaseNumber, 
-                                             const TFileName& aConfig )
-    {
-    __TRACEFUNC();
-    CStifParser* parser = NULL;
-    
-    TRAPD( err, 
-        parser = CStifParser::NewL( _L(""), 
-                                    aConfig, 
-                                    CStifParser::ECStyleComments ); );
-    if( err != KErrNone )
-        {
-        __TRACE( KError, (_L("Test case file [%S] not found"), &aConfig ));
-        User::Leave( err );
-        }
-    CleanupStack::PushL( parser );
-
-    CStifSectionParser* section = NULL;
-    TRAP( err, 
-        section =parser->SectionL( KTestStartTag, KTestEndTag, aCaseNumber ););
-    if( err != KErrNone )
-        {
-        __TRACE( KError, 
-            (_L("Section [%S/%d] not found"), &aConfig, aCaseNumber ));
-        User::Leave( err );
-        }
-
-    CleanupStack::PopAndDestroy( parser );
-    return section;
-    
-    }
-
-/*
--------------------------------------------------------------------------------
-
-     Class: CTestScripter
-
-     Method: GetSubL
-
-     Description: Get specified function (sub) from stored config file.
-
-     Parameters:    const TDesC& aSubName: in: function name 
-     
-     Return Values: CStifSectionParser*: pointer to test function section
-
-     Errors/Exceptions: Leaves if CStifParser::NewL leaves
-                        Leaves if CStifParser::SectionL leaves
-                        Leaves if memory allocation fails
-                                
-     Status: Draft
-    
--------------------------------------------------------------------------------
-*/
-CStifSectionParser* CTestScripter::GetSubL(const TDesC& aSubName)
-    {
-    __TRACE(KMessage, (_L("Searching sub [%S]."), &aSubName));
-    // Check if config file is set
-    if(iConfig.Length() == 0)
-        {
-        __TRACE(KError, (_L("Searching sub [%S]. Config file is not set."), &aSubName));
-        User::Leave(KErrBadName);
-        }
-        
-    // Create parser
-    CStifParser* parser = NULL;
-    CStifSectionParser* section = NULL;
-        
-    TRAPD(err, 
-          parser = CStifParser::NewL(_L(""), iConfig, CStifParser::ECStyleComments);
-         );
-    if(err != KErrNone)
-        {
-        __TRACE(KError, (_L("Searching sub [%S]. Error [%d] when loading config file [%S]."), &aSubName, err, &iConfig));
-        User::Leave(err);
-        }
-    CleanupStack::PushL(parser);
-
-    // Set section tags
-    _LIT(KEndSubTag, "[EndSub]");
-    TName startSubTag;
-    startSubTag.Copy(_L("[Sub "));
-    startSubTag.Append(aSubName);
-    startSubTag.Append(_L("]"));
-    
-    // Load section
-    TRAP(err, 
-         section = parser->SectionL(startSubTag, KEndSubTag, 1);
-        );
-    if(err != KErrNone)
-        {
-        __TRACE(KError, (_L("Searching sub [%S]. Searching section %S%S ended with error [%d]."), &aSubName, &startSubTag, &KEndSubTag, err));
-        User::Leave(err);
-        }
-    if(!section)
-        {
-        __TRACE(KError, (_L("Searching sub [%S]. Section %S%S not found."), &aSubName, &startSubTag, &KEndSubTag));
-        User::Leave(err);
-        }
-    else
-        {
-        __TRACE(KMessage, (_L("Searching sub [%S]. Section %S%S found."), &aSubName, &startSubTag, &KEndSubTag));
-        }
-
-    CleanupStack::PopAndDestroy(parser);
-    return section;
-    }
-
-/*
--------------------------------------------------------------------------------
-
-     Class: CTestScripter
-
-     Method: RunTestL
-
-     Description: Run a testcase specified by iSectionParser.
-
-     Parameters:    None
-     
-     Return Values: None.
-
-     Errors/Exceptions: Leaves if CSectionParser::GetItemLineL leaves
-                        Leaves if CTestRunner::NewL leaves
-                        Leaves if memory allocation fails                                
-
-     Status: Draft
-    
--------------------------------------------------------------------------------
-*/
-void CTestScripter::RunTestL()
-    {
-    __TRACEFUNC();
-    iResult.iResult = KErrNone;
-    iResult.iResultDes.Zero();
-     
-    // "title" keyword must be in the first line
-    TPtrC title;
-    if( iCurrentParser->GetLine( 
-        TTestKeywords::Keyword( TTestKeywords::ETitle ), title, ENoTag ) 
-        != KErrNone )
-        {
-        __TRACE( KError, (_L("title not found from section")));
-        User::Leave( KErrNotFound ); 
-        }
-    iCurrentParserReadFirstLine = ETrue;
-
-    __TRACE( KMessage, (_L("RunTest: %S"), &title ));
-     
-    iTestRunner = CTestRunner::NewL( this );
-
-    TestModuleIf().Printf( KPrintPriNorm, _L("RunTest"), _L("%S"), &title );
-    
-    // Rest of the job is done by test runner
-    iTestRunner->SetRunnerActive();
-
-    // Start activeScheduler looping testcase lines
-    __TRACE( KMessage, (_L("Start CActiveScheduler")));
-    CActiveScheduler::Current()->Start();
-  
-    delete iTestRunner;
-    iTestRunner = NULL;
-    __TRACE( KMessage, ( _L("RunTestL: Done")));
- 
-    // Destroy locally defined variables 
-    iDefinedLocal.ResetAndDestroy();
-    // Destroy function parsers (there shouldn't be any)
-    iParserStack.ResetAndDestroy();
-    }     
-
-/*
--------------------------------------------------------------------------------
-
-     Class: CTestScripter
-
-     Method: GetTestModuleL
-
-     Description: Load testmodule if not already loaded, otherwise return
-                  description of the loaded testmodule.
-
-     Parameters:    TDesC& aModule: in: module name
-                    TDesC& aIniFile: in: ini file name
-     
-     Return Values: CTCTestModule*: pointer to testmodules description
-     
-     Errors/Exceptions: Leaves if CTCTestModule::NewL leaves
-                        Leaves if RPointerArray::Append fails  
-
-     Status: Draft
-    
--------------------------------------------------------------------------------
-*/              
-TTestModule* CTestScripter::LoadTestModuleL( TDesC& aModule )
-    {     
-    __TRACEFUNC();
-    TInt count = iTestModules.Count();
-    for( TInt i=0; i < count; i++ )
-        {
-        if( iTestModules[i]->ModuleName() == aModule )
-            {
-            // Found test module, return description
-            __TRACE( KMessage, 
-                (_L("GetTestModuleL: Use already loaded TestModule (%S)"), 
-                &aModule ));
-            return iTestModules[i];
-            }
-        }
-         
-    __TRACE( KMessage, (_L("GetTestModuleL: Load new TestModule (%S)"), 
-        &aModule ));
-    TTestModule* module = new (ELeave) TTestModule();
-    CleanupStack::PushL( module );
-    module->ModuleName() = aModule;
-    User::LeaveIfError( iTestModules.Append( module ) );
-    CleanupStack::Pop( module );
-
-    TInt ret = module->iLibrary.Load ( aModule );
-    
-    if( ret != KErrNone )
-        {
-        __TRACE( KMessage, (_L("GetTestModuleL: %S loading failed"), 
-            &aModule ));
-        TestModuleIf().Printf( KMessage, _L("Load dll"), _L("%S failed"), 
-            &aModule );
-        
-        User::Leave( ret );
-        }
-         
-    // Get pointer to first exported function    
-    module->iLibEntry = (CInterfaceFactory) module->iLibrary.Lookup(1);
-    return module;
-    
-    }
-    
-/*
--------------------------------------------------------------------------------
-
-     Class: CTestScripter
-
-     Method: CreateObjectL
-
-     Description: Load testmodule if not already loaded, otherwise return
-                  description of the loaded testmodule.
-
-     Parameters:    TDesC& aModule: in: module name
-                    TDesC& aObjectId: in: object id name
-     
-     Return Values: None
-     
-     Errors/Exceptions: Leaves on error
-
-     Status: Draft
-    
--------------------------------------------------------------------------------
-*/
-void CTestScripter::CreateObjectL( TDesC& aModule, TDesC& aObjectId )
-    {     
-    __TRACEFUNC();
-
-    // Load module and get pointer
-    TTestModule* module = LoadTestModuleL( aModule );
-    TTestObject* object = new (ELeave) TTestObject();
-    CleanupStack::PushL( object );
-    object->ObjectId() = aObjectId;
-    User::LeaveIfError( iTestObjects.Append( object ) );
-    CleanupStack::Pop( object );
-        
-    // Create object    
-    object->iScript = module->iLibEntry( TestModuleIf() );
-    //User::LeaveIfNull ( object->iScript );
-    if( object->iScript == NULL )
-        {
-        User::Leave( KErrGeneral );
-        }
-
-    // Create continue callback 
-    object->iContinue = CTestContinue::NewL( this, object );
-
-    // Create function pointer operation to possible
-    object->iScript->SetScripter( &CallBack, this );
-    
-    }
-    
-/*
--------------------------------------------------------------------------------
-
-     Class: CTestScripter
-
-     Method: CreateKernelObjectL
-
-     Description: Load testdriver if not already loaded, otherwise return
-                  description of the loaded testdriver.
-
-     Parameters:    TDesC& aDriver: in: driver name
-                    TDesC& aObjectId: in: object id name
-     
-     Return Values: None
-     
-     Errors/Exceptions: Leaves on error
-
-     Status: Draft
-    
--------------------------------------------------------------------------------
-*/
-void CTestScripter::CreateKernelObjectL( TDesC& aDriver, TDesC& aObjectId )
-    {     
-
-    __TRACEFUNC();
-    
-    if( ( aDriver.Length() > KMaxName ) ||
-        ( aObjectId.Length() > KMaxName ) )
-        {
-        __TRACE( KError, (_L("CreateKernelObjectL: Max lenght exceeded") ) );
-        User::Leave( KErrArgument );
-        }
-    TInt ret = User::LoadLogicalDevice( aDriver );
-    if( ( ret != KErrNone ) && ( ret != KErrAlreadyExists ) )
-        {
-        __TRACE( KError, 
-            (_L("CreateKernelObjectL: User::LoadLogicalDevice failed %d"), 
-                ret ) );
-        User::Leave( ret );
-        } 
-        
-    TTestObjectKernel* object = new (ELeave) TTestObjectKernel();
-    CleanupStack::PushL( object );
-    object->ObjectId() = aObjectId;
-    object->LddName().Copy( aDriver );
-    ret = object->KernelTestClass().Open( 
-                object->KernelTestClass().VersionRequired(), 
-                aDriver );
-    if( ret != KErrNone )
-        {
-        __TRACE( KError, 
-            (_L("CreateKernelObjectL: KernelTestClass().Open failed %d"), 
-                ret ) );
-        User::Leave( ret );
-        }
-        
-    User::LeaveIfError( iTestObjects.Append( object ) );
-    CleanupStack::Pop( object );
-        
-    }
-    
-/*
--------------------------------------------------------------------------------
-
-     Class: CTestScripter
-
-     Method: GetTestModuleL
-
-     Description: Load testmodule if not already loaded, otherwise return
-                  description of the loaded testmodule.
-
-     Parameters:    TDesC& aModule: in: module name
-                    TDesC& aIniFile: in: ini file name
-     
-     Return Values: CTCTestModule*: pointer to testmodules description
-     
-     Errors/Exceptions: Leaves if CTCTestModule::NewL leaves
-                        Leaves if RPointerArray::Append fails  
-
-     Status: Draft
-    
--------------------------------------------------------------------------------
-*/
-TInt CTestScripter::DeleteObjectL( TDesC& aObjectId )
-    {     
-    __TRACEFUNC();
-
-    TInt count = iTestObjects.Count();
-    for( TInt i=0; i < count; i++ )
-        {
-        if( iTestObjects[i]->ObjectId() == aObjectId )
-            {
-            TTestObjectBase* object = iTestObjects[i];
-            iTestObjects.Remove( i );
-            delete object;
-            return KErrNone;
-            }
-        }
-     
-    return KErrNone;
-    }
-
-/*
--------------------------------------------------------------------------------
-
-     Class: CTestScripter
-
-     Method: GetTest
-
-     Description: Get test case from testcase array.
-
-     Parameters:    TDesC& aTestId: in: TestId for testcase
-     
-     Return Values: CTCTestCase*: running/runned testcase
-                    NULL: Testcase with aTestId not running/runned 
-
-     Errors/Exceptions: None
-
-     Status: Draft
-    
--------------------------------------------------------------------------------
-*/
-TTestObjectBase* CTestScripter::GetObject( const TDesC& aObjectId )
-    {
-    __TRACEFUNC();
-    
-    TInt count = iTestObjects.Count();
-    for( TInt i=0; i < count; i++ )
-        {
-        if( iTestObjects[i]->ObjectId() == aObjectId )
-            {
-            // Found testcase with specified TestId
-            return iTestObjects[i];
-            }
-        }
-    // Object with iTestObjects not found
-    return NULL;
-    
-    }
-
-/*
--------------------------------------------------------------------------------
-
-     Class: CTestScripter
-
-     Method: CallTestClass
-
-     Description: For sub classing operations.
-  
-     Parameters: const TDesC& aLine: in: script line
-                    
-     Return Values: TInt: Symbian error code
-
-     Errors/Exceptions: None
-
-     Status: Draft
-    
--------------------------------------------------------------------------------
-*/
-TInt CTestScripter::CallTestClass( const TDesC& aLine )
-    {
-    CStifItemParser* item = CStifItemParser::NewL( aLine, 0, aLine.Length() );
-    CleanupStack::PushL( item );
-
-    TPtrC objectName;
-    TInt ret( KErrNone );
-    ret = item->GetString( _L( "" ), objectName );
-    if( ret != KErrNone )
-        {
-        CleanupStack::PopAndDestroy( item);
-        return ret;
-        }
-
-    TTestObjectBase* obj = GetObject( objectName );
-    if( obj == NULL )
-        {
-        CleanupStack::PopAndDestroy(item );
-        return KErrNotFound;
-        }
-
-    TRAPD( commandResult, commandResult = obj->RunMethodL( *item ) );
-
-    CleanupStack::PopAndDestroy(item );
-
-    return commandResult;
-    
-    }
-    
-/*
--------------------------------------------------------------------------------
-
-     Class: CTestScripter
-
-     Method: GetTestScriptObject
-
-     Description: Get object address.
-  
-     Parameters: const TDesC& aObjectName: in: object name
-                    
-     Return Values: TInt: Symbian error code
-
-     Errors/Exceptions: None
-
-     Status: Draft
-    
--------------------------------------------------------------------------------
-*/
-TInt CTestScripter::GetTestScriptObject( const TDesC& aObjectName )
-    {
-
-    TTestObjectBase* objBase = GetObject( aObjectName );
-    if( ( objBase == NULL ) || 
-        ( objBase->ObjectType() != TTestObjectBase::EObjectNormal ) )
-        {
-        return KErrNotFound;
-        }
-    
-    TTestObject* object = ( TTestObject* )objBase;
-    
-    return (TInt) object->iScript;
-    
-    }
-
-/*
--------------------------------------------------------------------------------
-
-     Class: CTestScripter
-
-     Method: UpdateTestCaseResult
-
-     Description: Updates result of test case. If there is already some
-                  description stored, it is put in the [] brackets.
-  
-     Parameters: const TInt aResult: in: error code
-                 const TDesC& aDescr: in: description
-                    
-     Return Values: None
-
-     Errors/Exceptions: None
-
-     Status: Draft
-    
--------------------------------------------------------------------------------
-*/
-void CTestScripter::UpdateTestCaseResult(const TInt aResult, const TDesC& aDescr)
-    {
-    // Create buffer
-    RBuf buf;
-
-    TInt ret = buf.Create(iResult.iResultDes.Length() + aDescr.Length() + 5);
-    if(ret != KErrNone)
-        {
-        __TRACE(KError, (_L("UpdateResultDescription: descriptor creation failed [%d]"), ret));
-        return;
-        }
-    CleanupClosePushL(buf);
-
-    // Update result
-    iResult.iResult = aResult;
-    if(iResult.iResultDes.Length() > 0)
-        {
-        buf.Format(_L("%S [%S]"), &aDescr, &iResult.iResultDes);
-        }
-    else
-        {
-        buf.Copy(aDescr);
-        }
-
-    SetResultDescription(buf);
-    
-    // Close buffer
-    CleanupStack::PopAndDestroy(&buf);
-    }
-
-/*
--------------------------------------------------------------------------------
-
-     Class: CTestScripter
-
-     Method: SetResultDescription
-
-     Description: Sets result description of test case.
-  
-     Parameters: const TDesC& aDescr: in: new description
-                    
-     Return Values: None
-
-     Errors/Exceptions: None
-
-     Status: Draft
-    
--------------------------------------------------------------------------------
-*/
-EXPORT_C void CTestScripter::SetResultDescription(const TDesC& aDescr)
-    {
-    if(aDescr.Length() > KStifMaxResultDes)
-        {
-        iResult.iResultDes.Copy(aDescr.Mid(0, KStifMaxResultDes));
-        }
-    else
-        {
-        iResult.iResultDes.Copy(aDescr);
-        }
-    }
-
-/*
--------------------------------------------------------------------------------
-
-     Class: CTestScripter
-
-     Method: SetLocalValue
-
-     Description: Internal fuction to set value of local variable defined in script 
-
-     Parameters:    const TDesC& aName: in: local variable name 
-                    const TDesC& avalue: in: local variable value
-
-     Return Values: KErrNone: Value is returned succesfully.
-                    KErrNotFound: Variable was not found
-                    Any other SymbianOS error
-                    
--------------------------------------------------------------------------------
-*/
-EXPORT_C TInt CTestScripter::SetLocalValue(const TDesC& aName, const TDesC& aValue)
-    {	
-    __TRACEFUNC();
-
-    TInt count = iDefinedLocal.Count();
-    for(TInt i = 0; i < count; i++)
-        {
-        if(iDefinedLocal[i]->Name() == aName)
-            {
-            iDefinedLocal[i]->SetValueL(const_cast<TDesC&>(aValue));
-            return KErrNone;
-            }
-        }	
-
-    return KErrNotFound;
-    }
-
-/*
--------------------------------------------------------------------------------
-
-     Class: CTestScripter
-
-     Method: GetLocalValue
-
-     Description: Internal fuction to get value of local variable 
-
-     Parameters:    const TDesC& aName: in: local variable name 
-                    const TDesC& avalue: in: local variable value
-
-     Return Values: KErrNone: Value is returned succesfully.
-                    KErrNotFound: Variable was not found
-                    Any other SymbianOS error
-                    
--------------------------------------------------------------------------------
-*/
-EXPORT_C TInt CTestScripter::GetLocalValue(const TDesC& aName, TDes& aValue)
-    {
-    __TRACEFUNC();
-
-    TInt count = iDefinedLocal.Count();
-    for(TInt i = 0; i < count; i++)
-        {
-        if(iDefinedLocal[i]->Name() == aName)
-            {
-            aValue.Copy(iDefinedLocal[i]->Value());
-            return KErrNone;
-            }
-        }	
-
-    return KErrNotFound;
-    }
-
-/*
--------------------------------------------------------------------------------
-
-    DESCRIPTION
-
-    This module contains the implementation of CTestRunner class 
-    member functions. CTestRunner is used to execute TestScripter testcase by 
-    CTestScripter.
-
--------------------------------------------------------------------------------
-*/
-// MACROS
-#ifdef LOGGER
-#undef LOGGER
-#endif
-#define LOGGER iTestScripter->iLog
-
-// ================= MEMBER FUNCTIONS =========================================
-
-/*
--------------------------------------------------------------------------------
-
-     Class: CTestRunner
-
-     Method: CTestRunner
-
-     Description: Default constructor
-
-     C++ default constructor can NOT contain any code, that
-     might leave.
-     
-     Parameters: CTestScripter* aTestScripter: in: Backpointer to CTestScripter
-
-     Return Values: None
-
-     Errors/Exceptions: None
-
-     Status: Draft
-    
--------------------------------------------------------------------------------
-*/
-CTestRunner::CTestRunner( CTestScripter* aTestScripter ): 
-    CActive(  CActive::EPriorityHigh ), // Executed with highest priority 
-    iState( ERunnerIdle ),
-    iTestScripter( aTestScripter ),
-    iRemainingTimeValue( 0 )
-    {
-    CActiveScheduler::Add( this );
-    __TRACEFUNC();
-    
-    }
-
-/*
--------------------------------------------------------------------------------
-
-     Class: CTestRunner
-
-     Method: ConstructL
-
-     Description: Symbian OS second phase constructor
-
-     Symbian OS default constructor can leave.
-
-     Parameters:    None
-
-     Return Values: None
-
-     Errors/Exceptions: None
-
-     Status: Draft
-    
--------------------------------------------------------------------------------
-*/
-void CTestRunner::ConstructL()
-    {
-    
-    iPauseTimer.CreateLocal();
-    
-    // Initiaze all OOM related variables to default.
-    OOMHeapToNormal();
-
-    }
-
-/*
--------------------------------------------------------------------------------
-
-     Class: CTestRunner
-
-     Method: NewL
-
-     Description: Two-phased constructor.
-          
-     Parameters: CTestScripter* aTestScripter: in: Backpointer to CTestScripter
-
-     Return Values: CTestRunner*: new object
-
-     Errors/Exceptions: Leaves if new or ConstructL leaves
-
-     Status: Draft
-    
--------------------------------------------------------------------------------
-*/
-
-CTestRunner* CTestRunner::NewL( CTestScripter* aTestScripter )
-    {
-    CTestRunner* self = new (ELeave) CTestRunner( aTestScripter );
-     
-    CleanupStack::PushL( self );
-    self->ConstructL();
-    CleanupStack::Pop();
-
-    return self;
-    }
-
-/*
--------------------------------------------------------------------------------
-
-     Class: CTestRunner
-
-     Method: ~CTestRunner
-
-     Description: Destructor
-     
-     Parameters:    None
-
-     Return Values: None
-
-     Errors/Exceptions: None
-
-     Status: Approved
-    
--------------------------------------------------------------------------------
-*/     
-
-CTestRunner::~CTestRunner()
-    {
-    __TRACEFUNC();
-    Cancel();
-
-    iPauseTimer.Close();
-    
-    delete iLine;
-    iLine = NULL;
-    
-    TInt count = iEventArray.Count();
-    TEventIf event( TEventIf::ERelEvent ); 
-    for( TInt i = 0; i < count; i++ )
-        {
-        HBufC* tmp = iEventArray[0];
-        event.SetName( iEventArray[0]->Des() );
-        iEventArray.Remove(0);
-		if( iTestScripter != NULL )
-			{
-			iTestScripter->TestModuleIf().Event( event );
-			}
-        delete tmp;
-        }
-     
-    iTestCaseResults.Reset();
-    iEventArray.ResetAndDestroy();
-    iTestCaseResults.Close();
-    iEventArray.Close();
-
-    // Reset test case allow result to CTestModuleIf side too. This is
-    // used in TAL-TA5L macro handling.
-	if( iTestScripter != NULL )
-		{
-		User::LeaveIfError( 
-			iTestScripter->TestModuleIf().ResetAllowResult() );
-		}
-		
-    // Stop all remaining interference object
-    TInt count_inter = iTestInterferenceArray.Count();
-    for( TInt a = 0; a < count_inter; a++ )
-        {
-		if( iTestInterferenceArray[a] != NULL )
-			{
-			iTestInterferenceArray[a]->iInterference->Stop();
-			}
-        }
-    iTestInterferenceArray.ResetAndDestroy();
-    iTestInterferenceArray.Close();
-    
-    // Stop all remaining measurement modules
-    const TInt count_meas = iTestMeasurementArray.Count();
-    for( TInt b = 0; b < count_meas; b++ )
-        {
-		if( iTestMeasurementArray[b] != NULL )
-			{
-			iTestMeasurementArray[b]->iMeasurement->Stop();
-			}
-        }
-    iTestMeasurementArray.ResetAndDestroy();
-    iTestMeasurementArray.Close();
-
-    }
-
-/*
--------------------------------------------------------------------------------
-
-     Class: CTestRunner
-
-     Method: RunL
-
-     Description: Derived from CActive, handles testcase execution.
-
-     Parameters:    None.
-
-     Return Values: None.
-
-     Errors/Exceptions: Leaves on error situations.
-
-     Status: Draft
-    
--------------------------------------------------------------------------------
-*/
-void CTestRunner::RunL()
-    {
-    __TRACEFUNC();
-    __TRACE( KMessage, (_L("CTestRunner::RunL: [%d] "), iStatus.Int() ));
-     
-    // Check if we need to Pause test case again  
-    if( iStatus == KErrNone && iRemainingTimeValue > 0 )
-        {           
-        // Maximum time for one RTimer::After request                   
-        TInt maximumTime = KMaxTInt / 1000;                       
-        
-        __TRACE( KMessage, (_L("CTestRunner::RunL: Going to reissue After request ") ) );           
-        __TRACE( KMessage, (_L("CTestRunner::RunL: iRemainingTimeValue = %d"), iRemainingTimeValue ) );        
-        
-        if( iRemainingTimeValue < maximumTime )
-            {                           
-            iPauseTimer.After( iStatus, ( iRemainingTimeValue * 1000  ) );
-            iRemainingTimeValue = 0;
-            }
-        else
-            {            
-            iRemainingTimeValue -= maximumTime;
-            iPauseTimer.After( iStatus, ( maximumTime * 1000 ) );                
-            }     
-        SetActive();
-        }     
-    else    
-        {  
-        TBool continueTask = EFalse;
-
-        User::LeaveIfError( iStatus.Int() );
-
-        if( ( iTestScripter == NULL ) || 
-            ( iTestScripter->iCurrentParser == NULL ) )
-            {
-            __TRACE( KError, (_L("CTestRunner invalid arguments")));
-            User::Leave( KErrGeneral );
-            }
-           
-        iState = ERunnerIdle;
-
-        // Get next execution line from configuration section
-        TPtrC line;
-        // If current parser already has read the first line, then read next line.
-        // Otherwise read the first line.
-        if(iTestScripter->iCurrentParserReadFirstLine && iTestScripter->iCurrentParser->GetNextLine(line) == KErrNone 
-           || !iTestScripter->iCurrentParserReadFirstLine && iTestScripter->iCurrentParser->GetLine(KNullDesC, line) == KErrNone)
-            {
-            iTestScripter->iCurrentParserReadFirstLine = ETrue;
-            
-            // Got new execution line 
-            __TRACE( KMessage, (_L("Executing line [%S]"), &line));
-            
-            CStifItemParser* item = PreprocessLineL( line );
-                
-            CleanupStack::PushL( item ); 
-              
-            TPtrC keyword;
-             // Get first word from line, i.e. keyword
-            User::LeaveIfError( item->GetString( _L(""), keyword ) );
-
-            __TRACE( KMessage, (_L("CTestRunner execute %S"), &keyword ));
-
-            // Execute script line 
-            continueTask = ExecuteLineL( keyword, item );
-            __TRACE( KMessage, (_L("CTestRunner %S executed"), &keyword ));
-                         
-            if( continueTask )
-                {
-                  __TRACE( KMessage, (_L("RunL: continueTask")));
-                 // Set CTestRunner active again to perform 
-                 // next execution line
-                 // from testcase section 
-                SetRunnerActive();
-                }
-
-            CleanupStack::PopAndDestroy( item );
-            }
-        else // Stop execution if end of test case
-            {
-            __TRACE( KMessage, (_L("Executing line: no more lines from this section")));
-            // There is no more lines in current parser, but it needs to be
-            // checked if the parser is not taken for function (sub).
-            // If this is true, then we have to get back to the parser which
-            // has called the function.
-            TInt lastParserIndex = iTestScripter->iParserStack.Count() - 1;
-            if(lastParserIndex >= 0)
-                {
-                // Delete current (the last one) parser
-                delete iTestScripter->iParserStack[lastParserIndex];
-                iTestScripter->iParserStack.Remove(lastParserIndex);
-                if(lastParserIndex >= 1) //There is some other parser on the stack
-                    {
-                    iTestScripter->iCurrentParser = iTestScripter->iParserStack[lastParserIndex - 1];
-                    }
-                else //The parser stack is empty
-                    {
-                    iTestScripter->iCurrentParser = iTestScripter->iSectionParser;
-                    }
-                __TRACE(KMessage, (_L("Returning to calling parser stored on section stack")));
-                
-                // Continue with the test case
-                __TRACE(KMessage, (_L("RunL: continueTask (end of Sub reached)")));
-                SetRunnerActive();
-                return;
-                }
-            // No more execution lines in testcase section
-            __TRACE( KMessage, 
-                (_L("CTestRunner::RunL: Testcase script done") ));
-            iTestScripter->TestModuleIf().Printf( KPrintPriLow, 
-                _L("RunL"), _L("Script done"));
-            
-       
-            __TRACE( KMessage, 
-                (_L("RunL: All TestCases done, stop CActiveScheduler")));
-            CActiveScheduler::Current()->Stop();
-            // Now testcase section is executed, 
-            // so CTestRunner has done its job and stops
-            }
-        }
-    }
-     
-/*
--------------------------------------------------------------------------------
-
-     Class: CTestRunner
-
-     Method: DoCancel
-
-     Description: Derived from CActive handles the Cancel
-
-     Parameters:    None.
-
-     Return Values: None.
-
-     Errors/Exceptions: None.
-
-     Status: Draft
-    
--------------------------------------------------------------------------------
-*/
-void CTestRunner::DoCancel()
-    {
-    __TRACEFUNC();
-    __TRACE( KMessage, (_L("CTestRunner::DoCancel")));
-    iTestScripter->TestModuleIf().Printf( KPrintPriLow, _L("Runner"), _L("DoCancel"));
-    
-    if( iState == ERunnerPaused )
-        {
-        iPauseTimer.Cancel();
-        }
-   
-    CActiveScheduler::Current()->Stop();
-         
-    iState = ERunnerCancel;
-      
-    }
-
-/*
--------------------------------------------------------------------------------
-
-     Class: CTestRunner
-
-     Method: RunError
-
-     Description: Derived from CActive handles errors from active handler.
-  
-     Parameters:    TInt aError: in: error from CActive
-     
-     Return Values: KErrNone: success
-
-     Errors/Exceptions: None.
-
-     Status: Draft
-    
--------------------------------------------------------------------------------
-*/
-TInt CTestRunner::RunError( TInt aError )
-    {
-    __TRACEFUNC();
-    __TRACE( KMessage, (_L("CTestRunner::RunError %d"), aError));
-
-    if ( iRunErrorMessage.Length() != 0 )
-    	{
-	    iTestScripter->TestModuleIf().Printf( KPrintPriLow, _L("Runner"), 
-	            _L("RunError : %S"), &iRunErrorMessage );  
-	    iRunErrorMessage = KNullDesC;
-    	}
-    else
-    	{
-	    iTestScripter->TestModuleIf().Printf( KPrintPriLow, _L("Runner"), 
-	            _L("RunError"));        	
-    	}
-
-    iState = ERunnerError;
-    
-    // Return error from here, if none given from execution
-    if( iTestScripter->iResult.iResult == KErrNone )
-        {
-        iTestScripter->UpdateTestCaseResult(aError, _L("CTestRunner::RunError"));
-        }
-        
-    CActiveScheduler::Current()->Stop();
-        
-    return KErrNone;
-    
-    }
-
-/*
--------------------------------------------------------------------------------
-
-     Class: CTestRunner
-
-     Method: PreprocessLineL
-
-     Description: Preprocesses script line
-  
-     Parameters:  TPtrC& line: in: script line
-                  CStifItemParser*& aItem: out: New CItemParser for script line.
-                    
-     Return Values: HBufC* pointer if new memory that has been allocated
-
-     Errors/Exceptions: Leaves on error situations.
-
-     Status: Draft
-    
--------------------------------------------------------------------------------
-*/        
-CStifItemParser* CTestRunner::PreprocessLineL( TDesC& line )
-    {
-    CStifItemParser* item = NULL;
-    TPtrC tmp;
-    TInt len = 0;
-    TInt ret = 0;
-        
-    // Decide how long buffer should be allocated
-    if( line.Length() < KMaxName/2 )
-        {
-        len = KMaxName;
-        }
-    else 
-        {
-        len = line.Length() + KMaxName;
-        }
-    delete iLine;
-    iLine = 0;
-    iLine = HBufC::NewL(len);
-    TPtr parsedLine(iLine->Des());
-    len = 0;
-    
-    HBufC* sourceLine = line.AllocL();
-    CleanupStack::PushL(sourceLine);
-    
-    //Check for local variable definitions
-    item = CStifItemParser::NewL(sourceLine->Des(), 0, sourceLine->Length());
-    CleanupStack::PushL(item);
-    
-    ret = item->GetString(KNullDesC, tmp);
-    TBool isVarDefinition = (tmp == TTestKeywords::Keyword(TTestKeywords::EVar));
-         
-    if(!isVarDefinition)
-        {
-        while( ret == KErrNone )
-            {
-            len += CheckDefinedLocals(tmp);
-            if((parsedLine.Length() + tmp.Length() + 1) > parsedLine.MaxLength())
-                {
-                // Allocate bigger buffer
-                HBufC* tmpBuf = HBufC::NewL(parsedLine.MaxLength() + KMaxName);
-                CleanupStack::PushL(tmpBuf);
-                TPtrC ptr(iLine->Des());
-                parsedLine.Set(tmpBuf->Des());
-                parsedLine.Copy(ptr);
-                delete iLine;
-                iLine = tmpBuf;
-                CleanupStack::Pop(tmpBuf);
-                } 
-            parsedLine.Append(tmp);        
-            ret = item->GetNextString(tmp);
-            if(ret == KErrNone)
-                {
-                // Add space only if we got new string
-                parsedLine.Append(_L(" "));        
-                }
-            }
-        CleanupStack::PopAndDestroy(item);
-        item = NULL;
-        CleanupStack::PopAndDestroy(sourceLine);
-        sourceLine = NULL;
-        
-        //Prepare data for checking for defines
-        sourceLine = parsedLine.AllocL();
-        CleanupStack::PushL(sourceLine);
-        parsedLine.Zero();
-        
-        item = CStifItemParser::NewL(sourceLine->Des(), 0, sourceLine->Length());
-        CleanupStack::PushL(item);
-    
-        ret = item->GetString(KNullDesC, tmp);
-        }
-
-    //Check for defines
-    while(ret == KErrNone)
-        {
-        if(!isVarDefinition)
-            {
-            len += CheckDefined(tmp);
-            }
-        
-        if((parsedLine.Length() + tmp.Length() + 1) > parsedLine.MaxLength())
-            {
-            // Allocate bigger buffer
-            HBufC* tmpBuf = HBufC::NewL(parsedLine.MaxLength() + KMaxName);
-            CleanupStack::PushL(tmpBuf);
-            TPtrC ptr(iLine->Des());
-            parsedLine.Set(tmpBuf->Des());
-            parsedLine.Copy(ptr);
-            delete iLine;
-            iLine = tmpBuf;
-            CleanupStack::Pop(tmpBuf);
-            } 
-        parsedLine.Append(tmp);        
-        ret = item->GetNextString(tmp);
-        if( ret == KErrNone )
-            {
-            // Add space only if we got new string
-            parsedLine.Append(_L(" "));        
-            }
-        }
-    
-    //Cleaning...
-    CleanupStack::PopAndDestroy(item);
-    item = NULL;
-    CleanupStack::PopAndDestroy(sourceLine);
-    sourceLine = NULL;
-
-    __TRACE(KMessage, (_L("Preprocessed line [%S]"), &parsedLine));
-    item = CStifItemParser::NewL( parsedLine, 0, parsedLine.Length() );
-    
-    return item;
-    }
-
-/*
--------------------------------------------------------------------------------
-
-     Class: CTestRunner
-
-     Method: CheckDefined
-
-     Description: Check if aWord is some defined word
-  
-     Parameters:  TPtrC& aWord: inout: Parsed word, defined or original returned
-                    
-     Return Values: TInt: length diference between new and old word
-     
-     Errors/Exceptions: None.
-
-     Status: Draft
-    
--------------------------------------------------------------------------------
-*/   
-TInt CTestRunner::CheckDefined( TPtrC& aWord )
-    {
-    
-    TInt len = 0;
-    TInt i = 0;
-
-    // KLoopCounter word changing to current loop count value.
-    if( aWord == KLoopCounter )
-        {
-        iLoopCounterDes.Zero();
-        iLoopCounterDes.AppendNum( iLoopCounter );
-        len = iLoopCounterDes.Length() - aWord.Length();
-        aWord.Set( iLoopCounterDes );
-        return len;
-        }
-
-    // First, check values defined in test case file
-    TInt count = iTestScripter->iDefinedRuntime.Count();
-    for( i = 0; i < count; i++ )
-        {
-        if( iTestScripter->iDefinedRuntime[i]->Name() == aWord )
-            { 
-            len = iTestScripter->iDefinedRuntime[i]->Value().Length() - aWord.Length();
-            aWord.Set( iTestScripter->iDefinedRuntime[i]->Value() );
-            return len;
-            }
-        }
-
-    // Second, check values defined in test module initialization file
-    count = iTestScripter->iDefinedIni.Count();
-    for( i = 0; i < count; i++ )
-        {
-        if( iTestScripter->iDefinedIni[i]->Name() == aWord )
-            { 
-            len = iTestScripter->iDefinedIni[i]->Value().Length() - aWord.Length();
-            aWord.Set( iTestScripter->iDefinedIni[i]->Value() );
-            return len;
-            }
-        }
-
-    return len;
-    }
-
-/*
--------------------------------------------------------------------------------
-
-     Class: CTestRunner
-
-     Method: CheckDefinedLocals
-
-     Description: Check if aWord is a local variable
-  
-     Parameters:  TPtrC& aWord: inout: Parsed word, defined or original returned
-                    
-     Return Values: TInt: length diference between new and old word
-     
-     Errors/Exceptions: None.
-
-     Status: Draft
-    
--------------------------------------------------------------------------------
-*/   
-TInt CTestRunner::CheckDefinedLocals( TPtrC& aWord )
-    {
-    
-    TInt len = 0;
-    TInt i = 0;
-
-    TInt count = iTestScripter->iDefinedLocal.Count();
-    for(i = 0; i < count; i++)
-        {
-        if(iTestScripter->iDefinedLocal[i]->Name() == aWord)
-            { 
-            len = iTestScripter->iDefinedLocal[i]->Value().Length() - aWord.Length();
-            aWord.Set(iTestScripter->iDefinedLocal[i]->Value());
-            return len;
-            }
-        }
-
-    return len;
-    }
-
-/*
--------------------------------------------------------------------------------
-
-     Class: CTestRunner
-
-     Method: ExecuteLineL
-
-     Description: Executes script line
-  
-     Parameters:    TDesC& aKeyword: in: keyword string
-                    CStifItemParser* aItem: in: script line
-                    
-     Return Values: ETrue: continue script file execution
-                    EFalse: stop script file execution
-
-     Errors/Exceptions: Leaves on error situations.
-
-     Status: Approved
-    
--------------------------------------------------------------------------------
-*/
-TBool CTestRunner::ExecuteLineL( TDesC& aKeyword,
-                                 CStifItemParser* aItem )
-    {
-    _LIT( KErrMsgDeleteNoParam, "Delete: Name of object is not defined" );
-    _LIT( KErrMsgDeleteObjNotFound, "Delete: Can't delete object %S. Object does not exists." );
-    _LIT( KErrMsgPauseTimeoutNotDefined, "Pause: No timeout value given or value has invalid format" );
-    _LIT( KErrMsgPauseTimeoutNotPositive, "Pause: Timeout value can't be <0" );
-    _LIT( KErrMsgCreateTestModeleNotDefined, "Create: Name of test module is not defined" );
-    _LIT( KErrMsgCreateObjectIdNotDefined, "Create: Name of test module object is not defined" );
-    _LIT( KErrMsgCreateKernelDriverNotDefined, "CreateKernel: Kernel driver name is not defined" );
-    _LIT( KErrMsgCreateKernelObjectNameNotDefined, "CreateKernel: Kernel driver object name is not defined" );
-    _LIT( KErrMsgCreateKernelFailed, "CreateKernel: Can't creeate kernel driver %S" );
-    _LIT( KErrMsgWaitTestClassNameNotDefined, "WaitTestClass: Test class object name is not defined" );
-    _LIT( KErrMsgWaitTestClassObjNotFound, "WaitTestClass: Test class object %S does not exists" );
-    _LIT( KErrMsgLoopNested, "Loop: Nested loop are not supported" );
-    _LIT( KErrMsgLoopNoParam, "Loop: No loop iterations count given or value has invalid format" );
-    _LIT( KErrMsgLoopInvalidParam, "Loop: Loop count must be >0" );
-    _LIT( KErrMsgLoopUnknownUnexpectedOption, "Loop: Unknown or unexpected loop option");
-    _LIT( KErrMsgEndLoopNotOpened, "Endloop: Can't execute endloop. No opened loop exists" );
-    _LIT( KErrMsgBringToForegroundNotSupported, "BringToForeground: BringToForeground is not supported in non s60 environment" );
-    _LIT( KErrMsgSendToBackgroundNotSupported, "SendToBackground: SendToBackground is not supported in non s60 environment" );    
-    _LIT( KErrMsgPressKeyNotSupported, "PressKey: PressKey is not supported in non s60 environment. Check if .cfg file name contains ui_ prefix and UITestingSupport= YES entry is defined in TestFrameworkd.ini" );
-    _LIT( KErrMsgTypeTextNotSupported, "TypeText: TypeText is not supported in non s60 environment. Check if .cfg file name contains ui_ prefix and UITestingSupport= YES entry is defined in TestFrameworkd.ini" );
-    _LIT( KErrMsgSendPointerEventNotSupported, "SendPointerEvent: SendPointerEvent is not supported in non s60 environment. Check if .cfg file name contains ui_ prefix and UITestingSupport= YES entry is defined in TestFrameworkd.ini" );
-    _LIT( KErrVarNameError, "Variable: Could not get variable name");
-    _LIT( KErrVarValueError, "Variable: Value too long");
-    _LIT( KErrSubNameError, "Sub: Could not get name of Sub to be called");
-    _LIT( KErrSubGetError, "Sub: Could not get Sub section");
-    
-    iRunErrorMessage = KNullDesC;    
-    TBool continueTask = ETrue;
-    
-    TInt key = TTestKeywords::Parse( aKeyword, TTestKeywords::Keyword );
-
-    switch( key )
-        {
-        // Test case execution control cases
-        case TTestKeywords::ECreate:
-        case TTestKeywords::ECreateX:
-            {
-            TPtrC tmp;
-            TName module;
-
-            // Testmodule name
-            TInt ret = aItem->GetNextString( tmp );
-            if ( ret != KErrNone )
-            	{
-            	iRunErrorMessage = KErrMsgCreateTestModeleNotDefined;
-            	User::Leave( KErrArgument );
-            	}
-            TParse p;
-            p.Set( tmp, NULL, NULL );
-            // Check if exists in module name
-            if( p.ExtPresent() )
-                {
-                module.Copy( tmp );
-                }
-            else 
-                {
-                // No extension in module name, add it here
-                _LIT( KDllExtension, ".dll");
-                module.Copy( tmp );
-                module.Append( KDllExtension );
-                }
-
-            // objectid
-            ret = aItem->GetNextString( tmp );
-            if ( ret != KErrNone )
-            	{
-            	iRunErrorMessage = KErrMsgCreateObjectIdNotDefined;
-            	User::Leave( KErrArgument );
-            	}        
-
-            __TRACE( KMessage, (_L("%S %S"), &aKeyword, &tmp));
-            iTestScripter->TestModuleIf().Printf( KPrintPriLow, _L("Runner"), 
-                _L("%S %S"), &aKeyword, &tmp);
-
-            iTestScripter->CreateObjectL( module, tmp );
-            }
-            break;
-        case TTestKeywords::ECreateKernel:
-            {
-            TPtrC obj;
-            TPtrC driver;
-
-            // Testdriver name
-            TInt ret = aItem->GetNextString( driver );
-            if ( ret != KErrNone )
-            	{
-            	iRunErrorMessage = KErrMsgCreateKernelDriverNotDefined;
-            	User::Leave( ret );
-            	}
-
-            // objectid            
-            ret = aItem->GetNextString( obj );
-            if ( ret != KErrNone )
-            	{
-            	iRunErrorMessage = KErrMsgCreateKernelObjectNameNotDefined;
-            	User::Leave( ret );
-            	}
-
-            __TRACE( KMessage, (_L("%S %S"), &aKeyword, &obj));
-            iTestScripter->TestModuleIf().Printf( KPrintPriLow, _L("Runner"), 
-                _L("%S %S"), &aKeyword, &obj);
-            TInt leaveErr = KErrNone;
-            TRAP( leaveErr, iTestScripter->CreateKernelObjectL( driver, obj ));
-            if ( leaveErr != KErrNone )
-            	{
-            	iRunErrorMessage.Format( KErrMsgCreateKernelFailed, &driver );
-                User::Leave( leaveErr );
-            	}
-            }
-            break;
-        case TTestKeywords::EDelete:
-            {
-            TPtrC tmp;
-            // objectid
-            TInt ret = aItem->GetNextString( tmp );
-            if ( ret != KErrNone )
-            	{
-                iRunErrorMessage = KErrMsgDeleteNoParam;
-            	User::Leave( ret );
-            	}
-
-            __TRACE( KMessage, (_L("%S %S"), &aKeyword, &tmp));
-            iTestScripter->TestModuleIf().Printf( KPrintPriLow, _L("Runner"), 
-                _L("%S %S"), &aKeyword, &tmp);
-
-            ret = iTestScripter->DeleteObjectL( tmp );
-            if ( ret != KErrNone )
-            	{
-            	iRunErrorMessage.Format( KErrMsgDeleteObjNotFound, &tmp );
-            	User::Leave( ret );
-            	}
-            }
-            break;
-        case TTestKeywords::ERequest:
-        case TTestKeywords::EWait:
-        case TTestKeywords::ERelease:
-        case TTestKeywords::ESet:
-        case TTestKeywords::EUnset:
-            continueTask = ExecuteEventL( aKeyword, aItem );
-            break;
-        case TTestKeywords::EPrint:
-            {
-            __TRACE( KMessage, (_L("%S"), &aKeyword));
-            iTestScripter->TestModuleIf().Printf( KPrintPriLow, _L("Runner"), 
-                _L("%S"), &aKeyword );
-
-            RBuf buf;
-            buf.CreateL(1024);
-            CleanupClosePushL(buf);
-            
-            TPtrC tmp;
-
-            while( aItem->GetNextString( tmp ) == KErrNone )
-                {
-                if( buf.Length() + tmp.Length() >= buf.MaxLength() )
-                    {
-                    buf.ReAllocL(buf.MaxLength() + tmp.Length() * 10);
-                    }
-                buf.Append( tmp );
-                buf.Append( _L(" ") );
-                }
-            
-            iTestScripter->TestModuleIf().Printf( KPrintPriNorm, 
-                _L("Test"), 
-                _L("%S"), &buf);
-            RDebug::Print( _L("Print : Test : %S"), &buf );
-            CleanupStack::PopAndDestroy(&buf);
-            }
-            break;
-        case TTestKeywords::EAllowNextResult:
-            {
-            AddTestCaseResultL( aItem );
-            }
-            break;
-        case TTestKeywords::EWaitTestClass:
-            {
-            // Just stop script running, continue event is signaled 
-            // from test class with specified object name
-            TPtrC objectName;
-            // Get Object name
-            TInt ret = aItem->GetNextString( objectName );
-            if ( ret != KErrNone )
-            	{
-               	iRunErrorMessage = KErrMsgWaitTestClassNameNotDefined;
-            	User::Leave( ret );
-            	}
-            TTestObjectBase* obj = iTestScripter->GetObject ( objectName );
-            //User::LeaveIfNull( obj );
-            if( obj == NULL )
-                {
-               	iRunErrorMessage.Format( KErrMsgWaitTestClassObjNotFound, &objectName );
-                User::Leave( KErrGeneral );
-                }
-            continueTask = obj->Wait();
-            
-            if( continueTask )
-                {
-                // If OOM testing is ongoing ignore result check(given by user)
-                if( !iTestScripter->iOOMIgnoreFailure )
-                    {
-                    if( iTestCaseResults.Count() == 0 )
-                        {
-                        // KErrNone is the default result expected 
-                        // if nothing else is given 
-                        User::LeaveIfError( iTestCaseResults.Append( 
-                                                                KErrNone ) );
-                        }
-                    
-                    if( iTestCaseResults.Find( obj->iAsyncResult ) < 0 ) 
-                        {
-                        __TRACE( KError, ( _L("Command for [%S] failed (%d)"), 
-                                &objectName, obj->iAsyncResult ));
-                        iTestScripter->UpdateTestCaseResult(obj->iAsyncResult, _L("CTestRunner::ExecuteLineL: asynchronous method returned error"));
-                        // Stops execution from CTestRunner::RunError
-                        User::Leave( KErrGeneral );
-                        }
-                    }
-                else
-                    {
-                    __TRACE( KMessage, ( 
-                        _L( "OOM test: 'oomignorefailure' is ON, test case result will reset" ) ) );
-                    }
-
-                iTestCaseResults.Reset();
-                // Reset test case allow result to CTestModuleIf side too. This is
-                // used in TAL-TA5L macro handling.
-                User::LeaveIfError( 
-                    iTestScripter->TestModuleIf().ResetAllowResult() );
-                }
-
-            }
-            break;
-        case TTestKeywords::EPause:
-            {
-            // Maximum time for one RTimer::After request
-            TInt maximumTime = KMaxTInt / 1000;
-            // Set iRemainingTimeValue to zero
-            iRemainingTimeValue = 0;
-
-            TInt timeout;
-            // Read valid results to timeout
-            if( aItem->GetNextInt( timeout ) != KErrNone )
-                {
-                __TRACE( KError, (_L("CTestRunner::ExecuteLineL: No timeout value given for pause")));
-                iRunErrorMessage = KErrMsgPauseTimeoutNotDefined;
-                User::Leave( KErrArgument );
-                }
-
-            // Test case file parsing was success
-
-            __TRACE( KMessage, (_L("CTestRunner::ExecuteLineL: Pause for %d milliseconds"), timeout));
-
-            if( timeout < 0 )
-                {
-                __TRACE( KError, (_L("CTestRunner::ExecuteLineL: Given pause value < 0")));
-                iRunErrorMessage = KErrMsgPauseTimeoutNotPositive;
-                User::Leave( KErrArgument );
-                }
-            else
-                {
-                // Check is pause value suitable for RTimer::After
-                if( timeout < maximumTime )
-                    {
-                    iPauseTimer.After( iStatus, ( timeout * 1000  ) );
-                    }
-                else
-                    {
-                    // Given pause value after multiplication with 1000 is
-                    // larger than KMaxTInt, so we need to split it and 
-                    // re-request After with remaining value from RunL
-
-                    iRemainingTimeValue =  timeout - maximumTime;
-                    iPauseTimer.After( iStatus, maximumTime * 1000 );
-                    }
-
-                SetActive();
-
-                // Stop execution after paused for given timeout
-                continueTask = EFalse;
-                }
-            }
-            break;
-        case TTestKeywords::ELoop:
-            {
-            if( iLoopTimes > 0 )
-                {
-                __TRACE( KError, (_L("ExecuteLineL: Nested loop are not supported")));
-                iRunErrorMessage = KErrMsgLoopNested;
-                User::Leave( KErrNotSupported );
-                }
-            iLoopTimes = 0;
-            iLoopCounter = 0;
-            iTimedLoop = EFalse;
-            if( aItem->GetNextInt( iLoopTimes ) != KErrNone )
-                {
-                __TRACE( KError, (_L("ExecuteLineL: No loop count value given for loop")));
-                iRunErrorMessage = KErrMsgLoopNoParam;
-                User::Leave( KErrArgument );
-                }
-            if( iLoopTimes < 1 )
-            	{
-                __TRACE( KError, (_L("ExecuteLineL: Loop count must be >0")));
-                iRunErrorMessage = KErrMsgLoopInvalidParam;
-                User::Leave( KErrArgument );
-            	}
-            __TRACE( KMessage, (_L("ExecuteLineL: Loop for %d times" ), iLoopTimes ) );
-            
-            //Check loop options
-            TPtrC option;
-            TInt ret = aItem->GetNextString(option);
-            if(ret == KErrNone)
-                {
-                if(option.Compare(_L("msec")) == 0) //time loop option
-                    {
-                    iTimedLoop = ETrue;
-                    iStartTime.HomeTime();
-                    iExpectedLoopTime = TInt64(iLoopTimes) * TInt64(1000); //convert to micro seconds
-                    __TRACE(KMessage, (_L("ExecuteLineL: Timed loop for %d msec" ), iLoopTimes));
-                    
-                    ret = aItem->GetNextString(option); //Get next option
-                    }
-                }
-                
-            if(ret == KErrNone)
-                {
-                __TRACE( KError, (_L("ExecuteLineL: Unknown or unexpected loop option [%S]"), &option));
-                iRunErrorMessage = KErrMsgLoopUnknownUnexpectedOption;
-                User::Leave( KErrNotSupported );
-                }
-            
-            iLoopStartPos = iTestScripter->iCurrentParser->GetPosition();
-            }
-            break;
-        case TTestKeywords::EEndLoop:
-            {
-            if( iLoopTimes == 0 )
-            	{
-            	__TRACE( KError, (_L("ExecuteLineL: Can't execute endloop. No opened loop exists")));
-            	iRunErrorMessage = KErrMsgEndLoopNotOpened;
-            	User::Leave( KErrNotFound );
-            	}
-            iLoopCounter++;
-            __TRACE( KMessage, 
-                (_L("ExecuteLineL: Loop executed for %d times" ), 
-                    iLoopCounter ) );
-
-            TTime currTime;
-            currTime.HomeTime();
-            if(((!iTimedLoop) && (iLoopCounter < iLoopTimes)) //Normal loop
-               ||
-               iTimedLoop && (currTime.MicroSecondsFrom(iStartTime) < iExpectedLoopTime)) //Timed loop
-                {
-                // Go to beginning of the loop
-                User::LeaveIfError(
-                    iTestScripter->iCurrentParser->SetPosition( iLoopStartPos ));
-                }
-            else
-                {            
-                // End looping
-                iLoopCounter = 0;
-                iLoopTimes = 0;
-                iLoopStartPos = 0;
-                }
-            }
-            break;
-        case TTestKeywords::ETimeout:
-        case TTestKeywords::EPriority:
-            // not used here
-            break;
-        case TTestKeywords::EOOMIgnoreFailure:
-            {
-            OOMIgnoreFailureL( aItem );  // Handle parsing
-            break;
-            }
-        case TTestKeywords::EOOMHeapFailNext:
-            {
-            OOMHeapFailNextL( aItem );   // Handle parsing
-            break;
-            }
-        case TTestKeywords::EOOMHeapSetFail:
-            {
-            OOMHeapSetFailL( aItem );    // Handle parsing
-            break;
-            }
-       case TTestKeywords::EOOMHeapToNormal:
-            {
-            // Initialize all OOM related variables back to default.
-            OOMHeapToNormal();
-            __TRACE( KMessage, (
-                _L( "'oomheaptonormal' called, OOM initialization or ending OOM test") ) );
-            break;
-            }
-       case TTestKeywords::ETestInterference:
-            {
-            TestInterferenceL( aItem );  // Handle parsing
-            break;
-            }
-       case TTestKeywords::EMeasurement:
-            {
-            MeasurementL( aItem );      // Handle parsing
-            break;
-            }
-       case TTestKeywords::EAllowErrorCodes:
-            {
-            // Check is KErrNone already appended to iTestCaseResults array.
-            if( iTestCaseResults.Find( KErrNone ) < 0 )
-                {
-                // 'allowerrorcodes' keyword sets KErrNone as a default
-                User::LeaveIfError( iTestCaseResults.Append( KErrNone ) );
-                // Set test case allow result to CTestModuleIf side too. This
-                // is used in TAL-TA5L macro handling.
-                User::LeaveIfError( 
-                    iTestScripter->TestModuleIf().SetAllowResult( KErrNone ) );
-                }
-
-            // Set user given specific error code to be allowed.
-            AddTestCaseResultL( aItem );
-            }
-            break;
-
-       case TTestKeywords::EBringToForeground:
-    	   {
-    	   if ( iTestScripter->TestModuleIf().UITesting() == true )
-    		   {
-    		   iTestScripter->TestModuleIf().GetUiEnvProxy()->BringToForeground();
-    		   }
-    	   else
-    		   {
-	           	__TRACE( KError, (_L("ExecuteLineL: Can't execute bringtoforeground in non s60 environment. Check if .cfg file name contains ui_ prefix and UITestingSupport= YES entry is defined in TestFrameworkd.ini")));
-	        	iRunErrorMessage = KErrMsgBringToForegroundNotSupported;
-	        	User::Leave( KErrNotSupported );    		   
-    		   }
-    	   }
-       		break;
-       case TTestKeywords::ESendToBackground:
-    	   {
-    	   if ( iTestScripter->TestModuleIf().UITesting() == true )
-    		   {
-    		   iTestScripter->TestModuleIf().GetUiEnvProxy()->SendToBackground();
-    		   }
-    	   else
-    		   {
-	           	__TRACE( KError, (_L("ExecuteLineL: Can't execute sendtobackground in non s60 environment. Check if .cfg file name contains ui_ prefix and UITestingSupport= YES entry is defined in TestFrameworkd.ini")));
-	        	iRunErrorMessage = KErrMsgSendToBackgroundNotSupported;
-	        	User::Leave( KErrNotSupported );    		   
-    		   }
-    	   }
-       		break;
-       case TTestKeywords::EPressKey:
-    	   {
-    	   if ( iTestScripter->TestModuleIf().UITesting() == true )
-    		   {
-    		   continueTask = PressKeyL( aItem );
-    		   }
-    	   else
-    		   {
-    		   __TRACE( KError, (_L("ExecuteLineL: Can't execute presskey in non s60 environment. Check if .cfg file name contains ui_ prefix and UITestingSupport= YES entry is defined in TestFrameworkd.ini")));
-    		   iRunErrorMessage = KErrMsgPressKeyNotSupported;
-    		   User::Leave( KErrNotSupported );    		   
-    		   }	
-
-    	   // Check if it was global or local presskey
-    	   if ( !continueTask )
-    		   {
-	           // Stop execution after key is pressed and wait until it is handled
-	           SetActive();
-    		   }           
-    	   }
-       		break;
-       case TTestKeywords::ETypeText:
-    	   {
-    	   if ( iTestScripter->TestModuleIf().UITesting() == true )
-    		   {
-    		   continueTask = TypeTextL( aItem );
-    		   }
-    	   else
-    		   {
-    		   __TRACE( KError, (_L("ExecuteLineL: Can't execute typetext in non s60 environment. Check if .cfg file name contains ui_ prefix and UITestingSupport= YES entry is defined in TestFrameworkd.ini")));
-    		   iRunErrorMessage = KErrMsgTypeTextNotSupported;
-    		   User::Leave( KErrNotSupported );    		   
-    		   }
-
-    	   // Check if it was global or local typetext
-    	   if ( !continueTask )
-    		   {
-	           // Stop execution after key is pressed and wait until it is handled
-	           SetActive();
-    		   }           
-    	   }
-       		break;
-        case TTestKeywords::EVar:
-            {
-            TName name;
-            TName buf;
-            TPtrC tmp;
-            
-            //Get variable name
-            if(aItem->GetNextString(tmp) == KErrNone)
-                {
-                name.Copy(tmp);
-                }
-            else
-                {
-                //Error when getting variable name
-                __TRACE(KError, (_L("ExecuteLineL: Could not read variable name")));
-                iRunErrorMessage = KErrVarNameError;
-                User::Leave(KErrArgument);                
-                }
-
-            //Get value for variable
-            while(aItem->GetNextString(tmp) == KErrNone)
-                {
-                if(buf.Length() + tmp.Length() >= buf.MaxLength())
-                    {
-                    //Error when getting variable name
-                    __TRACE(KError, (_L("ExecuteLineL: Variable value too long")));
-                    iRunErrorMessage = KErrVarValueError;
-                    User::Leave(KErrArgument);                
-                    }
-                buf.Append(tmp);
-                buf.Append(_L(" "));
-                }
-            //Remove last space
-            if(buf.Length() > 0)
-                {
-                buf.SetLength(buf.Length() - 1);
-                }
-                
-            //Store local variable
-            TInt count = iTestScripter->iDefinedLocal.Count();
-            TInt i;
-            for(i = 0; i < count; i++)
-                {
-                if(iTestScripter->iDefinedLocal[i]->Name() == name)
-                    {
-                    // Update existing
-                    iTestScripter->iDefinedLocal[i]->SetValueL(buf);
-                    __TRACE(KMessage, (_L("Update local variable [%S]: [%S]"), &name, &buf));
-                    break;
-                    }
-                }
-            if(i == count)
-                {
-                // New define, store it
-                CDefinedValue* define = CDefinedValue::NewL(name, buf);
-                CleanupStack::PushL(define);
-                User::LeaveIfError(iTestScripter->iDefinedLocal.Append(define));
-                CleanupStack::Pop(define);
-                __TRACE(KMessage, (_L("Add local variable [%S]: [%S]"), &name, &buf));
-                }
-            }
-            break;
-        case TTestKeywords::ECallSub:
-            {
-            // Get sub name
-            TPtrC subName;
-            
-            //Get sub name
-            TInt err = aItem->GetNextString(subName);
-            if(err != KErrNone)
-                {
-                //Error when getting sub name
-                __TRACE(KError, (_L("ExecuteLineL: Could not read sub name [%d]"), err));
-                iRunErrorMessage = KErrSubNameError;
-                User::Leave(KErrArgument);                
-                }
-            
-            // Load section
-            CStifSectionParser* subSection = NULL;
-            TRAP(err, 
-                 subSection = iTestScripter->GetSubL(subName);
-                );
-            if((err != KErrNone) || (!subSection))
-                {
-                //Error when getting sub name
-                if(err == KErrNone)
-                    {
-                    err = KErrArgument;
-                    }
-                __TRACE(KError, (_L("ExecuteLineL: Could not get section for sub [%d]"), err));
-                iRunErrorMessage = KErrSubGetError;
-                User::Leave(err);                
-                }
-            
-            // Handle new section parser
-            CleanupStack::PushL(subSection);
-            iTestScripter->iParserStack.AppendL(subSection);
-            __TRACE(KMessage, (_L("ExecuteLineL: Section for sub [%S] appended to section stack"), &subName));
-            CleanupStack::Pop(subSection);
-            iTestScripter->iCurrentParser = subSection;
-            iTestScripter->iCurrentParserReadFirstLine = EFalse; //Change it to false, becaue subSection is a new parser and it has nothing read
-            }
-            break;
-        case TTestKeywords::ESetResultDescription:
-            {
-            __TRACE(KMessage, (_L("%S"), &aKeyword));
-            iTestScripter->TestModuleIf().Printf(KPrintPriLow, _L("Runner"), _L("%S"), &aKeyword);
-
-            TName buf;
-            TPtrC tmp;
-
-            while(aItem->GetNextString(tmp) == KErrNone)
-                {
-                if(buf.Length() + tmp.Length() >= buf.MaxLength())
-                    {
-                    break;
-                    }
-                if(buf.Length() > 0)
-                    {
-                    buf.Append(_L(" "));
-                    }
-                buf.Append(tmp);
-                }
-            
-            iTestScripter->SetResultDescription(buf);
-            RDebug::Print( _L("SetDescription to [%S]"), &buf );
-            }
-            break;
-        case TTestKeywords::ESendPointerEvent:
-     	   {
-     	   if ( iTestScripter->TestModuleIf().UITesting() == true )
-     		   {
-     		   continueTask = SendPointerEventL( aItem );
-     		   }
-     	   else
-     		   {
-     		   __TRACE( KError, (_L("ExecuteLineL: Can't execute sendpointerevent in non s60 environment. Check if .cfg file name contains ui_ prefix and UITestingSupport= YES entry is defined in TestFrameworkd.ini")));
-     		   iRunErrorMessage = KErrMsgSendPointerEventNotSupported;
-     		   User::Leave( KErrNotSupported );    		   
-     		   }
-
-     	   // Check if it was global or local sendpointerevent
-     	   if ( !continueTask )
-     		   {
- 	           // Stop execution after pointer event is send and wait until it is handled
- 	           SetActive();
-     		   }           
-     	   }
-     	   break;
-        default:
-            {
-            continueTask = ExecuteCommandL( aKeyword, aItem );
-            }
-            break;
-        }
-
-    __TRACE( KMessage, (_L("ExecuteLineL: TestCase line executed")));
-
-    return continueTask;
-    }
-
-/*
--------------------------------------------------------------------------------
-
-     Class: CTestRunner
-
-     Method: PressKeyL
-
-     Description: Send key press event to AppUi
-  
-     Parameters:    CStifItemParser* aItem: in: script line
-     
-     Return Values: None
-
-     Errors/Exceptions: Leaves on error situations.
-
-     Status: Draft
-    
--------------------------------------------------------------------------------
-*/
-TBool CTestRunner::PressKeyL( CStifItemParser* aItem )
-	{
-    _LIT( KErrMsgSendKeyEventInvalidParameterValue, "PressKey: Invalid parameter %s value " );
-    _LIT( KErrMsgSendKeyEventInvalidParameter, "PressKey: Invalid parameter %s" );    
-    
-    _LIT( KKeyCodeParameter, "keycode=" );
-    _LIT( KKeyScanCodeParameter, "keyscancode=" );
-    _LIT( KModifierParameter, "modifier=" );
-    _LIT( KRepeatsParameter, "repeats=" );
-    
-    _LIT( KModeGlobal, "global" );
-    _LIT( KModeLocal, "local" );
-    
-    TBool globalMode = EFalse;
-	TUint keyCode = 0; 
-	TInt keyScanCode = 0; 
-	TUint keyModifiers = 0; 
-	TInt keyRepeats = 0;
-		
-	TPtrC parameter;
-		
-	CUiEnvProxy* uiEnvProxy = iTestScripter->TestModuleIf().GetUiEnvProxy();
-	
-	while( aItem->GetNextString( parameter ) == KErrNone )
-		{
-		if ( parameter.Find( KKeyCodeParameter ) == 0 )
-			{
-			TPtrC parameterValue = parameter.Right( parameter.Length() - KKeyCodeParameter().Length() );
-			TLex parameterValueParser( parameterValue );
-			if ( parameterValueParser.Val( keyCode ) != KErrNone )
-				{
-					if ( uiEnvProxy->ParseKeyCode( parameterValue, keyCode ) != KErrNone )
-						{
-						__TRACE( KError, (_L("SendKeyEvent: Invalid parameter value")));
-						TBuf<128> errMsg;
-						errMsg.Format( KErrMsgSendKeyEventInvalidParameterValue, &KKeyCodeParameter() );
-						iRunErrorMessage = errMsg;
-						User::Leave( KErrArgument );    		   				
-						}
-				}
-			}
-		else if ( parameter.Find( KKeyScanCodeParameter ) == 0 )
-			{
-			TPtrC parameterValue = parameter.Right( parameter.Length() - KKeyScanCodeParameter().Length() );
-			TLex parameterValueParser( parameterValue );
-			if ( parameterValueParser.Val( keyScanCode ) != KErrNone )
-				{
-				if ( uiEnvProxy->ParseKeyScanCode( parameterValue, keyScanCode ) != KErrNone )
-					{
-					__TRACE( KError, (_L("SendKeyEvent: Invalid parameter value")));
-					TBuf<128> errMsg;
-					errMsg.Format( KErrMsgSendKeyEventInvalidParameterValue, &KKeyCodeParameter() );
-					iRunErrorMessage = errMsg;
-					User::Leave( KErrArgument );    		   				
-					}
-				}
-			}
-		else if ( parameter.Find( KModifierParameter ) == 0 )
-			{
-			TPtrC parameterValue = parameter.Right( parameter.Length() - KModifierParameter().Length() );
-			TLex parameterValueParser( parameterValue );
-			if ( parameterValueParser.Val( keyModifiers ) != KErrNone )
-				{
-				if ( uiEnvProxy->ParseModifier( parameterValue, keyModifiers ) != KErrNone )
-					{
-					__TRACE( KError, (_L("SendKeyEvent: Invalid parameter value")));
-					TBuf<128> errMsg;
-					errMsg.Format( KErrMsgSendKeyEventInvalidParameterValue, &KModifierParameter() );
-					iRunErrorMessage = errMsg;
-					User::Leave( KErrArgument );    		   				
-					}
-				}
-			}
-		else if ( parameter.Find( KRepeatsParameter ) == 0 )
-			{
-			TPtrC parameterValue = parameter.Right( parameter.Length() - KRepeatsParameter().Length() );
-			TLex parameterValueParser( parameterValue );
-			if ( parameterValueParser.Val( keyRepeats ) != KErrNone )
-				{
-				__TRACE( KError, (_L("SendKeyEvent: Invalid parameter value")));
-				TBuf<128> errMsg;
-				errMsg.Format( KErrMsgSendKeyEventInvalidParameterValue, &KRepeatsParameter() );
-				iRunErrorMessage = errMsg;
-				User::Leave( KErrArgument );    		   				
-				}
-			}
-		else if ( parameter == KModeGlobal )
-			{
-			globalMode = ETrue;
-			}
-		else if ( parameter == KModeLocal )
-			{
-			globalMode = EFalse;
-			}
-		else if ( uiEnvProxy->ParseKeyCode( parameter, keyCode ) == KErrNone ) 
-			{			
-			}			
-		else if ( parameter.Length() == 1 )
-			{
-			keyCode = parameter[ 0 ];
-			}
-		else
-			{
-			__TRACE( KError, (_L("PressKey: Invalid parameter")));
-			TBuf<128> errMsg;
-			errMsg.Format( KErrMsgSendKeyEventInvalidParameter, &parameter );
-			iRunErrorMessage = errMsg;
-			User::Leave( KErrArgument );   			
-			}
-		}
-	
-	if ( globalMode )
-		{
-		uiEnvProxy->PressKeyL( keyCode, keyScanCode, keyModifiers, keyRepeats );			
-		}
-	else
-		{
-		uiEnvProxy->PressKeyL( &iStatus, keyCode, keyScanCode, keyModifiers, keyRepeats );
-		}
-		
-	return globalMode;
-	}
-
-/*
--------------------------------------------------------------------------------
-
-     Class: CTestRunner
-
-     Method: TypeTextL
-
-     Description: Sends text to AppUi
-  
-     Parameters:    CStifItemParser* aItem: in: script line
-     
-     Return Values: None
-
-     Errors/Exceptions: Leaves on error situations.
-
-     Status: Draft
-    
--------------------------------------------------------------------------------
-*/
-TBool CTestRunner::TypeTextL( CStifItemParser* aItem )
-	{
-	_LIT( KErrMsgTypeTextInvalidParameter, "TypeText: Invalid parameter %S" );
-	_LIT( KErrMsgTypeTextNotEnoughParameters, "TypeText: Not enough parameters" );
-	
-	TBool globalMode = EFalse;
-	
-	TPtrC command;
-	TPtrC text;
-	aItem->SetParsingType( CStifItemParser::EQuoteStyleParsing );
-	
-	// Read first parameter
-	TInt ret = aItem->GetNextString( command );
-	
-	if ( ret != KErrNone )
-		{
-		__TRACE( KError, (_L("TypeText: Not enough parameters")));
-		iRunErrorMessage = KErrMsgTypeTextNotEnoughParameters;
-		User::Leave( ret );
-		}
-	
-	// Read second parameter
-	ret = aItem->GetNextString( text );
-	
-	// Check if second can be read. if yes then check if first parameters is
-	// 'global' parameter
-	if ( ret != KErrNone )
-		{
-		// normal type text
-		text.Set( command );
-		iTestScripter->TestModuleIf().GetUiEnvProxy()->TypeTextL( &iStatus, text );
-		globalMode = EFalse;
-		}
-	else if ( command == _L("global") )
-		{
-		iTestScripter->TestModuleIf().GetUiEnvProxy()->TypeTextL( text );
-		globalMode = ETrue;
-		}
-	else
-		{
-		__TRACE( KError, (_L("TypeText: Invalid parameter")));
-		TBuf<128> errMsg;
-		errMsg.Format( KErrMsgTypeTextInvalidParameter, &command );
-		iRunErrorMessage = errMsg;
-		User::Leave( KErrNotSupported );
-		}
-		
-	return globalMode;
-	}
-
-/*
--------------------------------------------------------------------------------
-
-     Class: CTestRunner
-
-     Method: SendPointerEventL
-
-     Description: Send key press event to AppUi
-  
-     Parameters:    CStifItemParser* aItem: in: script line
-     
-     Return Values: None
-
-     Errors/Exceptions: Leaves on error situations.
-
-     Status: Draft
-    
--------------------------------------------------------------------------------
-*/
-TBool CTestRunner::SendPointerEventL( CStifItemParser* aItem )
-	{
-	// Error messages
-    _LIT( KErrMsgNotEnoughParameters, "SendPointerEvent: Not enough parameters" );
-    _LIT( KErrMsgPointerEventTypeNotDefined, "SendPointerEvent: Pointer event type not defined" );
-    _LIT( KErrMsgInvalidUnknownPointerEventType, "SendPointerEvent: Invalid/Unknown pointer event type %S" );
-    _LIT( KErrMsgPositionXNotDefined, "SendPointerEvent: x co-ordinate is not defined" );
-    _LIT( KErrMsgPositionYNotDefined, "SendPointerEvent: y co-ordinate is not defined" );
-    _LIT( KErrMsgPositionXInvalidValue, "SendPointerEvent: Invalid value of x co-ordinate" );
-    _LIT( KErrMsgPositionYInvalidValue, "SendPointerEvent: Invalid value of y co-ordinate" );
-
-    // Parameters keywords
-    _LIT( KModeGlobal, "global" );
-    _LIT( KModeLocal, "local" );
-    
-    TBool globalMode = EFalse;
-	TUint eventType = 0; 
-	TPoint position( 0, 0 );
-	TPoint parentPosition( 0, 0 );
-		
-	TPtrC parameter;
-
-	CUiEnvProxy* uiEnvProxy = iTestScripter->TestModuleIf().GetUiEnvProxy();
-
-	// Get first parameter
-	if ( aItem->GetNextString( parameter ) != KErrNone )
-		{
-		__TRACE( KError, (_L("SendPointerEvent: Not enough parameters")));
-		iRunErrorMessage = KErrMsgNotEnoughParameters;
-		User::Leave( KErrArgument );   			
-		}
-	else
-		{
-		TBool modeSelected = EFalse;
-		// Check if global/local mode is defined
-		if ( parameter == KModeLocal )
-			{
-			globalMode = false;
-			modeSelected = ETrue;
-			}
-		else if ( parameter == KModeGlobal )
-			{
-			globalMode = true;
-			modeSelected = ETrue;
-			}
-		
-		if ( modeSelected )
-			{
-			// First parameter was mode so we need get next parameter which should 
-			// contain event type
-			if ( aItem->GetNextString( parameter ) != KErrNone )
-				{
-				__TRACE( KError, (_L("SendPointerEvent: Pointer event type not defined")));
-				iRunErrorMessage = KErrMsgPointerEventTypeNotDefined;
-				User::Leave( KErrArgument );   			
-				}
-			}
-		}
-	
-	// Parse event type
-	if ( uiEnvProxy->ParsePointerEventType( parameter, eventType ) != KErrNone )
-		{
-		__TRACE( KError, (_L("PressKey: Invalid/Unknown pointer event type %S"), &parameter ));
-		iRunErrorMessage.Format( KErrMsgInvalidUnknownPointerEventType, &parameter );
-		User::Leave( KErrArgument );   			
-		}
-	
-	if ( aItem->GetNextString( parameter ) != KErrNone )
-		{
-		__TRACE( KError, (_L("SendPointerEvent: x co-ordinate is not defined")));
-		iRunErrorMessage = KErrMsgPositionXNotDefined;
-		User::Leave( KErrArgument );   			
-		}
-
-	TLex parameterParser( parameter );
-	if ( parameterParser.Val( position.iX ) != KErrNone )
-		{
-		__TRACE( KError, (_L("SendPointerEvent: Invalid value of x co-ordinate")));
-		iRunErrorMessage = KErrMsgPositionXInvalidValue;
-		User::Leave( KErrArgument );   			
-		}
-
-	if ( aItem->GetNextString( parameter ) != KErrNone )
-		{
-		__TRACE( KError, (_L("SendPointerEvent: y co-ordinate is not defined")));
-		iRunErrorMessage = KErrMsgPositionYNotDefined;
-		User::Leave( KErrArgument );   			
-		}
-
-	parameterParser.Assign( parameter );
-	if ( parameterParser.Val( position.iY ) != KErrNone )
-		{
-		__TRACE( KError, (_L("SendPointerEvent: Invalid value of y co-ordinate")));
-		iRunErrorMessage = KErrMsgPositionYInvalidValue;
-		User::Leave( KErrArgument );   			
-		}		
-		
-	// Send pointer event
-	if ( globalMode )
-		{
-		uiEnvProxy->SendPointerEventL( eventType, position );			
-		}
-	else
-		{
-		uiEnvProxy->SendPointerEventL( &iStatus, eventType, position );
-		}
-
-	return globalMode;
-	}
-
-
-/*
--------------------------------------------------------------------------------
-
-     Class: CTestRunner
-
-     Method: ExecuteEventL
-
-     Description: Executes event command script line
-  
-     Parameters:    TDesC& aKeyword: in: keyword string
-                    CStifItemParser* aItem: in: script line
-     
-     Return Values: ETrue: continue script file execution
-                    EFalse: stop script file execution
-
-     Errors/Exceptions: Leaves on error situations.
-
-     Status: Draft
-    
--------------------------------------------------------------------------------
-*/
-TBool CTestRunner::ExecuteEventL( TDesC& aKeyword,
-                                  CStifItemParser* aItem )
-    {
-    _LIT( KErrMsgEventNameNotDefined, "%S : Event name not defined" );
-    _LIT( KErrMsgUnknowKeyword, "Unknow keyword %S" );
-    
-    TInt ret = KErrNone;
-    TInt key = TTestKeywords::Parse( aKeyword, TTestKeywords::Keyword );
-    TBool continueTask = ETrue;
-     
-    TPtrC eventName;
-    // read eventname
-    ret = aItem->GetNextString( eventName );
-    if ( ret != KErrNone )
-    	{
-    	iRunErrorMessage.Format( KErrMsgEventNameNotDefined, &aKeyword );
-    	User::Leave( ret );
-    	}
-    
-    TEventIf event;
-    event.SetName( eventName );
-    
-    __TRACE( KMessage, (_L("%S %S"), &aKeyword, &eventName));
-    iTestScripter->TestModuleIf().Printf( KPrintPriLow, _L("Event"), 
-        _L("%S %S"), &aKeyword, &eventName);
-
-    switch( key )
-        {
-        case TTestKeywords::ERequest:
-            {
-            HBufC* eName = eventName.AllocLC();
-            User::LeaveIfError( iEventArray.Append( eName ) );
-            CleanupStack::Pop( eName );
-            event.SetType( TEventIf::EReqEvent );
-            ret = iTestScripter->TestModuleIf().Event( event );
-            }
-            break;
-        case TTestKeywords::EWait:
-            {
-            event.SetType( TEventIf::EWaitEvent );
-            iTestScripter->TestModuleIf().Event( event, iStatus );
-            SetActive();
-            continueTask = EFalse;
-            }
-            break;
-        case TTestKeywords::ERelease:
-            {
-            event.SetType( TEventIf::ERelEvent );
-            ret = iTestScripter->TestModuleIf().Event( event );
-            if( ret == KErrNone )
-                {
-                TPtrC eName;
-                TInt count = iEventArray.Count();
-                for( TInt i = 0; i < count; i++ )
-                    {
-                    eName.Set( iEventArray[i]->Des() );
-                    if( eName == eventName )
-                        {
-                        HBufC* tmp = iEventArray[i];
-                        iEventArray.Remove(i);
-                        delete tmp;
-                        break;
-                        }
-                    }
-                }
-            }
-            break;
-        case TTestKeywords::ESet:
-            {
-            event.SetType( TEventIf::ESetEvent );
-            
-            TPtrC tmp;
-            // Get optional set argument
-            if( aItem->GetNextString( tmp ) == KErrNone )
-                {                      
-                // Parse optional set argument
-                if( tmp == _L("state") )
-                    {
-                    __TRACE( KMessage, (_L("State event")));
-                    event.SetEventType( TEventIf::EState );
-                    }
-                else
-                    {
-                    __TRACE( KError, 
-                        (_L("Unknown argument for set %S"), 
-                        &tmp));
-                    }
-                }      
-            
-            ret = iTestScripter->TestModuleIf().Event( event );
-            }
-            break;
-        case TTestKeywords::EUnset:
-            {
-            event.SetType( TEventIf::EUnsetEvent );
-            event.SetEventType( TEventIf::EState );
-            ret = iTestScripter->TestModuleIf().Event( event );
-            }
-            break;
-        default:
-            __TRACE( KError, (_L("Unknown keyword %S"), &aKeyword));
-            iRunErrorMessage.Format( KErrMsgUnknowKeyword, &aKeyword );
-            User::Leave( KErrGeneral );
-            break;
-        }
-    if( ret != KErrNone )
-        {
-        TName resultDescr;
-        resultDescr.Format(_L("Event %S returned error: %d"), &aKeyword, ret);
-        iTestScripter->UpdateTestCaseResult(ret, resultDescr);
-        // Stops execution from CTestRunner::RunError
-        User::Leave( KErrGeneral );
-        }
-
-    return continueTask;
-
-    }
-
-/*
--------------------------------------------------------------------------------
-
-     Class: CTestRunner
-
-     Method: ExecuteCommandL
-
-     Description: Executes script line
-
-     Parameters:    TDesC& aObject: in: object name 
-                    CStifItemParser* aItem: in: script line
-
-     Return Values: ETrue: continue script file execution
-                    EFalse: stop script file execution
-
-     Errors/Exceptions: Leaves on error situations.
-
-     Status: Proposal
-
--------------------------------------------------------------------------------
-*/
-TBool CTestRunner::ExecuteCommandL( TDesC& aObject, CStifItemParser* aItem)
-    {
-    _LIT( KErrMsgUnknownObjOrKeyword, "Unknow keyword/object %S" );
-    
-    TTestObjectBase* obj = iTestScripter->GetObject ( aObject );    
-    if( obj == NULL )
-        {
-        iRunErrorMessage.Format( KErrMsgUnknownObjOrKeyword, &aObject );
-        User::Leave( KErrGeneral );
-        }
-
-    if( iTestCaseResults.Count() == 0 )
-        {
-        // KErrNone is the default result expected if nothing else is given 
-        User::LeaveIfError( iTestCaseResults.Append( KErrNone ) );
-        }
-
-    // OOM heap testing with FAILNEXT
-    if( iHeapFailNext > 0 )
-        {
-        __TRACE( KPrint, ( 
-            _L( "OOM FAILNEXT is used with count value: %d " ),
-            iHeapFailNext) );
-        User::__DbgSetAllocFail( RHeap::EUser, RHeap::EFailNext, iHeapFailNext  );
-        }
-    // OOM heap testing with SETFAIL
-    if( iHeapSetFailValue > 0 )
-        {
-        __TRACE( KPrint, (
-            _L("OOM SETFAIL is used with type:[%d] and value(rate):[%d]"),
-            iHeapSetFailType, iHeapSetFailValue ) );
-        User::__DbgSetAllocFail( RHeap::EUser, iHeapSetFailType, iHeapSetFailValue );
-        }
-
-    TInt commandResult = KErrNone;
-    TRAP( commandResult, commandResult = obj->RunMethodL( *aItem ) );
-
-    
-    // Reset OOM macro immediately(Otherwise other allocations
-    // will be blocked)
-    User::__DbgSetAllocFail( RHeap::EUser, RHeap::ENone, 1 );
-
-    // OOM test class's build block handling
-    if( iTestScripter->iOOMIgnoreFailure )
-        {
-        __TRACE( KPrint, ( 
-            _L( "----------< OOM related test information >----------" ) ) );
-        if( iHeapFailNext > 0 )
-            {
-            __TRACE( KPrint, ( 
-                _L( "'oomignorefailure' is:[ON] and 'failnextvalue' count is:[%d]" ),
-                iHeapFailNext ) );
-            }
-        if( iHeapSetFailValue > 0 )
-            {
-            __TRACE( KPrint, ( 
-                _L( "'oomignorefailure' is:[ON], 'setfailtype' type is:[%d] and value is:[%d]" ),
-                iHeapSetFailType, iHeapSetFailValue ) );
-            }
-        __TRACE( KPrint, ( 
-            _L( "Test class build block execution with result:[%d]" ),
-            commandResult ) );
-        __TRACE( KPrint, ( 
-            _L( "----------------------------------------------------" ) ) );
-
-        // Continue testing, despite the memory error situations
-        iTestCaseResults.Reset();
-        return ETrue; // Continue script executions
-        }
-
-    // Normal test class's build block handling
-    if( iTestCaseResults.Find( commandResult ) < 0 ) 
-        {
-        __TRACE( KError, ( _L("Command for [%S] failed (%d)"), 
-                &aObject, commandResult ));
-
-        // Added more logging for this special case
-        if( commandResult == KErrNone )
-            {
-            __TRACE( KError, (_L("Test fails with result KErrGeneral, because execution result was KErrNone and expected results given with 'allownextresult' were Symbian's error codes (<0)")));    
-            }
-           
-        iTestScripter->UpdateTestCaseResult(commandResult, _L("CTestRunner::ExecuteCommandL returned error"));
-
-        // Stops execution from CTestRunner::RunError
-        User::Leave( KErrGeneral );
-        }
-        
-    iTestCaseResults.Reset();
-    // Reset test case allow result to CTestModuleIf side too. This is
-    // used in TAL-TA5L macro handling.
-    User::LeaveIfError( 
-        iTestScripter->TestModuleIf().ResetAllowResult() );
-        
-    return ETrue;
-    }
-    
-/*
--------------------------------------------------------------------------------
-
-     Class: CTestRunner
-
-     Method: SetRunnerActive
-
-     Description: Set CTestRunner active and complete.
-
-     Parameters:    None.
-
-     Return Values: None.
-
-     Errors/Exceptions: None.
-
-     Status: Draft
-
--------------------------------------------------------------------------------
-*/
-void CTestRunner::SetRunnerActive()
-     {
-     __TRACEFUNC();
-     // Update state
-     iState = ERunnerRunning;
-
-     iStatus = KRequestPending;
-     TRequestStatus* rs = &iStatus;
-     SetActive();
-     User::RequestComplete( rs, KErrNone );
-
-     }
-
-/*
--------------------------------------------------------------------------------
-
-     Class: CTestRunner
-
-     Method: OOMIgnoreFailure
-
-     Description: Handles 'oomignorefailure' keyword parsing.
-  
-     Parameters: CStifItemParser* aItem: in: Item object for parsing.
-
-     Return Values: None.
-
-     Errors/Exceptions: None.
-
-     Status: Proposal
-    
--------------------------------------------------------------------------------
-*/
-void CTestRunner::OOMIgnoreFailureL( CStifItemParser* aItem )
-    {
-    _LIT( KerrMsgOOMIgnoreFailureUnknownArgument, "OOMIgnoreFailure : Invalid argument %S" );
-    _LIT( KerrMsgOOMIgnoreFailureNoArgument, "OOMIgnoreFailure : Parameter not defined" );
-    
-    __TRACEFUNC();
-
-    TPtrC tmp;
-    // Get result
-    if( aItem->GetNextString( tmp ) == KErrNone )
-        {                      
-        if( tmp == _L("ON") || tmp == _L("on") )
-            {
-            __TRACE( KMessage, (_L("OOM related 'oomignorefailure': ON")));
-            iTestScripter->iOOMIgnoreFailure = ETrue;
-            }
-        else if( tmp == _L("OFF") || tmp == _L("off") )
-            {
-            __TRACE( KMessage, (_L("OOM related 'oomignorefailure': OFF")));
-            iTestScripter->iOOMIgnoreFailure = EFalse;
-            }
-        else
-            {
-            __TRACE( KError, 
-                (_L("Unknown argument for 'oomignorefailure': [%S]"), 
-                &tmp));
-            iRunErrorMessage.Format( KerrMsgOOMIgnoreFailureUnknownArgument, &tmp );
-            User::Leave( KErrArgument );
-            }
-        }
-    else
-        {
-        __TRACE( KError, ( _L( "Unknown argument for 'oomignorefailure'" ) ) );
-        iRunErrorMessage = KerrMsgOOMIgnoreFailureNoArgument;
-        User::Leave( KErrArgument );
-        }
-    }
-
-/*
--------------------------------------------------------------------------------
-
-     Class: CTestRunner
-
-     Method: OOMHeapFailNext
-
-     Description: Handles 'oomheapfailnext' keyword parsing.
-  
-     Parameters: CStifItemParser* aItem: in: Item object for parsing.
-
-     Return Values: None.
-
-     Errors/Exceptions: None.
-
-     Status: Proposal
-    
--------------------------------------------------------------------------------
-*/
-void CTestRunner::OOMHeapFailNextL( CStifItemParser* aItem )
-    {
-    _LIT( KErrMsgHeapFailNextNoArgument, "HeapFailNext : Parameters is not defined or has invalid value" );
-    _LIT( KErrMsgHeapFailNextInvalidValue, "HeapFailNext : Argument value can't be <0" );
-    __TRACEFUNC();
-
-    TInt heapfailNext( 0 );
-    // If LOOP_COUNTER is used the GetNextInt returns a correct
-    // value(Because of the LOOP_COUNTER implementation).
-    if( aItem->GetNextInt( heapfailNext ) == KErrNone )
-        {
-        if( heapfailNext < 0 )
-        	{
-        	__TRACE( KError, ( _L( "Argument value must be >0" ) ) );
-            iRunErrorMessage = KErrMsgHeapFailNextInvalidValue;
-            User::Leave( KErrArgument );        	
-        	}
-        // OOM heap's FAILNEXT range is from 1 to n
-        iHeapFailNext = heapfailNext + 1;
-        __TRACE( KMessage, ( _L( "'oomheapfailnext' count value(rate): %d" ),
-            iHeapFailNext ) );
-        }
-    else
-        {
-        __TRACE( KError, ( _L( "Unknown argument for 'oomheapfailnext'" ) ) );
-        iRunErrorMessage = KErrMsgHeapFailNextNoArgument;
-        User::Leave( KErrArgument );
-        }
-    }
-
-/*
--------------------------------------------------------------------------------
-
-     Class: CTestRunner
-
-     Method: OOMHeapSetFail
-
-     Description: Handles 'oomheapsetfail' keyword parsing.
-  
-     Parameters: CStifItemParser* aItem: in: Item object for parsing.
-
-     Return Values: None.
-
-     Errors/Exceptions: None.
-
-     Status: Proposal
-    
--------------------------------------------------------------------------------
-*/
-void CTestRunner::OOMHeapSetFailL( CStifItemParser* aItem )
-    {
-    _LIT( KErrMsgOOMHeapSetFailTypeNotDefined, "OOMHeapSetFail : Parameter type is not defined" );
-    _LIT( KErrMsgOOMHeapSetFailRateNotDefined, "OOMHeapSetFail : Parameter rate is not defined" );
-    _LIT( KErrMsgOOMHeapSetFailTypeInvalidValue, "OOMHeapSetFail : Parameter type has invalid value" );
-    _LIT( KErrMsgOOMHeapSetFailRateInvalidValue, "OOMHeapSetFail : Parameter rate can't be <0" );
-    __TRACEFUNC();
-
-    TPtrC type;
-    TInt value( 0 );
-
-    // NOTE: If error in type or value parsing => return without changing
-    //       iHeapSetFailType or iHeapSetFailValue valiables.
-
-    // Get type
-    if( aItem->GetNextString( type ) != KErrNone )
-        {
-        __TRACE( KError, ( 
-            _L( "Unknown argument for 'oomheapsetfail' type" ) ) );
-        iRunErrorMessage = KErrMsgOOMHeapSetFailTypeNotDefined;
-        User::Leave( KErrArgument );
-        }
-    // Get value(rate)
-    if( aItem->GetNextInt( value ) != KErrNone )
-        {
-        __TRACE( KError, ( 
-            _L( "Unknown argument for 'oomheapsetfail' value(rate)" ) ) );
-        iRunErrorMessage = KErrMsgOOMHeapSetFailRateNotDefined;
-        User::Leave( KErrArgument );
-        }    
-    
-    // All parsing operations are passed, get type and value
-
-    // Get type
-    if( type == _L("random") )
-        {
-        __TRACE( KMessage, (_L("'oomheapsetfail' type: random")));
-        iHeapSetFailType = RHeap::ERandom;
-        }
-    else if( type == _L("truerandom") )
-        {
-        __TRACE( KMessage, (_L("'oomheapsetfail' type: truerandom")));
-        iHeapSetFailType = RHeap::ETrueRandom;
-        }
-    else if( type == _L("deterministic") )
-        {
-        __TRACE( KMessage, (_L("'oomheapsetfail' type: deterministic")));
-        iHeapSetFailType = RHeap::EDeterministic;
-        }
-    else if( type == _L("none") )
-        {
-        __TRACE( KMessage, (_L("'oomheapsetfail' type: none")));
-        iHeapSetFailType = RHeap::ENone;
-        }
-    else if( type == _L("failnext") )
-        {
-        __TRACE( KMessage, (_L("'oomheapsetfail' type: failnext")));
-        iHeapSetFailType = RHeap::EFailNext;
-        }
-    else
-        {
-        __TRACE( KError, 
-            ( _L( "Unknown argument for 'oomheapsetfail' type: [%S]" ),
-            &type ) );
-        iRunErrorMessage = KErrMsgOOMHeapSetFailTypeInvalidValue;
-        User::Leave( KErrArgument );
-        }
-
-    if( value < 0 )
-    	{
-        __TRACE( KError, _L( "'oomheapsetfail' value(rate) can't be <0" ) );    	    	
-        iRunErrorMessage = KErrMsgOOMHeapSetFailRateInvalidValue;
-        User::Leave( KErrArgument );
-    	}
-    // Get value
-    // OOM heap's SETFAIL range is from 1 to n
-    iHeapSetFailValue = value + 1;
-    __TRACE( KMessage, ( 
-        _L( "'oomheapsetfail' value(rate): %d" ), iHeapSetFailValue ) );
-
-    }
-
-/*
--------------------------------------------------------------------------------
-
-     Class: CTestRunner
-
-     Method: OOMHeapToNormal
-
-     Description: Initialize all OOM related variables.
-  
-     Parameters: None.
-
-     Return Values: None.
-
-     Errors/Exceptions: None.
-
-     Status: Proposal
-    
--------------------------------------------------------------------------------
-*/
-void CTestRunner::OOMHeapToNormal()
-    {
-    __TRACEFUNC();
-
-    if( iTestScripter )
-        {
-        // This should initialize also
-        iTestScripter->iOOMIgnoreFailure = EFalse;
-        }
-
-    iHeapFailNext = 0;
-    iHeapSetFailType = RHeap::ENone;
-    iHeapSetFailValue = 0;
-
-    }
-
-/*
--------------------------------------------------------------------------------
-
-     Class: CTestRunner
-
-     Method: TestInterference
-
-     Description: Starts test interference.
-  
-     Parameters: CStifItemParser* aItem: in: Item object for parsing.
-
-     Return Values: None.
-
-     Errors/Exceptions: None.
-
-     Status: Approved
-    
--------------------------------------------------------------------------------
-*/
-void CTestRunner::TestInterferenceL( CStifItemParser* aItem )
-    {
-    _LIT( KErrMsgTestInterferenceNameNotDefined, "TestInterference : Parameter name is not defined" );
-    _LIT( KErrMsgTestInterferenceCommandNotDefined, "TestInterference : Parameter command is not defined" );
-    _LIT( KErrMsgTestInterferenceCommandInvalidValue, "TestInterference : Parameter command has invalid value" );
-    __TRACEFUNC();
-    TPtrC name;
-    TPtrC command;
-
-    // Get name
-    if( aItem->GetNextString( name ) != KErrNone )
-        {
-        __TRACE( KError, ( 
-            _L( "Unknown argument for 'testinterference' name" ) ) );
-        iRunErrorMessage = KErrMsgTestInterferenceNameNotDefined;
-        User::Leave( KErrArgument ); // Error in parsing => Leave
-        }
-    // Get command
-    if( aItem->GetNextString( command ) != KErrNone )
-        {
-        __TRACE( KError, ( 
-            _L( "Unknown argument for 'testinterference' command" ) ) );
-        iRunErrorMessage = KErrMsgTestInterferenceCommandNotDefined;
-        User::Leave( KErrArgument ); // Error in parsing => Leave
-        }
-
-    if( command == _L( "start" ) )
-        {
-        __TRACE( KMessage, ( _L( "'testinterference' called, starts test interference") ) );
-        StartInterferenceL( name, aItem );
-        }
-    else if( command == _L( "stop" ) )
-        {
-        __TRACE( KMessage, ( _L( "'testinterference' called, stops and releases test interference") ) );
-        StopInterferenceL( name );
-        }
-    else
-        {
-        __TRACE( KError, ( 
-            _L( "Unknown command for 'testinterference'[%S]" ), &command ) );
-        iRunErrorMessage = KErrMsgTestInterferenceCommandInvalidValue;
-        User::Leave( KErrArgument ); // Error in parsing => Leave
-        }
-
-    }
-
-/*
--------------------------------------------------------------------------------
-
-     Class: CTestRunner
-
-     Method: StartInterference
-
-     Description: 
-  
-     Parameters: CStifItemParser* aItem: in: Item object for parsing.
-
-     Return Values: None.
-
-     Errors/Exceptions: None.
-
-     Status: Approved
-    
--------------------------------------------------------------------------------
-*/
-void CTestRunner::StartInterferenceL( TDesC& aName, CStifItemParser* aItem )
-    {
-    _LIT( KErrMsgStartInterferenceCategoryNotDefined, "TestInterference : Parameter category is not defined" );
-    _LIT( KErrMsgStartInterferenceCategoryInvalidValue, "TestInterference : Parameter category has invalid value" );
-    _LIT( KErrMsgStartInterferenceTypeNotDefined, "TestInterference : Parameter type is not defined" );
-    _LIT( KErrMsgStartInterferenceTypeInvalidValue, "TestInterference : Parameter type has invalid value" );
-    _LIT( KErrMsgStartInterferenceIdleNotDefined, "TestInterference : Parameter idle is not defined or has invalid value" );
-    _LIT( KErrMsgStartInterferenceIdleInvalidValue, "TestInterference : Parameter idle has invalid value" );
-    _LIT( KErrMsgStartInterferenceActiveNotDefined, "TestInterference : Parameter active is not defined or has invalid value" );
-    _LIT( KErrMsgStartInterferenceActiveInvalidValue, "TestInterference : Parameter active has invalid value" );
-    
-    __TRACEFUNC();
-    TPtrC category;
-    TPtrC type;
-    TInt idle( 0 );
-    TInt active( 0 );
-    TInt priority( 0 );
-
-    // Get category
-    if( aItem->GetNextString( category ) != KErrNone )
-        {
-        __TRACE( KError, ( 
-            _L( "Unknown argument for 'testinterference' category" ) ) );
-        iRunErrorMessage = KErrMsgStartInterferenceCategoryNotDefined;
-        User::Leave( KErrArgument ); // Error in parsing => Leave
-        }
-    // Get type
-    if( aItem->GetNextString( type ) != KErrNone )
-        {
-        __TRACE( KError, ( 
-            _L( "Unknown argument for 'testinterference' type" ) ) );
-        iRunErrorMessage = KErrMsgStartInterferenceTypeNotDefined;
-        User::Leave( KErrArgument ); // Error in parsing => Leave
-        }
-
-    TPtrC timeStr;
-    TReal time;
-    // Get idle time
-    if( aItem->GetNextString( timeStr ) != KErrNone )
-        {        
-        __TRACE( KError, ( 
-            _L( "Unknown argument for 'testinterference' idle" ) ) );
-        iRunErrorMessage = KErrMsgStartInterferenceIdleNotDefined;
-        User::Leave( KErrArgument ); // Error in parsing => Leave
-        }
-    if ( TLex( timeStr ).Val( time, '.' ) != KErrNone )
-    	{
-        __TRACE( KError, ( 
-            _L( "Unknown argument for 'testinterference' idle" ) ) );
-        iRunErrorMessage = KErrMsgStartInterferenceIdleNotDefined;
-        User::Leave( KErrArgument ); // Error in parsing => Leave    	
-    	}
-    // Convert idle time from milli to micro seconds
-   	idle = static_cast<TInt>( time * 1000.0);
-
-    if( idle < 0 )
-    	{
-        __TRACE( KError, ( 
-                _L( "Argument 'testinterference' idle can't be <0" ) ) );
-    	iRunErrorMessage = KErrMsgStartInterferenceIdleInvalidValue;
-    	User::Leave( KErrArgument );
-    	}
-   // Get active time
-    if( aItem->GetNextString( timeStr ) != KErrNone )
-        {
-        __TRACE( KError, ( 
-            _L( "Unknown argument for 'testinterference' active" ) ) );
-        iRunErrorMessage = KErrMsgStartInterferenceActiveNotDefined;
-        User::Leave( KErrArgument ); // Error in parsing => Leave
-        }
-    if ( TLex( timeStr ).Val( time, '.' ) != KErrNone )
-    	{
-        __TRACE( KError, ( 
-            _L( "Unknown argument for 'testinterference' idle" ) ) );
-        iRunErrorMessage = KErrMsgStartInterferenceIdleNotDefined;
-        User::Leave( KErrArgument ); // Error in parsing => Leave    	
-    	}
-    
-    // Convert active time from milli to micro seconds
-   	active = static_cast<TInt>( time * 1000.0 );
-   	
-    if( active < 0 )
-    	{
-        __TRACE( KError, ( 
-                _L( "Argument 'testinterference' active can't be <0" ) ) );
-    	iRunErrorMessage = KErrMsgStartInterferenceActiveInvalidValue;
-    	User::Leave( KErrArgument );
-    	}
-    
-   // Get priority
-    if( aItem->GetNextInt( priority ) != KErrNone )
-        {
-        // Log information only do not return. Priority value is optional.
-        __TRACE( KInit, ( 
-            _L( "Unknown argument for 'testinterference' priority or value not given, default priority will be used" ) ) );
-        }    
-
-    MSTIFTestInterference* interference = NULL;
-
-    // Get category
-    if( category == _L("activeobject") )
-        {
-        interference = MSTIFTestInterference::NewL( iTestScripter,
-                            MSTIFTestInterference::EActiveObject );
-        }
-    else if( category == _L("thread") )
-        {
-        interference = MSTIFTestInterference::NewL( iTestScripter,
-                            MSTIFTestInterference::EThread );
-        }
-    else
-        {
-        __TRACE( KError, ( 
-            _L( "Unknown argument for 'testinterference' category[%S]" ), &category ) );
-        iRunErrorMessage = KErrMsgStartInterferenceCategoryInvalidValue;
-        User::Leave( KErrArgument ); // Error in parsing => Leave
-        }
-
-    // Create object that include test interference information and append this
-    // to array.
-    TTestInterference* object = new (ELeave) TTestInterference();
-    object->iName = aName;
-    object->iInterference = interference;
-
-    // Array for handling test interference between different objects
-    TInt ret = iTestInterferenceArray.Append( object );
-    if( ret != KErrNone )
-        {
-        delete object;
-        __TRACE( KError, ( 
-            _L( "CTestRunner::StartInterference: iTestInterferenceArray.Append fails:[%d]" ), ret ) );
-        User::Leave( ret );
-        }
-
-    // Set priority if user given
-    if( priority != 0 )
-        {
-        interference->SetPriority( priority );
-        }
-
-    // Get type
-    if( type == _L("cpuload") )
-        {
-        interference->StartL( MSTIFTestInterference::ECpuLoadMicroSeconds, idle , active );
-        }
-    else if( type == _L("filesystemreadc") )
-        {
-        interference->StartL( MSTIFTestInterference::EFileSystemReadCMicroSeconds, idle , active );
-        }
-    else if( type == _L("filesystemreadd") )
-        {
-        interference->StartL( MSTIFTestInterference::EFileSystemReadDMicroSeconds, idle , active );
-        }
-    else if( type == _L("filesystemreade") )
-        {
-        interference->StartL( MSTIFTestInterference::EFileSystemReadEMicroSeconds, idle , active );
-        }
-    else if( type == _L("filesystemreadz") )
-        {
-        interference->StartL( MSTIFTestInterference::EFileSystemReadZMicroSeconds, idle , active );
-        }
-    else if( type == _L("filesystemwritec") )
-        {
-        interference->StartL( MSTIFTestInterference::EFileSystemWriteCMicroSeconds, idle , active );
-        }
-    else if( type == _L("filesystemwrited") )
-        {
-        interference->StartL( MSTIFTestInterference::EFileSystemWriteDMicroSeconds, idle , active );
-        }
-    else if( type == _L("filesystemwritee") )
-        {
-        interference->StartL( MSTIFTestInterference::EFileSystemWriteEMicroSeconds, idle , active );
-        }
-    else if( type == _L("filesystemfillandemptyc") )
-        {
-        interference->StartL( MSTIFTestInterference::EFileSystemFillAndEmptyCMicroSeconds, idle , active );
-        }
-    else if( type == _L("filesystemfillandemptyd") )
-        {
-        interference->StartL( MSTIFTestInterference::EFileSystemFillAndEmptyDMicroSeconds, idle , active );
-        }
-    else if( type == _L("filesystemfillandemptye") )
-        {
-        interference->StartL( MSTIFTestInterference::EFileSystemFillAndEmptyEMicroSeconds, idle , active );
-        }
-    else
-        {
-        __TRACE( KError, ( 
-            _L( "Unknown argument for 'testinterference' type[%S]" ), &type ) );
-        iRunErrorMessage = KErrMsgStartInterferenceTypeInvalidValue;
-        User::Leave( KErrArgument ); // Error in parsing => Leave
-        }
-
-    }
-
-/*
--------------------------------------------------------------------------------
-
-     Class: CTestRunner
-
-     Method: StopInterference
-
-     Description: Stops test interference.
-  
-     Parameters: TDesC& aName: in: Indicates right test interference object.
-
-     Return Values: None.
-
-     Errors/Exceptions: None.
-
-     Status: Approved
-    
--------------------------------------------------------------------------------
-*/
-void CTestRunner::StopInterferenceL( TDesC& aName )
-    {    
-    _LIT( KErrMsgStopInterference, "TestInterference : testinterference %S was not start" );
-    __TRACEFUNC();
-    
-    TInt count = iTestInterferenceArray.Count();
-    for( TInt i = 0; i < count; i++ )
-        {
-        if( iTestInterferenceArray[i]->iName == aName )
-            {
-            // Found test module, return description
-            iTestInterferenceArray[i]->iInterference->Stop();
-            // Delete data
-            delete iTestInterferenceArray[i];
-            // Remove pointer to deleted data(Append())
-            iTestInterferenceArray.Remove( i );
-            // iTestMeasurementArray can contain only one type of measurement
-            // so we can break when type is removed.
-            return;
-            }
-        }
-    __TRACE( KError, ( 
-            _L( "'testinterference' type[%S] was not start" ), &aName ) );
-    iRunErrorMessage.Format( KErrMsgStopInterference, &aName );
-    User::Leave( KErrArgument ); // Error in parsing => Leave
-    }
-
-/*
--------------------------------------------------------------------------------
-
-     Class: CTestRunner
-
-     Method: MeasurementL
-
-     Description: Starts test measurement.
-  
-     Parameters: CStifItemParser* aItem: in: Item object for parsing.
-
-     Return Values: None.
-
-     Errors/Exceptions: Leaves if StartBappeaMeasurementL() fails.
-                        Leaves if StopBappeaMeasurementL() fails.
-
-     Status: Approved
-    
--------------------------------------------------------------------------------
-*/
-void CTestRunner::MeasurementL( CStifItemParser* aItem )
-    {
-    _LIT( KErrMsgMeasurementCommandNotDefined, "TestMeasurement : Parameter command is not defined" );
-    _LIT( KErrMsgMeasurementTypeNotDefined, "TestMeasurement : Parameter type is not defined" );
-    _LIT( KErrMsgMeasurementUnknownType, "TestMeasurement : Unknown measurement type %S" );
-    _LIT( KErrMsgMeasurementUnknownCommand, "TestMeasurement : Unknown command %S" );
-    __TRACEFUNC();
-    TPtrC type;
-    TPtrC command;
-
-    // Get command
-    if( aItem->GetNextString( command ) != KErrNone )
-        {
-        __TRACE( KError, ( 
-            _L( "Unknown argument for 'measurement' command" ) ) );
-        iRunErrorMessage = KErrMsgMeasurementCommandNotDefined;
-        User::Leave( KErrArgument ); // Error in parsing => Leave
-        }
-    // Get name
-    if( aItem->GetNextString( type ) != KErrNone )
-        {
-        __TRACE( KError, ( 
-            _L( "Unknown argument for 'measurement' type" ) ) );
-        iRunErrorMessage = KErrMsgMeasurementTypeNotDefined;
-        User::Leave( KErrArgument ); // Error in parsing => Leave
-        }
-
-    // Verify measurement type
-    if( !( type == KParamMeasurement01 ||
-                type == KParamMeasurement02 ||
-                type == KParamMeasurement03 ||
-                type == KParamMeasurement04 ||
-                type == KParamMeasurement05 ||
-                type == KParamMeasurementBappea ) )
-
-        {
-        __TRACE( KError, ( 
-            _L( "Unknown measurement type:[%S]" ), &type ) );
-        iRunErrorMessage.Format( KErrMsgMeasurementUnknownType, &type );
-        User::Leave( KErrArgument ); // Error in types => Leave
-        }
-
-    // Verify command
-   if( command == _L( "start" ) )
-        {
-        // START measurement's process
-        __TRACE( KMessage, ( _L( "Start 'measurement' with '%S'"), &type ) );
-        StartMeasurementL( type, aItem );
-        }
-    else if( command == _L( "stop" ) )
-        {
-        // STOP measurement's process
-        __TRACE( KMessage, ( _L( "'Stop 'measurement' with '%S'"), &type ) );
-        StopMeasurementL( type );
-        }
-    else
-        {
-        __TRACE( KError, ( 
-            _L( "Unknown command for 'measurement' command:[%S] or type:[%S]" ), &command, &type ) );
-        iRunErrorMessage.Format( KErrMsgMeasurementUnknownCommand, &command );
-        User::Leave( KErrArgument ); // Error in commands => Leave
-        }
-
-    }
-
-/*
--------------------------------------------------------------------------------
-
-     Class: CTestRunner
-
-     Method: StartMeasurementL
-
-     Description: Start measurement
-  
-     Parameters: const TDesC& aType: in: Plugin type.
-                 CStifItemParser* aItem: in: Item object for parsing.
-
-     Return Values: None.
-
-     Errors/Exceptions: Leaves is measurement operation fails.
-
-     Status: Approved
-    
--------------------------------------------------------------------------------
-*/
-void CTestRunner::StartMeasurementL( const TDesC& aType,
-                                           CStifItemParser* aItem )
-    {
-    _LIT( KErrMsgMeasurementUnknownPlugin, "Measurement : Unknown measurement plugin %S" );
-    _LIT( KErrMsgMeasurementStartFail, "Measurement : Measurement start fails" );
-    __TRACEFUNC();
-
-    CSTIFTestMeasurement* testMeasurement = NULL;
-
-    // Get Measurement configuration info
-    TPtrC configurationInfo( KNullDesC() );
-    if( aItem->Remainder( configurationInfo ) != KErrNone )
-        {
-        __TRACE( KInit, ( 
-            _L( "Using default path and file name for measurement configure" ) ) );
-        } 
-
-    if( aType == KParamMeasurement01 )
-        {
-        testMeasurement = CSTIFTestMeasurement::NewL( 
-                    iTestScripter, 
-                    CSTIFTestMeasurement::KStifMeasurementPlugin01,
-                    configurationInfo );
-        }
-    else if( aType == KParamMeasurement02 )
-        {
-        testMeasurement = CSTIFTestMeasurement::NewL( 
-                    iTestScripter, 
-                    CSTIFTestMeasurement::KStifMeasurementPlugin02,
-                    configurationInfo );
-        }
-    else if( aType == KParamMeasurement03 )
-        {
-        testMeasurement = CSTIFTestMeasurement::NewL( 
-                    iTestScripter, 
-                    CSTIFTestMeasurement::KStifMeasurementPlugin03,
-                    configurationInfo );
-        }
-    else if( aType == KParamMeasurement04 )
-        {
-        testMeasurement = CSTIFTestMeasurement::NewL( 
-                    iTestScripter, 
-                    CSTIFTestMeasurement::KStifMeasurementPlugin04,
-                    configurationInfo );
-        }
-    else if( aType == KParamMeasurement05 )
-        {
-        testMeasurement = CSTIFTestMeasurement::NewL( 
-                    iTestScripter, 
-                    CSTIFTestMeasurement::KStifMeasurementPlugin05,
-                    configurationInfo );
-        }
-    else if( aType == KParamMeasurementBappea )
-        {
-        testMeasurement = CSTIFTestMeasurement::NewL( 
-                    iTestScripter, 
-                    CSTIFTestMeasurement::KStifMeasurementBappeaProfiler,
-                    configurationInfo );
-        }
-    else
-        {
-        __TRACE( KError, ( _L( "Unknown plugin[%S] for 'measurement'" ), &aType ) );
-        iRunErrorMessage.Format( KErrMsgMeasurementUnknownPlugin, &aType );        
-        User::Leave( KErrArgument );
-        }
-
-    // Start test measurement
-    TInt start_ret( KErrNone );
-    start_ret = testMeasurement->Start();
-    if( start_ret != KErrNone )
-        {
-        delete testMeasurement;
-        //CleanupStack::PopAndDestroy( setting_buf );
-        __TRACE( KError, ( 
-            _L( "CTestRunner::StartMeasurementL(): Measurement Start() fails:[%d]" ), start_ret ) );
-        iRunErrorMessage = KErrMsgMeasurementStartFail;
-        User::Leave( start_ret );
-        }
-
-    TTestMeasurement* object = new (ELeave) TTestMeasurement();
-    object->iName = aType;
-    object->iMeasurement = testMeasurement;
-
-    // Array for handling test measurement between different objects
-    TInt ret = iTestMeasurementArray.Append( object );
-    if( ret != KErrNone )
-        {
-        delete object;
-        __TRACE( KError, ( 
-            _L( "CTestRunner::StartMeasurementL(): iTestMeasurementArray.Append fails:[%d]" ), ret ) );
-        User::Leave( ret );
-        }
-
-    }
-
-/*
--------------------------------------------------------------------------------
-
-     Class: CTestRunner
-
-     Method: StopMeasurementL
-
-     Description: Stops test measurement.
-  
-     Parameters: None.
-
-     Return Values: None.
-
-     Errors/Exceptions: None.
-
-     Status: Approved
-    
--------------------------------------------------------------------------------
-*/
-void CTestRunner::StopMeasurementL( const TDesC& aType )
-    {
-    _LIT( KErrMsgMeasurementNotStarted, "Measurement : Measurement %S was not start" );
-    __TRACEFUNC();
-
-    TInt count = iTestMeasurementArray.Count();
-    for( TInt i = 0; i < count; i++ )
-        {
-        if( iTestMeasurementArray[i]->iName == aType )
-            {
-            // Found measurement module, stop
-            iTestMeasurementArray[i]->iMeasurement->Stop();
-            // Delete data
-            delete iTestMeasurementArray[i];
-            // Remove pointer to deleted data(Append())
-            iTestMeasurementArray.Remove( i );
-            // iTestMeasurementArray can contain only one type of measurement
-            // so we can break when type is removed.
-            return;
-            }
-        }
-
-    __TRACE( KError, ( 
-            _L( "CTestRunner::StopMeasurementL(): Measurement %S was not start" ), &aType ) );
-    iRunErrorMessage.Format( KErrMsgMeasurementNotStarted, &aType  );
-    User::Leave( KErrArgument );
-    }
-
-/*
--------------------------------------------------------------------------------
-
-     Class: CTestRunner
-
-     Method: AddTestCaseResultL
-
-     Description: Adds new test case result. Used with 'allownextresult'
-                  and 'allowerrorcodes' keywords.
-  
-     Parameters: CStifItemParser* aItem: in: Item object for parsing.
-
-     Return Values: None.
-
-     Errors/Exceptions: Leaves if iTestCaseResults.Append fails.
-                        Leaves if aItem->GetNextInt() fails.
-
-     Status: Approved
-    
--------------------------------------------------------------------------------
-*/
-void CTestRunner::AddTestCaseResultL( CStifItemParser* aItem )
-    {
-    _LIT( KErrMsgAllowNextResultInvalidValue, "No expected result value given or value has invalid format" );
-    TInt result;
-
-    TPtrC codeBuf;
-    TBool found = EFalse;
-    while( aItem->GetNextString( codeBuf ) == KErrNone )
-    	{
-    	TLex codeParser( codeBuf );
-    	if ( codeParser.Val( result ) != KErrNone )
-    		{
-            __TRACE( KError, (_L("ExecuteLineL: No expected result value given")));
-            iRunErrorMessage = KErrMsgAllowNextResultInvalidValue;
-            User::Leave( KErrArgument );    		
-    		}
-    	else
-    		{
-    	    User::LeaveIfError( iTestCaseResults.Append( result ) );
-    	    // Set test case allow result to CTestModuleIf side too. This is
-    	    // used in TAL-TA5L macro handling.
-    	    User::LeaveIfError( 
-    	        iTestScripter->TestModuleIf().SetAllowResult( result ) );
-    	    found = ETrue;
-    		}
-    	}
-
-    if ( !found )
-    	{
-        __TRACE( KError, (_L("ExecuteLineL: No expected result value given")));
-        iRunErrorMessage = KErrMsgAllowNextResultInvalidValue;
-        User::Leave( KErrArgument );
-    	}    
-    }
-
-
-/*
--------------------------------------------------------------------------------
-
-    DESCRIPTION
-
-    This module contains the implementation of CTestContinue class
-    member functions. CTestContinue handles ContinueScript calls from 
-    TestScripter.
-
--------------------------------------------------------------------------------
-*/
-// MACROS
-#ifdef LOGGER
-#undef LOGGER
-#endif
-#define LOGGER iTestScripter->iLog
-
-// ================= MEMBER FUNCTIONS =========================================
-
-/*
--------------------------------------------------------------------------------
-
-     Class: CTestContinue
-
-     Method: CTestContinue
-
-     Description: Default constructor
-
-     Parameters: CTestRunner* aTestRunner: in: Backpointer to CTestRunner
-
-     Return Values: None
-
-     Errors/Exceptions: None
-
-     Status: Draft
-    
--------------------------------------------------------------------------------
-*/
-CTestContinue::CTestContinue( CTestScripter* aTestScripter,
-                              TTestObject* aObject ): 
-    // Executed with lowest priority, must be lower than CTesRunner priority 
-    CActive(  CActive::EPriorityLow ),
-    iTestScripter( aTestScripter ),
-    iObject( aObject )
-    {
-    CActiveScheduler::Add( this );
-    __TRACEFUNC();
-    
-    }
-
-/*
--------------------------------------------------------------------------------
-
-     Class: CTestContinue
-
-     Method: ConstructL
-
-     Description: Symbian OS second phase constructor
-
-     Parameters:    None
-
-     Return Values: None
-
-     Errors/Exceptions: None
-
-     Status: Draft
-    
--------------------------------------------------------------------------------
-*/
-void CTestContinue::ConstructL()
-    {
-    
-    iObject->iScript->EnableSignal( iStatus );
-    SetActive();
-    
-    }
-
-/*
--------------------------------------------------------------------------------
-
-     Class: CTestContinue
-
-     Method: NewL
-
-     Description: Two-phased constructor.
-          
-     Parameters: CTestRunner* aTestRunner: in: Backpointer to CTestRunner
-
-     Return Values: CTestContinue*: new object
-
-     Errors/Exceptions: Leaves if new or ConstructL leaves
-
-     Status: Draft
-    
--------------------------------------------------------------------------------
-*/
-
-CTestContinue* CTestContinue::NewL( CTestScripter* aTestScripter,
-                                    TTestObject* aObject )
-    {
-    CTestContinue* self = 
-        new (ELeave) CTestContinue( aTestScripter, aObject );
-     
-    CleanupStack::PushL( self );
-    self->ConstructL();
-    CleanupStack::Pop();
-
-    return self;
-    }
-
-/*
--------------------------------------------------------------------------------
-
-     Class: CTestContinue
-
-     Method: ~CTestContinue
-
-     Description: Destructor
-     
-     Parameters:    None
-
-     Return Values: None
-
-     Errors/Exceptions: None
-
-     Status: Draft
-    
--------------------------------------------------------------------------------
-*/     
-
-CTestContinue::~CTestContinue()
-    {
-    __TRACEFUNC();
-    Cancel();
-    
-    }
-
-/*
--------------------------------------------------------------------------------
-
-     Class: CTestContinue
-
-     Method: RunL
-
-     Description: Derived from CActive, handles testcase execution.
-
-     Parameters:    None.
-
-     Return Values: None.
-
-     Errors/Exceptions: Leaves on error situations.
-
-     Status: Draft
-    
--------------------------------------------------------------------------------
-*/
-void CTestContinue::RunL()
-    {
-
-    __TRACEFUNC();
-    __TRACE( KMessage, (_L("CTestContinue::RunL: [%d] "), iStatus.Int() ));
-
-    if( iObject->Signal() ) 
-        {
-        // If OOM testing is ongoing ignore result check(given by user).
-        if( !iTestScripter->iOOMIgnoreFailure )
-            {
-            // Erronous case RunError will called and test handling continue 
-            // from there.
-            if( iTestScripter->TestRunner().TestCaseResults().Count() == 0 )
-                {
-                // KErrNone is the default result expected 
-                // if nothing else is given 
-                User::LeaveIfError( iTestScripter->TestRunner().
-                    TestCaseResults().Append( KErrNone ) );
-                }
-            
-            if( iTestScripter->TestRunner().TestCaseResults().
-                    Find( iStatus.Int() ) < 0 ) 
-                {
-                __TRACE( KError, ( _L("Command for [%S] failed (%d)"), 
-                    &iObject->ObjectId(), iStatus.Int() ));
-
-
-                if( iStatus.Int() == KErrNone )
-                    {
-                    User::Leave( KErrGeneral );
-                    }
-                else
-                    {
-                    User::Leave( iStatus.Int() );
-                    }
-                }
-            }
-        else
-            {
-            __TRACE( KMessage, ( 
-                _L( "OOM test: 'oomignorefailure' is ON, signal result[%d] ignored" ),
-                iStatus.Int() ));
-            }
-
-        iTestScripter->TestRunner().TestCaseResults().Reset();
-        
-         __TRACE( KMessage, (_L("CTestContinue::RunL: Set runner active ")));
-        iTestScripter->iTestRunner->SetRunnerActive();   
-        }
-    else
-        {
-        // Signal called from test side but 'waittestclass' not yet processed
-        iObject->iAsyncResult = iStatus.Int();
-        }        
-        
-    iObject->iScript->EnableSignal( iStatus );
-    SetActive();
-    
-    }
-     
-/*
--------------------------------------------------------------------------------
-
-     Class: CTestContinue
-
-     Method: DoCancel
-
-     Description: Derived from CActive handles the Cancel
-
-     Parameters:    None.
-
-     Return Values: None.
-
-     Errors/Exceptions: None.
-
-     Status: Draft
-    
--------------------------------------------------------------------------------
-*/
-void CTestContinue::DoCancel()
-    {
-
-    __TRACEFUNC();
-    __TRACE( KMessage, (_L("CTestContinue::DoCancel")));
-
-    iObject->iScript->CancelSignal();
-    
-    }
-
-/*
--------------------------------------------------------------------------------
-
-     Class: CTestContinue
-
-     Method: RunError
-
-     Description: Derived from CActive handles the Cancel
-
-     Parameters:    None.
-
-     Return Values: None.
-
-     Errors/Exceptions: None.
-
-     Status: Draft
-    
--------------------------------------------------------------------------------
-*/
-TInt CTestContinue::RunError( TInt aError )
-    {
-
-    // Return error from here, if none given from execution
-    if( iTestScripter->iResult.iResult == KErrNone )
-        {
-        iTestScripter->UpdateTestCaseResult(aError, _L("CTestContinue::RunError"));
-        }
-    CActiveScheduler::Current()->Stop();
-     
-    return KErrNone;
-    
-    }
-    
-/*
--------------------------------------------------------------------------------
-
-    DESCRIPTION
-
-    This module contains the implementation of CDefinedValue class
-    member functions. 
--------------------------------------------------------------------------------
-*/
-
-// ================= MEMBER FUNCTIONS =========================================
-/*
--------------------------------------------------------------------------------
-
-     Class: CDefinedValue
-
-     Method: CDefinedValue
-
-     Description: Default constructor
-
-     C++ default constructor can NOT contain any code, that
-     might leave.
-     
-     Parameters: None
-
-     Return Values: None
-
-     Errors/Exceptions: None
-
-     Status: Draft
-    
--------------------------------------------------------------------------------
-*/
-CDefinedValue::CDefinedValue()
-    {
-    }
-     
-/*
--------------------------------------------------------------------------------
-
-     Class: CDefinedValue
-
-     Method: ConstructL
-
-     Description: Symbian OS second phase constructor
-
-     Symbian OS default constructor can leave.
-
-     Parameters:    TDesC& aName: in: Define name
-                    TDesC& aValue: in: Define value
-
-     Return Values: None
-
-     Errors/Exceptions: None
-
-     Status: Draft
-    
--------------------------------------------------------------------------------
-*/
-void CDefinedValue::ConstructL( TDesC& aName, TDesC& aValue )
-    {    
-
-    iNameBuf = aName.AllocLC();
-    iName.Set( iNameBuf->Des() );
-    iValueBuf = aValue.AllocLC();
-    iValue.Set( iValueBuf->Des() );
-    CleanupStack::Pop( iValueBuf );
-    CleanupStack::Pop( iNameBuf );
-
-    }
-
-/*
--------------------------------------------------------------------------------
-
-     Class: CDefinedValue
-
-     Method: NewL
-
-     Description: Two-phased constructor.
-          
-     Parameters:    TDesC& aName: in: Define name
-                    TDesC& aValue: in: Define value
-
-     Return Values: CDefinedValue*: new object
-
-     Errors/Exceptions: Leaves if new or ConstructL leaves.
-
-     Status: Draft
-    
--------------------------------------------------------------------------------
-*/
-CDefinedValue* CDefinedValue::NewL( TDesC& aName, TDesC& aValue )
-    {
-
-    CDefinedValue* self = new (ELeave) CDefinedValue();
-     
-    CleanupStack::PushL( self );
-    self->ConstructL( aName, aValue );
-    CleanupStack::Pop();
-
-    return self;
-
-    }    
-    
-/*
--------------------------------------------------------------------------------
-
-     Class: CDefinedValue
-
-     Method: ~CDefinedValue
-
-     Description: Destructor
-     
-     Parameters:    None
-
-     Return Values: None
-
-     Errors/Exceptions: None
-
-     Status: Draft
-    
--------------------------------------------------------------------------------
-*/     
-CDefinedValue::~CDefinedValue()
-    {
-    
-    delete iValueBuf;
-    delete iNameBuf;
-    
-    }
-    
-/*
--------------------------------------------------------------------------------
-
-     Class: CDefinedValue
-
-     Method: SetValueL
-
-     Description: Set new define value
-
-     Parameters:    TDesC& aValue: in: Define value
-
-     Return Values: None
-
-     Errors/Exceptions: Leaves on error.
-
-     Status: Draft
-    
--------------------------------------------------------------------------------
-*/
-void CDefinedValue::SetValueL( TDesC& aValue )
-    {
-    delete iValueBuf;
-    iValueBuf = 0;
-    iValueBuf = aValue.AllocLC();
-    iValue.Set( iValueBuf->Des() );
-    CleanupStack::Pop( iValueBuf );
-    
-    }
-
-    
-/*
--------------------------------------------------------------------------------
-
-     Class: CDefinedValue
-
-     Method: Name
-
-     Description: Returns define name.
-
-     Parameters:  None
-
-     Return Values: TDesC: Define name
-
-     Errors/Exceptions: None
-
-     Status: Draft
-    
--------------------------------------------------------------------------------
-*/
-TDesC& CDefinedValue::Name()
-    { 
-    return iName; 
-    }
-        
-/*
--------------------------------------------------------------------------------
-
-     Class: CDefinedValue
-
-     Method: Value
-
-     Description: Returns define value.
-
-     Parameters:  None
-
-     Return Values: TDesC: Define value
-
-     Errors/Exceptions: None
-
-     Status: Draft
-    
--------------------------------------------------------------------------------
-*/
-TDesC& CDefinedValue::Value()
-    { 
-    return iValue; 
-    }
-    
-
-/*
--------------------------------------------------------------------------------
-
-    DESCRIPTION
-
-    This module contains the implementation of TTestObjectBase class
-    member functions. 
--------------------------------------------------------------------------------
-*/
-
-// ================= MEMBER FUNCTIONS =========================================
-/*
--------------------------------------------------------------------------------
-
-     Class: TTestObjectBase
-
-     Method: TTestObjectBase
-
-     Description: Constructor
-
-     Parameters: None
-
-     Return Values: None
-
-     Errors/Exceptions: None
-
-     Status: Draft
-    
--------------------------------------------------------------------------------
-*/    
-TTestObjectBase::TTestObjectBase( TObjectType aType ) : 
-    iAsyncResult( KErrNone ),
-    iType( aType )
-    {
-    
-    RDebug::Print( _L("TTestObjectBase::TTestObjectBase") );
-    iName.Zero(); 
-    
-    }
-    
-    /*
--------------------------------------------------------------------------------
-
-     Class: TTestObjectBase
-
-     Method: ~TTestObjectBase
-
-     Description: Destructor
-
-     Parameters: None
-
-     Return Values: None
-
-     Errors/Exceptions: None
-
-     Status: Draft
-    
--------------------------------------------------------------------------------
-*/    
-TTestObjectBase::~TTestObjectBase()
-    {
-    
-    RDebug::Print( _L("TTestObjectBase::~TTestObjectBase") );
-
-    }
-
-/*
--------------------------------------------------------------------------------
-
-    DESCRIPTION
-
-    This module contains the implementation of TTestObject class
-    member functions. 
--------------------------------------------------------------------------------
-*/
-// ================= MEMBER FUNCTIONS =========================================
-
-/*
--------------------------------------------------------------------------------
-
-     Class: TTestObject
-
-     Method: TTestObject
-
-     Description: Constructor
-
-     Parameters: None
-
-     Return Values: None
-
-     Errors/Exceptions: None
-
-     Status: Draft
-    
--------------------------------------------------------------------------------
-*/    
-TTestObject::TTestObject() :
-    TTestObjectBase( EObjectNormal ),
-    iScript(0),
-    iContinue(0),
-    iCount(0)
-    {
-
-    RDebug::Print( _L("TTestObject::TTestObject") );
-
-    }
-
-/*
--------------------------------------------------------------------------------
-
-     Class: TTestObject
-
-     Method: ~TTestObject
-
-     Description: Destructor
-
-     Parameters: None
-
-     Return Values: None
-
-     Errors/Exceptions: None
-
-     Status: Draft
-    
--------------------------------------------------------------------------------
-*/
-TTestObject::~TTestObject()
-    { 
-    
-    RDebug::Print( _L("TTestObject::~TTestObject") );
-    delete iContinue; 
-    delete iScript;
-    
-    }
-        
-/*
--------------------------------------------------------------------------------
-
-     Class: TTestObject
-
-     Method: RunMethodL
-
-     Description: Run specified method from testclass.
-
-     Parameters: CStifItemParser* aItem: in: itemparser
-
-     Return Values: Symbian OS error code
-
-     Errors/Exceptions: None
-
-     Status: Draft
-    
--------------------------------------------------------------------------------
-*/
-TInt TTestObject::RunMethodL( CStifItemParser& aItem )
-    { 
-    
-    return iScript->RunMethodL( aItem ); 
-    
-    }
-    
-/*
--------------------------------------------------------------------------------
-
-    DESCRIPTION
-
-    This module contains the implementation of TTestObjectKernel class
-    member functions. 
--------------------------------------------------------------------------------
-*/
-// ================= MEMBER FUNCTIONS =========================================
-
-
-/*
--------------------------------------------------------------------------------
-
-     Class: TTestObjectKernel
-
-     Method: TTestObjectKernel
-
-     Description: Constructor
-
-     Parameters: None
-
-     Return Values: None
-
-     Errors/Exceptions: None
-
-     Status: Draft
-    
--------------------------------------------------------------------------------
-*/    
-TTestObjectKernel::TTestObjectKernel() : 
-    TTestObjectBase( EObjectKernel )
-    {
-    
-    RDebug::Print( _L("TTestObjectKernel::TTestObjectKernel") );
-    
-    }
-    
-/*
--------------------------------------------------------------------------------
-
-     Class: TTestObjectKernel
-
-     Method: ~TTestObjectKernel
-
-     Description: Destructor
-
-     Parameters: None
-
-     Return Values: None
-
-     Errors/Exceptions: None
-
-     Status: Draft
-    
--------------------------------------------------------------------------------
-*/
-TTestObjectKernel::~TTestObjectKernel()
-    { 
-    
-    RDebug::Print( _L("TTestObjectKernel::~TTestObjectKernel") );
-    
-    iTestClass.Close(); 
-    User::FreeLogicalDevice( iLddName );
-    
-    }
-   
-/*
--------------------------------------------------------------------------------
-
-     Class: TTestObjectKernel
-
-     Method: RunMethodL
-
-     Description: Run specified method from kernel testclass.
-
-     Parameters: CStifItemParser& aItem: in: itemparser
-
-     Return Values: Symbian OS error code
-
-     Errors/Exceptions: None
-
-     Status: Draft
-    
--------------------------------------------------------------------------------
-*/
-TInt TTestObjectKernel::RunMethodL( CStifItemParser& aItem )
-    { 
-    
-    TPtrC method;
-    TPtrC params;
-    
-    User::LeaveIfError( aItem.GetNextString( method ) );
-    aItem.Remainder( params );
-    
-    TInt result;
-    TMethodResultDes resultDes;
-          
-    // Need to change descriptors from 16bit to 8bit for EKA2 kernel
-    // because STIF Parser doesn't support 8bit parsing
-    HBufC8 * myBuf1 = HBufC8::NewL( method.Length() );
-    TPtr8 met8 = myBuf1->Des();   
-    met8.Copy( method );
-        
-    HBufC8 * myBuf2 = HBufC8::NewL( params.Length() );
-    TPtr8 par8 = myBuf2->Des();   
-    par8.Copy( params );
-    
-    TInt ret =  iTestClass.RunMethod( met8, par8, result, resultDes );
-
-    delete myBuf1;
-    delete myBuf2;
-    
-    if( ret != KErrNone )
-        {
-        return ret;
-        }
-    
-    return result;                             
-                                     
-    };
-    
-// ================= OTHER EXPORTED FUNCTIONS =================================
-
-/*
--------------------------------------------------------------------------------
-    
-     Function: LibEntryL
-
-     Description: Polymorphic Dll Entry Point
-
-     Parameters:    None.
-
-     Return Values: CTestScripter*: pointer to new CTestScripter
-
-     Errors/Exceptions: Leaves if NewL leaves.
-
-     Status: Draft
-     
--------------------------------------------------------------------------------
-*/
-
-EXPORT_C CTestScripter* LibEntryL()
-    {
-    return CTestScripter::NewL();
-    
-    }
-
-// End of File