devicediagnosticsfw/diagpluginbase/src/diagtestpluginbase.cpp
branchRCL_3
changeset 61 b183ec05bd8c
parent 59 13d7c31c74e0
child 62 19bba8228ff0
--- a/devicediagnosticsfw/diagpluginbase/src/diagtestpluginbase.cpp	Thu Aug 19 10:44:50 2010 +0300
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,1049 +0,0 @@
-/*
-* Copyright (c) 2007 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:  Class definition of CDiagTestPluginBase
-*
-*/
-
-
-// CLASS DECLARATION
-#include <DiagTestPluginBase.h>
-
-// SYSTEM INCLUDE FILES
-#include <coemain.h>                        // CCoeEnv::Static()
-#include <DiagTestExecParam.h>              // TDiagTestExecParam
-#include <DiagResultsDbItemBuilder.h>       // CDiagResultsDbItemBuilder
-#include <DiagTestObserver.h>               // MDiagTestObserver
-#include <DiagPluginConstructionParam.h>    // CDiagPluginConstructionParam
-#include <DiagFrameworkDebug.h>             // LOGSTRING
-#include <DiagResultDetailBasic.h>          // CDiagResultDetailBasic
-#include <DiagEngineCommon.h>               // MDiagEngineCommon
-#include <DiagPluginPool.h>                 // CDiagPluginPool
-#include <DiagResultsDatabase.h>            // RDiagResultsDatabase
-#include <DiagPluginWaitingDialogWrapper.h> // CDiagPluginWaitingDialogWrapper
-#include <DiagPluginExecPlan.h>             // MDiagPluginExecPlan
-#include <DiagSuitePlugin.h>                // MDiagSuitePlugin
-// ADO & Platformization Changes
-#include <avkon.hrh>						// EAknSoftkeyYes
-
-// USER INCLUDE FILES
-#include "diagpluginbaseutils.h"            // DiagPluginBaseUtils
-#include "diagpluginbase.pan"               // Panic Codes
-
-// CONSTANTS
-
-// priority of result value. Entries that are earlier have higher priority
-static const CDiagResultsDatabaseItem::TResult KResultPriority[] = 
-    {
-    CDiagResultsDatabaseItem::EQueuedToRun,
-    CDiagResultsDatabaseItem::EDependencyFailed,
-    CDiagResultsDatabaseItem::EFailed,       
-    CDiagResultsDatabaseItem::ECancelled,    
-    CDiagResultsDatabaseItem::ESkipped,      
-    CDiagResultsDatabaseItem::EInterrupted,  
-    CDiagResultsDatabaseItem::EWatchdogCancel,
-    CDiagResultsDatabaseItem::ENotPerformed, 
-    CDiagResultsDatabaseItem::ESuspended,    
-    CDiagResultsDatabaseItem::ESuccess
-    };
-
-static const TInt KResultPriorityCount = 
-    sizeof( KResultPriority ) / sizeof( CDiagResultsDatabaseItem::TResult );
-
-// LOCAL TYPES
-class CDiagTestPluginBase::TPrivateData
-    {
-public:     // Constructor
-    // Note that this is not a C-class, and ALL member must be explicitly initialized.
-    TPrivateData( CCoeEnv& aCoeEnv )
-        :   iDtorIdKey( TUid::Null() ),
-            iPluginResourceLoader( aCoeEnv ),
-            iWaitingDialogWrapper( NULL ),
-            iResultBuilder( NULL ),
-            iExecParam( NULL ),
-            iCustomParam( NULL ),
-            iDependencyCheckSkipped( EFalse ),
-            iDependencyExecution( EFalse ),
-            iSinglePluginExecution( EFalse ),
-            iWatchdogResultType( CDiagResultsDatabaseItem::EWatchdogCancel )
-        {}
-    
-public:
-    /**
-    * ECOM Destructor key.
-    */
-    TUid iDtorIdKey;
-
-    /**
-    * Resource loader for derived class resource.
-    */
-    RConeResourceLoader iPluginResourceLoader;
-
-    /**
-    * Wrapper class for displaying waiting dialogs.
-    * Ownership: Shared. Normally, dialog will dismiss itself. However,
-    * if plug-in is being deleted, it can be deleted by the plug-in as well.
-    */
-    CDiagPluginWaitingDialogWrapper* iWaitingDialogWrapper;
-
-    /**
-    * Results Db Item Builder. This will be used to build the result db item.
-    * Owneship: this.
-    */
-    CDiagResultsDbItemBuilder*  iResultBuilder;
-
-    /**
-    * Test execution parameter.
-    * Ownership: this.
-    */
-    TDiagTestExecParam* iExecParam;
-
-    /**
-    * Custom test execution parameter
-    * Ownership: Does not own. Owned by application.
-    */
-    TAny* iCustomParam;
-
-    /**
-    * This indicates whether this test session has skipped dependency check.
-    */
-    TBool iDependencyCheckSkipped;
-
-    /**
-    * This indicates whether this test is being executed to satisfy dependency.
-    */
-    TBool iDependencyExecution;
-
-    /**
-    * Indicates if the plugin is run as a single plugin
-    * or as a part of suite
-    */
-    TBool iSinglePluginExecution;
-
-    /**
-    * Result type to use when watchdog is timed out.
-    */
-    CDiagResultsDatabaseItem::TResult iWatchdogResultType;
-    };
-
-// ======== LOCAL FUNCTIONS ========
-
-// ======== MEMBER FUNCTIONS ========
-
-// ---------------------------------------------------------------------------
-// CDiagTestPluginBase::CDiagTestPluginBase
-// ---------------------------------------------------------------------------
-//
-EXPORT_C CDiagTestPluginBase::CDiagTestPluginBase( 
-        CDiagPluginConstructionParam* aParam )
-    :   CActive( EPriorityStandard ),
-        iConstructionParam( aParam ),
-        iCoeEnv ( *CCoeEnv::Static() )
-    {
-    __ASSERT_ALWAYS( aParam, Panic( EDiagPluginBasePanicBadArgument ) );
-
-    CActiveScheduler::Add(this);
-    }
-
-// ---------------------------------------------------------------------------
-// CDiagTestPluginBase::BaseConstructL
-// ---------------------------------------------------------------------------
-//
-EXPORT_C void CDiagTestPluginBase::BaseConstructL( const TDesC& aResourceFileName )
-    {
-    iData = new ( ELeave ) TPrivateData( CoeEnv() );
-        
-    DiagPluginBaseUtils::OpenResourceFileL(
-        aResourceFileName, iData->iPluginResourceLoader, CoeEnv().FsSession() );
-    }
-
-
-// ---------------------------------------------------------------------------
-// CDiagTestPluginBase::~CDiagTestPluginBase
-// ---------------------------------------------------------------------------
-//
-EXPORT_C CDiagTestPluginBase::~CDiagTestPluginBase()
-    {
-    if ( iData )
-        {
-        // In case test was still running, clean up.
-        // It takes care of:
-        //  iData->iWaitingDialog
-        //  iData->iIsDialogDismessedByUserResponsePtr
-        //  iData->iResultBuilder
-        //  iData->iExecParam
-        // It must be trapped, since it is part of object destruction.
-        TRAPD( err, StopAndCleanupL() );
-        if ( err != KErrNone )
-            {
-            LOGSTRING3( "CDiagTestPluginBase::~CDiagTestPluginBase(). "
-                L"StopAndCleaupL() failed Uid = 0x%08x , err = %d",
-                Uid(),
-                err );
-            }
-
-        // Call DestroyedImplementation only if it was set.
-        // SetDtorIdKey may not have been called if it is not actually an
-        // ECOM plug-in.
-        if ( iData->iDtorIdKey != TUid::Null() )
-            {
-            REComSession::DestroyedImplementation( iData->iDtorIdKey );
-            }
-
-        iData->iPluginResourceLoader.Close();
-
-        delete iData;
-        iData = NULL;
-        }
-
-    delete iConstructionParam;
-    iConstructionParam = NULL;
-    }
-
-// ---------------------------------------------------------------------------
-// From CActive
-// CDiagTestPluginBase::RunError
-// ---------------------------------------------------------------------------
-//
-EXPORT_C TInt CDiagTestPluginBase::RunError( TInt aError )
-    {
-    LOGSTRING2( "CDiagTestPluginBase::RunError( %d )", aError )
-    
-    // Check if we are executing a test.
-    if ( iData->iExecParam != NULL )
-        {
-        // Catch error from CompleteTestL. If there is an error while calling
-        // CompleteTestL(), return the error to active scheduler.
-        aError = KErrNone;
-        TRAP( aError, CompleteTestL( CDiagResultsDatabaseItem::EFailed ) );
-        }
-
-    return KErrNone;
-    }
-
-// ---------------------------------------------------------------------------
-// From MDiagTestPlugin
-// CDiagTestPluginBase::GetServiceLogicalNameL
-// ---------------------------------------------------------------------------
-//
-EXPORT_C const TDesC& CDiagTestPluginBase::ServiceLogicalName() const
-    {
-    return iConstructionParam->ServiceProvided();
-    }
-
-
-// ---------------------------------------------------------------------------
-// From MDiagTestPlugin
-// CDiagTestPluginBase::GetLogicalDependenciesL
-// ---------------------------------------------------------------------------
-//
-EXPORT_C void CDiagTestPluginBase::GetLogicalDependenciesL( 
-        CPtrCArray& aArray ) const
-    {       
-    aArray.CopyL( iConstructionParam->ServicesRequired() );
-    }
-
-
-// ---------------------------------------------------------------------------
-// From MDiagTestPlugin
-// CDiagTestPluginBase::Type
-// ---------------------------------------------------------------------------
-//
-EXPORT_C MDiagPlugin::TPluginType CDiagTestPluginBase::Type() const
-    {
-    return ETypeTestPlugin;
-    }
-
-// ---------------------------------------------------------------------------
-// From MDiagTestPlugin
-// CDiagTestPluginBase::CreateIconL
-// ---------------------------------------------------------------------------
-//
-EXPORT_C CGulIcon* CDiagTestPluginBase::CreateIconL() const
-    {
-    return NULL;
-    }
-
-// ---------------------------------------------------------------------------
-// From MDiagTestPlugin
-// CDiagTestPluginBase::IsSupported
-// ---------------------------------------------------------------------------
-//
-EXPORT_C TBool CDiagTestPluginBase::IsSupported() const
-    {
-    return ETrue;
-    }
-
-// ---------------------------------------------------------------------------
-// From MDiagTestPlugin
-// CDiagTestPluginBase::ParentUid
-// ---------------------------------------------------------------------------
-//
-EXPORT_C TUid CDiagTestPluginBase::ParentUid() const
-    {
-    return iConstructionParam->ParentUid();
-    }
-
-// ---------------------------------------------------------------------------
-// From MDiagTestPlugin
-// CDiagTestPluginBase::Order
-// ---------------------------------------------------------------------------
-//
-EXPORT_C TUint CDiagTestPluginBase::Order() const
-    {
-    return iConstructionParam->Order();
-    }
-
-
-// ---------------------------------------------------------------------------
-// From MDiagTestPlugin
-// CDiagTestPluginBase::SetDtorIdKey
-// ---------------------------------------------------------------------------
-//
-EXPORT_C void CDiagTestPluginBase::SetDtorIdKey( TUid aDtorIdKey )
-    {
-    __ASSERT_ALWAYS( iData, Panic( EDiagPluginBasePanicInvalidState ) );
-    LOGSTRING3( "CDiagTestPluginBase::SetDtorIdKey: Old=0x%x, New=0x%x",
-        iData->iDtorIdKey.iUid, aDtorIdKey.iUid )
-    iData->iDtorIdKey = aDtorIdKey;
-    }
-
-// ---------------------------------------------------------------------------
-// From MDiagTestPlugin
-// CDiagTestPluginBase::GetTitleL
-// ---------------------------------------------------------------------------
-//
-EXPORT_C HBufC* CDiagTestPluginBase::GetTitleL() const
-    {
-    // Currently, GetTitleL() is not supported.
-    User::Leave( KErrNotSupported );
-    return NULL;
-    }
-
-// ---------------------------------------------------------------------------
-// From MDiagTestPlugin
-// CDiagTestPluginBase::GetDescriptionL
-// ---------------------------------------------------------------------------
-//
-EXPORT_C HBufC* CDiagTestPluginBase::GetDescriptionL() const
-    {
-    // Currently, GetDescriptionL() is not supported.
-    User::Leave( KErrNotSupported );
-    return NULL;
-    }
-
-// ---------------------------------------------------------------------------
-// From MDiagTestPlugin
-// CDiagTestPluginBase::CustomOperationL
-// ---------------------------------------------------------------------------
-//
-EXPORT_C TAny* CDiagTestPluginBase::CustomOperationL( TUid /* aUid */, 
-        TAny* /* aParam */ ) 
-    {
-    LOGSTRING( "CDiagTestPluginBase::CustomOperationL: KErrNotSupported" )
-    User::Leave( KErrNotSupported );
-    return NULL;
-    }
-
-
-
-// ---------------------------------------------------------------------------
-// From MDiagTestPlugin
-// CDiagTestPluginBase::GetCustomL
-// ---------------------------------------------------------------------------
-//
-EXPORT_C TAny* CDiagTestPluginBase::GetCustomL( TUid /* aUid*/,
-                                                TAny* /* aParam */ )
-    {
-    LOGSTRING( "CDiagTestPluginBase::GetCustomL: KErrNotSupported" )
-    User::Leave( KErrNotSupported );
-    return NULL;
-    }
-
-
-// ---------------------------------------------------------------------------
-// From MDiagTestPlugin
-// CDiagTestPluginBase::TestSessionBeginL
-// ---------------------------------------------------------------------------
-//
-EXPORT_C void CDiagTestPluginBase::TestSessionBeginL( 
-        MDiagEngineCommon& /* aEngine */,
-        TBool /* aSkipDependencyCheck */,
-        TAny* /* aCustomParams */ )
-    {
-    }
-
-// ---------------------------------------------------------------------------
-// From MDiagTestPlugin
-// CDiagTestPluginBase::TestSessionEndL
-// ---------------------------------------------------------------------------
-//
-EXPORT_C void CDiagTestPluginBase::TestSessionEndL( 
-        MDiagEngineCommon& /* aEngine */,
-        TBool /* aSkipDependencyCheck */,
-        TAny* /* aCustomParams */ )
-    {
-    }
-
-// ---------------------------------------------------------------------------
-// From CDiagTestPluginBase
-// CDiagTestPluginBase::RunTestL
-// ---------------------------------------------------------------------------
-//
-EXPORT_C void CDiagTestPluginBase::RunTestL( 
-        TDiagTestExecParam* aExecParam,
-        TBool aSkipDependencyCheck,
-        TBool aDependencyExecution,
-        TAny* aCustomParam ) 
-    {
-    __ASSERT_ALWAYS( iData, Panic( EDiagPluginBasePanicInvalidState ) );
-    __ASSERT_DEBUG( iData->iExecParam == NULL, Panic( EDiagPluginBasePanicInternal ) );
-    __ASSERT_DEBUG( iData->iResultBuilder == NULL, Panic( EDiagPluginBasePanicInternal ) );
-    delete iData->iExecParam;
-    delete iData->iResultBuilder;
-
-    iData->iExecParam = aExecParam;
-    iData->iCustomParam = aCustomParam;
-    iData->iDependencyCheckSkipped = aSkipDependencyCheck;
-    iData->iDependencyExecution = aDependencyExecution;
-    iData->iResultBuilder = CDiagResultsDbItemBuilder::NewL( Uid(), aDependencyExecution );
-    ResetWatchdogToDefault();
-
-    // checking if this is a single test execution or not 
-    iData->iSinglePluginExecution = 
-        ( aExecParam->Engine().ExecutionPlanL().TestCount( EFalse ) == 1 );
-
-    // verify that dependencies are satisfied.
-    RArray<TUid>* failedUids = NULL;
-    CDiagResultsDatabaseItem::TResult dependencyResult = CDiagResultsDatabaseItem::ESuccess;
-
-    if ( !aSkipDependencyCheck )
-        {
-        dependencyResult =  VerifyDependenciesL( 
-            aExecParam->Engine(),
-            failedUids );
-        }
-	
-    if(dependencyResult == CDiagResultsDatabaseItem::ESuccess)
-	LOGSTRING( "This is to remove compiler warning");
-	
-
-    if ( failedUids )
-        {
-        failedUids->Reset();
-        failedUids->Close();
-        delete failedUids;
-        failedUids = NULL;
-        }
-    DoRunTestL();
-    /*if ( dependencyResult == CDiagResultsDatabaseItem::ESuccess )
-        {
-        
-        }
-    else
-        {
-        // Create dependency failed test result and send it to engine.
-        // Note that we can't actually call CompleteTestL(), or StopAndCleanupL() 
-        // here because we haven't actually called the derived class.
-        // So, reporting and clean up must be done manually.
-
-        // Map dependent test result to what we should report.
-        switch ( dependencyResult )
-            {
-            case CDiagResultsDatabaseItem::EFailed:
-                dependencyResult = CDiagResultsDatabaseItem::EDependencyFailed;
-                break;
-            
-            case CDiagResultsDatabaseItem::EWatchdogCancel:
-            case CDiagResultsDatabaseItem::ESkipped:
-            case CDiagResultsDatabaseItem::EInterrupted:
-            case CDiagResultsDatabaseItem::ENotPerformed:
-                dependencyResult = CDiagResultsDatabaseItem::EDependencySkipped;
-                break;
-
-            default:
-                // no change is needed.
-                break;
-            }
-
-        iData->iResultBuilder->SetTestCompleted( dependencyResult );
-
-        iData->iExecParam->Observer().TestExecutionCompletedL( *this,
-            iData->iResultBuilder->ToResultsDatabaseItemL() );
-
-        BaseStopAndCleanup();
-        }*/
-    }
-
-// ---------------------------------------------------------------------------
-// CDiagTestPluginBase::ExecutionParam
-// ---------------------------------------------------------------------------
-//
-EXPORT_C TDiagTestExecParam& CDiagTestPluginBase::ExecutionParam()
-    {
-    __ASSERT_ALWAYS( iData, Panic( EDiagPluginBasePanicInvalidState ) );
-    __ASSERT_ALWAYS( iData->iExecParam, Panic( EDiagPluginBasePanicInvalidState ) );
-    return *(iData->iExecParam);
-    }
-
-// ---------------------------------------------------------------------------
-// CDiagTestPluginBase::IsDependencyCheckSkipped
-// ---------------------------------------------------------------------------
-//
-EXPORT_C TBool CDiagTestPluginBase::IsDependencyCheckSkipped() const
-    {
-    __ASSERT_ALWAYS( iData, Panic( EDiagPluginBasePanicInvalidState ) );
-    __ASSERT_ALWAYS( iData->iExecParam, Panic( EDiagPluginBasePanicInvalidState ) );
-    return iData->iDependencyCheckSkipped;
-    }
-
-// ---------------------------------------------------------------------------
-// CDiagTestPluginBase::IsDependencyExecution
-// ---------------------------------------------------------------------------
-//
-EXPORT_C TBool CDiagTestPluginBase::IsDependencyExecution() const
-    {
-    __ASSERT_ALWAYS( iData, Panic( EDiagPluginBasePanicInvalidState ) );
-    __ASSERT_ALWAYS( iData->iExecParam, Panic( EDiagPluginBasePanicInvalidState ) );
-    return iData->iDependencyExecution;
-    }
-
-// ---------------------------------------------------------------------------
-// CDiagTestPluginBase::CustomParam
-// ---------------------------------------------------------------------------
-//
-EXPORT_C TAny* CDiagTestPluginBase::CustomParam() const
-    {
-    __ASSERT_ALWAYS( iData, Panic( EDiagPluginBasePanicInvalidState ) );
-    __ASSERT_ALWAYS( iData->iExecParam, Panic( EDiagPluginBasePanicInvalidState ) );
-    return iData->iCustomParam;
-    }
-
-// ---------------------------------------------------------------------------
-// CDiagTestPluginBase::ResultsDbItemBuilder
-// ---------------------------------------------------------------------------
-//
-EXPORT_C CDiagResultsDbItemBuilder& CDiagTestPluginBase::ResultsDbItemBuilder()
-    {
-    __ASSERT_ALWAYS( iData, Panic( EDiagPluginBasePanicInvalidState ) );
-    __ASSERT_ALWAYS( iData->iResultBuilder, Panic( EDiagPluginBasePanicInvalidState ) );
-    return *(iData->iResultBuilder);
-    }
-
-// ---------------------------------------------------------------------------
-// CDiagTestPluginBase::ReportTestProgressL
-// ---------------------------------------------------------------------------
-//
-EXPORT_C void CDiagTestPluginBase::ReportTestProgressL( TUint aCurrentStep )
-    {
-    __ASSERT_ALWAYS( iData, Panic( EDiagPluginBasePanicInvalidState ) );
-    __ASSERT_ALWAYS( iData->iExecParam, Panic( EDiagPluginBasePanicInvalidState ) );
-
-    iData->iExecParam->Observer().TestProgressL( *this, aCurrentStep );
-    }
-
-// ---------------------------------------------------------------------------
-// CDiagTestPluginBase::ResetWatchdog
-// ---------------------------------------------------------------------------
-//
-EXPORT_C void CDiagTestPluginBase::ResetWatchdog(
-        TDiagEngineWatchdogTypes aWatchdogType,
-        CDiagResultsDatabaseItem::TResult aWatchdogResultType )
-    {
-    __ASSERT_ALWAYS( iData, Panic( EDiagPluginBasePanicInvalidState ) );
-    __ASSERT_ALWAYS( iData->iExecParam, Panic( EDiagPluginBasePanicInvalidState ) );
-
-    LOGSTRING3( "CDiagTestPluginBase::ResetWatchdog() Type = %d, result = %d",
-        aWatchdogType, aWatchdogResultType )
-
-    iData->iWatchdogResultType = aWatchdogResultType;
-    iData->iExecParam->Engine().ResetWatchdog( aWatchdogType );
-    }
-
-// ---------------------------------------------------------------------------
-// CDiagTestPluginBase::ResetWatchdog
-// ---------------------------------------------------------------------------
-//
-EXPORT_C void CDiagTestPluginBase::ResetWatchdog(
-        TInt aTimeToCompletion,
-        CDiagResultsDatabaseItem::TResult aWatchdogResultType )
-    {
-    __ASSERT_ALWAYS( iData, Panic( EDiagPluginBasePanicInvalidState ) );
-    __ASSERT_ALWAYS( iData->iExecParam, Panic( EDiagPluginBasePanicInvalidState ) );
-
-    LOGSTRING3( "CDiagTestPluginBase::ResetWatchdog() time = %d, result = %d",
-        aTimeToCompletion, aWatchdogResultType )
-
-    iData->iWatchdogResultType = aWatchdogResultType;
-    iData->iExecParam->Engine().ResetWatchdog( aTimeToCompletion );
-    }
-
-// ---------------------------------------------------------------------------
-// CDiagTestPluginBase::ResetWatchdogToDefault
-// ---------------------------------------------------------------------------
-//
-EXPORT_C void CDiagTestPluginBase::ResetWatchdogToDefault()
-    {
-    __ASSERT_ALWAYS( iData, Panic( EDiagPluginBasePanicInvalidState ) );
-    __ASSERT_ALWAYS( iData->iExecParam, Panic( EDiagPluginBasePanicInvalidState ) );
-
-    if ( RunMode() == EAutomatic )
-        {
-        ResetWatchdog( EDiagEngineWatchdogTypeAutomatic, 
-                       CDiagResultsDatabaseItem::EWatchdogCancel );
-        }
-    else
-        {
-        ResetWatchdog( EDiagEngineWatchdogTypeInteractive, 
-                       CDiagResultsDatabaseItem::EWatchdogCancel );
-        }
-    }
-
-// ---------------------------------------------------------------------------
-// CDiagTestPluginBase::CompleteTestL
-// ---------------------------------------------------------------------------
-//
-EXPORT_C void CDiagTestPluginBase::CompleteTestL( 
-        CDiagResultsDatabaseItem::TResult aResult )
-    {
-    __ASSERT_ALWAYS( iData, Panic( EDiagPluginBasePanicInvalidState ) );
-    __ASSERT_ALWAYS( iData->iResultBuilder, Panic( EDiagPluginBasePanicInvalidState ) );
-    __ASSERT_ALWAYS( iData->iExecParam, Panic( EDiagPluginBasePanicInvalidState ) );
-
-    iData->iResultBuilder->SetTestCompleted( aResult );
-    iData->iExecParam->Observer().TestExecutionCompletedL( *this, 
-        iData->iResultBuilder->ToResultsDatabaseItemL() );
-
-    StopAndCleanupL();
-    }
-
-// ---------------------------------------------------------------------------
-// CDiagTestPluginBase::StopAndCleanupL
-// ---------------------------------------------------------------------------
-//
-EXPORT_C void CDiagTestPluginBase::StopAndCleanupL()
-    {
-    __ASSERT_ALWAYS( iData, Panic( EDiagPluginBasePanicInvalidState ) );
-    // Cancel active request
-    Cancel();
-
-    // Clean up only if it was already running.
-    if ( iData->iExecParam != NULL || iData->iResultBuilder != NULL )
-        {
-        // allow derived class to clean up first.
-        DoStopAndCleanupL();
-
-        BaseStopAndCleanup();
-        }
-    }
-
-// ---------------------------------------------------------------------------
-// from MDiagTestPlugin
-// CDiagTestPluginBase::ExecutionStopL
-// ---------------------------------------------------------------------------
-//
-EXPORT_C CDiagResultsDatabaseItem* CDiagTestPluginBase::ExecutionStopL( 
-        MDiagTestPlugin::TStopReason aReason )
-    {
-    __ASSERT_ALWAYS( iData, Panic( EDiagPluginBasePanicInvalidState ) );
-    __ASSERT_ALWAYS( iData->iResultBuilder, Panic( EDiagPluginBasePanicInvalidState ) );
-    __ASSERT_ALWAYS( iData->iExecParam, Panic( EDiagPluginBasePanicInvalidState ) );
-
-    // Determine default reason.
-    CDiagResultsDatabaseItem::TResult result;
-
-    if ( aReason == MDiagTestPlugin::EWatchdog )
-        {
-        result = iData->iWatchdogResultType;
-        }
-    else
-        {
-        result = CDiagResultsDatabaseItem::EInterrupted;
-        }
-
-    // Allow derived class to provide custom behavor
-    DoExecutionStopL( aReason, result );
-
-    iData->iResultBuilder->SetTestCompleted( result );
-
-    CDiagResultsDatabaseItem* dbItem = iData->iResultBuilder->ToResultsDatabaseItemL();
-
-    // Stop and clean up before returning to the engine.
-    CleanupStack::PushL( dbItem );
-    StopAndCleanupL();
-    CleanupStack::Pop( dbItem );
-    
-    return dbItem;  // ownership transfer
-    }
-
-// ---------------------------------------------------------------------------
-// From MDiagTestPlugin
-// CDiagTestPluginBase::SuspendL
-// ---------------------------------------------------------------------------
-//
-EXPORT_C void CDiagTestPluginBase::SuspendL()
-    {
-    LOGSTRING( "CDiagTestPluginBase::SuspendL: KErrNotSupported" )
-    User::Leave( KErrNotSupported );
-    }
-
-// ---------------------------------------------------------------------------
-// From MDiagTestPlugin
-// CDiagTestPluginBase::ResumeL
-// ---------------------------------------------------------------------------
-//
-EXPORT_C void CDiagTestPluginBase::ResumeL()
-    {
-    LOGSTRING( "CDiagTestPluginBase::ResumeL: KErrNotSupported" )
-    User::Leave( KErrNotSupported );
-    }
-
-// ---------------------------------------------------------------------------
-// From MDiagTestPlugin
-// CDiagTestPluginBase::CreateDetailL
-// ---------------------------------------------------------------------------
-EXPORT_C MDiagResultDetail* CDiagTestPluginBase::CreateDetailL(
-            const CDiagResultsDatabaseItem& aResult ) const        
-    {
-    // Use basic version by default
-    return new( ELeave )CDiagResultDetailBasic( aResult.TestResult() ); 
-    }
-
-
-// ---------------------------------------------------------------------------
-// CDiagTestPluginBase::DoExecutionStopL
-// ---------------------------------------------------------------------------
-//
-EXPORT_C void CDiagTestPluginBase::DoExecutionStopL( 
-        MDiagTestPlugin::TStopReason /* aReason */,
-        CDiagResultsDatabaseItem::TResult& /* aTestResult */ )
-    {
-    // default implementation. Does nothing.
-    }
-
-// ---------------------------------------------------------------------------
-// CDiagTestPluginBase::AreDependenciesSatisfiedL
-// ---------------------------------------------------------------------------
-//
-EXPORT_C TBool CDiagTestPluginBase::AreDependenciesSatisfiedL(
-            MDiagEngineCommon& aEngine,
-            RArray<TUid>*& aFailedUids ) const
-    {
-    CDiagResultsDatabaseItem::TResult result = VerifyDependenciesL( aEngine, aFailedUids );
-
-    return result == CDiagResultsDatabaseItem::ESuccess;
-    }
-
-// ---------------------------------------------------------------------------
-// CDiagTestPluginBase::VerifyDependenciesL
-// ---------------------------------------------------------------------------
-//
-EXPORT_C CDiagResultsDatabaseItem::TResult CDiagTestPluginBase::VerifyDependenciesL(
-        MDiagEngineCommon& aEngine,
-        RArray< TUid >*& aFailedUids ) const
-    {
-    // Create a failed uid list array
-    RArray<TUid>* failedUids = new( ELeave )RArray<TUid>();
-    CleanupStack::PushL( failedUids );  // to delete array itself.
-    CleanupClosePushL( *failedUids );   // to call close.
-
-    // First, convert dependency list to a plugin list
-    RPointerArray< MDiagTestPlugin > pluginList;
-    CleanupClosePushL( pluginList );    // destroy not needed since elements are not owned.
-
-    // Expand suites.
-    GetAllDependentTestsL( aEngine, pluginList );
-
-    // Analyze result of each plug-in.
-    CDiagResultsDatabaseItem::TResult result = 
-        SummarizeOverallTestResultsL( aEngine, pluginList, *failedUids );
-
-    CleanupStack::PopAndDestroy( &pluginList ); // pluginList.Close()
-
-    if ( result == CDiagResultsDatabaseItem::ESuccess )
-        {
-        __ASSERT_DEBUG( failedUids->Count() == 0,
-            Panic( EDiagPluginBasePanicInternal ) );
-        CleanupStack::PopAndDestroy( failedUids ); // call close.
-        CleanupStack::PopAndDestroy( failedUids ); // delete RArray
-        failedUids = NULL;
-        }
-    else
-        {
-        __ASSERT_DEBUG( failedUids->Count() > 0,
-            Panic( EDiagPluginBasePanicInternal ) );
-        CleanupStack::Pop( failedUids ); // call close.
-        CleanupStack::Pop( failedUids ); // delete RArray
-        }
-
-    aFailedUids = failedUids;
-
-    return result;
-    }
-
-// ---------------------------------------------------------------------------
-// CDiagTestPluginBase::GetAllDependentTestsL
-// ---------------------------------------------------------------------------
-//
-void CDiagTestPluginBase::GetAllDependentTestsL( 
-        MDiagEngineCommon& aEngine,
-        RPointerArray< MDiagTestPlugin >& aPluginList ) const
-    {
-    TInt i = 0;
-
-    // first create an array of dependent plug-ins.
-    RPointerArray< MDiagPlugin > mixedPluginList;
-    CleanupClosePushL( mixedPluginList );   // to call close.
-
-    CPtrCArray* dependencyList = new( ELeave )CPtrCArray( 1 );
-    CleanupStack::PushL( dependencyList );
-    GetLogicalDependenciesL( *dependencyList );
-
-    TInt count = dependencyList->Count();
-    for ( i = 0;  i < count; i++ )
-        {
-        MDiagPlugin* plugin = NULL;
-        User::LeaveIfError( aEngine.PluginPool().FindPlugin( ( *dependencyList )[i], plugin ) );
-        mixedPluginList.AppendL( plugin );
-        }
-
-    CleanupStack::PopAndDestroy( dependencyList );
-    dependencyList = NULL;
-
-    // expand suites into tests.
-    i = 0;
-    while ( i < mixedPluginList.Count() )
-        {
-        if ( mixedPluginList[i]->Type() == ETypeTestPlugin )
-            {
-            //  test plug-in. move to next item.
-            aPluginList.AppendL( static_cast< MDiagTestPlugin* >( mixedPluginList[i] ) );
-            i++;
-            }
-        else
-            {
-            // suite. remove and replace them with its children.
-            MDiagSuitePlugin& suitePlugin = 
-                static_cast< MDiagSuitePlugin& >( *mixedPluginList[i] );
-
-            mixedPluginList.Remove( i );
-            
-            RPointerArray<MDiagPlugin> children;
-            CleanupClosePushL( children ); // destroy not needed since ownership not transferred.
-
-            suitePlugin.GetChildrenL( children, MDiagSuitePlugin::ESortByPosition );
-
-            TInt childCount = children.Count();
-            for ( TInt childIndex = 0; childIndex < childCount; childIndex++ )
-                {
-                mixedPluginList.InsertL( children[childIndex], i + childIndex );
-                }
-
-            CleanupStack::PopAndDestroy( &children ); // children.Close()
-            // do not increment 'i' to allow re-examination of item just inserted.
-            }
-        }
-
-    CleanupStack::PopAndDestroy( &mixedPluginList ); // mixedPluginList.Close()
-    }
-
-// ---------------------------------------------------------------------------
-// CDiagTestPluginBase::SummarizeOverallTestResultsL
-// ---------------------------------------------------------------------------
-//
-CDiagResultsDatabaseItem::TResult CDiagTestPluginBase::SummarizeOverallTestResultsL(
-        MDiagEngineCommon& aEngine,
-        const RPointerArray< MDiagTestPlugin >& aPluginList,
-        RArray< TUid >& aFailedUidList ) const
-    {
-    // Check result of each item.
-    // and the result will override it.
-    // by default, we start with ESuccess.
-    CDiagResultsDatabaseItem::TResult result = CDiagResultsDatabaseItem::ESuccess;
-    TInt pluginListCount = aPluginList.Count();
-    for ( TInt i = 0; i < pluginListCount; i++ )
-        {
-        MDiagTestPlugin& plugin = *( aPluginList[i] );
-
-        CDiagResultsDatabaseItem* resultItem = NULL;
-        TInt err = aEngine.DbRecord().GetTestResult( plugin.Uid(), resultItem );
-
-        // KErrNotFound is acceptable.
-        if ( err != KErrNone && err != KErrNotFound )
-            {
-            delete resultItem;
-            User::Leave( err );
-            }
-
-        CDiagResultsDatabaseItem::TResult newResult;
-        if ( resultItem == NULL )
-            {
-            newResult = CDiagResultsDatabaseItem::EQueuedToRun; 
-            }
-        else
-            {
-            newResult = resultItem->TestResult();
-            }
-        
-        delete resultItem;
-        resultItem = NULL;
-
-        // add items to failed list if not successful.
-        if ( newResult != CDiagResultsDatabaseItem::ESuccess )
-            {
-            LOGSTRING3( "CDiagTestPluginBase::SummarizeOverallTestResultsL(): "
-                L"Failed test 0x%08x, result = %d", 
-                plugin.Uid().iUid,
-                newResult )
-            aFailedUidList.AppendL( plugin.Uid() );
-            }
-
-        // update to new result based on result priority.
-        // check for condition where newResult == result. If they are equal
-        // there is no reason to run the loop.
-        for ( TInt priorityIndex = 0; 
-              priorityIndex < KResultPriorityCount && newResult != result;
-              priorityIndex++ )
-            {
-            if ( KResultPriority[priorityIndex] == newResult )
-                {
-                result = newResult;
-                }
-            }
-        }
-
-    LOGSTRING3( "CDiagTestPluginBase::SummarizeOverallTestResultsL(): "
-        L"Plugin 0x%08x Overall depencency result = %d", 
-        Uid().iUid,
-        result )
-    return result;
-    }
-
-
-// ---------------------------------------------------------------------------
-// CDiagTestPluginBase::RunWaitingDialogL
-// ---------------------------------------------------------------------------
-EXPORT_C TBool CDiagTestPluginBase::RunWaitingDialogL( CAknDialog* aDialog, 
-        TInt& aDialogResponse )
-    {
-    __ASSERT_ALWAYS( iData, Panic( EDiagPluginBasePanicInvalidState ) );
-
-    // this function can display only one dialog at a time.
-    __ASSERT_ALWAYS( iData->iWaitingDialogWrapper == NULL,
-                     Panic( EDiagPluginBasePanicDialogAlreadyUp ) );
-
-    iData->iWaitingDialogWrapper = CDiagPluginWaitingDialogWrapper::NewL( aDialog );
-
-    TBool isUserResonse = iData->iWaitingDialogWrapper->RunLD( aDialogResponse );
-
-    if ( isUserResonse )
-        {
-        // local variable can be accessed only if it was returned due to
-        // user response.
-        iData->iWaitingDialogWrapper = NULL;
-        }
-
-    return isUserResonse;
-    }
-
-// ---------------------------------------------------------------------------
-// CDiagTestPluginBase::DismissWaitingDialog
-// ---------------------------------------------------------------------------
-EXPORT_C void CDiagTestPluginBase::DismissWaitingDialog()
-    {
-    __ASSERT_ALWAYS( iData, Panic( EDiagPluginBasePanicInvalidState ) );
-
-    if ( iData->iWaitingDialogWrapper )
-        {
-        LOGSTRING( "CDiagTestPluginBase::DismissWaitingDialog() Dialog dismissed." )
-        delete iData->iWaitingDialogWrapper;
-        iData->iWaitingDialogWrapper = NULL;
-        }
-    }
-
-// ---------------------------------------------------------------------------
-// CDiagTestPluginBase::CoeEnv
-// ---------------------------------------------------------------------------
-//
-EXPORT_C CCoeEnv& CDiagTestPluginBase::CoeEnv() 
-    {
-    return iCoeEnv;
-    }
-
-// ---------------------------------------------------------------------------
-// CDiagTestPluginBase::SinglePluginExecution
-// ---------------------------------------------------------------------------
-//
-EXPORT_C TBool CDiagTestPluginBase::SinglePluginExecution() const
-    {
-    __ASSERT_ALWAYS( iData, Panic( EDiagPluginBasePanicInvalidState ) );
-    return iData->iSinglePluginExecution;
-    }
-
-// ---------------------------------------------------------------------------
-// CDiagTestPluginBase::BaseStopAndCleanup
-// ---------------------------------------------------------------------------
-//
-void CDiagTestPluginBase::BaseStopAndCleanup()
-    {
-    DismissWaitingDialog();
-
-    delete iData->iResultBuilder;
-    iData->iResultBuilder = NULL;
-
-    delete iData->iExecParam;
-    iData->iExecParam = NULL;
-
-    iData->iCustomParam = NULL;
-    }
-
-// ADO & Platformization Changes
-/*
-    
-// ---------------------------------------------------------------------------
-// CDiagSpeakerPlugin::AskCancelExecutionL
-// ---------------------------------------------------------------------------
-//
-EXPORT_C TInt CDiagTestPluginBase::AskCancelExecutionL( TInt& aButtonId )
-    {
-    LOGSTRING( "CDiagTestPluginBase::AskCancelExecutionL() IN" )
-
-    CAknDialog* dialog;
-    TBool       result;
-
-    // set softkey for single execution
-    if ( !SinglePluginExecution() )
-        {
-    	// Create common dialog by invoking Engine
-    	dialog = ExecutionParam().Engine().
-             CreateCommonDialogLC( EDiagCommonDialogConfirmCancelAll, NULL );
-
-    	// Launch dialog and get result from it
-    	result = RunWaitingDialogL( dialog, aButtonId );
-	}	
-    else 
-       {
-       CompleteTestL( CDiagResultsDatabaseItem::ECancelled );	
-       aButtonId = EAknSoftkeyYes;
-       return ETrue;
-       }
-    
-    LOGSTRING3( "CDiagTestPluginBase::AskCancelExecutionL() OUT aButtonId=%d result=%d", aButtonId, result )
-    return result;
-    }
-    */
-// End of File
-
-
-
-