appinstall_plat/appmngr2runtimeapi/tsrc/src/appmngr2runtimeapitest.cpp
changeset 0 ba25891c3a9e
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/appinstall_plat/appmngr2runtimeapi/tsrc/src/appmngr2runtimeapitest.cpp	Thu Dec 17 08:51:10 2009 +0200
@@ -0,0 +1,1174 @@
+/*
+* Copyright (c) 2008 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:   AppMngr2 Runtime API STIF test module
+*
+*/
+
+
+#include "appmngr2runtimeapitest.h"     // CRuntimeApiTest
+#include "appmngr2testcommand.h"        // CAppMngr2TestCommand
+#include <StifLogger.h>                 // CStifLogger
+#include <SettingServerClient.h>        // RSettingServer
+#include <ecom/ecom.h>                  // REComSession
+#include <appmngr2runtime.h>            // AppMngr2 Runtime API
+#include <appmngr2appinfo.h>            // AppMngr2 Runtime API
+#include <appmngr2packageinfo.h>        // AppMngr2 Runtime API
+#include <appmngr2recognizedfile.h>     // AppMngr2 Runtime API
+#include <appmngr2driveutils.h>         // AppMngr2 Runtime API
+#include <appmngr2common.hrh>           // AppMngr2 Runtime API
+#include <appmngr2cleanuputils.h>       // CleanupResetAndDestroyPushL
+#include <apmstd.h>                     // TDataType
+#include <caf/caf.h>                    // ContentAccess
+#include <bautils.h>                    // BaflUtils
+#include <AknIconArray.h>               // CAknIconArray
+#include <gulicon.h>                    // CGulIcon
+#include <data_caging_path_literals.hrh> // KDC_APP_RESOURCE_DIR
+
+const TInt KMaxLineLength = 256;
+const TInt KGranularity = 8;
+
+_LIT( KSWInstCommonUIResourceFileName, "SWInstCommonUI.rsc" );
+_LIT( KAppMngr2UIResourceFileName, "appmngr2.rsc" );
+_LIT( KAppRscFormat, "z:%S%S" );
+
+_LIT( KAppMngr2Tag, "AppMngr2" );
+_LIT( KTestStartFormat, "%S: start" );
+_LIT( KTestDoneFormat, "%S: done (error %d)" );
+_LIT( KResultFormat, "%S: %S, result %d" );
+_LIT( KNotFoundFormat, "%S: %S not found" );
+
+
+// ======== MEMBER FUNCTIONS ========
+
+// -----------------------------------------------------------------------------
+// CAppMngr2RuntimeApiTest::NewL()
+// -----------------------------------------------------------------------------
+//
+CAppMngr2RuntimeApiTest* CAppMngr2RuntimeApiTest::NewL( CTestModuleIf& aTestModuleIf )
+    {
+    CAppMngr2RuntimeApiTest* self = new (ELeave) CAppMngr2RuntimeApiTest( aTestModuleIf );
+    CleanupStack::PushL( self );
+    self->ConstructL();
+    CleanupStack::Pop();
+    return self;
+    }
+
+// -----------------------------------------------------------------------------
+// CAppMngr2RuntimeApiTest::~CAppMngr2RuntimeApiTest()
+// -----------------------------------------------------------------------------
+//
+CAppMngr2RuntimeApiTest::~CAppMngr2RuntimeApiTest()
+    {
+    delete iInstallCommand;
+    delete iUninstallCommand;
+    delete iShowDetailsCommand;
+    iInstalledApps.ResetAndDestroy();
+    iInstallationPackages.ResetAndDestroy();
+    iPlugins.ResetAndDestroy();
+    
+    CCoeEnv* coeEnv = CCoeEnv::Static();
+    if( coeEnv )
+        {
+        if( iSWInstCommonResourceFileOffset )
+            {
+            coeEnv->DeleteResourceFile( iSWInstCommonResourceFileOffset );
+            }
+        if( iAppMngr2ResourceFileOffset )
+            {
+            coeEnv->DeleteResourceFile( iAppMngr2ResourceFileOffset );
+            }
+        }
+    
+    delete iLog;
+    iFs.Close();
+    }
+
+// -----------------------------------------------------------------------------
+// CAppMngr2RuntimeApiTest::RunMethodL()
+// -----------------------------------------------------------------------------
+//
+TInt CAppMngr2RuntimeApiTest::RunMethodL( CStifItemParser& aItem )
+    {
+    static TStifFunctionInfo const KFunctions[] =
+        {
+        ENTRY( "CheckFilesExist", CAppMngr2RuntimeApiTest::CheckFilesExistL ),
+        ENTRY( "LoadAllPlugins", CAppMngr2RuntimeApiTest::LoadAllPluginsL ),
+        ENTRY( "LoadPlugin", CAppMngr2RuntimeApiTest::LoadPluginL ),
+        ENTRY( "CheckPluginsLoaded", CAppMngr2RuntimeApiTest::CheckPluginsLoadedL ),
+        ENTRY( "LoadIcons", CAppMngr2RuntimeApiTest::LoadIconsL ),
+        ENTRY( "GetAdditionalDirsToScan", CAppMngr2RuntimeApiTest::GetAdditionalDirsToScanL ),
+        ENTRY( "GetInstallationFiles", CAppMngr2RuntimeApiTest::GetInstallationFilesL ),
+        ENTRY( "CheckInstallationFiles", CAppMngr2RuntimeApiTest::CheckInstallationFilesL ),
+        ENTRY( "ShowInstallationFileDetails", CAppMngr2RuntimeApiTest::ShowInstallationFileDetailsL  ),
+        ENTRY( "CheckShowDetailsEnded", CAppMngr2RuntimeApiTest::CheckShowDetailsEndedL ),
+        ENTRY( "CheckNoInstallationFiles", CAppMngr2RuntimeApiTest::CheckNoInstallationFilesL ),
+        ENTRY( "StartInstallFile", CAppMngr2RuntimeApiTest::StartInstallFileL ),
+        ENTRY( "CheckInstallEnded", CAppMngr2RuntimeApiTest::CheckInstallEndedL ),
+        ENTRY( "GetInstalledApps", CAppMngr2RuntimeApiTest::GetInstalledAppsL ),
+        ENTRY( "CheckAppInstalled", CAppMngr2RuntimeApiTest::CheckAppInstalledL ),
+        ENTRY( "ShowInstalledDetails", CAppMngr2RuntimeApiTest::ShowInstalledDetailsL  ),
+        ENTRY( "CheckNoAppsInstalled", CAppMngr2RuntimeApiTest::CheckNoAppsInstalledL ),
+        ENTRY( "StartUninstallApp", CAppMngr2RuntimeApiTest::StartUninstallAppL ),
+        ENTRY( "CheckUninstallEnded", CAppMngr2RuntimeApiTest::CheckUninstallEndedL )
+        };
+
+    const TInt count = sizeof( KFunctions ) / sizeof( TStifFunctionInfo );
+    return RunInternalL( KFunctions, count, aItem );
+    }
+
+// -----------------------------------------------------------------------------
+// CAppMngr2RuntimeApiTest::RefreshInstalledApps()
+// -----------------------------------------------------------------------------
+//
+void CAppMngr2RuntimeApiTest::RefreshInstalledApps()
+    {
+    _LIT( KFunctionName, "RefreshInstalledApps()" );
+    Print( KFunctionName );
+    }
+
+// -----------------------------------------------------------------------------
+// CAppMngr2RuntimeApiTest::RefreshInstallationFiles()
+// -----------------------------------------------------------------------------
+//
+void CAppMngr2RuntimeApiTest::RefreshInstallationFiles()
+    {
+    _LIT( KFunctionName, "RefreshInstallationFiles()" );
+    Print( KFunctionName );
+    }
+
+// -----------------------------------------------------------------------------
+// CAppMngr2RuntimeApiTest::CommandResult()
+// -----------------------------------------------------------------------------
+//
+void CAppMngr2RuntimeApiTest::CommandResult( CAppMngr2TestCommand& aCommand,
+        TInt aCompletionCode )
+    {
+    _LIT( KCommandResultFormat, "async command completed (%S), result %d" );
+    if( &aCommand == iInstallCommand )
+        {
+        _LIT( KCommandName, "install" );
+        Print( KCommandResultFormat, &KCommandName, aCompletionCode );
+        }
+    else if( &aCommand == iUninstallCommand )
+        {
+        _LIT( KCommandName, "uninstall" );
+        Print( KCommandResultFormat, &KCommandName, aCompletionCode );
+        }
+    else
+        {
+        _LIT( KCommandName, "UNKNOWN" );
+        Print( KCommandResultFormat, &KCommandName, aCompletionCode );
+        }
+    Signal();       // releases "waittestclass" command in cfg file
+    }
+
+// -----------------------------------------------------------------------------
+// CAppMngr2RuntimeApiTest::CAppMngr2RuntimeApiTest()
+// -----------------------------------------------------------------------------
+//
+CAppMngr2RuntimeApiTest::CAppMngr2RuntimeApiTest( CTestModuleIf& aTestModuleIf )
+        : CScriptBase( aTestModuleIf )
+    {
+    }
+
+// -----------------------------------------------------------------------------
+// CAppMngr2RuntimeApiTest::ConstructL()
+// -----------------------------------------------------------------------------
+//
+void CAppMngr2RuntimeApiTest::ConstructL()
+    {
+    // Logger settings define if test case name must be appended to log file name
+    RSettingServer settingServer;
+    User::LeaveIfError( settingServer.Connect() );
+    CleanupClosePushL( settingServer );
+    TLoggerSettings loggerSettings;
+    User::LeaveIfError( settingServer.GetLoggerSettings( loggerSettings ) );
+    CleanupStack::PopAndDestroy( &settingServer );
+
+    User::LeaveIfError( iFs.Connect() );
+    
+    TFileName logFileName;
+    if( loggerSettings.iAddTestCaseTitle )
+        {
+        TName title;
+        TestModuleIf().GetTestCaseTitleL( title );
+        logFileName.Format( KAppMngr2RuntimeApiTestLogFileWithTitle, &title );
+        }
+    else
+        {
+        logFileName.Copy( KAppMngr2RuntimeApiTestLogFile );
+        }
+
+    iLog = CStifLogger::NewL( KAppMngr2RuntimeApiTestLogPath, logFileName,
+        CStifLogger::ETxt, CStifLogger::EFile, EFalse );
+    
+    SendTestClassVersion();
+
+    _LIT( KRuntimeApiTest, "CAppMngr2RuntimeApiTest::ConstructL()" );
+    Print( KTestStartFormat, &KRuntimeApiTest );
+    
+    // Ensure that CCoeEnv exists, RuntimeAPI needs it
+    CCoeEnv* coeEnv = CCoeEnv::Static();
+    _LIT( KRuntimeApiTestCoeEnvFormat, "%S: coeEnv = 0x%08x");
+    Print( KRuntimeApiTestCoeEnvFormat, &KRuntimeApiTest, coeEnv );
+    User::LeaveIfNull( coeEnv );
+    
+    // Load resource files used by AppMngr2 Runtime API and plug-ins
+    TFileName* fullName = TAppMngr2DriveUtils::NearestResourceFileLC(
+            KSWInstCommonUIResourceFileName, iFs );
+    _LIT( KRuntimeApiTestResourceFileFormat, "%S: resource file %S");
+    Print( KRuntimeApiTestResourceFileFormat, &KRuntimeApiTest, fullName );
+    iSWInstCommonResourceFileOffset = coeEnv->AddResourceFileL( *fullName );
+    CleanupStack::PopAndDestroy( fullName );
+    
+    fullName = new (ELeave) TFileName;
+    CleanupStack::PushL( fullName );
+    fullName->Format( KAppRscFormat, &KDC_APP_RESOURCE_DIR, &KAppMngr2UIResourceFileName );
+    BaflUtils::NearestLanguageFile( iFs, *fullName );
+    Print( KRuntimeApiTestResourceFileFormat, &KRuntimeApiTest, fullName );
+    iAppMngr2ResourceFileOffset = coeEnv->AddResourceFileL( *fullName );
+    CleanupStack::PopAndDestroy( fullName );
+    
+    _LIT( KCompleteFormat, "%S: complete");
+    Print( KCompleteFormat, &KRuntimeApiTest );
+    }
+
+//-----------------------------------------------------------------------------
+// CAppMngr2RuntimeApiTest::SendTestClassVersion()
+//-----------------------------------------------------------------------------
+//
+void CAppMngr2RuntimeApiTest::SendTestClassVersion()
+    {
+    TVersion moduleVersion;
+    moduleVersion.iMajor = TEST_CLASS_VERSION_MAJOR;
+    moduleVersion.iMinor = TEST_CLASS_VERSION_MINOR;
+    moduleVersion.iBuild = TEST_CLASS_VERSION_BUILD;
+
+    TFileName moduleName;
+    moduleName = KAppMngr2RuntimeApiTestModuleName;
+
+    TBool newVersionOfMethod = ETrue;
+    TestModuleIf().SendTestModuleVersion( moduleVersion, moduleName, newVersionOfMethod );
+    }
+
+// -----------------------------------------------------------------------------
+// CAppMngr2RuntimeApiTest::Print()
+// -----------------------------------------------------------------------------
+//
+void CAppMngr2RuntimeApiTest::Print( TRefByValue<const TDesC> aFmt, ... )
+    {
+    VA_LIST list;
+    VA_START( list, aFmt );
+    TBuf<KMaxLineLength> buf;
+    buf.FormatList( aFmt, list );
+    TestModuleIf().Printf( 0, KAppMngr2Tag, buf );
+    iLog->Log( buf );
+    }
+
+// -----------------------------------------------------------------------------
+// CAppMngr2RuntimeApiTest::GetUidFromStringL()
+// -----------------------------------------------------------------------------
+//
+void CAppMngr2RuntimeApiTest::GetUidFromStringL( const TDesC& aString, TUid& aUid )
+    {
+    TUint32 uidValue;
+    TLex lex( aString );
+    User::LeaveIfError( lex.Val( uidValue, EHex ) );
+    aUid.iUid = uidValue;
+    }
+
+// -----------------------------------------------------------------------------
+// CAppMngr2RuntimeApiTest::FindInstallationPackage()
+// -----------------------------------------------------------------------------
+//
+CAppMngr2PackageInfo* CAppMngr2RuntimeApiTest::FindInstallationPackage(
+        const TDesC& aName )
+    {
+    TInt count = iInstallationPackages.Count();
+    for( TInt index = 0; index < count; index++ )
+        {
+        if( iInstallationPackages[ index ]->Name().CompareC( aName ) == 0 )
+            {
+            return iInstallationPackages[ index ];
+            }
+        }
+    return NULL;
+    }
+
+// -----------------------------------------------------------------------------
+// CAppMngr2RuntimeApiTest::FindInstalledApp()
+// -----------------------------------------------------------------------------
+//
+CAppMngr2AppInfo* CAppMngr2RuntimeApiTest::FindInstalledApp(
+        const TDesC& aName )
+    {
+    TInt count = iInstalledApps.Count();
+    for( TInt index = 0; index < count; index++ )
+        {
+        if( iInstalledApps[ index ]->Name().CompareC( aName ) == 0 )
+            {
+            return iInstalledApps[ index ];
+            }
+        }
+    return NULL;
+    }
+
+// -----------------------------------------------------------------------------
+// CAppMngr2RuntimeApiTest::CallInfoBaseFunctionsL()
+// -----------------------------------------------------------------------------
+//
+void CAppMngr2RuntimeApiTest::CallInfoBaseFunctionsL( CAppMngr2InfoBase& aInfo,
+        const TDesC& aTestName )
+    {
+    // Call CAppMngr2InfoBase and CAppMngr2Runtime members to get better code coverage.
+    CAppMngr2Runtime& runtime( aInfo.Runtime() );
+    MAppMngr2RuntimeObserver& runtimeObserver( runtime.Observer() );
+    TInt testResult = KErrNone;
+    
+    RPointerArray<CEikMenuPaneItem::SData> menuPaneData;
+    CleanupResetAndDestroyPushL( menuPaneData );
+    TRAP( testResult, aInfo.GetMenuItemsL( menuPaneData ) );
+    _LIT( KGetMenuItemsFormat, "%S: GetMenuItemsL, count %d, result %d" );
+    Print( KGetMenuItemsFormat, &aTestName, menuPaneData.Count(), testResult );
+    User::LeaveIfError( testResult );
+    CleanupStack::PopAndDestroy( &menuPaneData );
+    
+    TBool isDetailsSupported = aInfo.SupportsGenericCommand( EAppMngr2CmdViewDetails );
+    _LIT( KIsDetailsSupportedFormat, "%S: SupportsGenericCommand returned %d" );
+    Print( KIsDetailsSupportedFormat, &aTestName, isDetailsSupported );
+    
+    TInt resourceId;
+    TInt commandId;
+    TRAP( testResult, aInfo.GetMiddleSoftkeyCommandL( resourceId, commandId ) );
+    _LIT( KGetMiddleSoftkeyCmdFormat, "%S: GetMiddleSoftkeyCommandL, result %d" );
+    Print( KGetMiddleSoftkeyCmdFormat, &aTestName, testResult );
+    User::LeaveIfError( testResult );
+                
+    TBool isShowOnTop = aInfo.IsShowOnTop();
+    _LIT( KIsShowOnTopFormat, "%S: IsShowOnTop returned %d" );
+    Print( KIsShowOnTopFormat, &aTestName, isShowOnTop );
+    
+    TInt iconIndex = aInfo.IconIndex();
+    _LIT( KIconIndexFormat, "%S: IconIndex returned %d" );
+    Print( KIconIndexFormat, &aTestName, iconIndex );
+
+    CGulIcon* icon = NULL;
+    TRAP( testResult, icon = aInfo.SpecificIconL() );
+    delete icon;
+    icon = NULL;
+    _LIT( KSpecificIconFormat, "%S: SpecificIcon, result %d" );
+    Print( KSpecificIconFormat, &aTestName, testResult );
+    if( testResult != KErrNone && testResult != KErrNotSupported )
+        {
+        User::Leave( testResult );
+        }
+    
+    TInt indIconIndex = aInfo.IndicatorIconIndex();
+    _LIT( KIndIconIndexFormat, "%S: IndicatorIconIndex returned %d" );
+    Print( KIndIconIndexFormat, &aTestName, indIconIndex );
+
+    TRAP( testResult, icon = aInfo.SpecificIndicatorIconL() );
+    delete icon;
+    icon = NULL;
+    _LIT( KSpecificIndIconFormat, "%S: SpecificIndicatorIcon, result %d" );
+    Print( KSpecificIndIconFormat, &aTestName, testResult );
+    if( testResult != KErrNone && testResult != KErrNotSupported )
+        {
+        User::Leave( testResult );
+        }
+    
+    TAppMngr2Location location = aInfo.Location();
+    _LIT( KLocationFormat, "%S: Location returned %d" );
+    Print( KLocationFormat, &aTestName, location );
+
+    TDriveUnit driveUnit = aInfo.LocationDrive();
+    _LIT( KLocationDriveFormat, "%S: LocationDrive returned %S" );
+    TDriveName driveName( driveUnit.Name() );
+    Print( KLocationDriveFormat, &aTestName, &driveName );
+    }
+
+// -----------------------------------------------------------------------------
+// CAppMngr2RuntimeApiTest::CheckFilesExistL()
+// -----------------------------------------------------------------------------
+//
+TInt CAppMngr2RuntimeApiTest::CheckFilesExistL( CStifItemParser& aItem )
+    {
+    _LIT( KTestName, "CheckFilesExist" );
+    Print( KTestStartFormat, &KTestName );
+    TInt testResult = KErrNone;
+
+    TPtrC dirName;
+    User::LeaveIfError( aItem.GetNextString( dirName ) );
+    
+    TPtrC fileName;
+    while( aItem.GetNextString( fileName ) == KErrNone )
+        {
+        TParse parse;
+        User::LeaveIfError( parse.SetNoWild( fileName, &dirName, NULL ) );
+        TPtrC fullName = parse.FullName();
+        TEntry entry;
+        testResult = iFs.Entry( fullName, entry );
+        Print( KResultFormat, &KTestName, &fileName, testResult );
+        }
+    
+    Print( KTestDoneFormat, &KTestName, testResult );
+    return testResult;
+    }
+
+// -----------------------------------------------------------------------------
+// CAppMngr2RuntimeApiTest::LoadAllPluginsL()
+// -----------------------------------------------------------------------------
+//
+TInt CAppMngr2RuntimeApiTest::LoadAllPluginsL( CStifItemParser& /*aItem*/ )
+    {
+    _LIT( KTestName, "LoadAllPlugins" );
+    Print( KTestStartFormat, &KTestName );
+    TInt testResult = KErrNone;
+    iPlugins.ResetAndDestroy();
+    
+    RImplInfoPtrArray implInfoArray;
+    CleanupResetAndDestroyPushL( implInfoArray  );
+    REComSession::ListImplementationsL( KAppMngr2PluginInterface, implInfoArray );
+    
+    TInt count = implInfoArray.Count();
+    _LIT( KPluginCountFormat, "%S: %d plugins found" );
+    Print( KPluginCountFormat, &KTestName, count );
+
+    for( TInt index = 0; index < count; index++ )
+        {
+        CImplementationInformation* implInfo = implInfoArray[ index ];
+        CAppMngr2Runtime* plugin = NULL;
+        TPtrC pluginName = implInfo->DisplayName();
+        TUid pluginUid = implInfo->ImplementationUid();
+        TRAP( testResult, plugin = CAppMngr2Runtime::NewL( pluginUid, *this ) );
+        _LIT( KLoadingFormat,  "%S: index %d, loading %S (0x%08x), result %d" );
+        Print( KLoadingFormat, &KTestName, index, &pluginName, pluginUid.iUid, testResult );
+        if( testResult == KErrNone )
+            {
+            CleanupStack::PushL( plugin );
+            iPlugins.AppendL( plugin );
+            CleanupStack::Pop( plugin );
+            }
+        }
+
+    CleanupStack::PopAndDestroy( &implInfoArray );
+    REComSession::FinalClose();
+
+    Print( KTestDoneFormat, &KTestName, testResult );
+    return testResult;
+    }
+
+// -----------------------------------------------------------------------------
+// CAppMngr2RuntimeApiTest::LoadPluginL()
+// -----------------------------------------------------------------------------
+//
+TInt CAppMngr2RuntimeApiTest::LoadPluginL( CStifItemParser& aItem )
+    {
+    _LIT( KTestName, "LoadPlugin" );
+    Print( KTestStartFormat, &KTestName );
+    TInt testResult = KErrNone;
+
+    TPtrC string;
+    User::LeaveIfError( aItem.GetNextString ( string ) );
+    TUid uid;
+    GetUidFromStringL( string, uid );
+    _LIT( KPluginCountFormat, "%S: plugin UID 0x%08x" );
+    Print( KPluginCountFormat, &KTestName, uid.iUid );
+    
+    RImplInfoPtrArray implInfoArray;
+    CleanupResetAndDestroyPushL( implInfoArray  );
+    REComSession::ListImplementationsL( KAppMngr2PluginInterface, implInfoArray );
+    
+    CImplementationInformation* implInfo;
+    TInt count = implInfoArray.Count();
+    TBool found = EFalse;
+    for( TInt index = 0; index < count && !found; index++ )
+        {
+        implInfo = implInfoArray[ index ];
+        if( implInfo->ImplementationUid() == uid )
+            {
+            CAppMngr2Runtime* plugin = NULL;
+            found = ETrue;
+
+            _LIT( KLoadingFormat, "%S: loading %S" );
+            Print( KLoadingFormat, &KTestName, &( implInfo->DisplayName() ) );
+            TRAP( testResult, plugin = CAppMngr2Runtime::NewL(
+                    implInfo->ImplementationUid(), *this ) );
+            if( testResult == KErrNone )
+                {
+                CleanupStack::PushL( plugin );
+                iPlugins.AppendL( plugin );
+                CleanupStack::Pop( plugin );
+                }
+            }
+        }
+    if( !found )
+        {
+        _LIT( KPluginNotFound, "%S: plugin not found" );
+        Print( KPluginNotFound, &KTestName );
+        testResult = KErrNotFound;
+        }
+
+    CleanupStack::PopAndDestroy( &implInfoArray );
+    REComSession::FinalClose();
+
+    Print( KTestDoneFormat, &KTestName, testResult );
+    return testResult;
+    }
+
+// -----------------------------------------------------------------------------
+// CAppMngr2RuntimeApiTest::CheckPluginsLoadedL()
+// -----------------------------------------------------------------------------
+//
+TInt CAppMngr2RuntimeApiTest::CheckPluginsLoadedL( CStifItemParser& aItem )
+    {
+    _LIT( KTestName, "CheckPluginsLoaded" );
+    Print( KTestStartFormat, &KTestName );
+    TInt testResult = KErrNone;
+
+    TPtrC pluginUidString;
+    while( aItem.GetNextString( pluginUidString ) == KErrNone )
+        {
+        TUid uid;
+        GetUidFromStringL( pluginUidString, uid );
+        
+        TBool found = EFalse;
+        for( TInt index = 0; index < iPlugins.Count() && !found; index++ )
+            {
+            found = ( iPlugins[ index ]->RuntimeUid() == uid );
+            }
+        
+        _LIT( KCheckPluginsLoadedFormat, "%S: 0x%08x, result %d" );
+        Print( KCheckPluginsLoadedFormat, &KTestName, uid.iUid, found );
+        if( !found )
+            {
+            testResult = KErrNotFound;
+            }
+        }
+
+    Print( KTestDoneFormat, &KTestName, testResult );
+    return testResult;
+    }
+
+// -----------------------------------------------------------------------------
+// CAppMngr2RuntimeApiTest::LoadIconsL()
+// -----------------------------------------------------------------------------
+//
+TInt CAppMngr2RuntimeApiTest::LoadIconsL( CStifItemParser& /*aItem*/ )
+    {
+    _LIT( KTestName, "LoadIcons" );
+    Print( KTestStartFormat, &KTestName );
+    TInt testResult = KErrNone;
+
+    for( TInt pluginIndex = 0; pluginIndex < iPlugins.Count(); pluginIndex++ )
+        {
+        CAppMngr2Runtime* plugin = iPlugins[ pluginIndex ];
+        TInt pluginId = plugin->RuntimeUid().iUid;
+        
+        CAknIconArray* iconArray = new (ELeave) CAknIconArray( KGranularity );
+        CleanupStack::PushL( iconArray );
+        TRAP( testResult, plugin->LoadIconsL( *iconArray ) );
+        _LIT( KLoadIconsFormat, "%S: plugin 0x%08x, icons count %d, error %d" );
+        Print( KLoadIconsFormat, &KTestName, pluginId, iconArray->Count(), testResult );
+        CleanupStack::PopAndDestroy( iconArray );
+        }
+
+    Print( KTestDoneFormat, &KTestName, testResult );
+    return testResult;
+    }
+
+// -----------------------------------------------------------------------------
+// CAppMngr2RuntimeApiTest::GetAdditionalDirsToScanL()
+// -----------------------------------------------------------------------------
+//
+TInt CAppMngr2RuntimeApiTest::GetAdditionalDirsToScanL( CStifItemParser& /*aItem*/ )
+    {
+    _LIT( KTestName, "GetAdditionalDirsToScan" );
+    Print( KTestStartFormat, &KTestName );
+    TInt testResult = KErrNone;
+
+    for( TInt pluginIndex = 0; pluginIndex < iPlugins.Count(); pluginIndex++ )
+        {
+        CAppMngr2Runtime* plugin = iPlugins[ pluginIndex ];
+        TInt pluginId = plugin->RuntimeUid().iUid;
+        
+        RPointerArray<HBufC> dirs;
+        CleanupResetAndDestroyPushL( dirs );
+        TRAP( testResult, plugin->GetAdditionalDirsToScanL( iFs, dirs ) );
+        _LIT( KDirsToScanFormat, "%S: plugin 0x%08x, additional dirs, count %d, error %d" );
+        Print( KDirsToScanFormat, &KTestName, pluginId, dirs.Count(), testResult );
+        if( testResult == KErrNone )
+            {
+            for( TInt dirIndex = 0; dirIndex < dirs.Count(); dirIndex++ )
+                {
+                _LIT( KScanDirFormat, "%S: plugin 0x%08x, dir %S" );
+                Print( KScanDirFormat, &KTestName, pluginId, dirs[ dirIndex ] );
+                }
+            }        
+        CleanupStack::PopAndDestroy( &dirs );
+        }
+        
+    Print( KTestDoneFormat, &KTestName, testResult );
+    return testResult;
+    }
+
+// -----------------------------------------------------------------------------
+// CAppMngr2RuntimeApiTest::GetInstallationFilesL()
+// -----------------------------------------------------------------------------
+//
+TInt CAppMngr2RuntimeApiTest::GetInstallationFilesL( CStifItemParser& aItem )
+    {
+    _LIT( KTestName, "GetInstallationFiles" );
+    Print( KTestStartFormat, &KTestName );
+    TInt testResult = KErrNone;
+    iInstallationPackages.ResetAndDestroy();
+    
+    TPtrC dirName;
+    User::LeaveIfError( aItem.GetNextString( dirName ) );
+    _LIT( KParameterFormat, "%S: dir %S" );
+    Print( KParameterFormat, &KTestName, &dirName );
+    
+    RPointerArray<CAppMngr2RecognizedFile> fileArray;
+    CleanupResetAndDestroyPushL( fileArray );
+    
+    // recognize files in given directory
+    CDir* dir = NULL;
+    User::LeaveIfError( iFs.GetDir( dirName, KEntryAttNormal, ESortNone, dir ) );
+    CleanupStack::PushL( dir );
+    TInt dirCount = dir->Count();
+    for( TInt dirIndex = 0; dirIndex < dirCount; dirIndex++ )
+        {
+        const TChar KBackslash = '\\';
+        const TInt KBackslashLen = 1;
+
+        const TEntry& file = ( *dir )[ dirIndex ];
+        
+        // full file name
+        HBufC* fullName = HBufC::NewLC( dirName.Length() + KBackslashLen + file.iName.Length() );
+        TPtr namePtr( fullName->Des() );
+        namePtr.Copy( dirName );
+        if( dirName.LocateReverse( KBackslash ) != ( dirName.Length() - 1 ) )
+            {
+            namePtr.Append( KBackslash );
+            }
+        namePtr.Append( file.iName );
+
+        // data type
+        HBufC* mimeType = HBufC::NewLC( KMaxDataTypeLength );
+        ContentAccess::CContent* content = ContentAccess::CContent::NewLC( *fullName,
+                ContentAccess::EContentShareReadWrite );
+        TPtr mimePtr( mimeType->Des() );
+        content->GetStringAttribute( ContentAccess::EMimeType, mimePtr );
+        
+        _LIT( KFileTypeFormat, "%S: file %S, type %S" );
+        Print( KFileTypeFormat, &KTestName, fullName, mimeType );
+
+        // create new recognized file
+        CAppMngr2RecognizedFile* recFile = CAppMngr2RecognizedFile::NewL( fullName, mimeType );
+        CleanupStack::PopAndDestroy( content );
+        CleanupStack::Pop( 2, fullName );  // mimeType and fullName now owned by recFile
+        
+        // append it into array
+        CleanupStack::PushL( recFile );
+        fileArray.AppendL( recFile );
+        CleanupStack::Pop( recFile );
+        }
+    CleanupStack::PopAndDestroy( dir );
+    dir = NULL;
+
+    for( TInt pluginIndex = 0; pluginIndex < iPlugins.Count(); pluginIndex++ )
+        {
+        CAppMngr2Runtime* plugin = iPlugins[ pluginIndex ];
+        TInt pluginId = plugin->RuntimeUid().iUid;
+        
+        CDataTypeArray* dataTypeArray = new (ELeave) CDataTypeArray( KGranularity );
+        CleanupStack::PushL( dataTypeArray );
+        TRAP( testResult, plugin->GetSupportedDataTypesL( *dataTypeArray ) );
+        _LIT( KSuppDataTypeFormat, "%S: plugin 0x%08x, data type count %d, error %d" );
+        Print( KSuppDataTypeFormat, &KTestName, pluginId, dataTypeArray->Count(), testResult );
+        if( testResult == KErrNone )
+            {
+            // copy those recognized files that matches plugin data types in pluginFiles
+            RPointerArray<CAppMngr2RecognizedFile> pluginFiles;
+            CleanupResetAndDestroyPushL( pluginFiles );
+            for( TInt dataTypeIndex = 0; dataTypeIndex < dataTypeArray->Count(); dataTypeIndex++ )
+                {
+                for( TInt fileIndex = 0; fileIndex < fileArray.Count(); fileIndex++ )
+                    {
+                    if( fileArray[ fileIndex ]->DataType() == (*dataTypeArray)[ dataTypeIndex ] )
+                        {
+                        _LIT( KPluginGetsFileFormat, "%S: plugin 0x%08x, matching file %S" );
+                        Print( KPluginGetsFileFormat, &KTestName, pluginId,
+                                &( fileArray[ fileIndex ]->FileName() ) );
+    
+                        CAppMngr2RecognizedFile* recFile = CAppMngr2RecognizedFile::NewL(
+                                fileArray[ fileIndex ]->FileName(),
+                                fileArray[ fileIndex ]->DataType() );
+                        CleanupStack::PushL( recFile );
+                        pluginFiles.Append( recFile );
+                        CleanupStack::Pop( recFile );
+                        }
+                    }
+                }
+            _LIT( KPluginFilesFormat, "%S: plugin 0x%08x, total %d files" );
+            Print( KPluginFilesFormat, &KTestName, pluginId, pluginFiles.Count() );
+            
+            // get installation files from plugin
+            RPointerArray<CAppMngr2PackageInfo> packageArray;
+            CleanupResetAndDestroyPushL( packageArray );
+            TRequestStatus status;
+            TRAP( testResult, plugin->GetInstallationFilesL( packageArray, pluginFiles, iFs, status ) );
+            _LIT( KInstFilesReqFormat, "%S: plugin 0x%08x, inst files req, error %d, status %d" );
+            Print( KInstFilesReqFormat, &KTestName, pluginId, testResult, status.Int() );
+            if( testResult == KErrNone )
+                {
+                User::WaitForRequest( status );
+                _LIT( KInstFilesCompleteFormat, "%S: plugin 0x%08x, package count %d, status %d" );
+                Print( KInstFilesCompleteFormat, &KTestName, pluginId, packageArray.Count(),
+                        status.Int() );
+                
+                // move items to iInstallationPackages array
+                for( TInt i = packageArray.Count() - 1; i >= 0; i-- )
+                    {
+                    CAppMngr2PackageInfo* packageInfo = packageArray[ i ];
+                    packageArray.Remove( i );
+                    CleanupStack::PushL( packageInfo );
+                    iInstallationPackages.AppendL( packageInfo );
+                    CleanupStack::Pop( packageInfo );
+                    }
+                _LIT( KTotalInstFileCountFormat, "%S: total package count %d" );
+                Print( KTotalInstFileCountFormat, &KTestName, iInstallationPackages.Count() );
+
+                if( status.Int() )
+                    {
+                    testResult = status.Int();
+                    }
+                }
+
+            CleanupStack::PopAndDestroy( &packageArray );
+            CleanupStack::PopAndDestroy( &pluginFiles );
+            }
+        
+        CleanupStack::PopAndDestroy( dataTypeArray );
+        }
+    
+    CleanupStack::PopAndDestroy( &fileArray );
+
+    Print( KTestDoneFormat, &KTestName, testResult );
+    return testResult;
+    }
+
+// -----------------------------------------------------------------------------
+// CAppMngr2RuntimeApiTest::CheckInstallationFilesL()
+// -----------------------------------------------------------------------------
+//
+TInt CAppMngr2RuntimeApiTest::CheckInstallationFilesL( CStifItemParser& aItem )
+    {
+    _LIT( KTestName, "CheckInstallationFiles" );
+    Print( KTestStartFormat, &KTestName );
+    TInt testResult = KErrNone;
+
+    TPtrC nameString;
+    while( aItem.GetNextString( nameString ) == KErrNone )
+        {
+        CAppMngr2PackageInfo* info = FindInstallationPackage( nameString );
+        TBool found = ( info != NULL );
+        
+        _LIT( KCheckInstFileFormat, "%S: file %S, result %d" );
+        Print( KCheckInstFileFormat, &KTestName, &nameString, found );
+        if( found )
+            {
+            CallInfoBaseFunctionsL( *info, KTestName );
+            }
+        else
+            {
+            Print( KNotFoundFormat, &KTestName, &nameString );
+            testResult = KErrNotFound;
+            }
+        }
+    
+    Print( KTestDoneFormat, &KTestName, testResult );
+    return testResult;
+    }
+
+// -----------------------------------------------------------------------------
+// CAppMngr2RuntimeApiTest::ShowInstallationFileDetailsL()
+// -----------------------------------------------------------------------------
+//
+TInt CAppMngr2RuntimeApiTest::ShowInstallationFileDetailsL( CStifItemParser& aItem )
+    {
+    _LIT( KTestName, "ShowInstallationFileDetails" );
+    Print( KTestStartFormat, &KTestName );
+    TInt testResult = KErrNone;
+
+    if( iShowDetailsCommand )
+        {
+        User::Leave( KErrInUse );
+        }
+
+    TPtrC nameString;
+    while( aItem.GetNextString( nameString ) == KErrNone )
+        {
+        CAppMngr2PackageInfo* info = FindInstallationPackage( nameString );
+        if( info )
+            {
+            iShowDetailsCommand = CAppMngr2TestCommand::NewL( *info, *this );
+            TRAP( testResult, iShowDetailsCommand->HandleCommandL( EAppMngr2CmdViewDetails ) );
+            _LIT( KShowInstFileDetailsFormat, "%S: show details request %S, result %d" );
+            Print( KShowInstFileDetailsFormat, &KTestName, &nameString, testResult );
+            }
+        else
+            {
+            Print( KNotFoundFormat, &KTestName, &nameString );
+            testResult = KErrNotFound;
+            }
+        }
+    
+    Print( KTestDoneFormat, &KTestName, testResult );
+    return testResult;
+    }
+
+// -----------------------------------------------------------------------------
+// CAppMngr2RuntimeApiTest::CheckShowDetailsEndedL()
+// -----------------------------------------------------------------------------
+//
+TInt CAppMngr2RuntimeApiTest::CheckShowDetailsEndedL( CStifItemParser& /*aItem*/ )
+    {
+    _LIT( KTestName, "CheckShowDetailsEnded" );
+    Print( KTestStartFormat, &KTestName );
+    TInt testResult = KErrNone;
+
+    if( !iShowDetailsCommand )
+        {
+        User::Leave( KErrNotFound );
+        }
+
+    if( iShowDetailsCommand->IsActive() )
+        {
+        User::Leave( KErrNotReady );
+        }
+    testResult = iShowDetailsCommand->iStatus.Int();
+    _LIT( KCheckShowDetailsEndedFormat, "%S: show details completed, status %d" );
+    Print( KCheckShowDetailsEndedFormat, &KTestName, testResult );
+    
+    delete iShowDetailsCommand;
+    iShowDetailsCommand = NULL;
+    
+    Print( KTestDoneFormat, &KTestName, testResult );
+    return testResult;
+    }
+
+// -----------------------------------------------------------------------------
+// CAppMngr2RuntimeApiTest::CheckNoInstallationFilesL()
+// -----------------------------------------------------------------------------
+//
+TInt CAppMngr2RuntimeApiTest::CheckNoInstallationFilesL( CStifItemParser& /*aItem*/ )
+    {
+    _LIT( KTestName, "CheckNoInstallationFiles" );
+    Print( KTestStartFormat, &KTestName );
+    TInt testResult = KErrNone;
+    
+    TInt count = iInstallationPackages.Count();
+    if( count != 0 )
+        {
+        testResult = KErrTooBig;
+        }
+    _LIT( KInstallationFilesEmptyFormat, "%S: file count %d" );
+    Print( KInstallationFilesEmptyFormat, &KTestName, count );
+    
+    Print( KTestDoneFormat, &KTestName, testResult );
+    return testResult;
+    }
+
+// -----------------------------------------------------------------------------
+// CAppMngr2RuntimeApiTest::StartInstallFileL()
+// -----------------------------------------------------------------------------
+//
+TInt CAppMngr2RuntimeApiTest::StartInstallFileL( CStifItemParser& aItem )
+    {
+    _LIT( KTestName, "StartInstallFile" );
+    Print( KTestStartFormat, &KTestName );
+    TInt testResult = KErrNone;
+    
+    if( iInstallCommand )
+        {
+        User::Leave( KErrInUse );
+        }
+
+    TPtrC nameString;
+    while( aItem.GetNextString( nameString ) == KErrNone )
+        {
+        CAppMngr2PackageInfo* info = FindInstallationPackage( nameString );
+        if( info )
+            {
+            iInstallCommand = CAppMngr2TestCommand::NewL( *info, *this );
+            TRAP( testResult, iInstallCommand->HandleCommandL( EAppMngr2CmdInstall ) );
+            _LIT( KInstallFileFormat, "%S: install request %S, result %d" );
+            Print( KInstallFileFormat, &KTestName, &nameString, testResult );
+            }
+        else
+            {
+            Print( KNotFoundFormat, &KTestName, &nameString );
+            testResult = KErrNotFound;
+            }
+        }
+    
+    Print( KTestDoneFormat, &KTestName, testResult );
+    return testResult;
+    }
+
+// -----------------------------------------------------------------------------
+// CAppMngr2RuntimeApiTest::CheckInstallEndedL()
+// -----------------------------------------------------------------------------
+//
+TInt CAppMngr2RuntimeApiTest::CheckInstallEndedL( CStifItemParser& /*aItem*/ )
+    {
+    _LIT( KTestName, "CheckInstallEnded" );
+    Print( KTestStartFormat, &KTestName );
+    TInt testResult = KErrNone;
+
+    if( !iInstallCommand )
+        {
+        User::Leave( KErrNotFound );
+        }
+
+    if( iInstallCommand->IsActive() )
+        {
+        User::Leave( KErrNotReady );
+        }
+    testResult = iInstallCommand->iStatus.Int();
+    _LIT( KCheckInstallEndedFormat, "%S: install completed, status %d" );
+    Print( KCheckInstallEndedFormat, &KTestName, testResult );
+    
+    delete iInstallCommand;
+    iInstallCommand = NULL;
+    
+    Print( KTestDoneFormat, &KTestName, testResult );
+    return testResult;
+    }
+
+// -----------------------------------------------------------------------------
+// CAppMngr2RuntimeApiTest::GetInstalledAppsL()
+// -----------------------------------------------------------------------------
+//
+TInt CAppMngr2RuntimeApiTest::GetInstalledAppsL( CStifItemParser& /*aItem*/ )
+    {
+    _LIT( KTestName, "GetInstalledApps" );
+    Print( KTestStartFormat, &KTestName );
+    TInt testResult = KErrNone;
+    iInstalledApps.ResetAndDestroy();
+    
+    TInt count = iPlugins.Count();
+    for( TInt index = 0; index < count; index++ )
+        {
+        CAppMngr2Runtime* plugin = iPlugins[ index ];
+        TInt pluginId = plugin->RuntimeUid().iUid;
+
+        RPointerArray<CAppMngr2AppInfo> appArray;
+        CleanupResetAndDestroyPushL( appArray );
+        
+        TRequestStatus status;
+        TRAP( testResult, plugin->GetInstalledAppsL( appArray, iFs, status ) );
+        _LIT( KRequestedFormat, "%S: plugin 0x%08x, apps requested, error %d, status %d" );
+        Print( KRequestedFormat, &KTestName, pluginId, testResult, status.Int() );
+        if( testResult == KErrNone )
+            {
+            User::WaitForRequest( status );
+            _LIT( KLoadedFormat, "%S: plugin 0x%08x, apps count %d, status %d" );
+            TInt count = appArray.Count();
+            Print( KLoadedFormat, &KTestName, pluginId, count, status.Int() );
+            
+            // move items to iInstalledApps array
+            for( TInt i = count - 1; i >= 0; i-- )
+                {
+                CAppMngr2AppInfo* appInfo = appArray[ i ];
+                appArray.Remove( i );
+                CleanupStack::PushL( appInfo );
+                iInstalledApps.AppendL( appInfo );
+                CleanupStack::Pop( appInfo );
+                }
+            _LIT( KTotalInstAppCountFormat, "%S: total installed apps count %d" );
+            Print( KTotalInstAppCountFormat, &KTestName, iInstalledApps.Count() );
+            
+            if( status.Int() )
+                {
+                testResult = status.Int();
+                }
+            }
+
+        CleanupStack::PopAndDestroy( &appArray );
+        }
+    
+    Print( KTestDoneFormat, &KTestName, testResult );
+    return testResult;
+    }
+
+// -----------------------------------------------------------------------------
+// CAppMngr2RuntimeApiTest::CheckAppInstalledL()
+// -----------------------------------------------------------------------------
+//
+TInt CAppMngr2RuntimeApiTest::CheckAppInstalledL( CStifItemParser& aItem )
+    {
+    _LIT( KTestName, "CheckAppInstalled" );
+    Print( KTestStartFormat, &KTestName );
+    TInt testResult = KErrNone;
+
+    TPtrC nameString;
+    while( aItem.GetNextString( nameString ) == KErrNone )
+        {
+        CAppMngr2AppInfo* info = FindInstalledApp( nameString );
+        TBool found = ( info != NULL );
+        
+        Print( KResultFormat, &KTestName, &nameString, found );
+        if( found )
+            {
+            CallInfoBaseFunctionsL( *info, KTestName );
+            }
+        else
+            {
+            Print( KNotFoundFormat, &KTestName, &nameString );
+            testResult = KErrNotFound;
+            }
+        }
+    
+    Print( KTestDoneFormat, &KTestName, testResult );
+    return testResult;
+    }
+
+// -----------------------------------------------------------------------------
+// CAppMngr2RuntimeApiTest::ShowInstalledDetailsL()
+// -----------------------------------------------------------------------------
+//
+TInt CAppMngr2RuntimeApiTest::ShowInstalledDetailsL( CStifItemParser& aItem )
+    {
+    _LIT( KTestName, "ShowInstalledDetails" );
+    Print( KTestStartFormat, &KTestName );
+    TInt testResult = KErrNone;
+
+    if( iShowDetailsCommand )
+        {
+        User::Leave( KErrInUse );
+        }
+
+    TPtrC nameString;
+    while( aItem.GetNextString( nameString ) == KErrNone )
+        {
+        CAppMngr2AppInfo* info = FindInstalledApp( nameString );
+        if( info )
+            {
+            iShowDetailsCommand = CAppMngr2TestCommand::NewL( *info, *this );
+            TRAP( testResult, iShowDetailsCommand->HandleCommandL( EAppMngr2CmdViewDetails ) );
+            _LIT( KShowInstalledDetailsFormat, "%S: show details request %S, result %d" );
+            Print( KShowInstalledDetailsFormat, &KTestName, &nameString, testResult );
+            }
+        else
+            {
+            Print( KNotFoundFormat, &KTestName, &nameString );
+            testResult = KErrNotFound;
+            }
+        }
+    
+    Print( KTestDoneFormat, &KTestName, testResult );
+    return testResult;
+    }
+
+// -----------------------------------------------------------------------------
+// CAppMngr2RuntimeApiTest::CheckNoAppsInstalledL()
+// -----------------------------------------------------------------------------
+//
+TInt CAppMngr2RuntimeApiTest::CheckNoAppsInstalledL( CStifItemParser& /*aItem*/ )
+    {
+    _LIT( KTestName, "CheckNoAppsInstalled" );
+    Print( KTestStartFormat, &KTestName );
+    TInt testResult = KErrNone;
+    
+    TInt count = iInstalledApps.Count();
+    if( count != 0 )
+        {
+        testResult = KErrTooBig;
+        }
+    _LIT( KInstalledAppsEmptyFormat, "%S: app count %d" );
+    Print( KInstalledAppsEmptyFormat, &KTestName, count );
+    
+    Print( KTestDoneFormat, &KTestName, testResult );
+    return testResult;
+    }
+
+// -----------------------------------------------------------------------------
+// CAppMngr2RuntimeApiTest::StartUninstallAppL()
+// -----------------------------------------------------------------------------
+//
+TInt CAppMngr2RuntimeApiTest::StartUninstallAppL( CStifItemParser& aItem )
+    {
+    _LIT( KTestName, "StartUninstallApp" );
+    Print( KTestStartFormat, &KTestName );
+    TInt testResult = KErrNone;
+
+    if( iUninstallCommand )
+        {
+        User::Leave( KErrInUse );
+        }
+
+    TPtrC nameString;
+    while( aItem.GetNextString( nameString ) == KErrNone )
+        {
+        CAppMngr2AppInfo* info = FindInstalledApp( nameString );
+        if( info )
+            {
+            iUninstallCommand = CAppMngr2TestCommand::NewL( *info, *this );
+            TRAP( testResult, iUninstallCommand->HandleCommandL( EAppMngr2CmdUninstall ) );
+            _LIT( KUninstallAppFormat, "%S: uninstall request %S, result %d" );
+            Print( KUninstallAppFormat, &KTestName, &nameString, testResult );
+            }
+        else
+            {
+            Print( KNotFoundFormat, &KTestName, &nameString );
+            testResult = KErrNotFound;
+            }
+        }
+    
+    Print( KTestDoneFormat, &KTestName, testResult );
+    return testResult;
+    }
+
+// -----------------------------------------------------------------------------
+// CAppMngr2RuntimeApiTest::CheckUninstallEndedL()
+// -----------------------------------------------------------------------------
+//
+TInt CAppMngr2RuntimeApiTest::CheckUninstallEndedL( CStifItemParser& /*aItem*/ )
+    {
+    _LIT( KTestName, "CheckUninstallEnded" );
+    Print( KTestStartFormat, &KTestName );
+    TInt testResult = KErrNone;
+
+    if( !iUninstallCommand )
+        {
+        User::Leave( KErrNotFound );
+        }
+
+    if( iUninstallCommand->IsActive() )
+        {
+        User::Leave( KErrNotReady );
+        }
+    testResult = iUninstallCommand->iStatus.Int();
+    _LIT( KCheckUninstallEndedFormat, "%S: uninstall completed, status %d" );
+    Print( KCheckUninstallEndedFormat, &KTestName, testResult );
+    
+    delete iUninstallCommand;
+    iUninstallCommand = NULL;
+    
+    Print( KTestDoneFormat, &KTestName, testResult );
+    return testResult;
+    }
+