diff -r 13d7c31c74e0 -r b183ec05bd8c devicediagnosticsfw/diagpluginbase/src/diagtestpluginbase.cpp --- 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 - -// SYSTEM INCLUDE FILES -#include // CCoeEnv::Static() -#include // TDiagTestExecParam -#include // CDiagResultsDbItemBuilder -#include // MDiagTestObserver -#include // CDiagPluginConstructionParam -#include // LOGSTRING -#include // CDiagResultDetailBasic -#include // MDiagEngineCommon -#include // CDiagPluginPool -#include // RDiagResultsDatabase -#include // CDiagPluginWaitingDialogWrapper -#include // MDiagPluginExecPlan -#include // MDiagSuitePlugin -// ADO & Platformization Changes -#include // 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* 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*& 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* failedUids = new( ELeave )RArray(); - 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 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 - - - -