diff -r 000000000000 -r ba25891c3a9e appinstall_plat/appmngr2runtimeapi/tsrc/src/appmngr2runtimeapitest.cpp --- /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 // CStifLogger +#include // RSettingServer +#include // REComSession +#include // AppMngr2 Runtime API +#include // AppMngr2 Runtime API +#include // AppMngr2 Runtime API +#include // AppMngr2 Runtime API +#include // AppMngr2 Runtime API +#include // AppMngr2 Runtime API +#include // CleanupResetAndDestroyPushL +#include // TDataType +#include // ContentAccess +#include // BaflUtils +#include // CAknIconArray +#include // CGulIcon +#include // 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 aFmt, ... ) + { + VA_LIST list; + VA_START( list, aFmt ); + TBuf 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 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 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 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 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 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 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; + } +